import json from typing import Dict, Any from pr.ui.colors import Colors def display_tool_call(tool_name, arguments, status="running", result=None): status_icons = { "running": ("⚙", Colors.YELLOW), "success": ("✓", Colors.GREEN), "error": ("✗", Colors.RED) } icon, color = status_icons.get(status, ("•", Colors.WHITE)) print(f"\n{Colors.BOLD}{'═' * 80}{Colors.RESET}") print(f"{color}{icon} {Colors.BOLD}{Colors.CYAN}TOOL: {tool_name}{Colors.RESET}") print(f"{Colors.BOLD}{'─' * 80}{Colors.RESET}") if arguments: print(f"{Colors.YELLOW}Parameters:{Colors.RESET}") for key, value in arguments.items(): value_str = str(value) if len(value_str) > 100: value_str = value_str[:100] + "..." print(f" {Colors.CYAN}• {key}:{Colors.RESET} {value_str}") if result is not None and status != "running": print(f"\n{Colors.YELLOW}Result:{Colors.RESET}") result_str = json.dumps(result, indent=2) if isinstance(result, dict) else str(result) if len(result_str) > 500: result_str = result_str[:500] + f"\n{Colors.GRAY}... (truncated){Colors.RESET}" if status == "success": print(f"{Colors.GREEN}{result_str}{Colors.RESET}") elif status == "error": print(f"{Colors.RED}{result_str}{Colors.RESET}") else: print(result_str) print(f"{Colors.BOLD}{'═' * 80}{Colors.RESET}\n") def print_autonomous_header(task): print(f"{Colors.BOLD}Task:{Colors.RESET} {task}") print(f"{Colors.GRAY}r will work continuously until the task is complete.{Colors.RESET}") print(f"{Colors.GRAY}Press Ctrl+C twice to interrupt.{Colors.RESET}\n") print(f"{Colors.BOLD}{'═' * 80}{Colors.RESET}\n")