- 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>
15 KiB
15 KiB
name, description, argument-hint
| name | description | argument-hint |
|---|---|---|
| lsps | Gestão de Language Server Protocols (LSPs) integrados. Listar, mapear, verificar instalação, sincronizar. | [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
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
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
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:
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:
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:
- Slug (identificador único)
- Nome
- Linguagem
- Package manager (npm/pip/cargo/go/composer/gem/native)
- Package name
- Capabilities (JSON)
Query:
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:
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:
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:
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:
# 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:
# 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:
- Detecta LSPs instalados localmente
- Actualiza versões na BD
- Marca inactivos os não encontrados
- Reporta discrepâncias
Integração com Injecção de Contexto
Quando um agente é iniciado, o contexto inclui os LSPs recomendados:
## 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
- Instalar LSP:
/descomplicar:lsps install <slug> - Mapear para agentes:
/descomplicar:lsps map <lsp> <agent> <type> - Verificar:
/descomplicar:lsps check - 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% ║
╚══════════════════════════════════════════════════════════════════════╝