Files
descomplicar-meta-plugin/skills/lsp-manager/SKILL.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

7.5 KiB

name, description, author, version, desk_task, allowed-tools
name description author version desk_task allowed-tools
lsp-manager Gestão inteligente de Language Server Protocols para agentes dev. Use when "lsp", "language server", "autocomplete", "intellisense", "intelephense", "pyright", "typescript-language-server", "gopls". Descomplicar® 1.0.0 1441 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:

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

-- 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:

#!/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

#!/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:

-- 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

-- 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

-- 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)