Files
agent-ui/frontend/src/services/tools/toolDefinitions.ts

132 lines
9.2 KiB
TypeScript

export type ToolCategory = 'global' | 'canvas' | 'component' | 'theme' | 'database' | 'source' | 'project' | 'terminal' | 'git' | 'torch'
export interface ToolMeta {
name: string
description: string
category: ToolCategory
}
// All tool metadata (name, description, category)
export const ALL_TOOL_METAS: ToolMeta[] = [
// Global tools
{ name: 'get_current_page', description: 'Obtiene la pagina actualmente activa', category: 'global' },
{ name: 'navigate_to', description: 'Navega a una pagina especifica', category: 'global' },
{ name: 'list_available_tools', description: 'Lista todas las herramientas MCP disponibles', category: 'global' },
{ name: 'activate_tool', description: 'Activa una herramienta MCP', category: 'global' },
{ name: 'deactivate_tool', description: 'Desactiva una herramienta MCP', category: 'global' },
{ name: 'pin_tool', description: 'Pinnea una herramienta', category: 'global' },
{ name: 'page_refresh', description: 'Recarga la pagina completamente', category: 'global' },
// Canvas tools
{ name: 'render_html', description: 'Renderiza HTML en el canvas', category: 'canvas' },
{ name: 'render_vue_component', description: 'Renderiza un componente Vue 3 completo', category: 'canvas' },
{ name: 'move_window', description: 'Mueve una ventana a una posicion especifica', category: 'canvas' },
{ name: 'resize_window', description: 'Cambia el tamano de una ventana', category: 'canvas' },
{ name: 'close_window', description: 'Cierra una ventana del canvas', category: 'canvas' },
{ name: 'list_windows', description: 'Lista todas las ventanas abiertas', category: 'canvas' },
{ name: 'inspect_window', description: 'Inspecciona el contenido de una ventana', category: 'canvas' },
{ name: 'get_canvas', description: 'Lee elementos del canvas con selector CSS', category: 'canvas' },
{ name: 'edit_canvas', description: 'Edita elementos del canvas (old_value -> new_value)', category: 'canvas' },
{ name: 'canvas_css', description: 'Inyecta CSS en el canvas', category: 'canvas' },
{ name: 'canvas_js', description: 'Ejecuta JavaScript en el canvas', category: 'canvas' },
{ name: 'get_canvas_css', description: 'Obtiene CSS inyectado', category: 'canvas' },
{ name: 'save_canvas_snapshot', description: 'Guarda el estado actual del canvas como snapshot', category: 'canvas' },
{ name: 'load_canvas_snapshot', description: 'Restaura un snapshot del canvas', category: 'canvas' },
{ name: 'list_canvas_snapshots', description: 'Lista snapshots del canvas guardados', category: 'canvas' },
{ name: 'delete_canvas_snapshot', description: 'Elimina un snapshot del canvas', category: 'canvas' },
// Component tools
{ name: 'save_vue_component', description: 'Guarda un componente Vue en la base de datos', category: 'component' },
{ name: 'load_vue_component', description: 'Carga y renderiza un componente guardado', category: 'component' },
{ name: 'list_vue_components', description: 'Lista componentes guardados', category: 'component' },
{ name: 'delete_vue_component', description: 'Elimina un componente', category: 'component' },
{ name: 'read_component', description: 'Lee campos especificos de un componente guardado', category: 'component' },
{ name: 'edit_component', description: 'Edita un campo de componente con reemplazo de strings (requiere lectura previa)', category: 'component' },
// Theme tools
{ name: 'get_design_tokens', description: 'Obtiene los design tokens del tema activo', category: 'theme' },
{ name: 'get_active_theme', description: 'Obtiene info del tema activo', category: 'theme' },
{ name: 'set_theme_variable', description: 'Modifica una variable CSS del tema', category: 'theme' },
{ name: 'save_theme', description: 'Guarda el tema actual', category: 'theme' },
{ name: 'list_themes', description: 'Lista todos los temas disponibles', category: 'theme' },
{ name: 'switch_theme', description: 'Cambia al tema especificado', category: 'theme' },
{ name: 'reset_theme', description: 'Descarta cambios no guardados', category: 'theme' },
// Database tools
{ name: 'list_tables', description: 'Lista todas las tablas de la base de datos', category: 'database' },
{ name: 'get_table_schema', description: 'Obtiene el esquema de una tabla', category: 'database' },
{ name: 'get_table_data', description: 'Obtiene los datos de una tabla', category: 'database' },
{ name: 'get_database_stats', description: 'Obtiene estadisticas de la base de datos', category: 'database' },
{ name: 'execute_query', description: 'Ejecuta una consulta SQL SELECT', category: 'database' },
// Source code tools
{ name: 'get_repo_info', description: 'Obtiene info del repositorio Gitea', category: 'source' },
{ name: 'list_repo_files', description: 'Lista archivos del repositorio', category: 'source' },
{ name: 'read_repo_file', description: 'Lee contenido de un archivo', category: 'source' },
{ name: 'search_repo_code', description: 'Busca codigo en el repositorio', category: 'source' },
// Project canvas tools
{ name: 'list_canvases', description: 'Lista todos los canvas disponibles', category: 'project' },
{ name: 'create_canvas', description: 'Crea un nuevo project canvas', category: 'project' },
{ name: 'get_canvas', description: 'Obtiene detalles de un canvas', category: 'project' },
{ name: 'update_canvas', description: 'Actualiza un canvas existente', category: 'project' },
{ name: 'delete_canvas', description: 'Elimina un canvas', category: 'project' },
{ name: 'clone_canvas', description: 'Clona un canvas existente', category: 'project' },
{ name: 'add_component_to_canvas', description: 'Agrega un componente a un canvas', category: 'project' },
{ name: 'remove_component_from_canvas', description: 'Remueve un componente de un canvas', category: 'project' },
{ name: 'get_canvas_components', description: 'Obtiene los componentes de un canvas', category: 'project' },
// Terminal UI tools
{ name: 'terminal_open', description: 'Abre la ventana flotante del terminal', category: 'terminal' },
{ name: 'terminal_close', description: 'Cierra la ventana flotante del terminal', category: 'terminal' },
{ name: 'terminal_toggle', description: 'Alterna abrir/cerrar el terminal', category: 'terminal' },
{ name: 'terminal_move', description: 'Mueve la ventana del terminal a una posicion', category: 'terminal' },
{ name: 'terminal_resize', description: 'Cambia el tamano de la ventana del terminal', category: 'terminal' },
// Response UI tools
{ name: 'bubbleResponse', description: 'Muestra un mensaje del agente en la UI', category: 'terminal' },
// Git tools
{ name: 'get_git_status', description: 'Obtiene el estado actual del repositorio Git', category: 'git' },
{ name: 'get_git_diff', description: 'Obtiene el diff de cambios no commiteados', category: 'git' },
{ name: 'compare_commits', description: 'Compara dos commits o ramas', category: 'git' },
{ name: 'git_log', description: 'Obtiene el historial de commits', category: 'git' },
{ name: 'get_git_branches', description: 'Lista todas las ramas del repositorio', category: 'git' },
// Torch tools (multi-browser MCP control)
{ name: 'list_torch_clients', description: 'Lista browsers conectados al sistema de antorcha', category: 'torch' },
{ name: 'get_torch_status', description: 'Obtiene quien tiene el control del MCP', category: 'torch' },
{ name: 'transfer_torch', description: 'Transfiere el control a otro browser', category: 'torch' },
{ name: 'request_torch', description: 'Solicita el control del MCP', category: 'torch' },
{ name: 'release_torch', description: 'Libera el control del MCP', category: 'torch' }
]
// Get all tool names
export function getAllToolNames(): string[] {
return ALL_TOOL_METAS.map(t => t.name)
}
// Get tool metadata by name
export function getToolMeta(name: string): ToolMeta | undefined {
return ALL_TOOL_METAS.find(t => t.name === name)
}
// Get tools by category
export function getToolsByCategory(category: ToolCategory): ToolMeta[] {
return ALL_TOOL_METAS.filter(t => t.category === category)
}
// Category display info
export const CATEGORY_INFO: Record<ToolCategory, { label: string; color: string; icon: string }> = {
global: { label: 'Global', color: '#6366f1', icon: 'M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10 10-4.5 10-10S17.5 2 12 2z' },
canvas: { label: 'Canvas', color: '#10b981', icon: 'M3 3h18v18H3V3z' },
component: { label: 'Component', color: '#f59e0b', icon: 'M21 16V8l-7-4-7 4v8l7 4 7-4z' },
theme: { label: 'Theme', color: '#ec4899', icon: 'M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10' },
database: { label: 'Database', color: '#3b82f6', icon: 'M12 2C7 2 3 3.5 3 5v14c0 1.5 4 3 9 3s9-1.5 9-3V5c0-1.5-4-3-9-3z' },
source: { label: 'Source', color: '#8b5cf6', icon: 'M16 18l6-6-6-6M8 6l-6 6 6 6' },
project: { label: 'Project', color: '#06b6d4', icon: 'M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z' },
terminal: { label: 'Terminal', color: '#22c55e', icon: 'M4 17l6-6-6-6M12 19h8' },
git: { label: 'Git', color: '#f97316', icon: 'M6 3v12M18 9a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM6 21a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM18 9a9 9 0 0 1-9 9' },
torch: { label: 'Torch', color: '#eab308', icon: 'M8.5 14.5A2.5 2.5 0 0 0 11 12c0-1.38-.5-2-1-3-1.072-2.143-.224-4.054 2-6 .5 2.5 2 4.9 4 6.5 2 1.6 3 3.5 3 5.5a7 7 0 1 1-14 0c0-1.153.433-2.294 1-3a2.5 2.5 0 0 0 2.5 2.5z' }
}