Files
descomplicar-meta-plugin/commands/lsps.md
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

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:

  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:

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:

  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:

## 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%                 ║
╚══════════════════════════════════════════════════════════════════════╝