@cleocode/cleo 2026.4.158 → 2026.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/backfill/audit-columns.d.ts +105 -0
- package/dist/backfill/audit-columns.d.ts.map +1 -0
- package/dist/backfill/audit-columns.js +258 -0
- package/dist/backfill/audit-columns.js.map +1 -0
- package/dist/cli/commands/adapter.d.ts +28 -0
- package/dist/cli/commands/adapter.d.ts.map +1 -0
- package/dist/cli/commands/adapter.js +119 -0
- package/dist/cli/commands/adapter.js.map +1 -0
- package/dist/cli/commands/add-batch.d.ts +33 -0
- package/dist/cli/commands/add-batch.d.ts.map +1 -0
- package/dist/cli/commands/add-batch.js +148 -0
- package/dist/cli/commands/add-batch.js.map +1 -0
- package/dist/cli/commands/add.d.ts +162 -0
- package/dist/cli/commands/add.d.ts.map +1 -0
- package/dist/cli/commands/add.js +279 -0
- package/dist/cli/commands/add.js.map +1 -0
- package/dist/cli/commands/admin.d.ts +24 -0
- package/dist/cli/commands/admin.d.ts.map +1 -0
- package/dist/cli/commands/admin.js +283 -0
- package/dist/cli/commands/admin.js.map +1 -0
- package/dist/cli/commands/adr.d.ts +33 -0
- package/dist/cli/commands/adr.d.ts.map +1 -0
- package/dist/cli/commands/adr.js +147 -0
- package/dist/cli/commands/adr.js.map +1 -0
- package/dist/cli/commands/agent-profile-status.d.ts +98 -0
- package/dist/cli/commands/agent-profile-status.d.ts.map +1 -0
- package/dist/cli/commands/agent-profile-status.js +71 -0
- package/dist/cli/commands/agent-profile-status.js.map +1 -0
- package/dist/cli/commands/agent.d.ts +47 -0
- package/dist/cli/commands/agent.d.ts.map +1 -0
- package/dist/cli/commands/agent.js +2976 -0
- package/dist/cli/commands/agent.js.map +1 -0
- package/dist/cli/commands/analyze.d.ts +21 -0
- package/dist/cli/commands/analyze.d.ts.map +1 -0
- package/dist/cli/commands/analyze.js +32 -0
- package/dist/cli/commands/analyze.js.map +1 -0
- package/dist/cli/commands/archive-stats.d.ts +66 -0
- package/dist/cli/commands/archive-stats.d.ts.map +1 -0
- package/dist/cli/commands/archive-stats.js +93 -0
- package/dist/cli/commands/archive-stats.js.map +1 -0
- package/dist/cli/commands/archive.d.ts +42 -0
- package/dist/cli/commands/archive.d.ts.map +1 -0
- package/dist/cli/commands/archive.js +59 -0
- package/dist/cli/commands/archive.js.map +1 -0
- package/dist/cli/commands/audit.d.ts +22 -0
- package/dist/cli/commands/audit.d.ts.map +1 -0
- package/dist/cli/commands/audit.js +137 -0
- package/dist/cli/commands/audit.js.map +1 -0
- package/dist/cli/commands/backfill.d.ts +56 -0
- package/dist/cli/commands/backfill.d.ts.map +1 -0
- package/dist/cli/commands/backfill.js +161 -0
- package/dist/cli/commands/backfill.js.map +1 -0
- package/dist/cli/commands/backup-inspect.d.ts +33 -0
- package/dist/cli/commands/backup-inspect.d.ts.map +1 -0
- package/dist/cli/commands/backup-inspect.js +430 -0
- package/dist/cli/commands/backup-inspect.js.map +1 -0
- package/dist/cli/commands/backup.d.ts +23 -0
- package/dist/cli/commands/backup.d.ts.map +1 -0
- package/dist/cli/commands/backup.js +564 -0
- package/dist/cli/commands/backup.js.map +1 -0
- package/dist/cli/commands/blockers.d.ts +20 -0
- package/dist/cli/commands/blockers.d.ts.map +1 -0
- package/dist/cli/commands/blockers.js +31 -0
- package/dist/cli/commands/blockers.js.map +1 -0
- package/dist/cli/commands/brain.d.ts +37 -0
- package/dist/cli/commands/brain.d.ts.map +1 -0
- package/dist/cli/commands/brain.js +445 -0
- package/dist/cli/commands/brain.js.map +1 -0
- package/dist/cli/commands/briefing.d.ts +52 -0
- package/dist/cli/commands/briefing.d.ts.map +1 -0
- package/dist/cli/commands/briefing.js +69 -0
- package/dist/cli/commands/briefing.js.map +1 -0
- package/dist/cli/commands/bug.d.ts +61 -0
- package/dist/cli/commands/bug.d.ts.map +1 -0
- package/dist/cli/commands/bug.js +198 -0
- package/dist/cli/commands/bug.js.map +1 -0
- package/dist/cli/commands/cancel.d.ts +26 -0
- package/dist/cli/commands/cancel.d.ts.map +1 -0
- package/dist/cli/commands/cancel.js +40 -0
- package/dist/cli/commands/cancel.js.map +1 -0
- package/dist/cli/commands/cant.d.ts +13 -0
- package/dist/cli/commands/cant.d.ts.map +1 -0
- package/dist/cli/commands/cant.js +245 -0
- package/dist/cli/commands/cant.js.map +1 -0
- package/dist/cli/commands/chain.d.ts +24 -0
- package/dist/cli/commands/chain.d.ts.map +1 -0
- package/dist/cli/commands/chain.js +116 -0
- package/dist/cli/commands/chain.js.map +1 -0
- package/dist/cli/commands/check.d.ts +18 -0
- package/dist/cli/commands/check.d.ts.map +1 -0
- package/dist/cli/commands/check.js +280 -0
- package/dist/cli/commands/check.js.map +1 -0
- package/dist/cli/commands/checkpoint.d.ts +27 -0
- package/dist/cli/commands/checkpoint.d.ts.map +1 -0
- package/dist/cli/commands/checkpoint.js +105 -0
- package/dist/cli/commands/checkpoint.js.map +1 -0
- package/dist/cli/commands/claim.d.ts +35 -0
- package/dist/cli/commands/claim.d.ts.map +1 -0
- package/dist/cli/commands/claim.js +35 -0
- package/dist/cli/commands/claim.js.map +1 -0
- package/dist/cli/commands/code.d.ts +22 -0
- package/dist/cli/commands/code.d.ts.map +1 -0
- package/dist/cli/commands/code.js +161 -0
- package/dist/cli/commands/code.js.map +1 -0
- package/dist/cli/commands/complete.d.ts +49 -0
- package/dist/cli/commands/complete.d.ts.map +1 -0
- package/dist/cli/commands/complete.js +83 -0
- package/dist/cli/commands/complete.js.map +1 -0
- package/dist/cli/commands/complexity.d.ts +13 -0
- package/dist/cli/commands/complexity.d.ts.map +1 -0
- package/dist/cli/commands/complexity.js +32 -0
- package/dist/cli/commands/complexity.js.map +1 -0
- package/dist/cli/commands/compliance.d.ts +27 -0
- package/dist/cli/commands/compliance.d.ts.map +1 -0
- package/dist/cli/commands/compliance.js +233 -0
- package/dist/cli/commands/compliance.js.map +1 -0
- package/dist/cli/commands/conduit.d.ts +28 -0
- package/dist/cli/commands/conduit.d.ts.map +1 -0
- package/dist/cli/commands/conduit.js +279 -0
- package/dist/cli/commands/conduit.js.map +1 -0
- package/dist/cli/commands/config.d.ts +25 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +132 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/consensus.d.ts +21 -0
- package/dist/cli/commands/consensus.d.ts.map +1 -0
- package/dist/cli/commands/consensus.js +100 -0
- package/dist/cli/commands/consensus.js.map +1 -0
- package/dist/cli/commands/context.d.ts +19 -0
- package/dist/cli/commands/context.d.ts.map +1 -0
- package/dist/cli/commands/context.js +111 -0
- package/dist/cli/commands/context.js.map +1 -0
- package/dist/cli/commands/contribution.d.ts +21 -0
- package/dist/cli/commands/contribution.d.ts.map +1 -0
- package/dist/cli/commands/contribution.js +90 -0
- package/dist/cli/commands/contribution.js.map +1 -0
- package/dist/cli/commands/current.d.ts +18 -0
- package/dist/cli/commands/current.d.ts.map +1 -0
- package/dist/cli/commands/current.js +28 -0
- package/dist/cli/commands/current.js.map +1 -0
- package/dist/cli/commands/daemon.d.ts +36 -0
- package/dist/cli/commands/daemon.d.ts.map +1 -0
- package/dist/cli/commands/daemon.js +223 -0
- package/dist/cli/commands/daemon.js.map +1 -0
- package/dist/cli/commands/dash.d.ts +23 -0
- package/dist/cli/commands/dash.d.ts.map +1 -0
- package/dist/cli/commands/dash.js +38 -0
- package/dist/cli/commands/dash.js.map +1 -0
- package/dist/cli/commands/decomposition.d.ts +13 -0
- package/dist/cli/commands/decomposition.d.ts.map +1 -0
- package/dist/cli/commands/decomposition.js +92 -0
- package/dist/cli/commands/decomposition.js.map +1 -0
- package/dist/cli/commands/delete.d.ts +29 -0
- package/dist/cli/commands/delete.d.ts.map +1 -0
- package/dist/cli/commands/delete.js +55 -0
- package/dist/cli/commands/delete.js.map +1 -0
- package/dist/cli/commands/deps.d.ts +45 -0
- package/dist/cli/commands/deps.d.ts.map +1 -0
- package/dist/cli/commands/deps.js +170 -0
- package/dist/cli/commands/deps.js.map +1 -0
- package/dist/cli/commands/detect-drift.d.ts +23 -0
- package/dist/cli/commands/detect-drift.d.ts.map +1 -0
- package/dist/cli/commands/detect-drift.js +440 -0
- package/dist/cli/commands/detect-drift.js.map +1 -0
- package/dist/cli/commands/detect.d.ts +3 -0
- package/dist/cli/commands/detect.d.ts.map +1 -0
- package/dist/cli/commands/detect.js +14 -0
- package/dist/cli/commands/detect.js.map +1 -0
- package/dist/cli/commands/diagnostics.d.ts +19 -0
- package/dist/cli/commands/diagnostics.d.ts.map +1 -0
- package/dist/cli/commands/diagnostics.js +109 -0
- package/dist/cli/commands/diagnostics.js.map +1 -0
- package/dist/cli/commands/docs.d.ts +25 -0
- package/dist/cli/commands/docs.d.ts.map +1 -0
- package/dist/cli/commands/docs.js +798 -0
- package/dist/cli/commands/docs.js.map +1 -0
- package/dist/cli/commands/doctor-projects.d.ts +101 -0
- package/dist/cli/commands/doctor-projects.d.ts.map +1 -0
- package/dist/cli/commands/doctor-projects.js +188 -0
- package/dist/cli/commands/doctor-projects.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +66 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +178 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/dynamic.d.ts +15 -0
- package/dist/cli/commands/dynamic.d.ts.map +1 -0
- package/dist/cli/commands/dynamic.js +21 -0
- package/dist/cli/commands/dynamic.js.map +1 -0
- package/dist/cli/commands/exists.d.ts +13 -0
- package/dist/cli/commands/exists.d.ts.map +1 -0
- package/dist/cli/commands/exists.js +40 -0
- package/dist/cli/commands/exists.js.map +1 -0
- package/dist/cli/commands/export-tasks.d.ts +46 -0
- package/dist/cli/commands/export-tasks.d.ts.map +1 -0
- package/dist/cli/commands/export-tasks.js +81 -0
- package/dist/cli/commands/export-tasks.js.map +1 -0
- package/dist/cli/commands/export.d.ts +35 -0
- package/dist/cli/commands/export.d.ts.map +1 -0
- package/dist/cli/commands/export.js +68 -0
- package/dist/cli/commands/export.js.map +1 -0
- package/dist/cli/commands/find.d.ts +54 -0
- package/dist/cli/commands/find.d.ts.map +1 -0
- package/dist/cli/commands/find.js +92 -0
- package/dist/cli/commands/find.js.map +1 -0
- package/dist/cli/commands/gc.d.ts +25 -0
- package/dist/cli/commands/gc.d.ts.map +1 -0
- package/dist/cli/commands/gc.js +165 -0
- package/dist/cli/commands/gc.js.map +1 -0
- package/dist/cli/commands/generate-changelog.d.ts +30 -0
- package/dist/cli/commands/generate-changelog.d.ts.map +1 -0
- package/dist/cli/commands/generate-changelog.js +270 -0
- package/dist/cli/commands/generate-changelog.js.map +1 -0
- package/dist/cli/commands/grade.d.ts +13 -0
- package/dist/cli/commands/grade.d.ts.map +1 -0
- package/dist/cli/commands/grade.js +27 -0
- package/dist/cli/commands/grade.js.map +1 -0
- package/dist/cli/commands/history.d.ts +13 -0
- package/dist/cli/commands/history.d.ts.map +1 -0
- package/dist/cli/commands/history.js +65 -0
- package/dist/cli/commands/history.js.map +1 -0
- package/dist/cli/commands/import-tasks.d.ts +60 -0
- package/dist/cli/commands/import-tasks.d.ts.map +1 -0
- package/dist/cli/commands/import-tasks.js +83 -0
- package/dist/cli/commands/import-tasks.js.map +1 -0
- package/dist/cli/commands/import.d.ts +42 -0
- package/dist/cli/commands/import.d.ts.map +1 -0
- package/dist/cli/commands/import.js +64 -0
- package/dist/cli/commands/import.js.map +1 -0
- package/dist/cli/commands/init.d.ts +65 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +122 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/inject.d.ts +41 -0
- package/dist/cli/commands/inject.d.ts.map +1 -0
- package/dist/cli/commands/inject.js +56 -0
- package/dist/cli/commands/inject.js.map +1 -0
- package/dist/cli/commands/install-global.d.ts +48 -0
- package/dist/cli/commands/install-global.d.ts.map +1 -0
- package/dist/cli/commands/install-global.js +104 -0
- package/dist/cli/commands/install-global.js.map +1 -0
- package/dist/cli/commands/intelligence.d.ts +21 -0
- package/dist/cli/commands/intelligence.d.ts.map +1 -0
- package/dist/cli/commands/intelligence.js +145 -0
- package/dist/cli/commands/intelligence.js.map +1 -0
- package/dist/cli/commands/issue.d.ts +23 -0
- package/dist/cli/commands/issue.d.ts.map +1 -0
- package/dist/cli/commands/issue.js +152 -0
- package/dist/cli/commands/issue.js.map +1 -0
- package/dist/cli/commands/labels.d.ts +21 -0
- package/dist/cli/commands/labels.d.ts.map +1 -0
- package/dist/cli/commands/labels.js +65 -0
- package/dist/cli/commands/labels.js.map +1 -0
- package/dist/cli/commands/lifecycle.d.ts +25 -0
- package/dist/cli/commands/lifecycle.d.ts.map +1 -0
- package/dist/cli/commands/lifecycle.js +221 -0
- package/dist/cli/commands/lifecycle.js.map +1 -0
- package/dist/cli/commands/list.d.ts +28 -0
- package/dist/cli/commands/list.d.ts.map +1 -0
- package/dist/cli/commands/list.js +81 -0
- package/dist/cli/commands/list.js.map +1 -0
- package/dist/cli/commands/log.d.ts +36 -0
- package/dist/cli/commands/log.d.ts.map +1 -0
- package/dist/cli/commands/log.js +50 -0
- package/dist/cli/commands/log.js.map +1 -0
- package/dist/cli/commands/manifest.d.ts +15 -0
- package/dist/cli/commands/manifest.d.ts.map +1 -0
- package/dist/cli/commands/manifest.js +334 -0
- package/dist/cli/commands/manifest.js.map +1 -0
- package/dist/cli/commands/map.d.ts +25 -0
- package/dist/cli/commands/map.d.ts.map +1 -0
- package/dist/cli/commands/map.js +37 -0
- package/dist/cli/commands/map.js.map +1 -0
- package/dist/cli/commands/memory.d.ts +48 -0
- package/dist/cli/commands/memory.d.ts.map +1 -0
- package/dist/cli/commands/memory.js +2439 -0
- package/dist/cli/commands/memory.js.map +1 -0
- package/dist/cli/commands/migrate-claude-mem.d.ts +23 -0
- package/dist/cli/commands/migrate-claude-mem.d.ts.map +1 -0
- package/dist/cli/commands/migrate-claude-mem.js +181 -0
- package/dist/cli/commands/migrate-claude-mem.js.map +1 -0
- package/dist/cli/commands/next.d.ts +27 -0
- package/dist/cli/commands/next.d.ts.map +1 -0
- package/dist/cli/commands/next.js +40 -0
- package/dist/cli/commands/next.js.map +1 -0
- package/dist/cli/commands/nexus.d.ts +15 -0
- package/dist/cli/commands/nexus.d.ts.map +1 -0
- package/dist/cli/commands/nexus.js +3377 -0
- package/dist/cli/commands/nexus.js.map +1 -0
- package/dist/cli/commands/ops.d.ts +23 -0
- package/dist/cli/commands/ops.d.ts.map +1 -0
- package/dist/cli/commands/ops.js +35 -0
- package/dist/cli/commands/ops.js.map +1 -0
- package/dist/cli/commands/orchestrate.d.ts +48 -0
- package/dist/cli/commands/orchestrate.d.ts.map +1 -0
- package/dist/cli/commands/orchestrate.js +774 -0
- package/dist/cli/commands/orchestrate.js.map +1 -0
- package/dist/cli/commands/otel.d.ts +30 -0
- package/dist/cli/commands/otel.d.ts.map +1 -0
- package/dist/cli/commands/otel.js +193 -0
- package/dist/cli/commands/otel.js.map +1 -0
- package/dist/cli/commands/phase.d.ts +29 -0
- package/dist/cli/commands/phase.d.ts.map +1 -0
- package/dist/cli/commands/phase.js +189 -0
- package/dist/cli/commands/phase.js.map +1 -0
- package/dist/cli/commands/pivot.d.ts +34 -0
- package/dist/cli/commands/pivot.d.ts.map +1 -0
- package/dist/cli/commands/pivot.js +50 -0
- package/dist/cli/commands/pivot.js.map +1 -0
- package/dist/cli/commands/plan.d.ts +17 -0
- package/dist/cli/commands/plan.d.ts.map +1 -0
- package/dist/cli/commands/plan.js +27 -0
- package/dist/cli/commands/plan.js.map +1 -0
- package/dist/cli/commands/playbook.d.ts +26 -0
- package/dist/cli/commands/playbook.d.ts.map +1 -0
- package/dist/cli/commands/playbook.js +220 -0
- package/dist/cli/commands/playbook.js.map +1 -0
- package/dist/cli/commands/promote.d.ts +19 -0
- package/dist/cli/commands/promote.d.ts.map +1 -0
- package/dist/cli/commands/promote.js +27 -0
- package/dist/cli/commands/promote.js.map +1 -0
- package/dist/cli/commands/provider.d.ts +23 -0
- package/dist/cli/commands/provider.d.ts.map +1 -0
- package/dist/cli/commands/provider.js +168 -0
- package/dist/cli/commands/provider.js.map +1 -0
- package/dist/cli/commands/reason.d.ts +18 -0
- package/dist/cli/commands/reason.d.ts.map +1 -0
- package/dist/cli/commands/reason.js +102 -0
- package/dist/cli/commands/reason.js.map +1 -0
- package/dist/cli/commands/reconcile.d.ts +35 -0
- package/dist/cli/commands/reconcile.d.ts.map +1 -0
- package/dist/cli/commands/reconcile.js +102 -0
- package/dist/cli/commands/reconcile.js.map +1 -0
- package/dist/cli/commands/refresh-memory.d.ts +16 -0
- package/dist/cli/commands/refresh-memory.d.ts.map +1 -0
- package/dist/cli/commands/refresh-memory.js +34 -0
- package/dist/cli/commands/refresh-memory.js.map +1 -0
- package/dist/cli/commands/relates.d.ts +19 -0
- package/dist/cli/commands/relates.d.ts.map +1 -0
- package/dist/cli/commands/relates.js +129 -0
- package/dist/cli/commands/relates.js.map +1 -0
- package/dist/cli/commands/release.d.ts +27 -0
- package/dist/cli/commands/release.d.ts.map +1 -0
- package/dist/cli/commands/release.js +300 -0
- package/dist/cli/commands/release.js.map +1 -0
- package/dist/cli/commands/remote.d.ts +49 -0
- package/dist/cli/commands/remote.d.ts.map +1 -0
- package/dist/cli/commands/remote.js +265 -0
- package/dist/cli/commands/remote.js.map +1 -0
- package/dist/cli/commands/reorder.d.ts +31 -0
- package/dist/cli/commands/reorder.d.ts.map +1 -0
- package/dist/cli/commands/reorder.js +57 -0
- package/dist/cli/commands/reorder.js.map +1 -0
- package/dist/cli/commands/reparent.d.ts +27 -0
- package/dist/cli/commands/reparent.d.ts.map +1 -0
- package/dist/cli/commands/reparent.js +36 -0
- package/dist/cli/commands/reparent.js.map +1 -0
- package/dist/cli/commands/req.d.ts +37 -0
- package/dist/cli/commands/req.d.ts.map +1 -0
- package/dist/cli/commands/req.js +121 -0
- package/dist/cli/commands/req.js.map +1 -0
- package/dist/cli/commands/research.d.ts +25 -0
- package/dist/cli/commands/research.d.ts.map +1 -0
- package/dist/cli/commands/research.js +327 -0
- package/dist/cli/commands/research.js.map +1 -0
- package/dist/cli/commands/restore.d.ts +64 -0
- package/dist/cli/commands/restore.d.ts.map +1 -0
- package/dist/cli/commands/restore.js +539 -0
- package/dist/cli/commands/restore.js.map +1 -0
- package/dist/cli/commands/revert.d.ts +79 -0
- package/dist/cli/commands/revert.d.ts.map +1 -0
- package/dist/cli/commands/revert.js +300 -0
- package/dist/cli/commands/revert.js.map +1 -0
- package/dist/cli/commands/roadmap.d.ts +29 -0
- package/dist/cli/commands/roadmap.d.ts.map +1 -0
- package/dist/cli/commands/roadmap.js +43 -0
- package/dist/cli/commands/roadmap.js.map +1 -0
- package/dist/cli/commands/safestop.d.ts +41 -0
- package/dist/cli/commands/safestop.d.ts.map +1 -0
- package/dist/cli/commands/safestop.js +62 -0
- package/dist/cli/commands/safestop.js.map +1 -0
- package/dist/cli/commands/schema.d.ts +44 -0
- package/dist/cli/commands/schema.d.ts.map +1 -0
- package/dist/cli/commands/schema.js +177 -0
- package/dist/cli/commands/schema.js.map +1 -0
- package/dist/cli/commands/self-update.d.ts +81 -0
- package/dist/cli/commands/self-update.d.ts.map +1 -0
- package/dist/cli/commands/self-update.js +483 -0
- package/dist/cli/commands/self-update.js.map +1 -0
- package/dist/cli/commands/sentient.d.ts +44 -0
- package/dist/cli/commands/sentient.d.ts.map +1 -0
- package/dist/cli/commands/sentient.js +687 -0
- package/dist/cli/commands/sentient.js.map +1 -0
- package/dist/cli/commands/sequence.d.ts +15 -0
- package/dist/cli/commands/sequence.d.ts.map +1 -0
- package/dist/cli/commands/sequence.js +68 -0
- package/dist/cli/commands/sequence.js.map +1 -0
- package/dist/cli/commands/session.d.ts +32 -0
- package/dist/cli/commands/session.d.ts.map +1 -0
- package/dist/cli/commands/session.js +583 -0
- package/dist/cli/commands/session.js.map +1 -0
- package/dist/cli/commands/show.d.ts +21 -0
- package/dist/cli/commands/show.d.ts.map +1 -0
- package/dist/cli/commands/show.js +37 -0
- package/dist/cli/commands/show.js.map +1 -0
- package/dist/cli/commands/skills.d.ts +31 -0
- package/dist/cli/commands/skills.d.ts.map +1 -0
- package/dist/cli/commands/skills.js +303 -0
- package/dist/cli/commands/skills.js.map +1 -0
- package/dist/cli/commands/snapshot.d.ts +17 -0
- package/dist/cli/commands/snapshot.d.ts.map +1 -0
- package/dist/cli/commands/snapshot.js +95 -0
- package/dist/cli/commands/snapshot.js.map +1 -0
- package/dist/cli/commands/start.d.ts +21 -0
- package/dist/cli/commands/start.d.ts.map +1 -0
- package/dist/cli/commands/start.js +32 -0
- package/dist/cli/commands/start.js.map +1 -0
- package/dist/cli/commands/stats.d.ts +30 -0
- package/dist/cli/commands/stats.d.ts.map +1 -0
- package/dist/cli/commands/stats.js +71 -0
- package/dist/cli/commands/stats.js.map +1 -0
- package/dist/cli/commands/sticky.d.ts +23 -0
- package/dist/cli/commands/sticky.d.ts.map +1 -0
- package/dist/cli/commands/sticky.js +315 -0
- package/dist/cli/commands/sticky.js.map +1 -0
- package/dist/cli/commands/stop.d.ts +15 -0
- package/dist/cli/commands/stop.d.ts.map +1 -0
- package/dist/cli/commands/stop.js +25 -0
- package/dist/cli/commands/stop.js.map +1 -0
- package/dist/cli/commands/sync.d.ts +25 -0
- package/dist/cli/commands/sync.d.ts.map +1 -0
- package/dist/cli/commands/sync.js +125 -0
- package/dist/cli/commands/sync.js.map +1 -0
- package/dist/cli/commands/testing.d.ts +22 -0
- package/dist/cli/commands/testing.d.ts.map +1 -0
- package/dist/cli/commands/testing.js +111 -0
- package/dist/cli/commands/testing.js.map +1 -0
- package/dist/cli/commands/token.d.ts +22 -0
- package/dist/cli/commands/token.d.ts.map +1 -0
- package/dist/cli/commands/token.js +197 -0
- package/dist/cli/commands/token.js.map +1 -0
- package/dist/cli/commands/transcript.d.ts +32 -0
- package/dist/cli/commands/transcript.d.ts.map +1 -0
- package/dist/cli/commands/transcript.js +526 -0
- package/dist/cli/commands/transcript.js.map +1 -0
- package/dist/cli/commands/update.d.ts +164 -0
- package/dist/cli/commands/update.d.ts.map +1 -0
- package/dist/cli/commands/update.js +234 -0
- package/dist/cli/commands/update.js.map +1 -0
- package/dist/cli/commands/upgrade.d.ts +76 -0
- package/dist/cli/commands/upgrade.d.ts.map +1 -0
- package/dist/cli/commands/upgrade.js +154 -0
- package/dist/cli/commands/upgrade.js.map +1 -0
- package/dist/cli/commands/verify.d.ts +83 -0
- package/dist/cli/commands/verify.d.ts.map +1 -0
- package/dist/cli/commands/verify.js +108 -0
- package/dist/cli/commands/verify.js.map +1 -0
- package/dist/cli/commands/web.d.ts +27 -0
- package/dist/cli/commands/web.d.ts.map +1 -0
- package/dist/cli/commands/web.js +414 -0
- package/dist/cli/commands/web.js.map +1 -0
- package/dist/cli/field-context.d.ts +32 -0
- package/dist/cli/field-context.d.ts.map +1 -0
- package/dist/cli/field-context.js +47 -0
- package/dist/cli/field-context.js.map +1 -0
- package/dist/cli/format-context.d.ts +32 -0
- package/dist/cli/format-context.d.ts.map +1 -0
- package/dist/cli/format-context.js +50 -0
- package/dist/cli/format-context.js.map +1 -0
- package/dist/cli/help-renderer.d.ts +40 -0
- package/dist/cli/help-renderer.d.ts.map +1 -0
- package/dist/cli/help-renderer.js +325 -0
- package/dist/cli/help-renderer.js.map +1 -0
- package/dist/cli/index.d.ts +14 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +1535 -9704
- package/dist/cli/index.js.map +4 -4
- package/dist/cli/infer-files-via-gitnexus.d.ts +12 -0
- package/dist/cli/infer-files-via-gitnexus.d.ts.map +1 -0
- package/dist/cli/infer-files-via-gitnexus.js +12 -0
- package/dist/cli/infer-files-via-gitnexus.js.map +1 -0
- package/dist/cli/lib/did-you-mean.d.ts +30 -0
- package/dist/cli/lib/did-you-mean.d.ts.map +1 -0
- package/dist/cli/lib/did-you-mean.js +63 -0
- package/dist/cli/lib/did-you-mean.js.map +1 -0
- package/dist/cli/lib/registry-args.d.ts +36 -0
- package/dist/cli/lib/registry-args.d.ts.map +1 -0
- package/dist/cli/lib/registry-args.js +37 -0
- package/dist/cli/lib/registry-args.js.map +1 -0
- package/dist/cli/lib/subcommand-guard.d.ts +45 -0
- package/dist/cli/lib/subcommand-guard.d.ts.map +1 -0
- package/dist/cli/lib/subcommand-guard.js +55 -0
- package/dist/cli/lib/subcommand-guard.js.map +1 -0
- package/dist/cli/logger-bootstrap.d.ts +6 -0
- package/dist/cli/logger-bootstrap.d.ts.map +1 -0
- package/dist/cli/logger-bootstrap.js +10 -0
- package/dist/cli/logger-bootstrap.js.map +1 -0
- package/dist/cli/middleware/output-format.d.ts +30 -0
- package/dist/cli/middleware/output-format.d.ts.map +1 -0
- package/dist/cli/middleware/output-format.js +35 -0
- package/dist/cli/middleware/output-format.js.map +1 -0
- package/dist/cli/paths.d.ts +85 -0
- package/dist/cli/paths.d.ts.map +1 -0
- package/dist/cli/paths.js +108 -0
- package/dist/cli/paths.js.map +1 -0
- package/dist/cli/progress.d.ts +89 -0
- package/dist/cli/progress.d.ts.map +1 -0
- package/dist/cli/progress.js +185 -0
- package/dist/cli/progress.js.map +1 -0
- package/dist/cli/renderers/colors.d.ts +32 -0
- package/dist/cli/renderers/colors.d.ts.map +1 -0
- package/dist/cli/renderers/colors.js +141 -0
- package/dist/cli/renderers/colors.js.map +1 -0
- package/dist/cli/renderers/error.d.ts +13 -0
- package/dist/cli/renderers/error.d.ts.map +1 -0
- package/dist/cli/renderers/error.js +42 -0
- package/dist/cli/renderers/error.js.map +1 -0
- package/dist/cli/renderers/index.d.ts +90 -0
- package/dist/cli/renderers/index.d.ts.map +1 -0
- package/dist/cli/renderers/index.js +268 -0
- package/dist/cli/renderers/index.js.map +1 -0
- package/dist/cli/renderers/lafs-validator.d.ts +91 -0
- package/dist/cli/renderers/lafs-validator.d.ts.map +1 -0
- package/dist/cli/renderers/lafs-validator.js +176 -0
- package/dist/cli/renderers/lafs-validator.js.map +1 -0
- package/dist/cli/renderers/normalizer.d.ts +21 -0
- package/dist/cli/renderers/normalizer.d.ts.map +1 -0
- package/dist/cli/renderers/normalizer.js +106 -0
- package/dist/cli/renderers/normalizer.js.map +1 -0
- package/dist/cli/renderers/system.d.ts +110 -0
- package/dist/cli/renderers/system.d.ts.map +1 -0
- package/dist/cli/renderers/system.js +662 -0
- package/dist/cli/renderers/system.js.map +1 -0
- package/dist/cli/renderers/tasks.d.ts +28 -0
- package/dist/cli/renderers/tasks.d.ts.map +1 -0
- package/dist/cli/renderers/tasks.js +306 -0
- package/dist/cli/renderers/tasks.js.map +1 -0
- package/dist/cli/tree-context.d.ts +53 -0
- package/dist/cli/tree-context.d.ts.map +1 -0
- package/dist/cli/tree-context.js +43 -0
- package/dist/cli/tree-context.js.map +1 -0
- package/dist/dispatch/adapters/cli.d.ts +67 -0
- package/dist/dispatch/adapters/cli.d.ts.map +1 -0
- package/dist/dispatch/adapters/cli.js +331 -0
- package/dist/dispatch/adapters/cli.js.map +1 -0
- package/dist/dispatch/adapters/typed.d.ts +362 -0
- package/dist/dispatch/adapters/typed.d.ts.map +1 -0
- package/dist/dispatch/adapters/typed.js +278 -0
- package/dist/dispatch/adapters/typed.js.map +1 -0
- package/dist/dispatch/context/session-context.d.ts +108 -0
- package/dist/dispatch/context/session-context.d.ts.map +1 -0
- package/dist/dispatch/context/session-context.js +111 -0
- package/dist/dispatch/context/session-context.js.map +1 -0
- package/dist/dispatch/dispatcher.d.ts +37 -0
- package/dist/dispatch/dispatcher.d.ts.map +1 -0
- package/dist/dispatch/dispatcher.js +172 -0
- package/dist/dispatch/dispatcher.js.map +1 -0
- package/dist/dispatch/domains/_base.d.ts +104 -0
- package/dist/dispatch/domains/_base.d.ts.map +1 -0
- package/dist/dispatch/domains/_base.js +147 -0
- package/dist/dispatch/domains/_base.js.map +1 -0
- package/dist/dispatch/domains/_meta.d.ts +23 -0
- package/dist/dispatch/domains/_meta.d.ts.map +1 -0
- package/dist/dispatch/domains/_meta.js +25 -0
- package/dist/dispatch/domains/_meta.js.map +1 -0
- package/dist/dispatch/domains/_routing.d.ts +8 -0
- package/dist/dispatch/domains/_routing.d.ts.map +1 -0
- package/dist/dispatch/domains/_routing.js +20 -0
- package/dist/dispatch/domains/_routing.js.map +1 -0
- package/dist/dispatch/domains/admin/smoke-provider.d.ts +54 -0
- package/dist/dispatch/domains/admin/smoke-provider.d.ts.map +1 -0
- package/dist/dispatch/domains/admin/smoke-provider.js +309 -0
- package/dist/dispatch/domains/admin/smoke-provider.js.map +1 -0
- package/dist/dispatch/domains/admin.d.ts +51 -0
- package/dist/dispatch/domains/admin.d.ts.map +1 -0
- package/dist/dispatch/domains/admin.js +1163 -0
- package/dist/dispatch/domains/admin.js.map +1 -0
- package/dist/dispatch/domains/check/canon.d.ts +65 -0
- package/dist/dispatch/domains/check/canon.d.ts.map +1 -0
- package/dist/dispatch/domains/check/canon.js +193 -0
- package/dist/dispatch/domains/check/canon.js.map +1 -0
- package/dist/dispatch/domains/check.d.ts +37 -0
- package/dist/dispatch/domains/check.d.ts.map +1 -0
- package/dist/dispatch/domains/check.js +562 -0
- package/dist/dispatch/domains/check.js.map +1 -0
- package/dist/dispatch/domains/conduit.d.ts +61 -0
- package/dist/dispatch/domains/conduit.d.ts.map +1 -0
- package/dist/dispatch/domains/conduit.js +609 -0
- package/dist/dispatch/domains/conduit.js.map +1 -0
- package/dist/dispatch/domains/diagnostics.d.ts +25 -0
- package/dist/dispatch/domains/diagnostics.d.ts.map +1 -0
- package/dist/dispatch/domains/diagnostics.js +82 -0
- package/dist/dispatch/domains/diagnostics.js.map +1 -0
- package/dist/dispatch/domains/docs.d.ts +63 -0
- package/dist/dispatch/domains/docs.d.ts.map +1 -0
- package/dist/dispatch/domains/docs.js +539 -0
- package/dist/dispatch/domains/docs.js.map +1 -0
- package/dist/dispatch/domains/index.d.ts +33 -0
- package/dist/dispatch/domains/index.d.ts.map +1 -0
- package/dist/dispatch/domains/index.js +58 -0
- package/dist/dispatch/domains/index.js.map +1 -0
- package/dist/dispatch/domains/intelligence.d.ts +26 -0
- package/dist/dispatch/domains/intelligence.d.ts.map +1 -0
- package/dist/dispatch/domains/intelligence.js +154 -0
- package/dist/dispatch/domains/intelligence.js.map +1 -0
- package/dist/dispatch/domains/ivtr.d.ts +182 -0
- package/dist/dispatch/domains/ivtr.d.ts.map +1 -0
- package/dist/dispatch/domains/ivtr.js +430 -0
- package/dist/dispatch/domains/ivtr.js.map +1 -0
- package/dist/dispatch/domains/memory.d.ts +22 -0
- package/dist/dispatch/domains/memory.d.ts.map +1 -0
- package/dist/dispatch/domains/memory.js +1281 -0
- package/dist/dispatch/domains/memory.js.map +1 -0
- package/dist/dispatch/domains/nexus.d.ts +78 -0
- package/dist/dispatch/domains/nexus.d.ts.map +1 -0
- package/dist/dispatch/domains/nexus.js +938 -0
- package/dist/dispatch/domains/nexus.js.map +1 -0
- package/dist/dispatch/domains/orchestrate.d.ts +307 -0
- package/dist/dispatch/domains/orchestrate.d.ts.map +1 -0
- package/dist/dispatch/domains/orchestrate.js +986 -0
- package/dist/dispatch/domains/orchestrate.js.map +1 -0
- package/dist/dispatch/domains/pipeline.d.ts +276 -0
- package/dist/dispatch/domains/pipeline.d.ts.map +1 -0
- package/dist/dispatch/domains/pipeline.js +689 -0
- package/dist/dispatch/domains/pipeline.js.map +1 -0
- package/dist/dispatch/domains/playbook.d.ts +131 -0
- package/dist/dispatch/domains/playbook.d.ts.map +1 -0
- package/dist/dispatch/domains/playbook.js +633 -0
- package/dist/dispatch/domains/playbook.js.map +1 -0
- package/dist/dispatch/domains/release.d.ts +97 -0
- package/dist/dispatch/domains/release.d.ts.map +1 -0
- package/dist/dispatch/domains/release.js +177 -0
- package/dist/dispatch/domains/release.js.map +1 -0
- package/dist/dispatch/domains/sentient.d.ts +60 -0
- package/dist/dispatch/domains/sentient.d.ts.map +1 -0
- package/dist/dispatch/domains/sentient.js +270 -0
- package/dist/dispatch/domains/sentient.js.map +1 -0
- package/dist/dispatch/domains/session.d.ts +49 -0
- package/dist/dispatch/domains/session.d.ts.map +1 -0
- package/dist/dispatch/domains/session.js +459 -0
- package/dist/dispatch/domains/session.js.map +1 -0
- package/dist/dispatch/domains/sticky.d.ts +82 -0
- package/dist/dispatch/domains/sticky.d.ts.map +1 -0
- package/dist/dispatch/domains/sticky.js +287 -0
- package/dist/dispatch/domains/sticky.js.map +1 -0
- package/dist/dispatch/domains/tasks.d.ts +58 -0
- package/dist/dispatch/domains/tasks.d.ts.map +1 -0
- package/dist/dispatch/domains/tasks.js +497 -0
- package/dist/dispatch/domains/tasks.js.map +1 -0
- package/dist/dispatch/domains/tools.d.ts +37 -0
- package/dist/dispatch/domains/tools.d.ts.map +1 -0
- package/dist/dispatch/domains/tools.js +481 -0
- package/dist/dispatch/domains/tools.js.map +1 -0
- package/dist/dispatch/engines/_error.d.ts +114 -0
- package/dist/dispatch/engines/_error.d.ts.map +1 -0
- package/dist/dispatch/engines/_error.js +290 -0
- package/dist/dispatch/engines/_error.js.map +1 -0
- package/dist/dispatch/engines/admin-engine.d.ts +386 -0
- package/dist/dispatch/engines/admin-engine.d.ts.map +1 -0
- package/dist/dispatch/engines/admin-engine.js +270 -0
- package/dist/dispatch/engines/admin-engine.js.map +1 -0
- package/dist/dispatch/engines/code-engine.d.ts +14 -0
- package/dist/dispatch/engines/code-engine.d.ts.map +1 -0
- package/dist/dispatch/engines/code-engine.js +14 -0
- package/dist/dispatch/engines/code-engine.js.map +1 -0
- package/dist/dispatch/engines/codebase-map-engine.d.ts +31 -0
- package/dist/dispatch/engines/codebase-map-engine.d.ts.map +1 -0
- package/dist/dispatch/engines/codebase-map-engine.js +43 -0
- package/dist/dispatch/engines/codebase-map-engine.js.map +1 -0
- package/dist/dispatch/engines/config-engine.d.ts +14 -0
- package/dist/dispatch/engines/config-engine.d.ts.map +1 -0
- package/dist/dispatch/engines/config-engine.js +14 -0
- package/dist/dispatch/engines/config-engine.js.map +1 -0
- package/dist/dispatch/engines/diagnostics-engine.d.ts +13 -0
- package/dist/dispatch/engines/diagnostics-engine.d.ts.map +1 -0
- package/dist/dispatch/engines/diagnostics-engine.js +12 -0
- package/dist/dispatch/engines/diagnostics-engine.js.map +1 -0
- package/dist/dispatch/engines/hooks-engine.d.ts +13 -0
- package/dist/dispatch/engines/hooks-engine.d.ts.map +1 -0
- package/dist/dispatch/engines/hooks-engine.js +12 -0
- package/dist/dispatch/engines/hooks-engine.js.map +1 -0
- package/dist/dispatch/engines/init-engine.d.ts +14 -0
- package/dist/dispatch/engines/init-engine.d.ts.map +1 -0
- package/dist/dispatch/engines/init-engine.js +14 -0
- package/dist/dispatch/engines/init-engine.js.map +1 -0
- package/dist/dispatch/engines/lifecycle-engine.d.ts +13 -0
- package/dist/dispatch/engines/lifecycle-engine.d.ts.map +1 -0
- package/dist/dispatch/engines/lifecycle-engine.js +12 -0
- package/dist/dispatch/engines/lifecycle-engine.js.map +1 -0
- package/dist/dispatch/engines/memory-engine.d.ts +10 -0
- package/dist/dispatch/engines/memory-engine.d.ts.map +1 -0
- package/dist/dispatch/engines/memory-engine.js +10 -0
- package/dist/dispatch/engines/memory-engine.js.map +1 -0
- package/dist/dispatch/engines/nexus-engine.d.ts +603 -0
- package/dist/dispatch/engines/nexus-engine.d.ts.map +1 -0
- package/dist/dispatch/engines/nexus-engine.js +1438 -0
- package/dist/dispatch/engines/nexus-engine.js.map +1 -0
- package/dist/dispatch/engines/orchestrate-engine.d.ts +252 -0
- package/dist/dispatch/engines/orchestrate-engine.d.ts.map +1 -0
- package/dist/dispatch/engines/orchestrate-engine.js +1526 -0
- package/dist/dispatch/engines/orchestrate-engine.js.map +1 -0
- package/dist/dispatch/engines/pipeline-engine.d.ts +13 -0
- package/dist/dispatch/engines/pipeline-engine.d.ts.map +1 -0
- package/dist/dispatch/engines/pipeline-engine.js +12 -0
- package/dist/dispatch/engines/pipeline-engine.js.map +1 -0
- package/dist/dispatch/engines/release-engine.d.ts +13 -0
- package/dist/dispatch/engines/release-engine.d.ts.map +1 -0
- package/dist/dispatch/engines/release-engine.js +13 -0
- package/dist/dispatch/engines/release-engine.js.map +1 -0
- package/dist/dispatch/engines/session-engine.d.ts +15 -0
- package/dist/dispatch/engines/session-engine.d.ts.map +1 -0
- package/dist/dispatch/engines/session-engine.js +12 -0
- package/dist/dispatch/engines/session-engine.js.map +1 -0
- package/dist/dispatch/engines/sticky-engine.d.ts +13 -0
- package/dist/dispatch/engines/sticky-engine.d.ts.map +1 -0
- package/dist/dispatch/engines/sticky-engine.js +12 -0
- package/dist/dispatch/engines/sticky-engine.js.map +1 -0
- package/dist/dispatch/engines/system-engine.d.ts +543 -0
- package/dist/dispatch/engines/system-engine.d.ts.map +1 -0
- package/dist/dispatch/engines/system-engine.js +1278 -0
- package/dist/dispatch/engines/system-engine.js.map +1 -0
- package/dist/dispatch/engines/task-engine.d.ts +1161 -0
- package/dist/dispatch/engines/task-engine.d.ts.map +1 -0
- package/dist/dispatch/engines/task-engine.js +1599 -0
- package/dist/dispatch/engines/task-engine.js.map +1 -0
- package/dist/dispatch/engines/template-parser.d.ts +85 -0
- package/dist/dispatch/engines/template-parser.d.ts.map +1 -0
- package/dist/dispatch/engines/template-parser.js +114 -0
- package/dist/dispatch/engines/template-parser.js.map +1 -0
- package/dist/dispatch/engines/tools-engine.d.ts +13 -0
- package/dist/dispatch/engines/tools-engine.d.ts.map +1 -0
- package/dist/dispatch/engines/tools-engine.js +12 -0
- package/dist/dispatch/engines/tools-engine.js.map +1 -0
- package/dist/dispatch/engines/validate-engine.d.ts +13 -0
- package/dist/dispatch/engines/validate-engine.d.ts.map +1 -0
- package/dist/dispatch/engines/validate-engine.js +13 -0
- package/dist/dispatch/engines/validate-engine.js.map +1 -0
- package/dist/dispatch/index.d.ts +20 -0
- package/dist/dispatch/index.d.ts.map +1 -0
- package/dist/dispatch/index.js +19 -0
- package/dist/dispatch/index.js.map +1 -0
- package/dist/dispatch/lib/background-jobs.d.ts +162 -0
- package/dist/dispatch/lib/background-jobs.d.ts.map +1 -0
- package/dist/dispatch/lib/background-jobs.js +360 -0
- package/dist/dispatch/lib/background-jobs.js.map +1 -0
- package/dist/dispatch/lib/budget.d.ts +36 -0
- package/dist/dispatch/lib/budget.d.ts.map +1 -0
- package/dist/dispatch/lib/budget.js +109 -0
- package/dist/dispatch/lib/budget.js.map +1 -0
- package/dist/dispatch/lib/capability-matrix.d.ts +11 -0
- package/dist/dispatch/lib/capability-matrix.d.ts.map +1 -0
- package/dist/dispatch/lib/capability-matrix.js +10 -0
- package/dist/dispatch/lib/capability-matrix.js.map +1 -0
- package/dist/dispatch/lib/config-loader.d.ts +42 -0
- package/dist/dispatch/lib/config-loader.d.ts.map +1 -0
- package/dist/dispatch/lib/config-loader.js +218 -0
- package/dist/dispatch/lib/config-loader.js.map +1 -0
- package/dist/dispatch/lib/config.d.ts +11 -0
- package/dist/dispatch/lib/config.d.ts.map +1 -0
- package/dist/dispatch/lib/config.js +10 -0
- package/dist/dispatch/lib/config.js.map +1 -0
- package/dist/dispatch/lib/defaults.d.ts +115 -0
- package/dist/dispatch/lib/defaults.d.ts.map +1 -0
- package/dist/dispatch/lib/defaults.js +61 -0
- package/dist/dispatch/lib/defaults.js.map +1 -0
- package/dist/dispatch/lib/engine.d.ts +17 -0
- package/dist/dispatch/lib/engine.d.ts.map +1 -0
- package/dist/dispatch/lib/engine.js +36 -0
- package/dist/dispatch/lib/engine.js.map +1 -0
- package/dist/dispatch/lib/exit-codes.d.ts +35 -0
- package/dist/dispatch/lib/exit-codes.d.ts.map +1 -0
- package/dist/dispatch/lib/exit-codes.js +60 -0
- package/dist/dispatch/lib/exit-codes.js.map +1 -0
- package/dist/dispatch/lib/gateway-meta.d.ts +37 -0
- package/dist/dispatch/lib/gateway-meta.d.ts.map +1 -0
- package/dist/dispatch/lib/gateway-meta.js +50 -0
- package/dist/dispatch/lib/gateway-meta.js.map +1 -0
- package/dist/dispatch/lib/job-manager-accessor.d.ts +9 -0
- package/dist/dispatch/lib/job-manager-accessor.d.ts.map +1 -0
- package/dist/dispatch/lib/job-manager-accessor.js +13 -0
- package/dist/dispatch/lib/job-manager-accessor.js.map +1 -0
- package/dist/dispatch/lib/meta.d.ts +26 -0
- package/dist/dispatch/lib/meta.d.ts.map +1 -0
- package/dist/dispatch/lib/meta.js +37 -0
- package/dist/dispatch/lib/meta.js.map +1 -0
- package/dist/dispatch/lib/param-utils.d.ts +11 -0
- package/dist/dispatch/lib/param-utils.d.ts.map +1 -0
- package/dist/dispatch/lib/param-utils.js +10 -0
- package/dist/dispatch/lib/param-utils.js.map +1 -0
- package/dist/dispatch/lib/projections.d.ts +56 -0
- package/dist/dispatch/lib/projections.d.ts.map +1 -0
- package/dist/dispatch/lib/projections.js +65 -0
- package/dist/dispatch/lib/projections.js.map +1 -0
- package/dist/dispatch/lib/proto-envelope.d.ts +56 -0
- package/dist/dispatch/lib/proto-envelope.d.ts.map +1 -0
- package/dist/dispatch/lib/proto-envelope.js +17 -0
- package/dist/dispatch/lib/proto-envelope.js.map +1 -0
- package/dist/dispatch/lib/schema-utils.d.ts +39 -0
- package/dist/dispatch/lib/schema-utils.d.ts.map +1 -0
- package/dist/dispatch/lib/schema-utils.js +88 -0
- package/dist/dispatch/lib/schema-utils.js.map +1 -0
- package/dist/dispatch/lib/security.d.ts +11 -0
- package/dist/dispatch/lib/security.d.ts.map +1 -0
- package/dist/dispatch/lib/security.js +10 -0
- package/dist/dispatch/lib/security.js.map +1 -0
- package/dist/dispatch/middleware/audit.d.ts +23 -0
- package/dist/dispatch/middleware/audit.d.ts.map +1 -0
- package/dist/dispatch/middleware/audit.js +169 -0
- package/dist/dispatch/middleware/audit.js.map +1 -0
- package/dist/dispatch/middleware/field-filter.d.ts +25 -0
- package/dist/dispatch/middleware/field-filter.d.ts.map +1 -0
- package/dist/dispatch/middleware/field-filter.js +70 -0
- package/dist/dispatch/middleware/field-filter.js.map +1 -0
- package/dist/dispatch/middleware/pipeline.d.ts +33 -0
- package/dist/dispatch/middleware/pipeline.d.ts.map +1 -0
- package/dist/dispatch/middleware/pipeline.js +60 -0
- package/dist/dispatch/middleware/pipeline.js.map +1 -0
- package/dist/dispatch/middleware/projection.d.ts +35 -0
- package/dist/dispatch/middleware/projection.d.ts.map +1 -0
- package/dist/dispatch/middleware/projection.js +146 -0
- package/dist/dispatch/middleware/projection.js.map +1 -0
- package/dist/dispatch/middleware/protocol-enforcement.d.ts +30 -0
- package/dist/dispatch/middleware/protocol-enforcement.d.ts.map +1 -0
- package/dist/dispatch/middleware/protocol-enforcement.js +56 -0
- package/dist/dispatch/middleware/protocol-enforcement.js.map +1 -0
- package/dist/dispatch/middleware/rate-limiter.d.ts +72 -0
- package/dist/dispatch/middleware/rate-limiter.d.ts.map +1 -0
- package/dist/dispatch/middleware/rate-limiter.js +127 -0
- package/dist/dispatch/middleware/rate-limiter.js.map +1 -0
- package/dist/dispatch/middleware/sanitizer.d.ts +24 -0
- package/dist/dispatch/middleware/sanitizer.d.ts.map +1 -0
- package/dist/dispatch/middleware/sanitizer.js +56 -0
- package/dist/dispatch/middleware/sanitizer.js.map +1 -0
- package/dist/dispatch/middleware/session-resolver.d.ts +26 -0
- package/dist/dispatch/middleware/session-resolver.d.ts.map +1 -0
- package/dist/dispatch/middleware/session-resolver.js +65 -0
- package/dist/dispatch/middleware/session-resolver.js.map +1 -0
- package/dist/dispatch/middleware/telemetry.d.ts +21 -0
- package/dist/dispatch/middleware/telemetry.d.ts.map +1 -0
- package/dist/dispatch/middleware/telemetry.js +50 -0
- package/dist/dispatch/middleware/telemetry.js.map +1 -0
- package/dist/dispatch/middleware/verification-gates.d.ts +22 -0
- package/dist/dispatch/middleware/verification-gates.d.ts.map +1 -0
- package/dist/dispatch/middleware/verification-gates.js +59 -0
- package/dist/dispatch/middleware/verification-gates.js.map +1 -0
- package/dist/dispatch/registry.d.ts +91 -0
- package/dist/dispatch/registry.d.ts.map +1 -0
- package/dist/dispatch/registry.js +6430 -0
- package/dist/dispatch/registry.js.map +1 -0
- package/dist/dispatch/types.d.ts +150 -0
- package/dist/dispatch/types.d.ts.map +1 -0
- package/dist/dispatch/types.js +38 -0
- package/dist/dispatch/types.js.map +1 -0
- package/dist/migrations/2026-04-25-t991-parent-link-repair.d.ts +88 -0
- package/dist/migrations/2026-04-25-t991-parent-link-repair.d.ts.map +1 -0
- package/dist/migrations/2026-04-25-t991-parent-link-repair.js +76 -0
- package/dist/migrations/2026-04-25-t991-parent-link-repair.js.map +1 -0
- package/package.json +9 -9
- package/templates/HANDOFF-REDIRECT-STUB.md +37 -0
- package/templates/hooks/commit-msg +146 -6
|
@@ -0,0 +1,938 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Nexus Domain Handler (Dispatch Layer)
|
|
3
|
+
*
|
|
4
|
+
* Cross-project coordination via the BRAIN Network.
|
|
5
|
+
* Delegates to nexus-engine which wraps src/core/nexus/ for all business logic.
|
|
6
|
+
*
|
|
7
|
+
* Also handles multi-contributor sharing operations (status, snapshot export/import).
|
|
8
|
+
* Git CLI wrappers (remotes, push/pull, gitignore) removed in T5615.
|
|
9
|
+
*
|
|
10
|
+
* All operations are type-safe via TypedDomainHandler<NexusOps> (T1424 — Wave D
|
|
11
|
+
* typed-dispatch migration). Zero `as string` / `as any` param casts at call sites.
|
|
12
|
+
*
|
|
13
|
+
* Param extraction is type-safe via OpsFromCore<typeof coreNexus.nexusCoreOps>.
|
|
14
|
+
* Zero per-op contract param type imports (T1440).
|
|
15
|
+
*
|
|
16
|
+
* @epic T4820
|
|
17
|
+
* @task T5704
|
|
18
|
+
* @task T1424 — typed-dispatch narrowing (T988 follow-on)
|
|
19
|
+
* @task T1440 — Core-derived OpsFromCore inference
|
|
20
|
+
*/
|
|
21
|
+
import { getBrainNativeDb, getLogger, getNexusNativeDb, getProjectRoot, nexusAugment, nexusBlockers, nexusBrainAnchors, nexusClusters, nexusColdSymbols, nexusConduitScan, nexusContext, nexusContractsLinkTasks, nexusContractsShow, nexusContractsSync, nexusCriticalPath, nexusDepsQuery, nexusDiff, nexusDiscover, nexusFlows, nexusFullContext, nexusGraph, nexusHotNodes, nexusHotPaths, nexusImpact, nexusImpactFull, nexusInitialize, nexusListProjects, nexusOrphans, nexusProfileExport, nexusProfileGet, nexusProfileImport, nexusProfileReinforce, nexusProfileSupersede, nexusProfileUpsert, nexusProfileView, nexusProjectsClean, nexusProjectsList, nexusProjectsRegister, nexusProjectsRemove, nexusProjectsScan, nexusQueryCte, nexusReconcileProject, nexusRefreshBridge, nexusRegisterProject, nexusResolve, nexusRouteMap, nexusSearch, nexusSearchCode, nexusSetPermission, nexusShapeCheck, nexusShareSnapshotExport, nexusShareSnapshotImport, nexusShareStatus, nexusShowProject, nexusSigilList, nexusSigilSync, nexusStatus, nexusSyncProject, nexusTaskFootprint, nexusTaskSymbols, nexusTopEntries, nexusTransferExecute, nexusTransferPreview, nexusUnregisterProject, nexusWhy, nexusWiki, } from '@cleocode/core/internal';
|
|
22
|
+
import { defineTypedHandler, lafsError, lafsSuccess, typedDispatch, wrapCoreResult, } from '../adapters/typed.js';
|
|
23
|
+
import { errorResult, handleErrorResult, unsupportedOp, wrapResult } from './_base.js';
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
// Typed inner handler (T1424 — Wave D typed-dispatch migration)
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
const _nexusTypedHandler = defineTypedHandler('nexus', {
|
|
28
|
+
// -------------------------------------------------------------------------
|
|
29
|
+
// Query ops (30)
|
|
30
|
+
// -------------------------------------------------------------------------
|
|
31
|
+
status: async (_params) => wrapCoreResult(await nexusStatus(), 'status'),
|
|
32
|
+
list: async (params) => {
|
|
33
|
+
const result = await nexusListProjects(params.limit, params.offset);
|
|
34
|
+
if (!result.success) {
|
|
35
|
+
return lafsError(String(result.error?.code ?? 'E_INTERNAL'), result.error?.message ?? 'Unknown error', 'list');
|
|
36
|
+
}
|
|
37
|
+
// SSoT-EXEMPT:page-envelope-lifting — engine puts page in data.page; lift to
|
|
38
|
+
// envelope top-level and strip from data to preserve pre-T1424 contract shape.
|
|
39
|
+
const data = result.data;
|
|
40
|
+
return lafsSuccess({ projects: data.projects, count: data.count, total: data.total, filtered: data.filtered }, 'list', { page: (data.page ?? result.page) });
|
|
41
|
+
},
|
|
42
|
+
show: async (params) => {
|
|
43
|
+
if (!params.name)
|
|
44
|
+
return lafsError('E_INVALID_INPUT', 'name is required', 'show');
|
|
45
|
+
return wrapCoreResult(await nexusShowProject(params.name), 'show');
|
|
46
|
+
},
|
|
47
|
+
resolve: async (params) => {
|
|
48
|
+
if (!params.query)
|
|
49
|
+
return lafsError('E_INVALID_INPUT', 'query is required', 'resolve');
|
|
50
|
+
return wrapCoreResult(await nexusResolve(params.query, params.currentProject), 'resolve');
|
|
51
|
+
},
|
|
52
|
+
deps: async (params) => {
|
|
53
|
+
if (!params.query)
|
|
54
|
+
return lafsError('E_INVALID_INPUT', 'query is required', 'deps');
|
|
55
|
+
return wrapCoreResult(await nexusDepsQuery(params.query, params.direction ?? 'forward'), 'deps');
|
|
56
|
+
},
|
|
57
|
+
graph: async (_params) => wrapCoreResult(await nexusGraph(), 'graph'),
|
|
58
|
+
'path.show': async (_params) => wrapCoreResult(await nexusCriticalPath(), 'path.show'),
|
|
59
|
+
'blockers.show': async (params) => {
|
|
60
|
+
if (!params.query)
|
|
61
|
+
return lafsError('E_INVALID_INPUT', 'query is required', 'blockers.show');
|
|
62
|
+
return wrapCoreResult(await nexusBlockers(params.query), 'blockers.show');
|
|
63
|
+
},
|
|
64
|
+
'orphans.list': async (params) => {
|
|
65
|
+
const result = await nexusOrphans(params.limit, params.offset);
|
|
66
|
+
if (!result.success) {
|
|
67
|
+
return lafsError(String(result.error?.code ?? 'E_INTERNAL'), result.error?.message ?? 'Unknown error', 'orphans.list');
|
|
68
|
+
}
|
|
69
|
+
// SSoT-EXEMPT:page-envelope-lifting — same contract as nexus.list
|
|
70
|
+
const data = result.data;
|
|
71
|
+
return lafsSuccess({ orphans: data.orphans, count: data.count, total: data.total, filtered: data.filtered }, 'orphans.list', { page: (data.page ?? result.page) });
|
|
72
|
+
},
|
|
73
|
+
discover: async (params) => {
|
|
74
|
+
if (!params.query)
|
|
75
|
+
return lafsError('E_INVALID_INPUT', 'query is required', 'discover');
|
|
76
|
+
return wrapCoreResult(await nexusDiscover(params.query, params.method ?? 'auto', params.limit ?? 10), 'discover');
|
|
77
|
+
},
|
|
78
|
+
search: async (params) => {
|
|
79
|
+
if (!params.pattern)
|
|
80
|
+
return lafsError('E_INVALID_INPUT', 'pattern is required', 'search');
|
|
81
|
+
return wrapCoreResult(await nexusSearch(params.pattern, params.project, params.limit ?? 20), 'search');
|
|
82
|
+
},
|
|
83
|
+
augment: async (params) => {
|
|
84
|
+
if (!params.pattern)
|
|
85
|
+
return lafsError('E_INVALID_INPUT', 'pattern is required', 'augment');
|
|
86
|
+
return wrapCoreResult(await nexusAugment(params.pattern, params.limit ?? 5), 'augment');
|
|
87
|
+
},
|
|
88
|
+
'share.status': async (_params) => {
|
|
89
|
+
const projectRoot = getProjectRoot();
|
|
90
|
+
return wrapCoreResult(await nexusShareStatus(projectRoot), 'share.status');
|
|
91
|
+
},
|
|
92
|
+
'transfer.preview': async (params) => {
|
|
93
|
+
if (!params.taskIds?.length || !params.sourceProject || !params.targetProject) {
|
|
94
|
+
return lafsError('E_INVALID_INPUT', 'taskIds, sourceProject, and targetProject are required', 'transfer.preview');
|
|
95
|
+
}
|
|
96
|
+
return wrapCoreResult(await nexusTransferPreview({
|
|
97
|
+
taskIds: params.taskIds,
|
|
98
|
+
sourceProject: params.sourceProject,
|
|
99
|
+
targetProject: params.targetProject,
|
|
100
|
+
mode: params.mode ?? 'copy',
|
|
101
|
+
scope: params.scope ?? 'subtree',
|
|
102
|
+
}), 'transfer.preview');
|
|
103
|
+
},
|
|
104
|
+
'top-entries': async (params) => wrapCoreResult(await nexusTopEntries({
|
|
105
|
+
limit: params?.limit,
|
|
106
|
+
kind: params?.kind,
|
|
107
|
+
nodeType: params?.nodeType,
|
|
108
|
+
}), 'top-entries'),
|
|
109
|
+
impact: async (params) => {
|
|
110
|
+
if (!params.symbol)
|
|
111
|
+
return lafsError('E_INVALID_INPUT', 'symbol is required', 'impact');
|
|
112
|
+
return wrapCoreResult(await nexusImpact(params.symbol, params.projectId, params.why), 'impact');
|
|
113
|
+
},
|
|
114
|
+
'full-context': async (params) => {
|
|
115
|
+
if (!params.symbol)
|
|
116
|
+
return lafsError('E_INVALID_INPUT', 'symbol is required', 'full-context');
|
|
117
|
+
const projectRoot = getProjectRoot();
|
|
118
|
+
return wrapCoreResult(await nexusFullContext(params.symbol, projectRoot), 'full-context');
|
|
119
|
+
},
|
|
120
|
+
'task-footprint': async (params) => {
|
|
121
|
+
if (!params.taskId)
|
|
122
|
+
return lafsError('E_INVALID_INPUT', 'taskId is required', 'task-footprint');
|
|
123
|
+
const projectRoot = getProjectRoot();
|
|
124
|
+
return wrapCoreResult(await nexusTaskFootprint(params.taskId, projectRoot), 'task-footprint');
|
|
125
|
+
},
|
|
126
|
+
'brain-anchors': async (params) => {
|
|
127
|
+
if (!params.entryId)
|
|
128
|
+
return lafsError('E_INVALID_INPUT', 'entryId is required', 'brain-anchors');
|
|
129
|
+
const projectRoot = getProjectRoot();
|
|
130
|
+
return wrapCoreResult(await nexusBrainAnchors(params.entryId, projectRoot), 'brain-anchors');
|
|
131
|
+
},
|
|
132
|
+
why: async (params) => {
|
|
133
|
+
if (!params.symbol)
|
|
134
|
+
return lafsError('E_INVALID_INPUT', 'symbol is required', 'why');
|
|
135
|
+
const projectRoot = getProjectRoot();
|
|
136
|
+
return wrapCoreResult(await nexusWhy(params.symbol, projectRoot), 'why');
|
|
137
|
+
},
|
|
138
|
+
'impact-full': async (params) => {
|
|
139
|
+
if (!params.symbol)
|
|
140
|
+
return lafsError('E_INVALID_INPUT', 'symbol is required', 'impact-full');
|
|
141
|
+
const projectRoot = getProjectRoot();
|
|
142
|
+
return wrapCoreResult(await nexusImpactFull(params.symbol, projectRoot), 'impact-full');
|
|
143
|
+
},
|
|
144
|
+
'route-map': async (params) => {
|
|
145
|
+
const projectRoot = getProjectRoot();
|
|
146
|
+
const projectId = params.projectId ?? Buffer.from(projectRoot).toString('base64url').slice(0, 32);
|
|
147
|
+
return wrapCoreResult(await nexusRouteMap(projectId, projectRoot), 'route-map');
|
|
148
|
+
},
|
|
149
|
+
'shape-check': async (params) => {
|
|
150
|
+
if (!params.routeSymbol)
|
|
151
|
+
return lafsError('E_INVALID_INPUT', 'routeSymbol is required', 'shape-check');
|
|
152
|
+
const projectRoot = getProjectRoot();
|
|
153
|
+
const projectId = params.projectId ?? Buffer.from(projectRoot).toString('base64url').slice(0, 32);
|
|
154
|
+
return wrapCoreResult(await nexusShapeCheck(params.routeSymbol, projectId, projectRoot), 'shape-check');
|
|
155
|
+
},
|
|
156
|
+
'search-code': async (params) => {
|
|
157
|
+
if (!params.pattern)
|
|
158
|
+
return lafsError('E_INVALID_INPUT', 'pattern is required', 'search-code');
|
|
159
|
+
return wrapCoreResult(await nexusSearchCode(params.pattern, params.limit ?? 10), 'search-code');
|
|
160
|
+
},
|
|
161
|
+
wiki: async (params) => {
|
|
162
|
+
const projectRoot = getProjectRoot();
|
|
163
|
+
const outputDir = params.outputDir ?? `${projectRoot}/.cleo/wiki`;
|
|
164
|
+
// Argument order: (outputDir, projectRoot, options) — matches engine signature
|
|
165
|
+
return wrapCoreResult(await nexusWiki(outputDir, projectRoot, {
|
|
166
|
+
communityFilter: params.communityFilter,
|
|
167
|
+
incremental: params.incremental,
|
|
168
|
+
}), 'wiki');
|
|
169
|
+
},
|
|
170
|
+
'contracts-show': async (params) => {
|
|
171
|
+
if (!params.projectA || !params.projectB)
|
|
172
|
+
return lafsError('E_INVALID_INPUT', 'projectA and projectB are required', 'contracts-show');
|
|
173
|
+
const projectRoot = getProjectRoot();
|
|
174
|
+
return wrapCoreResult(await nexusContractsShow(params.projectA, params.projectB, projectRoot), 'contracts-show');
|
|
175
|
+
},
|
|
176
|
+
'task-symbols': async (params) => {
|
|
177
|
+
if (!params.taskId)
|
|
178
|
+
return lafsError('E_INVALID_INPUT', 'taskId is required', 'task-symbols');
|
|
179
|
+
const projectRoot = getProjectRoot();
|
|
180
|
+
return wrapCoreResult(await nexusTaskSymbols(params.taskId, projectRoot), 'task-symbols');
|
|
181
|
+
},
|
|
182
|
+
'profile.view': async (params) => wrapCoreResult(await nexusProfileView(params.minConfidence, params.includeSuperseded), 'profile.view'),
|
|
183
|
+
'profile.get': async (params) => {
|
|
184
|
+
if (!params.traitKey)
|
|
185
|
+
return lafsError('E_INVALID_INPUT', 'traitKey is required', 'profile.get');
|
|
186
|
+
return wrapCoreResult(await nexusProfileGet(params.traitKey), 'profile.get');
|
|
187
|
+
},
|
|
188
|
+
'sigil.list': async (params) => wrapCoreResult(await nexusSigilList(params.role), 'sigil.list'),
|
|
189
|
+
// T1510 — Phase 2 query ops
|
|
190
|
+
clusters: async (params) => {
|
|
191
|
+
const projectRoot = getProjectRoot();
|
|
192
|
+
const repoPath = params.repoPath ?? projectRoot;
|
|
193
|
+
const projectId = params.projectId ??
|
|
194
|
+
Buffer.from(repoPath).toString('base64url').slice(0, 32);
|
|
195
|
+
return wrapCoreResult(await nexusClusters(projectId, repoPath), 'clusters');
|
|
196
|
+
},
|
|
197
|
+
flows: async (params) => {
|
|
198
|
+
const projectRoot = getProjectRoot();
|
|
199
|
+
const repoPath = params.repoPath ?? projectRoot;
|
|
200
|
+
const projectId = params.projectId ??
|
|
201
|
+
Buffer.from(repoPath).toString('base64url').slice(0, 32);
|
|
202
|
+
return wrapCoreResult(await nexusFlows(projectId, repoPath), 'flows');
|
|
203
|
+
},
|
|
204
|
+
context: async (params) => {
|
|
205
|
+
if (!params.symbol)
|
|
206
|
+
return lafsError('E_INVALID_INPUT', 'symbol is required', 'context');
|
|
207
|
+
const projectRoot = getProjectRoot();
|
|
208
|
+
const projectId = params.projectId ??
|
|
209
|
+
Buffer.from(projectRoot).toString('base64url').slice(0, 32);
|
|
210
|
+
const limit = typeof params.limit === 'number' ? params.limit : 20;
|
|
211
|
+
const showContent = params.content === true;
|
|
212
|
+
return wrapCoreResult(await nexusContext(params.symbol, projectId, projectRoot, limit, showContent), 'context');
|
|
213
|
+
},
|
|
214
|
+
'projects.list': async (_params) => wrapCoreResult(await nexusProjectsList(), 'projects.list'),
|
|
215
|
+
'projects.register': async (params) => {
|
|
216
|
+
if (!params.path)
|
|
217
|
+
return lafsError('E_INVALID_INPUT', 'path is required', 'projects.register');
|
|
218
|
+
return wrapCoreResult(await nexusProjectsRegister(params.path, params.name), 'projects.register');
|
|
219
|
+
},
|
|
220
|
+
'projects.remove': async (params) => {
|
|
221
|
+
if (!params.nameOrHash)
|
|
222
|
+
return lafsError('E_INVALID_INPUT', 'nameOrHash is required', 'projects.remove');
|
|
223
|
+
return wrapCoreResult(await nexusProjectsRemove(params.nameOrHash), 'projects.remove');
|
|
224
|
+
},
|
|
225
|
+
'projects.scan': async (params) => wrapCoreResult(await nexusProjectsScan({
|
|
226
|
+
roots: params.roots,
|
|
227
|
+
maxDepth: typeof params.maxDepth === 'number' ? params.maxDepth : undefined,
|
|
228
|
+
autoRegister: params.autoRegister === true,
|
|
229
|
+
includeExisting: params.includeExisting === true,
|
|
230
|
+
}), 'projects.scan'),
|
|
231
|
+
'projects.clean': async (params) => wrapCoreResult(await nexusProjectsClean({
|
|
232
|
+
dryRun: params.dryRun === true,
|
|
233
|
+
pattern: params.pattern,
|
|
234
|
+
includeTemp: params.includeTemp === true,
|
|
235
|
+
includeTests: params.includeTests === true,
|
|
236
|
+
matchUnhealthy: params.matchUnhealthy === true,
|
|
237
|
+
matchNeverIndexed: params.matchNeverIndexed === true,
|
|
238
|
+
}), 'projects.clean'),
|
|
239
|
+
'refresh-bridge': async (params) => {
|
|
240
|
+
const projectRoot = getProjectRoot();
|
|
241
|
+
const repoPath = params.repoPath ?? projectRoot;
|
|
242
|
+
const projectId = params.projectId;
|
|
243
|
+
return wrapCoreResult(await nexusRefreshBridge(repoPath, projectId), 'refresh-bridge');
|
|
244
|
+
},
|
|
245
|
+
diff: async (params) => {
|
|
246
|
+
const projectRoot = getProjectRoot();
|
|
247
|
+
const repoPath = params.repoPath ?? projectRoot;
|
|
248
|
+
return wrapCoreResult(await nexusDiff(repoPath, params.beforeRef, params.afterRef, params.projectId), 'diff');
|
|
249
|
+
},
|
|
250
|
+
'query-cte': async (params) => {
|
|
251
|
+
if (!params.cte)
|
|
252
|
+
return lafsError('E_INVALID_INPUT', 'cte is required', 'query-cte');
|
|
253
|
+
return wrapCoreResult(await nexusQueryCte(params.cte, params.params), 'query-cte');
|
|
254
|
+
},
|
|
255
|
+
'hot-paths': async (params) => {
|
|
256
|
+
const projectRoot = getProjectRoot();
|
|
257
|
+
const limit = typeof params.limit === 'number' ? params.limit : 20;
|
|
258
|
+
return wrapCoreResult(await nexusHotPaths(projectRoot, limit), 'hot-paths');
|
|
259
|
+
},
|
|
260
|
+
'hot-nodes': async (params) => {
|
|
261
|
+
const projectRoot = getProjectRoot();
|
|
262
|
+
const limit = typeof params.limit === 'number' ? params.limit : 20;
|
|
263
|
+
return wrapCoreResult(await nexusHotNodes(projectRoot, limit), 'hot-nodes');
|
|
264
|
+
},
|
|
265
|
+
'cold-symbols': async (params) => {
|
|
266
|
+
const projectRoot = getProjectRoot();
|
|
267
|
+
const days = typeof params.days === 'number' ? params.days : 30;
|
|
268
|
+
return wrapCoreResult(await nexusColdSymbols(projectRoot, days), 'cold-symbols');
|
|
269
|
+
},
|
|
270
|
+
// -------------------------------------------------------------------------
|
|
271
|
+
// Mutate ops (18)
|
|
272
|
+
// -------------------------------------------------------------------------
|
|
273
|
+
init: async (_params) => wrapCoreResult(await nexusInitialize(), 'init'),
|
|
274
|
+
register: async (params) => {
|
|
275
|
+
if (!params.path)
|
|
276
|
+
return lafsError('E_INVALID_INPUT', 'path is required', 'register');
|
|
277
|
+
return wrapCoreResult(await nexusRegisterProject(params.path, params.name, params.permission ?? 'read'), 'register');
|
|
278
|
+
},
|
|
279
|
+
unregister: async (params) => {
|
|
280
|
+
if (!params.name)
|
|
281
|
+
return lafsError('E_INVALID_INPUT', 'name is required', 'unregister');
|
|
282
|
+
return wrapCoreResult(await nexusUnregisterProject(params.name), 'unregister');
|
|
283
|
+
},
|
|
284
|
+
sync: async (params) => wrapCoreResult(await nexusSyncProject(params.name), 'sync'),
|
|
285
|
+
'permission.set': async (params) => {
|
|
286
|
+
if (!params.name)
|
|
287
|
+
return lafsError('E_INVALID_INPUT', 'name is required', 'permission.set');
|
|
288
|
+
if (!params.level)
|
|
289
|
+
return lafsError('E_INVALID_INPUT', 'level is required', 'permission.set');
|
|
290
|
+
if (!['read', 'write', 'execute'].includes(params.level)) {
|
|
291
|
+
return lafsError('E_INVALID_INPUT', `Invalid permission level: ${params.level}. Must be: read, write, or execute`, 'permission.set');
|
|
292
|
+
}
|
|
293
|
+
return wrapCoreResult(await nexusSetPermission(params.name, params.level), 'permission.set');
|
|
294
|
+
},
|
|
295
|
+
reconcile: async (params) => wrapCoreResult(await nexusReconcileProject(params.projectRoot ?? process.cwd()), 'reconcile'),
|
|
296
|
+
'share.snapshot.export': async (params) => {
|
|
297
|
+
const projectRoot = getProjectRoot();
|
|
298
|
+
return wrapCoreResult(await nexusShareSnapshotExport(projectRoot, params.outputPath), 'share.snapshot.export');
|
|
299
|
+
},
|
|
300
|
+
'share.snapshot.import': async (params) => {
|
|
301
|
+
if (!params.inputPath)
|
|
302
|
+
return lafsError('E_INVALID_INPUT', 'inputPath is required', 'share.snapshot.import');
|
|
303
|
+
const projectRoot = getProjectRoot();
|
|
304
|
+
return wrapCoreResult(await nexusShareSnapshotImport(projectRoot, params.inputPath), 'share.snapshot.import');
|
|
305
|
+
},
|
|
306
|
+
transfer: async (params) => {
|
|
307
|
+
if (!params.taskIds?.length || !params.sourceProject || !params.targetProject) {
|
|
308
|
+
return lafsError('E_INVALID_INPUT', 'taskIds, sourceProject, and targetProject are required', 'transfer');
|
|
309
|
+
}
|
|
310
|
+
return wrapCoreResult(await nexusTransferExecute({
|
|
311
|
+
taskIds: params.taskIds,
|
|
312
|
+
sourceProject: params.sourceProject,
|
|
313
|
+
targetProject: params.targetProject,
|
|
314
|
+
mode: params.mode ?? 'copy',
|
|
315
|
+
scope: params.scope ?? 'subtree',
|
|
316
|
+
onConflict: params.onConflict ?? 'rename',
|
|
317
|
+
transferBrain: params.transferBrain ?? false,
|
|
318
|
+
}), 'transfer');
|
|
319
|
+
},
|
|
320
|
+
'contracts-sync': async (params) => {
|
|
321
|
+
const projectRoot = getProjectRoot();
|
|
322
|
+
const repoPath = params.repoPath ?? projectRoot;
|
|
323
|
+
const projectId = params.projectId ?? Buffer.from(repoPath).toString('base64url').slice(0, 32);
|
|
324
|
+
return wrapCoreResult(await nexusContractsSync(projectId, repoPath), 'contracts-sync');
|
|
325
|
+
},
|
|
326
|
+
'contracts-link-tasks': async (params) => {
|
|
327
|
+
const projectRoot = getProjectRoot();
|
|
328
|
+
const repoPath = params.repoPath ?? projectRoot;
|
|
329
|
+
const projectId = params.projectId ?? Buffer.from(repoPath).toString('base64url').slice(0, 32);
|
|
330
|
+
return wrapCoreResult(await nexusContractsLinkTasks(projectId, repoPath), 'contracts-link-tasks');
|
|
331
|
+
},
|
|
332
|
+
'conduit-scan': async (_params) => {
|
|
333
|
+
const projectRoot = getProjectRoot();
|
|
334
|
+
return wrapCoreResult(await nexusConduitScan(projectRoot), 'conduit-scan');
|
|
335
|
+
},
|
|
336
|
+
'profile.import': async (params) => wrapCoreResult(await nexusProfileImport(params.path), 'profile.import'),
|
|
337
|
+
'profile.export': async (params) => wrapCoreResult(await nexusProfileExport(params.path), 'profile.export'),
|
|
338
|
+
'profile.reinforce': async (params) => {
|
|
339
|
+
if (!params.traitKey)
|
|
340
|
+
return lafsError('E_INVALID_INPUT', 'traitKey is required', 'profile.reinforce');
|
|
341
|
+
return wrapCoreResult(await nexusProfileReinforce(params.traitKey, params.source), 'profile.reinforce');
|
|
342
|
+
},
|
|
343
|
+
'profile.upsert': async (params) => {
|
|
344
|
+
if (!params.trait?.traitKey || !params.trait?.traitValue) {
|
|
345
|
+
return lafsError('E_INVALID_INPUT', 'trait.traitKey and trait.traitValue are required', 'profile.upsert');
|
|
346
|
+
}
|
|
347
|
+
return wrapCoreResult(await nexusProfileUpsert(params.trait), 'profile.upsert');
|
|
348
|
+
},
|
|
349
|
+
'profile.supersede': async (params) => {
|
|
350
|
+
if (!params.oldKey || !params.newKey)
|
|
351
|
+
return lafsError('E_INVALID_INPUT', 'oldKey and newKey are required', 'profile.supersede');
|
|
352
|
+
return wrapCoreResult(await nexusProfileSupersede(params.oldKey, params.newKey), 'profile.supersede');
|
|
353
|
+
},
|
|
354
|
+
'sigil.sync': async (_params) => wrapCoreResult(await nexusSigilSync(), 'sigil.sync'),
|
|
355
|
+
});
|
|
356
|
+
// ---------------------------------------------------------------------------
|
|
357
|
+
// NexusHandler — DomainHandler-compatible wrapper for the registry
|
|
358
|
+
// ---------------------------------------------------------------------------
|
|
359
|
+
const QUERY_OPS = new Set([
|
|
360
|
+
'share.status',
|
|
361
|
+
'status',
|
|
362
|
+
'list',
|
|
363
|
+
'show',
|
|
364
|
+
'resolve',
|
|
365
|
+
'deps',
|
|
366
|
+
'graph',
|
|
367
|
+
'path.show',
|
|
368
|
+
'blockers.show',
|
|
369
|
+
'orphans.list',
|
|
370
|
+
'discover',
|
|
371
|
+
'search',
|
|
372
|
+
'augment',
|
|
373
|
+
'transfer.preview',
|
|
374
|
+
'top-entries',
|
|
375
|
+
'impact',
|
|
376
|
+
'full-context',
|
|
377
|
+
'task-footprint',
|
|
378
|
+
'brain-anchors',
|
|
379
|
+
'why',
|
|
380
|
+
'impact-full',
|
|
381
|
+
'route-map',
|
|
382
|
+
'shape-check',
|
|
383
|
+
'search-code',
|
|
384
|
+
'wiki',
|
|
385
|
+
'contracts-show',
|
|
386
|
+
'task-symbols',
|
|
387
|
+
'profile.view',
|
|
388
|
+
'profile.get',
|
|
389
|
+
'sigil.list',
|
|
390
|
+
// T1510 — Phase 2 query ops
|
|
391
|
+
'clusters',
|
|
392
|
+
'flows',
|
|
393
|
+
'context',
|
|
394
|
+
'projects.list',
|
|
395
|
+
'diff',
|
|
396
|
+
'query-cte',
|
|
397
|
+
'hot-paths',
|
|
398
|
+
'hot-nodes',
|
|
399
|
+
'cold-symbols',
|
|
400
|
+
]);
|
|
401
|
+
const MUTATE_OPS = new Set([
|
|
402
|
+
'share.snapshot.export',
|
|
403
|
+
'share.snapshot.import',
|
|
404
|
+
'init',
|
|
405
|
+
'register',
|
|
406
|
+
'unregister',
|
|
407
|
+
'sync',
|
|
408
|
+
'permission.set',
|
|
409
|
+
'reconcile',
|
|
410
|
+
'transfer',
|
|
411
|
+
'contracts-sync',
|
|
412
|
+
'contracts-link-tasks',
|
|
413
|
+
'conduit-scan',
|
|
414
|
+
'profile.import',
|
|
415
|
+
'profile.export',
|
|
416
|
+
'profile.reinforce',
|
|
417
|
+
'profile.upsert',
|
|
418
|
+
'profile.supersede',
|
|
419
|
+
'sigil.sync',
|
|
420
|
+
// T1510 — Phase 2 mutate ops
|
|
421
|
+
'projects.register',
|
|
422
|
+
'projects.remove',
|
|
423
|
+
'projects.scan',
|
|
424
|
+
'projects.clean',
|
|
425
|
+
'refresh-bridge',
|
|
426
|
+
]);
|
|
427
|
+
// ---------------------------------------------------------------------------
|
|
428
|
+
// Nexus envelope helpers (ADR-058 thin-handler T1492/P1-1)
|
|
429
|
+
//
|
|
430
|
+
// Extract typed-dispatch LafsEnvelope → DispatchResponse conversion into
|
|
431
|
+
// helpers so each branch in query/mutate methods is ≤5 LOC.
|
|
432
|
+
// SSoT-EXEMPT: page-envelope lifting — dual-source page extraction (envelope-
|
|
433
|
+
// level vs legacy data.page nesting) is a dispatch-layer concern.
|
|
434
|
+
// ---------------------------------------------------------------------------
|
|
435
|
+
/** Convert a nexus query envelope to DispatchResponse, lifting page metadata. */
|
|
436
|
+
function nexusQueryEnvelopeToResponse(envelope, operation, startTime) {
|
|
437
|
+
const env = envelope;
|
|
438
|
+
// Two page sources: envelope-level (preferred) or legacy data.page (fallback).
|
|
439
|
+
let pageMetadata = env.page;
|
|
440
|
+
let resultData = env.data;
|
|
441
|
+
if (!pageMetadata && env.success && resultData && typeof resultData === 'object') {
|
|
442
|
+
const dataObj = resultData;
|
|
443
|
+
if ('page' in dataObj && dataObj.page) {
|
|
444
|
+
pageMetadata = dataObj.page;
|
|
445
|
+
const { page: _removed, ...cleanData } = dataObj;
|
|
446
|
+
resultData = cleanData;
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
return wrapResult({
|
|
450
|
+
success: env.success,
|
|
451
|
+
data: resultData,
|
|
452
|
+
page: pageMetadata,
|
|
453
|
+
error: env.error ? { code: String(env.error.code), message: env.error.message } : undefined,
|
|
454
|
+
}, 'query', 'nexus', operation, startTime);
|
|
455
|
+
}
|
|
456
|
+
/** Convert a nexus mutate envelope to DispatchResponse (no page lifting). */
|
|
457
|
+
function nexusMutateEnvelopeToResponse(envelope, operation, startTime) {
|
|
458
|
+
const env = envelope;
|
|
459
|
+
return wrapResult({
|
|
460
|
+
success: env.success,
|
|
461
|
+
data: env.data,
|
|
462
|
+
error: env.error ? { code: String(env.error.code), message: env.error.message } : undefined,
|
|
463
|
+
}, 'mutate', 'nexus', operation, startTime);
|
|
464
|
+
}
|
|
465
|
+
/**
|
|
466
|
+
* Domain handler for the `nexus` domain.
|
|
467
|
+
*
|
|
468
|
+
* Delegates all per-op logic to the typed inner handler `_nexusTypedHandler`
|
|
469
|
+
* (a `TypedDomainHandler<NexusOps>`). This satisfies the registry's
|
|
470
|
+
* `DomainHandler` interface while keeping every param access fully type-safe
|
|
471
|
+
* via the T1424 Wave D adapter.
|
|
472
|
+
*
|
|
473
|
+
* @task T1424 — typed-dispatch narrowing (T988 follow-on)
|
|
474
|
+
*/
|
|
475
|
+
export class NexusHandler {
|
|
476
|
+
/**
|
|
477
|
+
* Execute a read-only nexus query operation.
|
|
478
|
+
*
|
|
479
|
+
* @param operation - The nexus query op name (e.g. 'status', 'list').
|
|
480
|
+
* @param params - Raw params from the dispatcher (narrowed internally).
|
|
481
|
+
*/
|
|
482
|
+
async query(operation, params) {
|
|
483
|
+
const startTime = Date.now();
|
|
484
|
+
if (!QUERY_OPS.has(operation)) {
|
|
485
|
+
return unsupportedOp('query', 'nexus', operation, startTime);
|
|
486
|
+
}
|
|
487
|
+
// Complex multi-step ops bypass typed dispatch (they need startTime + raw
|
|
488
|
+
// params for legacy DispatchResponse construction). Keep them in QUERY_OPS
|
|
489
|
+
// + NexusOps for typed-key safety, but route to the OLD helper functions.
|
|
490
|
+
if (operation === 'top-entries') {
|
|
491
|
+
return handleTopEntries(operation, params, startTime);
|
|
492
|
+
}
|
|
493
|
+
if (operation === 'impact') {
|
|
494
|
+
return handleImpact(operation, params, startTime);
|
|
495
|
+
}
|
|
496
|
+
try {
|
|
497
|
+
// operation is validated above — cast to typed key is safe (ADR-058 trust boundary)
|
|
498
|
+
const envelope = await typedDispatch(_nexusTypedHandler, operation, params ?? {});
|
|
499
|
+
return nexusQueryEnvelopeToResponse(envelope, operation, startTime);
|
|
500
|
+
}
|
|
501
|
+
catch (error) {
|
|
502
|
+
getLogger('domain:nexus').error({ gateway: 'query', domain: 'nexus', operation, err: error }, error instanceof Error ? error.message : String(error));
|
|
503
|
+
return handleErrorResult('query', 'nexus', operation, error, startTime);
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
/**
|
|
507
|
+
* Execute a state-modifying nexus mutation operation.
|
|
508
|
+
*
|
|
509
|
+
* @param operation - The nexus mutate op name (e.g. 'init', 'register').
|
|
510
|
+
* @param params - Raw params from the dispatcher (narrowed internally).
|
|
511
|
+
*/
|
|
512
|
+
async mutate(operation, params) {
|
|
513
|
+
const startTime = Date.now();
|
|
514
|
+
if (!MUTATE_OPS.has(operation)) {
|
|
515
|
+
return unsupportedOp('mutate', 'nexus', operation, startTime);
|
|
516
|
+
}
|
|
517
|
+
try {
|
|
518
|
+
// operation is validated above — cast to typed key is safe (ADR-058 trust boundary)
|
|
519
|
+
const envelope = await typedDispatch(_nexusTypedHandler, operation, params ?? {});
|
|
520
|
+
return nexusMutateEnvelopeToResponse(envelope, operation, startTime);
|
|
521
|
+
}
|
|
522
|
+
catch (error) {
|
|
523
|
+
getLogger('domain:nexus').error({ gateway: 'mutate', domain: 'nexus', operation, err: error }, error instanceof Error ? error.message : String(error));
|
|
524
|
+
return handleErrorResult('mutate', 'nexus', operation, error, startTime);
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
/** Declared operations for introspection and validation. */
|
|
528
|
+
getSupportedOperations() {
|
|
529
|
+
return {
|
|
530
|
+
query: Array.from(QUERY_OPS),
|
|
531
|
+
mutate: Array.from(MUTATE_OPS),
|
|
532
|
+
};
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
async function handleTopEntries(operation, params, startTime) {
|
|
536
|
+
const rawLimit = params?.limit;
|
|
537
|
+
const limit = typeof rawLimit === 'number' && Number.isFinite(rawLimit) && rawLimit > 0
|
|
538
|
+
? Math.floor(rawLimit)
|
|
539
|
+
: 20;
|
|
540
|
+
// Brain.db path takes priority: query brain_page_nodes by quality_score.
|
|
541
|
+
const brainDb = getBrainNativeDb();
|
|
542
|
+
if (brainDb !== null && brainDb !== undefined) {
|
|
543
|
+
return handleTopEntriesFromBrain(operation, params, startTime, brainDb, limit);
|
|
544
|
+
}
|
|
545
|
+
// Nexus.db fallback: check if a nexus.db connection is already open.
|
|
546
|
+
// We intentionally do NOT call getNexusDb() here — that would create a new
|
|
547
|
+
// DB even when the caller has not initialised the registry, masking the
|
|
548
|
+
// "unavailable" state that tests expect. The nexus-cli-new integration tests
|
|
549
|
+
// always call getNexusDb() in their beforeEach setup, so the singleton is
|
|
550
|
+
// already live when we reach this branch in those tests.
|
|
551
|
+
try {
|
|
552
|
+
const nexusDb = getNexusNativeDb();
|
|
553
|
+
if (!nexusDb) {
|
|
554
|
+
// Both DBs unavailable → return graceful empty result with a note so
|
|
555
|
+
// callers (and tests) can surface a helpful message without treating it
|
|
556
|
+
// as a hard failure. This restores the original T1006 contract.
|
|
557
|
+
const emptyData = {
|
|
558
|
+
entries: [],
|
|
559
|
+
count: 0,
|
|
560
|
+
limit,
|
|
561
|
+
kind: params?.kind ?? null,
|
|
562
|
+
note: 'Neither brain.db nor nexus.db is available. Run "cleo nexus init" to initialize.',
|
|
563
|
+
};
|
|
564
|
+
return wrapResult({ success: true, data: emptyData }, 'query', 'nexus', operation, startTime);
|
|
565
|
+
}
|
|
566
|
+
return handleTopEntriesFromNexus(operation, params, startTime, nexusDb, limit);
|
|
567
|
+
}
|
|
568
|
+
catch (dbErr) {
|
|
569
|
+
return handleErrorResult('query', 'nexus', operation, dbErr, startTime);
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
/**
|
|
573
|
+
* Brain.db path for `top-entries`: queries `brain_page_nodes` sorted by
|
|
574
|
+
* `quality_score DESC`. Supports optional `nodeType` filter parameter.
|
|
575
|
+
*
|
|
576
|
+
* @internal
|
|
577
|
+
* @task T1006
|
|
578
|
+
*/
|
|
579
|
+
function handleTopEntriesFromBrain(operation, params, startTime, db, limit) {
|
|
580
|
+
const rawNodeType = params?.nodeType;
|
|
581
|
+
const nodeType = typeof rawNodeType === 'string' && rawNodeType.length > 0 ? rawNodeType : null;
|
|
582
|
+
let rows = [];
|
|
583
|
+
try {
|
|
584
|
+
const sql = nodeType === null
|
|
585
|
+
? `SELECT id, node_type, label, quality_score, last_activity_at, metadata_json
|
|
586
|
+
FROM brain_page_nodes
|
|
587
|
+
ORDER BY quality_score DESC
|
|
588
|
+
LIMIT ?`
|
|
589
|
+
: `SELECT id, node_type, label, quality_score, last_activity_at, metadata_json
|
|
590
|
+
FROM brain_page_nodes
|
|
591
|
+
WHERE node_type = ?
|
|
592
|
+
ORDER BY quality_score DESC
|
|
593
|
+
LIMIT ?`;
|
|
594
|
+
const bindArgs = nodeType === null ? [limit] : [nodeType, limit];
|
|
595
|
+
const rawRows = db.prepare(sql).all(...bindArgs);
|
|
596
|
+
rows = rawRows.map((raw) => {
|
|
597
|
+
const r = raw;
|
|
598
|
+
return {
|
|
599
|
+
id: String(r['id'] ?? ''),
|
|
600
|
+
node_type: r['node_type'] != null ? String(r['node_type']) : null,
|
|
601
|
+
label: r['label'] != null ? String(r['label']) : null,
|
|
602
|
+
quality_score: r['quality_score'] != null ? Number(r['quality_score']) : null,
|
|
603
|
+
last_activity_at: r['last_activity_at'] != null ? String(r['last_activity_at']) : null,
|
|
604
|
+
metadata_json: r['metadata_json'] != null ? String(r['metadata_json']) : null,
|
|
605
|
+
};
|
|
606
|
+
});
|
|
607
|
+
}
|
|
608
|
+
catch {
|
|
609
|
+
// brain_page_nodes table not yet created — treat as empty result (not an error).
|
|
610
|
+
rows = [];
|
|
611
|
+
}
|
|
612
|
+
const entries = rows.map((r) => ({
|
|
613
|
+
id: r.id,
|
|
614
|
+
node_type: r.node_type ?? 'unknown',
|
|
615
|
+
label: r.label ?? r.id,
|
|
616
|
+
quality_score: r.quality_score ?? 0,
|
|
617
|
+
last_activity_at: r.last_activity_at ?? '',
|
|
618
|
+
metadata_json: r.metadata_json ?? null,
|
|
619
|
+
}));
|
|
620
|
+
const data = {
|
|
621
|
+
entries,
|
|
622
|
+
count: entries.length,
|
|
623
|
+
limit,
|
|
624
|
+
nodeType,
|
|
625
|
+
};
|
|
626
|
+
return wrapResult({ success: true, data }, 'query', 'nexus', operation, startTime);
|
|
627
|
+
}
|
|
628
|
+
/**
|
|
629
|
+
* Nexus.db fallback path for `top-entries`: queries `nexus_relations` aggregated
|
|
630
|
+
* by `SUM(weight)`. Supports optional `kind` filter.
|
|
631
|
+
*
|
|
632
|
+
* @internal
|
|
633
|
+
* @task T1013
|
|
634
|
+
*/
|
|
635
|
+
function handleTopEntriesFromNexus(operation, params, startTime, db, limit) {
|
|
636
|
+
const rawKind = params?.kind;
|
|
637
|
+
const kind = typeof rawKind === 'string' && rawKind.length > 0 ? rawKind : null;
|
|
638
|
+
let rows = [];
|
|
639
|
+
try {
|
|
640
|
+
const sql = kind === null
|
|
641
|
+
? `SELECT r.source_id,
|
|
642
|
+
SUM(COALESCE(r.weight, 0)) AS totalWeight,
|
|
643
|
+
COUNT(*) AS edgeCount,
|
|
644
|
+
n.label,
|
|
645
|
+
n.kind,
|
|
646
|
+
n.file_path
|
|
647
|
+
FROM nexus_relations r
|
|
648
|
+
LEFT JOIN nexus_nodes n ON n.id = r.source_id
|
|
649
|
+
GROUP BY r.source_id
|
|
650
|
+
ORDER BY totalWeight DESC, edgeCount DESC
|
|
651
|
+
LIMIT ?`
|
|
652
|
+
: `SELECT r.source_id,
|
|
653
|
+
SUM(COALESCE(r.weight, 0)) AS totalWeight,
|
|
654
|
+
COUNT(*) AS edgeCount,
|
|
655
|
+
n.label,
|
|
656
|
+
n.kind,
|
|
657
|
+
n.file_path
|
|
658
|
+
FROM nexus_relations r
|
|
659
|
+
LEFT JOIN nexus_nodes n ON n.id = r.source_id
|
|
660
|
+
WHERE n.kind = ?
|
|
661
|
+
GROUP BY r.source_id
|
|
662
|
+
ORDER BY totalWeight DESC, edgeCount DESC
|
|
663
|
+
LIMIT ?`;
|
|
664
|
+
const bindArgs = kind === null ? [limit] : [kind, limit];
|
|
665
|
+
const rawRows = db.prepare(sql).all(...bindArgs);
|
|
666
|
+
rows = rawRows.map((raw) => {
|
|
667
|
+
const r = raw;
|
|
668
|
+
return {
|
|
669
|
+
source_id: String(r['source_id'] ?? ''),
|
|
670
|
+
totalWeight: Number(r['totalWeight'] ?? 0),
|
|
671
|
+
edgeCount: Number(r['edgeCount'] ?? 0),
|
|
672
|
+
label: r['label'] != null ? String(r['label']) : null,
|
|
673
|
+
kind: r['kind'] != null ? String(r['kind']) : null,
|
|
674
|
+
file_path: r['file_path'] != null ? String(r['file_path']) : null,
|
|
675
|
+
};
|
|
676
|
+
});
|
|
677
|
+
}
|
|
678
|
+
catch {
|
|
679
|
+
// nexus_relations / nexus_nodes tables not present — treat as empty.
|
|
680
|
+
rows = [];
|
|
681
|
+
}
|
|
682
|
+
const entries = rows.map((r) => ({
|
|
683
|
+
nodeId: r.source_id,
|
|
684
|
+
label: r.label ?? r.source_id,
|
|
685
|
+
kind: r.kind ?? 'unknown',
|
|
686
|
+
filePath: r.file_path ?? null,
|
|
687
|
+
totalWeight: r.totalWeight,
|
|
688
|
+
edgeCount: r.edgeCount,
|
|
689
|
+
}));
|
|
690
|
+
const allZero = entries.length === 0 || entries.every((e) => e.totalWeight === 0);
|
|
691
|
+
const note = allZero
|
|
692
|
+
? 'No Hebbian weights accumulated yet. Run a dream cycle or wait for plasticity updates.'
|
|
693
|
+
: undefined;
|
|
694
|
+
const data = {
|
|
695
|
+
entries,
|
|
696
|
+
count: entries.length,
|
|
697
|
+
limit,
|
|
698
|
+
kind,
|
|
699
|
+
...(note !== undefined ? { note } : {}),
|
|
700
|
+
};
|
|
701
|
+
return wrapResult({ success: true, data }, 'query', 'nexus', operation, startTime);
|
|
702
|
+
}
|
|
703
|
+
/** Edge kinds treated as 'callers-of' when walking the reverse adjacency. */
|
|
704
|
+
const IMPACT_REVERSE_TYPES = new Set(['calls', 'imports', 'accesses']);
|
|
705
|
+
/**
|
|
706
|
+
* Compute a RiskLevel bucket from a raw impact count.
|
|
707
|
+
*
|
|
708
|
+
* NONE: 0, LOW: 1-3, MEDIUM: 4-10, HIGH: 11-25, CRITICAL: 26+.
|
|
709
|
+
*
|
|
710
|
+
* @internal
|
|
711
|
+
*/
|
|
712
|
+
function riskLevelFor(totalImpact) {
|
|
713
|
+
if (totalImpact === 0)
|
|
714
|
+
return 'NONE';
|
|
715
|
+
if (totalImpact <= 3)
|
|
716
|
+
return 'LOW';
|
|
717
|
+
if (totalImpact <= 10)
|
|
718
|
+
return 'MEDIUM';
|
|
719
|
+
if (totalImpact <= 25)
|
|
720
|
+
return 'HIGH';
|
|
721
|
+
return 'CRITICAL';
|
|
722
|
+
}
|
|
723
|
+
/**
|
|
724
|
+
* Execute the `nexus.impact` query against nexus.db.
|
|
725
|
+
*
|
|
726
|
+
* Walks the reverse call/import/access graph (BFS) up to `maxDepth` levels
|
|
727
|
+
* from a resolved target symbol and returns affected symbols. When the
|
|
728
|
+
* caller passes `why=true`, each affected symbol includes `reasons[]`
|
|
729
|
+
* path-strings explaining why it is impactful (caller count, edge strength,
|
|
730
|
+
* edge type, hop depth).
|
|
731
|
+
*
|
|
732
|
+
* When nexus.db is uninitialized or the target symbol cannot be resolved,
|
|
733
|
+
* returns a successful envelope with `targetNodeId=null` and `affected=[]`.
|
|
734
|
+
*
|
|
735
|
+
* @param operation - The operation name ('impact').
|
|
736
|
+
* @param params - { symbol: string; why?: boolean; depth?: number; projectId?: string }.
|
|
737
|
+
* @param startTime - Milliseconds-since-epoch for meta timing.
|
|
738
|
+
* @returns DispatchResponse with LAFS envelope carrying `NexusImpactResult`.
|
|
739
|
+
*
|
|
740
|
+
* @task T1013
|
|
741
|
+
* @epic T1006
|
|
742
|
+
*/
|
|
743
|
+
async function handleImpact(operation, params, startTime) {
|
|
744
|
+
const symbolName = params?.symbol;
|
|
745
|
+
if (!symbolName) {
|
|
746
|
+
return errorResult('query', 'nexus', operation, 'E_INVALID_INPUT', 'symbol is required', startTime);
|
|
747
|
+
}
|
|
748
|
+
const why = params?.why === true;
|
|
749
|
+
const rawDepth = params?.depth;
|
|
750
|
+
const maxDepth = Math.min(typeof rawDepth === 'number' && Number.isFinite(rawDepth) && rawDepth > 0 ? rawDepth : 3, 5);
|
|
751
|
+
const projectIdParam = params?.projectId;
|
|
752
|
+
const projectId = projectIdParam ?? Buffer.from(process.cwd()).toString('base64url').slice(0, 32);
|
|
753
|
+
try {
|
|
754
|
+
const { getNexusDb } = await import('@cleocode/core/store/nexus-sqlite');
|
|
755
|
+
await getNexusDb();
|
|
756
|
+
const db = getNexusNativeDb();
|
|
757
|
+
if (!db) {
|
|
758
|
+
return wrapResult({
|
|
759
|
+
success: true,
|
|
760
|
+
data: {
|
|
761
|
+
query: symbolName,
|
|
762
|
+
projectId,
|
|
763
|
+
targetNodeId: null,
|
|
764
|
+
targetLabel: null,
|
|
765
|
+
why,
|
|
766
|
+
riskLevel: 'NONE',
|
|
767
|
+
totalImpact: 0,
|
|
768
|
+
maxDepth,
|
|
769
|
+
affected: [],
|
|
770
|
+
},
|
|
771
|
+
}, 'query', 'nexus', operation, startTime);
|
|
772
|
+
}
|
|
773
|
+
// Resolve the target symbol. Prefer exact `name`/`label` matches, then
|
|
774
|
+
// case-insensitive LIKE. Structural nodes (file, folder, community,
|
|
775
|
+
// process) never have callers so they are excluded from resolution.
|
|
776
|
+
let allNodes = [];
|
|
777
|
+
try {
|
|
778
|
+
const rawRows = db
|
|
779
|
+
.prepare(`SELECT id, label, kind, file_path, name, project_id
|
|
780
|
+
FROM nexus_nodes
|
|
781
|
+
WHERE project_id = ?
|
|
782
|
+
AND kind NOT IN ('community','process','file','folder')`)
|
|
783
|
+
.all(projectId);
|
|
784
|
+
allNodes = rawRows.map((raw) => {
|
|
785
|
+
const r = raw;
|
|
786
|
+
return {
|
|
787
|
+
id: String(r['id'] ?? ''),
|
|
788
|
+
label: r['label'] != null ? String(r['label']) : null,
|
|
789
|
+
kind: r['kind'] != null ? String(r['kind']) : null,
|
|
790
|
+
file_path: r['file_path'] != null ? String(r['file_path']) : null,
|
|
791
|
+
name: r['name'] != null ? String(r['name']) : null,
|
|
792
|
+
project_id: String(r['project_id'] ?? ''),
|
|
793
|
+
};
|
|
794
|
+
});
|
|
795
|
+
}
|
|
796
|
+
catch {
|
|
797
|
+
allNodes = [];
|
|
798
|
+
}
|
|
799
|
+
const lowerSymbol = symbolName.toLowerCase();
|
|
800
|
+
const candidates = allNodes.filter((n) => {
|
|
801
|
+
const haystack = (n.name ?? n.label ?? '').toLowerCase();
|
|
802
|
+
return haystack.length > 0 && haystack.includes(lowerSymbol);
|
|
803
|
+
});
|
|
804
|
+
// Prefer exact matches, then shortest labels (closer to the intent).
|
|
805
|
+
candidates.sort((a, b) => {
|
|
806
|
+
const an = (a.name ?? a.label ?? '').toLowerCase();
|
|
807
|
+
const bn = (b.name ?? b.label ?? '').toLowerCase();
|
|
808
|
+
const exactA = an === lowerSymbol ? 0 : 1;
|
|
809
|
+
const exactB = bn === lowerSymbol ? 0 : 1;
|
|
810
|
+
if (exactA !== exactB)
|
|
811
|
+
return exactA - exactB;
|
|
812
|
+
return an.length - bn.length;
|
|
813
|
+
});
|
|
814
|
+
const target = candidates[0];
|
|
815
|
+
if (!target) {
|
|
816
|
+
return wrapResult({
|
|
817
|
+
success: true,
|
|
818
|
+
data: {
|
|
819
|
+
query: symbolName,
|
|
820
|
+
projectId,
|
|
821
|
+
targetNodeId: null,
|
|
822
|
+
targetLabel: null,
|
|
823
|
+
why,
|
|
824
|
+
riskLevel: 'NONE',
|
|
825
|
+
totalImpact: 0,
|
|
826
|
+
maxDepth,
|
|
827
|
+
affected: [],
|
|
828
|
+
},
|
|
829
|
+
}, 'query', 'nexus', operation, startTime);
|
|
830
|
+
}
|
|
831
|
+
// Load all callable relations for the project and build a reverse
|
|
832
|
+
// adjacency index: targetId -> list of { source_id, type, weight }.
|
|
833
|
+
let allRelations = [];
|
|
834
|
+
try {
|
|
835
|
+
const rawRows = db
|
|
836
|
+
.prepare(`SELECT source_id, target_id, type, weight
|
|
837
|
+
FROM nexus_relations
|
|
838
|
+
WHERE project_id = ?
|
|
839
|
+
AND type IN ('calls','imports','accesses')`)
|
|
840
|
+
.all(projectId);
|
|
841
|
+
allRelations = rawRows.map((raw) => {
|
|
842
|
+
const r = raw;
|
|
843
|
+
return {
|
|
844
|
+
source_id: String(r['source_id'] ?? ''),
|
|
845
|
+
target_id: String(r['target_id'] ?? ''),
|
|
846
|
+
type: String(r['type'] ?? ''),
|
|
847
|
+
weight: r['weight'] != null ? Number(r['weight']) : null,
|
|
848
|
+
};
|
|
849
|
+
});
|
|
850
|
+
}
|
|
851
|
+
catch {
|
|
852
|
+
allRelations = [];
|
|
853
|
+
}
|
|
854
|
+
const reverseAdj = new Map();
|
|
855
|
+
for (const rel of allRelations) {
|
|
856
|
+
if (!IMPACT_REVERSE_TYPES.has(rel.type))
|
|
857
|
+
continue;
|
|
858
|
+
const list = reverseAdj.get(rel.target_id);
|
|
859
|
+
if (list) {
|
|
860
|
+
list.push(rel);
|
|
861
|
+
}
|
|
862
|
+
else {
|
|
863
|
+
reverseAdj.set(rel.target_id, [rel]);
|
|
864
|
+
}
|
|
865
|
+
}
|
|
866
|
+
// Collect incoming counts per node — used for "called by N places" reason.
|
|
867
|
+
const incomingCount = new Map();
|
|
868
|
+
for (const rel of allRelations) {
|
|
869
|
+
if (!IMPACT_REVERSE_TYPES.has(rel.type))
|
|
870
|
+
continue;
|
|
871
|
+
incomingCount.set(rel.target_id, (incomingCount.get(rel.target_id) ?? 0) + 1);
|
|
872
|
+
}
|
|
873
|
+
// Build a node-by-id lookup for display.
|
|
874
|
+
const nodeById = new Map();
|
|
875
|
+
for (const n of allNodes)
|
|
876
|
+
nodeById.set(n.id, n);
|
|
877
|
+
// BFS upstream from target.
|
|
878
|
+
const targetId = target.id;
|
|
879
|
+
const visited = new Set([targetId]);
|
|
880
|
+
const queue = [{ id: targetId, depth: 0 }];
|
|
881
|
+
const affected = [];
|
|
882
|
+
while (queue.length > 0) {
|
|
883
|
+
const item = queue.shift();
|
|
884
|
+
if (!item)
|
|
885
|
+
break;
|
|
886
|
+
if (item.depth >= maxDepth)
|
|
887
|
+
continue;
|
|
888
|
+
const callers = reverseAdj.get(item.id) ?? [];
|
|
889
|
+
for (const edge of callers) {
|
|
890
|
+
if (visited.has(edge.source_id))
|
|
891
|
+
continue;
|
|
892
|
+
visited.add(edge.source_id);
|
|
893
|
+
const depth = item.depth + 1;
|
|
894
|
+
const callerNode = nodeById.get(edge.source_id);
|
|
895
|
+
const reasons = [];
|
|
896
|
+
if (why) {
|
|
897
|
+
const calls = incomingCount.get(edge.source_id) ?? 0;
|
|
898
|
+
if (calls > 0) {
|
|
899
|
+
reasons.push(`called by ${calls} place${calls === 1 ? '' : 's'}`);
|
|
900
|
+
}
|
|
901
|
+
if (edge.weight != null && edge.weight > 0) {
|
|
902
|
+
reasons.push(`strength=${edge.weight.toFixed(3)} via ${edge.type}`);
|
|
903
|
+
}
|
|
904
|
+
else {
|
|
905
|
+
reasons.push(`edge type ${edge.type} (weight=0 — no plasticity yet)`);
|
|
906
|
+
}
|
|
907
|
+
reasons.push(`depth=${depth} hop from target ${target.label ?? target.id}`);
|
|
908
|
+
}
|
|
909
|
+
affected.push({
|
|
910
|
+
nodeId: edge.source_id,
|
|
911
|
+
label: callerNode?.label ?? edge.source_id,
|
|
912
|
+
kind: callerNode?.kind ?? 'unknown',
|
|
913
|
+
filePath: callerNode?.file_path ?? null,
|
|
914
|
+
depth,
|
|
915
|
+
reasons,
|
|
916
|
+
});
|
|
917
|
+
queue.push({ id: edge.source_id, depth });
|
|
918
|
+
}
|
|
919
|
+
}
|
|
920
|
+
const totalImpact = affected.length;
|
|
921
|
+
const data = {
|
|
922
|
+
query: symbolName,
|
|
923
|
+
projectId,
|
|
924
|
+
targetNodeId: target.id,
|
|
925
|
+
targetLabel: target.label ?? target.name ?? target.id,
|
|
926
|
+
why,
|
|
927
|
+
riskLevel: riskLevelFor(totalImpact),
|
|
928
|
+
totalImpact,
|
|
929
|
+
maxDepth,
|
|
930
|
+
affected,
|
|
931
|
+
};
|
|
932
|
+
return wrapResult({ success: true, data }, 'query', 'nexus', operation, startTime);
|
|
933
|
+
}
|
|
934
|
+
catch (dbErr) {
|
|
935
|
+
return handleErrorResult('query', 'nexus', operation, dbErr, startTime);
|
|
936
|
+
}
|
|
937
|
+
}
|
|
938
|
+
//# sourceMappingURL=nexus.js.map
|