- Execute all 6 migrations on Desk CRM production database - Create missing tables: cr_lsps, cr_agent_lsps, cr_lsp_usage - Create archive tables: cr_*_usage_archive (4 tables) - Create system tables: cr_migrations, cr_maintenance_log - Make all scripts executable (chmod +x) - Total cr_* tables: 38 Migration files: - 001_initial_schema.sql - 002_add_lsps.sql - 003_add_relationships.sql - 004_add_telemetry.sql - 005_add_archive_tables.sql - 006_add_maintenance_log.sql Scripts: - session-init.sh, session-end.sh - inject-context.sh, inject-agent-context.sh - record-usage.sh, db-backup.sh, sync-to-mysql.sh Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
301 lines
7.5 KiB
Markdown
301 lines
7.5 KiB
Markdown
---
|
|
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)
|