Files
Emanuel Almeida 692475a315 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>
2026-02-04 16:18:02 +00:00

392 lines
15 KiB
Markdown

---
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 <package>
# pip
pip install <package>
# cargo
cargo install <package>
# go
go install <package>@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 <nome>
```
## 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 <slug>`
2. **Mapear para agentes:** `/descomplicar:lsps map <lsp> <agent> <type>`
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% ║
╚══════════════════════════════════════════════════════════════════════╝
```