--- name: lsps description: > Gestão de Language Server Protocols (LSPs) integrados. Listar, mapear, verificar instalação, sincronizar. argument-hint: "[list|show|add|map|check|install|sync] [args]" --- # /descomplicar:lsps Gestão de Language Server Protocols (LSPs) integrados no sistema. ## Objectivo Gerir os LSPs disponíveis, mapear para agentes de desenvolvimento, e monitorizar o seu estado. ## Sintaxe ``` /descomplicar:lsps [action] [args] ``` ## Schema de Base de Dados ### Tabela Principal: cr_lsps ```sql CREATE TABLE IF NOT EXISTS cr_lsps ( id INT AUTO_INCREMENT PRIMARY KEY, slug VARCHAR(100) NOT NULL UNIQUE, name VARCHAR(200) NOT NULL, language VARCHAR(50) NOT NULL, package_manager ENUM('npm', 'pip', 'cargo', 'go', 'composer', 'gem', 'native') NOT NULL, package_name VARCHAR(200) NOT NULL, binary_path VARCHAR(500), config_file VARCHAR(200), capabilities JSON, status ENUM('active', 'inactive', 'deprecated') DEFAULT 'active', version VARCHAR(20), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); ``` ### Tabela de Relacionamento: cr_agent_lsps ```sql CREATE TABLE IF NOT EXISTS cr_agent_lsps ( id INT AUTO_INCREMENT PRIMARY KEY, agent_id INT NOT NULL, lsp_id INT NOT NULL, relationship_type ENUM('primary', 'recommended', 'available') DEFAULT 'recommended', priority INT DEFAULT 1, auto_start BOOLEAN DEFAULT FALSE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (agent_id) REFERENCES cr_agents(id) ON DELETE CASCADE, FOREIGN KEY (lsp_id) REFERENCES cr_lsps(id) ON DELETE CASCADE, UNIQUE KEY unique_agent_lsp (agent_id, lsp_id) ); ``` ### Tabela de Telemetria: cr_lsp_usage ```sql CREATE TABLE IF NOT EXISTS cr_lsp_usage ( id INT AUTO_INCREMENT PRIMARY KEY, lsp_id INT NOT NULL, agent_id INT, operation VARCHAR(50), response_time_ms INT, success BOOLEAN DEFAULT TRUE, error_message TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (lsp_id) REFERENCES cr_lsps(id) ON DELETE CASCADE, FOREIGN KEY (agent_id) REFERENCES cr_agents(id) ON DELETE SET NULL ); ``` ## LSPs Predefinidos | LSP | Linguagem | Package | Agentes Típicos | |-----|-----------|---------|-----------------| | typescript-language-server | TypeScript/JS | npm | javascript-fullstack-specialist | | pyright | Python | pip | dev-helper | | intelephense | PHP | npm | php-fullstack-engineer, wordpress-plugin-developer | | phpactor | PHP | composer | php-fullstack-engineer | | gopls | Go | go | dev-helper | | rust-analyzer | Rust | cargo | dev-helper | | vscode-css-languageserver | CSS | npm | web-designer, ui-designer | | vscode-html-languageserver | HTML | npm | web-designer, elementor-specialist | | yaml-language-server | YAML | npm | easypanel-specialist, n8n-automation-expert | | bash-language-server | Bash | npm | cwp-server-manager, backup-specialist | | sql-language-server | SQL | npm | database-design-specialist | ## Acções Disponíveis ### 1. Listar LSPs ``` /descomplicar:lsps list ``` **Query:** ```sql SELECT l.slug, l.name, l.language, l.status, l.version, COUNT(DISTINCT al.agent_id) as agents_using FROM cr_lsps l LEFT JOIN cr_agent_lsps al ON l.id = al.lsp_id GROUP BY l.id ORDER BY agents_using DESC, l.language; ``` **Output:** ``` ╔══════════════════════════════════════════════════════════════════════╗ ║ LANGUAGE SERVER PROTOCOLS (11 configurados) ║ ╠══════════════════════════════════════════════════════════════════════╣ ║ LSP │ Lang │ Status │ Agents │ Version ║ ║ ─────────────────────────────────────────────────────────────────── ║ ║ intelephense │ PHP │ active │ 8 │ 1.10.4 ║ ║ typescript-language-server │ TS/JS │ active │ 5 │ 4.3.3 ║ ║ pyright │ Python │ active │ 4 │ 1.1.350 ║ ║ yaml-language-server │ YAML │ active │ 3 │ 1.14.0 ║ ║ bash-language-server │ Bash │ active │ 2 │ 5.1.2 ║ ║ sql-language-server │ SQL │ active │ 2 │ 1.7.0 ║ ║ ... ║ ╚══════════════════════════════════════════════════════════════════════╝ ``` ### 2. Ver Detalhes de LSP ``` /descomplicar:lsps show intelephense ``` **Query:** ```sql SELECT l.*, GROUP_CONCAT(DISTINCT a.slug ORDER BY al.relationship_type, al.priority) as agents FROM cr_lsps l LEFT JOIN cr_agent_lsps al ON l.id = al.lsp_id LEFT JOIN cr_agents a ON al.agent_id = a.id WHERE l.slug = 'intelephense' GROUP BY l.id; ``` **Output:** ``` ╔══════════════════════════════════════════════════════════════════════╗ ║ LSP: intelephense ║ ╠══════════════════════════════════════════════════════════════════════╣ ║ Language: PHP ║ ║ Package: npm install intelephense ║ ║ Binary: node_modules/.bin/intelephense ║ ║ Version: 1.10.4 ║ ║ Status: active ║ ╠══════════════════════════════════════════════════════════════════════╣ ║ CAPABILITIES ║ ║ ├── completionProvider: true ║ ║ ├── hoverProvider: true ║ ║ ├── definitionProvider: true ║ ║ ├── referencesProvider: true ║ ║ ├── documentSymbolProvider: true ║ ║ ├── workspaceSymbolProvider: true ║ ║ ├── codeActionProvider: true ║ ║ └── renameProvider: true ║ ╠══════════════════════════════════════════════════════════════════════╣ ║ AGENTS (8) ║ ║ ├── PRIMARY: php-fullstack-engineer, wordpress-plugin-developer ║ ║ ├── RECOMMENDED: woocommerce-specialist, elementor-specialist ║ ║ └── AVAILABLE: perfex-crm-module-developer, dev-helper ║ ╠══════════════════════════════════════════════════════════════════════╣ ║ TELEMETRY (30 dias) ║ ║ ├── Invocações: 1,234 ║ ║ ├── Avg Response: 45ms ║ ║ └── Success Rate: 99.8% ║ ╚══════════════════════════════════════════════════════════════════════╝ ``` ### 3. Adicionar LSP ``` /descomplicar:lsps add ``` Modo interactivo: 1. Slug (identificador único) 2. Nome 3. Linguagem 4. Package manager (npm/pip/cargo/go/composer/gem/native) 5. Package name 6. Capabilities (JSON) **Query:** ```sql INSERT INTO cr_lsps (slug, name, language, package_manager, package_name, capabilities, status) VALUES ( 'lua-language-server', 'Lua Language Server', 'Lua', 'native', 'lua-language-server', '{"completionProvider": true, "hoverProvider": true, "definitionProvider": true}', 'active' ); ``` ### 4. Mapear LSP para Agente ``` /descomplicar:lsps map intelephense php-fullstack-engineer primary ``` **Query:** ```sql INSERT INTO cr_agent_lsps (agent_id, lsp_id, relationship_type, priority) VALUES ( (SELECT id FROM cr_agents WHERE slug = 'php-fullstack-engineer'), (SELECT id FROM cr_lsps WHERE slug = 'intelephense'), 'primary', 1 ) ON DUPLICATE KEY UPDATE relationship_type = 'primary', priority = 1; ``` ### 5. Ver LSPs por Agente ``` /descomplicar:lsps agent php-fullstack-engineer ``` **Query:** ```sql SELECT l.slug, l.name, l.language, al.relationship_type, al.auto_start FROM cr_agent_lsps al JOIN cr_lsps l ON al.lsp_id = l.id WHERE al.agent_id = (SELECT id FROM cr_agents WHERE slug = 'php-fullstack-engineer') ORDER BY al.relationship_type, al.priority; ``` ### 6. Ver Agentes por Linguagem ``` /descomplicar:lsps language PHP ``` **Query:** ```sql SELECT a.slug as agent, l.slug as lsp, al.relationship_type FROM cr_lsps l JOIN cr_agent_lsps al ON l.id = al.lsp_id JOIN cr_agents a ON al.agent_id = a.id WHERE l.language = 'PHP' ORDER BY al.relationship_type, a.slug; ``` ### 7. Verificar Instalação ``` /descomplicar:lsps check ``` Verifica se os LSPs estão instalados e funcionais: ```bash # TypeScript which typescript-language-server && typescript-language-server --version # PHP which intelephense || npm list -g intelephense # Python which pyright && pyright --version # etc. ``` **Output:** ``` ╔══════════════════════════════════════════════════════════════════════╗ ║ LSP HEALTH CHECK ║ ╠══════════════════════════════════════════════════════════════════════╣ ║ LSP │ Status │ Version │ Path ║ ║ ─────────────────────────────────────────────────────────────────── ║ ║ typescript-language-server │ ✓ OK │ 4.3.3 │ /usr/bin/... ║ ║ intelephense │ ✓ OK │ 1.10.4 │ ~/.npm/... ║ ║ pyright │ ✗ MISSING │ - │ - ║ ║ gopls │ ✓ OK │ 0.15.3 │ ~/go/bin/... ║ ╠══════════════════════════════════════════════════════════════════════╣ ║ RESULTADO: 3/4 instalados (75%) ║ ║ ACÇÃO: pip install pyright ║ ╚══════════════════════════════════════════════════════════════════════╝ ``` ### 8. Instalar LSP em Falta ``` /descomplicar:lsps install pyright ``` Executa a instalação baseada no package_manager: ```bash # npm npm install -g # pip pip install # cargo cargo install # go go install @latest ``` ### 9. Sincronizar com BD ``` /descomplicar:lsps sync ``` Sincroniza o estado local com a base de dados: 1. Detecta LSPs instalados localmente 2. Actualiza versões na BD 3. Marca inactivos os não encontrados 4. Reporta discrepâncias ## Integração com Injecção de Contexto Quando um agente é iniciado, o contexto inclui os LSPs recomendados: ```markdown ## Language Servers Disponíveis ### Primary LSPs (iniciar automaticamente) - **intelephense** (PHP) - Completions, hover, go-to-definition ### Recommended LSPs - **yaml-language-server** (YAML) - Para ficheiros de config ### Para Activar Se necessário LSP adicional, usar: /descomplicar:lsps install ``` ## Métricas | Métrica | Descrição | |---------|-----------| | Coverage | % de agentes dev com LSP mapeado | | Response Time | Tempo médio de resposta LSP | | Availability | % de LSPs instalados vs configurados | | Usage | Invocações por LSP por período | ## Workflow de Setup 1. **Instalar LSP:** `/descomplicar:lsps install ` 2. **Mapear para agentes:** `/descomplicar:lsps map ` 3. **Verificar:** `/descomplicar:lsps check` 4. **Sincronizar:** `/descomplicar:lsps sync` ## Output Esperado ``` ╔══════════════════════════════════════════════════════════════════════╗ ║ LANGUAGE SERVER PROTOCOLS (11 configurados) ║ ╠══════════════════════════════════════════════════════════════════════╣ ║ LSP │ Lang │ Status │ Agents │ Version ║ ║ intelephense │ PHP │ active │ 8 │ 1.10.4 ║ ║ typescript-language-server │ TS/JS │ active │ 5 │ 4.3.3 ║ ║ pyright │ Python │ active │ 4 │ 1.1.350 ║ ╠══════════════════════════════════════════════════════════════════════╣ ║ Coverage: 85% | Avg Response: 45ms | Success: 99.8% ║ ╚══════════════════════════════════════════════════════════════════════╝ ```