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>
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
# 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`
|
||||
Reference in New Issue
Block a user