feat(v1.5.2): Execute database migrations and complete setup
- 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>
This commit is contained in:
300
skills/lsp-manager/SKILL.md
Normal file
300
skills/lsp-manager/SKILL.md
Normal file
@@ -0,0 +1,300 @@
|
||||
---
|
||||
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)
|
||||
Reference in New Issue
Block a user