--- name: lsp-manager description: > Gestão inteligente de Language Server Protocols para agentes dev. Use when "lsp", "language server", "autocomplete", "intellisense", "intelephense", "pyright", "typescript-language-server", "gopls". author: Descomplicar® version: 1.0.0 desk_task: 1441 allowed-tools: Read, Glob, Grep, Bash, ToolSearch --- # LSP Manager Gestão inteligente de Language Server Protocols para agentes de desenvolvimento. ## Triggers Esta skill deve ser activada quando: - Utilizador pede para configurar LSPs - Novo agente de desenvolvimento é criado - Erros de LSP detectados em sessão - Análise de tooling de desenvolvimento - Pedido de autocomplete/intellisense para linguagem específica ## Conceitos ### LSP vs MCP | Aspecto | LSP | MCP | |---------|-----|-----| | **Propósito** | Inteligência de código | Acesso a recursos externos | | **Exemplos** | autocomplete, hover, go-to-def | filesystem, CRM, APIs | | **Protocolo** | Language Server Protocol | Model Context Protocol | | **Escopo** | Análise de código | Integração de sistemas | ### Tipos de Relacionamento **cr_agent_lsps.relationship_type:** - `primary` - LSPs essenciais para o agente (auto-start) - `recommended` - LSPs úteis, activar quando relevante - `available` - LSPs opcionais, disponíveis se necessário ## Capabilities ### 1. Detecção Automática de LSPs Quando um agente de desenvolvimento inicia: ```python def detect_needed_lsps(agent_slug, file_extensions): """ Detecta LSPs necessários baseado em: - Ficheiros no projecto (extensões) - Configuração do agente (cr_agent_lsps) - Padrões da linguagem """ extension_to_lsp = { '.php': 'intelephense', '.ts': 'typescript-language-server', '.tsx': 'typescript-language-server', '.js': 'typescript-language-server', '.py': 'pyright', '.go': 'gopls', '.rs': 'rust-analyzer', '.yaml': 'yaml-language-server', '.yml': 'yaml-language-server', '.sh': 'bash-language-server', '.sql': 'sql-language-server', '.css': 'vscode-css-languageserver', '.html': 'vscode-html-languageserver', } needed = set() for ext in file_extensions: if ext in extension_to_lsp: needed.add(extension_to_lsp[ext]) return needed ``` ### 2. Verificação de Instalação ```sql -- Obter LSPs configurados vs instalados SELECT l.slug, l.package_manager, l.package_name, l.binary_path, l.status as db_status, -- Status local determinado por script externo 'unknown' as local_status FROM cr_lsps l WHERE l.status = 'active'; ``` Script de verificação: ```bash #!/bin/bash # check-lsp-installed.sh check_lsp() { local slug=$1 local binary=$2 if command -v "$binary" &> /dev/null; then version=$("$binary" --version 2>/dev/null | head -1) echo "$slug:installed:$version" else echo "$slug:missing:-" fi } # Verificar cada LSP check_lsp "typescript-language-server" "typescript-language-server" check_lsp "intelephense" "intelephense" check_lsp "pyright" "pyright" check_lsp "gopls" "gopls" check_lsp "rust-analyzer" "rust-analyzer" check_lsp "yaml-language-server" "yaml-language-server" check_lsp "bash-language-server" "bash-language-server" ``` ### 3. Instalação Automática ```bash #!/bin/bash # install-lsp.sh install_lsp() { local slug=$1 local pkg_manager=$2 local package=$3 case $pkg_manager in npm) npm install -g "$package" ;; pip) pip install "$package" ;; cargo) cargo install "$package" ;; go) go install "$package@latest" ;; composer) composer global require "$package" ;; *) echo "Package manager não suportado: $pkg_manager" return 1 ;; esac } ``` ### 4. Mapeamento Inteligente Baseado na categoria do agente: ```sql -- Sugerir LSPs para agentes de categoria 'dev' SELECT l.slug, l.language FROM cr_lsps l WHERE l.status = 'active' AND l.language IN ( SELECT DISTINCT CASE a.slug WHEN 'php-fullstack-engineer' THEN 'PHP' WHEN 'wordpress-plugin-developer' THEN 'PHP' WHEN 'javascript-fullstack-specialist' THEN 'TypeScript' WHEN 'database-design-specialist' THEN 'SQL' -- etc. END FROM cr_agents a WHERE a.slug = ? ) AND l.id NOT IN ( SELECT lsp_id FROM cr_agent_lsps WHERE agent_id = (SELECT id FROM cr_agents WHERE slug = ?) ); ``` ### 5. Telemetria de LSP ```sql -- Registar uso de LSP INSERT INTO cr_lsp_usage (lsp_id, agent_id, operation, response_time_ms, success) VALUES ( (SELECT id FROM cr_lsps WHERE slug = ?), (SELECT id FROM cr_agents WHERE slug = ?), ?, -- 'completion', 'hover', 'definition', etc. ?, ? ); -- Métricas agregadas SELECT l.slug, COUNT(*) as total_ops, AVG(lu.response_time_ms) as avg_response, SUM(CASE WHEN lu.success THEN 1 ELSE 0 END) * 100.0 / COUNT(*) as success_rate FROM cr_lsp_usage lu JOIN cr_lsps l ON lu.lsp_id = l.id WHERE lu.created_at > DATE_SUB(NOW(), INTERVAL 30 DAY) GROUP BY l.id ORDER BY total_ops DESC; ``` ### 6. Sugestões de Melhoria ```sql -- Agentes dev sem LSP mapeado SELECT a.slug, a.name, a.category FROM cr_agents a WHERE a.category = 'dev' AND a.status = 'active' AND NOT EXISTS ( SELECT 1 FROM cr_agent_lsps al WHERE al.agent_id = a.id ); -- LSPs com baixa taxa de sucesso SELECT l.slug, AVG(lu.response_time_ms) as avg_response, SUM(CASE WHEN lu.success THEN 0 ELSE 1 END) as errors FROM cr_lsps l JOIN cr_lsp_usage lu ON l.id = lu.lsp_id WHERE lu.created_at > DATE_SUB(NOW(), INTERVAL 7 DAY) GROUP BY l.id HAVING errors > 10 OR avg_response > 500; ``` ## Workflow ### Setup Inicial ``` 1. INVENTARIAR → Listar LSPs instalados localmente 2. REGISTAR → Inserir em cr_lsps 3. MAPEAR → Associar a agentes em cr_agent_lsps 4. VERIFICAR → Testar funcionamento 5. MONITORIZAR → Activar telemetria ``` ### Quando Agente Inicia ``` 1. QUERY → Obter LSPs do agente (cr_agent_lsps) 2. CHECK → Verificar instalação local 3. INSTALL → Instalar em falta (se auto_start=true) 4. INJECT → Adicionar ao contexto do agente 5. LOG → Registar em telemetria ``` ## Integrações - **MCPs:** desk-crm-v3 (BD), filesystem (verificação local) - **Commands:** - `/descomplicar:lsps` - Gestão completa de LSPs - `/descomplicar:agent-config` - Ver LSPs do agente - `/descomplicar:status` - Dashboard inclui LSPs ## Métricas de Sucesso | Métrica | Target | |---------|--------| | LSP Coverage (agentes dev) | >= 80% | | Installation Rate | >= 95% | | Avg Response Time | < 200ms | | Success Rate | >= 99% | ## Exemplo de Uso ``` User: Configura LSPs para o agente wordpress-plugin-developer LSP Manager: 1. [Analisa categoria e slug do agente] 2. [Detecta linguagens: PHP, JavaScript, CSS, HTML] 3. [Identifica LSPs: - PRIMARY: intelephense (PHP) - RECOMMENDED: typescript-language-server, vscode-css-languageserver - AVAILABLE: yaml-language-server] 4. [Verifica instalação local] 5. [Cria mapeamentos em cr_agent_lsps] 6. [Reporta: "Agente configurado com 4 LSPs (1 primary, 2 recommended, 1 available)"] ``` ## Limites - Não instala LSPs automaticamente sem confirmação - Verificação de instalação local limitada a binários no PATH - Telemetria requer integração com hooks activos - Suporte apenas para LSPs com package manager conhecido (npm, pip, cargo, go, composer) - Não gere configurações específicas de LSP (settings.json)