- 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>
392 lines
15 KiB
Markdown
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% ║
|
|
╚══════════════════════════════════════════════════════════════════════╝
|
|
```
|