OpenSpace / openspace /utils /cli_display.py
darkfire514's picture
Upload 160 files
399b80c verified
"""CLI Display utilities for OpenSpace startup and interaction"""
from openspace.tool_layer import OpenSpaceConfig
from openspace.utils.display import Box, BoxStyle, colorize
class CLIDisplay:
@staticmethod
def print_banner():
box = Box(width=70, style=BoxStyle.ROUNDED, color='c')
print()
print(box.top_line(indent=4))
print(box.empty_line(indent=4))
title = colorize("OpenSpace", 'c', bold=True)
print(box.text_line(title, align='center', indent=4, text_color=''))
subtitle = "Self-Evolving Skill Worker & Community"
print(box.text_line(subtitle, align='center', indent=4, text_color='gr'))
print(box.empty_line(indent=4))
print(box.bottom_line(indent=4))
print()
@staticmethod
def print_configuration(config: OpenSpaceConfig):
box = Box(width=70, style=BoxStyle.ROUNDED, color='bl')
print(box.text_line(colorize("β—‰ System Configuration", 'c', bold=True), align='center', indent=4, text_color=''))
print(box.separator_line(indent=4))
configs = [
("AI Model", config.llm_model, 'bl'),
("Max Iterations", str(config.grounding_max_iterations), 'c'),
("LLM Timeout", f"{config.llm_timeout}s", 'c'),
]
for label, value, color in configs:
line = f" {label:20s} {colorize(value, color)}"
print(box.text_line(line, indent=4, text_color=''))
print(box.bottom_line(indent=4))
print()
@staticmethod
def print_initialization_progress(steps: list, show_header: bool = True):
box = Box(width=70, style=BoxStyle.ROUNDED, color='g')
if show_header:
print(box.text_line(colorize("β–Ί Initializing Components", 'g', bold=True),
align='center', indent=4, text_color=''))
print(box.separator_line(indent=4))
for step, status in steps:
if status == "ok":
icon = colorize("βœ“", 'g')
elif status == "error":
icon = colorize("βœ—", 'rd')
else:
icon = colorize("[...]", 'y')
line = f" {icon} {step}"
print(box.text_line(line, indent=4, text_color=''))
print(box.bottom_line(indent=4))
print()
@staticmethod
def print_result_summary(result: dict):
box = Box(width=70, style=BoxStyle.ROUNDED, color='c')
print()
print(box.text_line(colorize("β—ˆ Execution Summary", 'c', bold=True),
align='center', indent=4, text_color=''))
print(box.separator_line(indent=4))
status = result.get("status", "unknown")
status_colors = {
"completed": 'g',
"timeout": 'y',
"error": 'rd',
"max_iterations_reached": 'y',
}
status_color = status_colors.get(status, 'gr')
status_display = colorize(status.upper(), status_color, bold=True)
exec_time = result.get('execution_time', 0)
result_lines = [
f" Status: {status_display}",
f" Execution Time: {colorize(f'{exec_time:.2f}s', 'c')}",
f" Iterations: {colorize(str(result.get('iterations', 0)), 'y')}",
f" Completed Tasks: {colorize(str(result.get('completed_tasks', 0)), 'g')}",
]
if result.get('evaluation_results'):
result_lines.append(f" Evaluations: {colorize(str(len(result['evaluation_results'])), 'bl')}")
for line in result_lines:
print(box.text_line(line, indent=4, text_color=''))
print(box.bottom_line(indent=4))
print()
# Print user response (the actual answer/result)
if result.get('user_response'):
response_box = Box(width=70, style=BoxStyle.ROUNDED, color='g')
print(response_box.text_line(colorize("β—ˆ Result", 'g', bold=True),
align='center', indent=4, text_color=''))
print(response_box.separator_line(indent=4))
user_response = result['user_response']
for line in user_response.split('\n'):
if line.strip():
display_line = f" {line.strip()}"
print(response_box.text_line(display_line, indent=4, text_color=''))
print(response_box.bottom_line(indent=4))
print()
@staticmethod
def print_interactive_header():
box = Box(width=70, style=BoxStyle.ROUNDED, color='c')
print(box.text_line(colorize("⌨ Interactive Mode", 'c', bold=True),
align='center', indent=4, text_color=''))
print(box.separator_line(indent=4))
help_lines = [
"",
colorize(" Ready to execute your tasks!", 'g'),
"",
colorize(" Available Commands:", 'c', bold=True),
" " + colorize("status", 'bl') + " β†’ View system status",
" " + colorize("help", 'bl') + " β†’ Show available commands",
" " + colorize("quit", 'bl') + " β†’ Exit interactive mode",
"",
colorize(" β–Έ Enter your task description below:", 'gr'),
"",
]
for line in help_lines:
print(box.text_line(line, indent=4, text_color=''))
print(box.bottom_line(indent=4))
print()
@staticmethod
def print_task_header(query: str, title: str = "β–Ά Executing Task"):
box = Box(width=70, style=BoxStyle.ROUNDED, color='g')
print()
print(box.text_line(colorize(title, 'g', bold=True), align='center', indent=4, text_color=''))
print(box.separator_line(indent=4))
print(box.text_line("", indent=4, text_color=''))
print(box.text_line(f" {query}", indent=4, text_color=''))
print(box.text_line("", indent=4, text_color=''))
print(box.bottom_line(indent=4))
@staticmethod
def print_system_ready():
box = Box(width=70, style=BoxStyle.ROUNDED, color='g')
print(box.text_line(colorize("β—ˆ System Ready", 'g', bold=True),
align='center', indent=4, text_color=''))
print(box.separator_line(indent=4))
print(box.text_line("", indent=4, text_color=''))
print(box.text_line(colorize(" Real-time UI will display:", 'c'), indent=4, text_color=''))
print(box.text_line(" Β§ Agent activities and status", indent=4, text_color=''))
print(box.text_line(" βŠ• Grounding backend operations", indent=4, text_color=''))
print(box.text_line(" ⊞ Execution logs", indent=4, text_color=''))
print(box.text_line("", indent=4, text_color=''))
print(box.bottom_line(indent=4))
print()
@staticmethod
def print_status(agent):
box = Box(width=70, style=BoxStyle.ROUNDED, color='bl')
print()
print(box.text_line(colorize("System Status", 'bl', bold=True),
align='center', indent=4, text_color=''))
print(box.separator_line(indent=4))
status = agent.get_status()
status_lines = [
f"Initialized: {colorize('Yes' if status['initialized'] else 'No', 'g' if status['initialized'] else 'rd')}",
f"Running: {colorize('Yes' if status['running'] else 'No', 'y' if status['running'] else 'g')}",
]
if "agents" in status:
status_lines.append(f"Agents: {colorize(', '.join(status['agents']), 'c')}")
for line in status_lines:
print(box.text_line(line, indent=4, text_color=''))
print(box.bottom_line(indent=4))
print()
@staticmethod
def print_help():
box = Box(width=70, style=BoxStyle.ROUNDED, color='y')
print()
print(box.text_line(colorize("Available Commands", 'y', bold=True),
align='center', indent=4, text_color=''))
print(box.separator_line(indent=4))
help_items = [
(colorize("status", 'c'), "Show system status"),
(colorize("help", 'c'), "Show this help message"),
(colorize("quit/exit", 'c'), "Exit interactive mode"),
("", ""),
(colorize("Other input", 'gr'), "Execute as task"),
]
for cmd, desc in help_items:
if cmd:
print(box.text_line(f" {cmd:20s} {desc}", indent=4, text_color=''))
else:
print(box.separator_line(indent=4))
print(box.bottom_line(indent=4))
print()