Files
mcp-paperclip/CHANGELOG.md
ealmeida 281799fad2 feat(diagnostics): adicionar 16 ferramentas de diagnóstico DB Paperclip
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>
2026-04-07 03:59:19 +01:00

44 lines
2.4 KiB
Markdown

# 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 de `COMPANY_ID` e helper `query()` parametrizado.
- Variável de ambiente `PAPERCLIP_DB_URL` (default: `postgres://paperclip:paperclip@localhost:54329/paperclip`).
- Dependências `pg ^8.13.1` e `@types/pg ^8.11.10`.
### Diagnostic tools (read-only — 14)
1. `diag_agents_by_status` — contagem por status
2. `diag_agent_hierarchy` — árvore reports_to completa
3. `diag_agents_missing_permissions` — agentes sem entradas permissions
4. `diag_agents_missing_heartbeat` — agentes activos sem runs heartbeat
5. `diag_agents_without_membership` — agentes sem entrada activa em company_memberships
6. `diag_budget_orphans` — budget_policies/incidents a referenciar entidades inexistentes
7. `diag_routine_triggers_broken` — routine_triggers schedule sem next_run_at
8. `diag_heartbeat_token_usage(hours)` — token burn por agent últimas N horas
9. `diag_prompt_too_long_errors(hours)` — erros "prompt too long" últimas N horas
10. `diag_false_blockers` — issues blocked sem motivo real
11. `diag_stuck_routines(hours)` — routines presas há N horas
12. `diag_zombie_parents` — agentes com parent archived
13. `diag_company_skills_summary` — agregado company_skills por source_type
14. `diag_agent_full_context(agent_name)` — contexto completo de 1 agente (config + runs + membership + perms + tokens 24h)
### Diagnostic tools (write — 2)
15. `force_session_rotation` — rotação forçada de sessão (validação posterior)
16. `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 erro `operator does not exist: text = uuid` adicionando cast `a.id::text` e filtros `principal_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`