281799fad2
14 tools read-only para inspecção da BD Paperclip directamente via MCP,
eliminando psql nos skills /clip-*. 2 tools write (rotation, cancel issue).
- src/db.ts: pool PG singleton + COMPANY_ID + helper query() parametrizado
- src/tools/diagnostics.ts: 16 tools, 100% queries com $1,$2 (zero injection)
- src/tools/index.ts: registo ...diagnosticsTools
- package.json: pg ^8.13.1 + @types/pg ^8.11.10
- CHANGELOG.md: changelog completo
Fix: diag_agents_without_membership cast a.id::text + filtros
principal_type='agent' AND status='active'.
Validado:
- 14/14 read tools testadas contra BD real (CEO=19 runs, 65 agentes,
Reality Checker sem heartbeat/membership, 2 routines next_run_at NULL)
- npm audit: 0 vulnerabilidades
- grep '\${' em SQL: zero matches
Refs: Desk #2041
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2.4 KiB
2.4 KiB
Changelog
[Unreleased] - feature/diagnostics-db
Added
- 16 ferramentas de diagnóstico read-only/write para inspecção da base de dados Paperclip directamente via MCP, eliminando necessidade de psql nos skills
/clip-*. - Pool PostgreSQL singleton (
src/db.ts) com export deCOMPANY_IDe helperquery()parametrizado. - Variável de ambiente
PAPERCLIP_DB_URL(default:postgres://paperclip:paperclip@localhost:54329/paperclip). - Dependências
pg ^8.13.1e@types/pg ^8.11.10.
Diagnostic tools (read-only — 14)
diag_agents_by_status— contagem por statusdiag_agent_hierarchy— árvore reports_to completadiag_agents_missing_permissions— agentes sem entradas permissionsdiag_agents_missing_heartbeat— agentes activos sem runs heartbeatdiag_agents_without_membership— agentes sem entrada activa em company_membershipsdiag_budget_orphans— budget_policies/incidents a referenciar entidades inexistentesdiag_routine_triggers_broken— routine_triggers schedule sem next_run_atdiag_heartbeat_token_usage(hours)— token burn por agent últimas N horasdiag_prompt_too_long_errors(hours)— erros "prompt too long" últimas N horasdiag_false_blockers— issues blocked sem motivo realdiag_stuck_routines(hours)— routines presas há N horasdiag_zombie_parents— agentes com parent archiveddiag_company_skills_summary— agregado company_skills por source_typediag_agent_full_context(agent_name)— contexto completo de 1 agente (config + runs + membership + perms + tokens 24h)
Diagnostic tools (write — 2)
force_session_rotation— rotação forçada de sessão (validação posterior)cancel_stuck_routine_issue— cancelar issue de routine presa (validação posterior)
Security
- 100% das queries SQL parametrizadas (
$1,$2...). Zero string interpolation em SQL — verificado por grep. npm audit: 0 vulnerabilidades.
Fixed
diag_agents_without_membership: corrigido errooperator does not exist: text = uuidadicionando casta.id::texte filtrosprincipal_type='agent' AND status='active'.
Migration
- 17 blocos psql substituídos por chamadas MCP em 5 skills
/clip-*: clip, clip-agent, clip-health, clip-org, clip-routine. Skills clip-instructions/issue/skill mantêm psql (CRUD específico sem equivalente diag_*).
Refs
- Desk CRM Task #2041
- Plano:
memory/mcp-paperclip-diagnostics-plan.md