@cleocode/core 2026.3.74 → 2026.4.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/README.md +1 -1
- package/dist/agents/agent-schema.d.ts.map +1 -1
- package/dist/agents/retry.js +26 -21
- package/dist/agents/retry.js.map +1 -1
- package/dist/cant/approval.d.ts +110 -0
- package/dist/cant/approval.d.ts.map +1 -0
- package/dist/cant/approval.js +185 -0
- package/dist/cant/approval.js.map +1 -0
- package/dist/cant/context-builder.d.ts +79 -0
- package/dist/cant/context-builder.d.ts.map +1 -0
- package/dist/cant/context-builder.js +117 -0
- package/dist/cant/context-builder.js.map +1 -0
- package/dist/cant/discretion.d.ts +95 -0
- package/dist/cant/discretion.d.ts.map +1 -0
- package/dist/cant/discretion.js +116 -0
- package/dist/cant/discretion.js.map +1 -0
- package/dist/cant/index.d.ts +25 -0
- package/dist/cant/index.d.ts.map +1 -0
- package/dist/cant/index.js +23 -0
- package/dist/cant/index.js.map +1 -0
- package/dist/cant/parallel-runner.d.ts +38 -0
- package/dist/cant/parallel-runner.d.ts.map +1 -0
- package/dist/cant/parallel-runner.js +173 -0
- package/dist/cant/parallel-runner.js.map +1 -0
- package/dist/cant/types.d.ts +127 -0
- package/dist/cant/types.d.ts.map +1 -0
- package/dist/cant/types.js +11 -0
- package/dist/cant/types.js.map +1 -0
- package/dist/cant/workflow-executor.d.ts +105 -0
- package/dist/cant/workflow-executor.d.ts.map +1 -0
- package/dist/cant/workflow-executor.js +440 -0
- package/dist/cant/workflow-executor.js.map +1 -0
- package/dist/cleo.js +21 -1
- package/dist/cleo.js.map +1 -1
- package/dist/code/index.d.ts +10 -0
- package/dist/code/index.d.ts.map +1 -0
- package/dist/code/outline.d.ts +51 -0
- package/dist/code/outline.d.ts.map +1 -0
- package/dist/code/parser.d.ts +30 -0
- package/dist/code/parser.d.ts.map +1 -0
- package/dist/code/search.d.ts +42 -0
- package/dist/code/search.d.ts.map +1 -0
- package/dist/code/unfold.d.ts +44 -0
- package/dist/code/unfold.d.ts.map +1 -0
- package/dist/conduit/conduit-client.d.ts +35 -0
- package/dist/conduit/conduit-client.d.ts.map +1 -0
- package/dist/conduit/conduit-client.js +94 -0
- package/dist/conduit/conduit-client.js.map +1 -0
- package/dist/conduit/factory.d.ts +15 -0
- package/dist/conduit/factory.d.ts.map +1 -0
- package/dist/conduit/factory.js +35 -0
- package/dist/conduit/factory.js.map +1 -0
- package/dist/conduit/http-transport.d.ts +44 -0
- package/dist/conduit/http-transport.d.ts.map +1 -0
- package/dist/conduit/http-transport.js +165 -0
- package/dist/conduit/http-transport.js.map +1 -0
- package/dist/conduit/index.d.ts +15 -0
- package/dist/conduit/index.d.ts.map +1 -0
- package/dist/conduit/index.js +12 -0
- package/dist/conduit/index.js.map +1 -0
- package/dist/conduit/local-transport.d.ts +91 -0
- package/dist/conduit/local-transport.d.ts.map +1 -0
- package/dist/conduit/sse-transport.d.ts +68 -0
- package/dist/conduit/sse-transport.d.ts.map +1 -0
- package/dist/config.js +4 -3
- package/dist/config.js.map +1 -1
- package/dist/crypto/credentials.d.ts +40 -0
- package/dist/crypto/credentials.d.ts.map +1 -0
- package/dist/crypto/credentials.js +144 -0
- package/dist/crypto/credentials.js.map +1 -0
- package/dist/engine-result.d.ts +1 -1
- package/dist/engine-result.d.ts.map +1 -1
- package/dist/error-catalog.d.ts +1 -1
- package/dist/error-catalog.d.ts.map +1 -1
- package/dist/error-registry.d.ts +1 -1
- package/dist/error-registry.d.ts.map +1 -1
- package/dist/errors.d.ts +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/hooks/handlers/agent-hooks.d.ts.map +1 -1
- package/dist/hooks/handlers/agent-hooks.js +106 -0
- package/dist/hooks/handlers/agent-hooks.js.map +1 -0
- package/dist/hooks/handlers/context-hooks.d.ts.map +1 -1
- package/dist/hooks/handlers/context-hooks.js +111 -0
- package/dist/hooks/handlers/context-hooks.js.map +1 -0
- package/dist/hooks/handlers/error-hooks.d.ts +14 -5
- package/dist/hooks/handlers/error-hooks.d.ts.map +1 -1
- package/dist/hooks/handlers/error-hooks.js +15 -6
- package/dist/hooks/handlers/error-hooks.js.map +1 -1
- package/dist/hooks/handlers/file-hooks.d.ts.map +1 -1
- package/dist/hooks/handlers/file-hooks.js +35 -11
- package/dist/hooks/handlers/file-hooks.js.map +1 -1
- package/dist/hooks/handlers/handler-helpers.d.ts +41 -0
- package/dist/hooks/handlers/handler-helpers.d.ts.map +1 -0
- package/dist/hooks/handlers/handler-helpers.js +61 -0
- package/dist/hooks/handlers/handler-helpers.js.map +1 -0
- package/dist/hooks/handlers/index.js +10 -1
- package/dist/hooks/handlers/index.js.map +1 -1
- package/dist/hooks/handlers/mcp-hooks.d.ts.map +1 -1
- package/dist/hooks/handlers/mcp-hooks.js +88 -21
- package/dist/hooks/handlers/mcp-hooks.js.map +1 -1
- package/dist/hooks/handlers/session-hooks.d.ts.map +1 -1
- package/dist/hooks/handlers/session-hooks.js +5 -10
- package/dist/hooks/handlers/session-hooks.js.map +1 -1
- package/dist/hooks/handlers/task-hooks.d.ts.map +1 -1
- package/dist/hooks/handlers/task-hooks.js +5 -10
- package/dist/hooks/handlers/task-hooks.js.map +1 -1
- package/dist/hooks/handlers/work-capture-hooks.d.ts.map +1 -1
- package/dist/hooks/handlers/work-capture-hooks.js +165 -0
- package/dist/hooks/handlers/work-capture-hooks.js.map +1 -0
- package/dist/hooks/payload-schemas.js +83 -26
- package/dist/hooks/payload-schemas.js.map +1 -1
- package/dist/hooks/provider-hooks.js +37 -5
- package/dist/hooks/provider-hooks.js.map +1 -1
- package/dist/hooks/registry.js +76 -23
- package/dist/hooks/registry.js.map +1 -1
- package/dist/hooks/types.js +17 -13
- package/dist/hooks/types.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6452 -3371
- package/dist/index.js.map +4 -4
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +12 -0
- package/dist/init.js.map +1 -1
- package/dist/internal.d.ts +11 -1
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +10 -0
- package/dist/internal.js.map +1 -1
- package/dist/lib/index.d.ts +1 -0
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/tree-sitter-languages.d.ts +29 -0
- package/dist/lib/tree-sitter-languages.d.ts.map +1 -0
- package/dist/memory/brain-links.d.ts.map +1 -1
- package/dist/memory/brain-maintenance.d.ts +13 -0
- package/dist/memory/brain-maintenance.d.ts.map +1 -1
- package/dist/memory/brain-retrieval.d.ts +3 -0
- package/dist/memory/brain-retrieval.d.ts.map +1 -1
- package/dist/memory/brain-retrieval.js +5 -0
- package/dist/memory/brain-retrieval.js.map +1 -1
- package/dist/memory/decisions.d.ts.map +1 -1
- package/dist/mvi-helpers.d.ts +52 -0
- package/dist/mvi-helpers.d.ts.map +1 -0
- package/dist/mvi-helpers.js +74 -0
- package/dist/mvi-helpers.js.map +1 -0
- package/dist/nexus/index.js +2 -0
- package/dist/nexus/index.js.map +1 -1
- package/dist/nexus/workspace.d.ts.map +1 -1
- package/dist/nexus/workspace.js +355 -0
- package/dist/nexus/workspace.js.map +1 -0
- package/dist/orchestration/hierarchy.d.ts +32 -0
- package/dist/orchestration/hierarchy.d.ts.map +1 -0
- package/dist/orchestration/index.d.ts +1 -0
- package/dist/orchestration/index.d.ts.map +1 -1
- package/dist/output.d.ts +2 -2
- package/dist/output.d.ts.map +1 -1
- package/dist/output.js +40 -8
- package/dist/output.js.map +1 -1
- package/dist/pagination.d.ts +1 -1
- package/dist/pagination.d.ts.map +1 -1
- package/dist/sessions/find.d.ts +3 -0
- package/dist/sessions/find.d.ts.map +1 -1
- package/dist/sessions/find.js +3 -1
- package/dist/sessions/find.js.map +1 -1
- package/dist/sessions/index.d.ts.map +1 -1
- package/dist/sessions/index.js +11 -4
- package/dist/sessions/index.js.map +1 -1
- package/dist/sessions/snapshot.js +213 -0
- package/dist/sessions/snapshot.js.map +1 -0
- package/dist/store/agent-registry-accessor.d.ts +31 -0
- package/dist/store/agent-registry-accessor.d.ts.map +1 -0
- package/dist/store/agent-registry-accessor.js +169 -0
- package/dist/store/agent-registry-accessor.js.map +1 -0
- package/dist/store/converters.d.ts.map +1 -1
- package/dist/store/converters.js +2 -0
- package/dist/store/converters.js.map +1 -1
- package/dist/store/cross-db-cleanup.d.ts +34 -0
- package/dist/store/cross-db-cleanup.d.ts.map +1 -1
- package/dist/store/db-helpers.d.ts.map +1 -1
- package/dist/store/db-helpers.js +1 -0
- package/dist/store/db-helpers.js.map +1 -1
- package/dist/store/json.js +2 -2
- package/dist/store/safety-data-accessor.d.ts +7 -0
- package/dist/store/safety-data-accessor.d.ts.map +1 -1
- package/dist/store/safety-data-accessor.js +14 -0
- package/dist/store/safety-data-accessor.js.map +1 -1
- package/dist/store/signaldock-sqlite.d.ts +48 -0
- package/dist/store/signaldock-sqlite.d.ts.map +1 -0
- package/dist/store/signaldock-sqlite.js +178 -0
- package/dist/store/signaldock-sqlite.js.map +1 -0
- package/dist/store/sqlite-data-accessor.d.ts.map +1 -1
- package/dist/store/sqlite-data-accessor.js +50 -0
- package/dist/store/sqlite-data-accessor.js.map +1 -1
- package/dist/store/sqlite.d.ts.map +1 -1
- package/dist/store/sqlite.js +30 -1
- package/dist/store/sqlite.js.map +1 -1
- package/dist/store/task-store.d.ts.map +1 -1
- package/dist/store/task-store.js +2 -0
- package/dist/store/task-store.js.map +1 -1
- package/dist/store/tasks-schema.d.ts +16 -0
- package/dist/store/tasks-schema.d.ts.map +1 -1
- package/dist/store/tasks-schema.js +33 -0
- package/dist/store/tasks-schema.js.map +1 -1
- package/dist/store/validation-schemas.d.ts +32 -0
- package/dist/store/validation-schemas.d.ts.map +1 -1
- package/dist/system/health.d.ts +1 -1
- package/dist/system/health.d.ts.map +1 -1
- package/dist/system/health.js +35 -0
- package/dist/system/health.js.map +1 -1
- package/dist/task-work/index.d.ts.map +1 -1
- package/dist/task-work/index.js +8 -4
- package/dist/task-work/index.js.map +1 -1
- package/dist/tasks/complete.js +5 -2
- package/dist/tasks/complete.js.map +1 -1
- package/dist/tasks/find.d.ts +3 -0
- package/dist/tasks/find.d.ts.map +1 -1
- package/dist/tasks/find.js +7 -1
- package/dist/tasks/find.js.map +1 -1
- package/dist/tasks/list.d.ts +5 -2
- package/dist/tasks/list.d.ts.map +1 -1
- package/dist/tasks/list.js +9 -2
- package/dist/tasks/list.js.map +1 -1
- package/dist/tasks/show.d.ts +3 -0
- package/dist/tasks/show.d.ts.map +1 -1
- package/dist/tasks/show.js +2 -0
- package/dist/tasks/show.js.map +1 -1
- package/dist/upgrade.d.ts.map +1 -1
- package/dist/upgrade.js +15 -0
- package/dist/upgrade.js.map +1 -1
- package/migrations/drizzle-tasks/20260324000000_assignee-column/migration.sql +6 -0
- package/migrations/drizzle-tasks/20260324000000_assignee-column/snapshot.json +9 -0
- package/migrations/drizzle-tasks/20260327000000_agent-credentials/migration.sql +23 -0
- package/package.json +17 -7
- package/src/__tests__/cli-parity.test.js +11 -1
- package/src/__tests__/cli-parity.test.js.map +1 -1
- package/src/__tests__/cli-parity.test.ts +17 -1
- package/src/__tests__/human-output.test.js +11 -1
- package/src/__tests__/human-output.test.js.map +1 -1
- package/src/__tests__/human-output.test.ts +18 -1
- package/src/__tests__/injection-chain.test.js +3 -2
- package/src/__tests__/injection-chain.test.js.map +1 -1
- package/src/__tests__/injection-mvi-tiers.test.d.ts +2 -2
- package/src/__tests__/injection-mvi-tiers.test.js +15 -15
- package/src/__tests__/injection-mvi-tiers.test.js.map +1 -1
- package/src/__tests__/lafs-conformance.test.d.ts +1 -1
- package/src/__tests__/lafs-conformance.test.js +2 -2
- package/src/__tests__/sharing.test.js +19 -0
- package/src/__tests__/sharing.test.js.map +1 -1
- package/src/agents/__tests__/agent-registry.test.d.ts +12 -0
- package/src/agents/__tests__/agent-registry.test.d.ts.map +1 -0
- package/src/agents/__tests__/agent-registry.test.js +262 -0
- package/src/agents/__tests__/agent-registry.test.js.map +1 -0
- package/src/agents/__tests__/execution-learning.test.d.ts +14 -0
- package/src/agents/__tests__/execution-learning.test.d.ts.map +1 -0
- package/src/agents/__tests__/execution-learning.test.js +533 -0
- package/src/agents/__tests__/execution-learning.test.js.map +1 -0
- package/src/agents/__tests__/health-monitor.test.d.ts +10 -0
- package/src/agents/__tests__/health-monitor.test.d.ts.map +1 -0
- package/src/agents/__tests__/health-monitor.test.js +259 -0
- package/src/agents/__tests__/health-monitor.test.js.map +1 -0
- package/src/agents/__tests__/registry.test.js +27 -2
- package/src/agents/__tests__/registry.test.js.map +1 -1
- package/src/agents/agent-schema.ts +2 -5
- package/src/cant/__tests__/cant-agent-parse.test.ts +94 -0
- package/src/cant/approval.ts +218 -0
- package/src/cant/context-builder.ts +135 -0
- package/src/cant/discretion.ts +149 -0
- package/src/cant/index.ts +58 -0
- package/src/cant/parallel-runner.ts +205 -0
- package/src/cant/types.ts +158 -0
- package/src/cant/workflow-executor.ts +618 -0
- package/src/code/index.ts +10 -0
- package/src/code/outline.ts +214 -0
- package/src/code/parser.ts +299 -0
- package/src/code/search.ts +173 -0
- package/src/code/unfold.ts +204 -0
- package/src/conduit/__tests__/dual-api-e2e.test.ts +212 -0
- package/src/conduit/__tests__/local-credential-flow.test.ts +230 -0
- package/src/conduit/__tests__/local-transport.test.ts +320 -0
- package/src/conduit/__tests__/sse-transport.test.ts +344 -0
- package/src/conduit/conduit-client.ts +123 -0
- package/src/conduit/factory.ts +49 -0
- package/src/conduit/http-transport.ts +201 -0
- package/src/conduit/index.ts +15 -0
- package/src/conduit/local-transport.ts +309 -0
- package/src/conduit/sse-transport.ts +382 -0
- package/src/crypto/credentials.ts +166 -0
- package/src/engine-result.ts +1 -1
- package/src/error-catalog.ts +1 -1
- package/src/error-registry.ts +1 -1
- package/src/errors.ts +1 -1
- package/src/hooks/handlers/__tests__/hook-automation-e2e.test.d.ts +13 -0
- package/src/hooks/handlers/__tests__/hook-automation-e2e.test.d.ts.map +1 -0
- package/src/hooks/handlers/__tests__/hook-automation-e2e.test.js +501 -0
- package/src/hooks/handlers/__tests__/hook-automation-e2e.test.js.map +1 -0
- package/src/hooks/handlers/agent-hooks.ts +1 -30
- package/src/hooks/handlers/context-hooks.ts +1 -30
- package/src/hooks/handlers/error-hooks.ts +14 -5
- package/src/hooks/handlers/file-hooks.ts +1 -6
- package/src/hooks/handlers/handler-helpers.ts +62 -0
- package/src/hooks/handlers/mcp-hooks.ts +2 -14
- package/src/hooks/handlers/session-hooks.ts +1 -6
- package/src/hooks/handlers/task-hooks.ts +1 -6
- package/src/hooks/handlers/work-capture-hooks.ts +1 -10
- package/src/index.ts +12 -1
- package/src/init.ts +12 -0
- package/src/intelligence/__tests__/adaptive-validation.test.d.ts +11 -0
- package/src/intelligence/__tests__/adaptive-validation.test.d.ts.map +1 -0
- package/src/intelligence/__tests__/adaptive-validation.test.js +517 -0
- package/src/intelligence/__tests__/adaptive-validation.test.js.map +1 -0
- package/src/intelligence/__tests__/impact.test.d.ts +1 -0
- package/src/intelligence/__tests__/impact.test.d.ts.map +1 -1
- package/src/intelligence/__tests__/impact.test.js +132 -1
- package/src/intelligence/__tests__/impact.test.js.map +1 -1
- package/src/internal.ts +22 -0
- package/src/lib/__tests__/retry.test.d.ts +7 -0
- package/src/lib/__tests__/retry.test.d.ts.map +1 -0
- package/src/lib/__tests__/retry.test.js +225 -0
- package/src/lib/__tests__/retry.test.js.map +1 -0
- package/src/lib/index.ts +8 -0
- package/src/lib/tree-sitter-languages.ts +88 -0
- package/src/lifecycle/__tests__/chain-store.test.js +6 -0
- package/src/lifecycle/__tests__/chain-store.test.js.map +1 -1
- package/src/lifecycle/__tests__/tessera-engine.test.js +52 -0
- package/src/lifecycle/__tests__/tessera-engine.test.js.map +1 -1
- package/src/memory/__tests__/brain-automation.test.d.ts +11 -0
- package/src/memory/__tests__/brain-automation.test.d.ts.map +1 -0
- package/src/memory/__tests__/brain-automation.test.js +730 -0
- package/src/memory/__tests__/brain-automation.test.js.map +1 -0
- package/src/memory/__tests__/brain-links.test.ts +14 -0
- package/src/memory/__tests__/brain-retrieval.test.ts +10 -0
- package/src/memory/__tests__/session-memory.test.ts +17 -0
- package/src/memory/brain-links.ts +17 -0
- package/src/memory/brain-maintenance.ts +33 -1
- package/src/memory/brain-retrieval.ts +27 -2
- package/src/memory/decisions.ts +18 -2
- package/src/mvi-helpers.ts +81 -0
- package/src/nexus/workspace.ts +19 -7
- package/src/orchestration/hierarchy.ts +202 -0
- package/src/orchestration/index.ts +1 -0
- package/src/output.ts +43 -10
- package/src/pagination.ts +1 -1
- package/src/sessions/__tests__/session-edge-cases.test.js +20 -1
- package/src/sessions/__tests__/session-edge-cases.test.js.map +1 -1
- package/src/sessions/__tests__/session-find.test.js +1 -1
- package/src/sessions/__tests__/session-find.test.js.map +1 -1
- package/src/sessions/__tests__/session-find.test.ts +1 -1
- package/src/sessions/find.ts +6 -1
- package/src/sessions/index.ts +9 -0
- package/src/store/__tests__/migration-safety.test.js +3 -0
- package/src/store/__tests__/migration-safety.test.js.map +1 -1
- package/src/store/__tests__/session-store.test.js +128 -1
- package/src/store/__tests__/session-store.test.js.map +1 -1
- package/src/store/__tests__/task-store.test.js +18 -1
- package/src/store/__tests__/task-store.test.js.map +1 -1
- package/src/store/__tests__/test-db-helper.d.ts.map +1 -1
- package/src/store/__tests__/test-db-helper.js +12 -0
- package/src/store/__tests__/test-db-helper.js.map +1 -1
- package/src/store/agent-registry-accessor.ts +375 -0
- package/src/store/converters.ts +2 -0
- package/src/store/cross-db-cleanup.ts +175 -1
- package/src/store/db-helpers.ts +1 -0
- package/src/store/safety-data-accessor.ts +23 -0
- package/src/store/signaldock-sqlite.ts +429 -0
- package/src/store/sqlite-data-accessor.ts +72 -0
- package/src/store/sqlite.ts +4 -1
- package/src/store/task-store.ts +9 -1
- package/src/store/tasks-schema.ts +7 -0
- package/src/system/__tests__/health.test.ts +2 -2
- package/src/system/health.ts +54 -2
- package/src/task-work/index.ts +5 -0
- package/src/tasks/__tests__/add.test.js +19 -1
- package/src/tasks/__tests__/add.test.js.map +1 -1
- package/src/tasks/__tests__/assignee.test.d.ts +14 -0
- package/src/tasks/__tests__/assignee.test.d.ts.map +1 -0
- package/src/tasks/__tests__/assignee.test.js +125 -0
- package/src/tasks/__tests__/assignee.test.js.map +1 -0
- package/src/tasks/__tests__/assignee.test.ts +162 -0
- package/src/tasks/__tests__/complete-unblocks.test.js +13 -1
- package/src/tasks/__tests__/complete-unblocks.test.js.map +1 -1
- package/src/tasks/__tests__/complete.test.js +28 -7
- package/src/tasks/__tests__/complete.test.js.map +1 -1
- package/src/tasks/__tests__/epic-enforcement.test.d.ts +15 -0
- package/src/tasks/__tests__/epic-enforcement.test.d.ts.map +1 -0
- package/src/tasks/__tests__/epic-enforcement.test.js +669 -0
- package/src/tasks/__tests__/epic-enforcement.test.js.map +1 -0
- package/src/tasks/__tests__/hierarchy-policy.test.js +5 -0
- package/src/tasks/__tests__/hierarchy-policy.test.js.map +1 -1
- package/src/tasks/__tests__/minimal-test.test.d.ts +2 -0
- package/src/tasks/__tests__/minimal-test.test.d.ts.map +1 -0
- package/src/tasks/__tests__/minimal-test.test.js +25 -0
- package/src/tasks/__tests__/minimal-test.test.js.map +1 -0
- package/src/tasks/__tests__/pipeline-stage.test.d.ts +14 -0
- package/src/tasks/__tests__/pipeline-stage.test.d.ts.map +1 -0
- package/src/tasks/__tests__/pipeline-stage.test.js +277 -0
- package/src/tasks/__tests__/pipeline-stage.test.js.map +1 -0
- package/src/tasks/__tests__/update.test.js +43 -6
- package/src/tasks/__tests__/update.test.js.map +1 -1
- package/src/tasks/find.ts +11 -1
- package/src/tasks/list.ts +14 -3
- package/src/tasks/show.ts +6 -0
- package/src/upgrade.ts +16 -0
- package/dist/tasks/reparent.d.ts +0 -38
- package/dist/tasks/reparent.d.ts.map +0 -1
- package/dist/ui/injection-legacy.d.ts +0 -26
- package/dist/ui/injection-legacy.d.ts.map +0 -1
- package/dist/ui/injection-legacy.js +0 -42
- package/dist/ui/injection-legacy.js.map +0 -1
- package/src/signaldock/__tests__/claude-code-transport.test.d.ts +0 -7
- package/src/signaldock/__tests__/claude-code-transport.test.d.ts.map +0 -1
- package/src/signaldock/__tests__/claude-code-transport.test.js +0 -147
- package/src/signaldock/__tests__/claude-code-transport.test.js.map +0 -1
- package/src/signaldock/__tests__/claude-code-transport.test.ts +0 -180
- package/src/signaldock/__tests__/factory.test.d.ts +0 -7
- package/src/signaldock/__tests__/factory.test.d.ts.map +0 -1
- package/src/signaldock/__tests__/factory.test.js +0 -55
- package/src/signaldock/__tests__/factory.test.js.map +0 -1
- package/src/signaldock/__tests__/factory.test.ts +0 -61
- package/src/signaldock/__tests__/signaldock-transport.test.d.ts +0 -9
- package/src/signaldock/__tests__/signaldock-transport.test.d.ts.map +0 -1
- package/src/signaldock/__tests__/signaldock-transport.test.js +0 -321
- package/src/signaldock/__tests__/signaldock-transport.test.js.map +0 -1
- package/src/signaldock/__tests__/signaldock-transport.test.ts +0 -421
- package/src/signaldock/claude-code-transport.ts +0 -137
- package/src/signaldock/factory.ts +0 -39
- package/src/signaldock/index.ts +0 -28
- package/src/signaldock/signaldock-transport.ts +0 -194
- package/src/signaldock/transport.ts +0 -78
- package/src/signaldock/types.ts +0 -100
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-hooks.d.ts","sourceRoot":"","sources":["../../../src/hooks/handlers/mcp-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EACnB,uBAAuB,EACxB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp-hooks.d.ts","sourceRoot":"","sources":["../../../src/hooks/handlers/mcp-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EACnB,uBAAuB,EACxB,MAAM,aAAa,CAAC;AA0BrB;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAef;AAED;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAef;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,wBAAwB,CAC5C,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAoBf"}
|
|
@@ -1,32 +1,52 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* MCP Prompt/Response Hook Handlers - Wave 2 of T5237
|
|
3
3
|
*
|
|
4
|
-
* Handlers for onPromptSubmit and
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* Handlers for onPromptSubmit, onResponseComplete, and system Notification
|
|
5
|
+
* events that capture ALL gateway operations (read and write) to BRAIN.
|
|
6
|
+
* By default, NO brain capture (too noisy). Enable via:
|
|
7
|
+
* - Config: brain.captureMcp = true (checked first)
|
|
8
|
+
* - Env: CLEO_BRAIN_CAPTURE_MCP=true (overrides config)
|
|
7
9
|
* Auto-registers on module load.
|
|
10
|
+
*
|
|
11
|
+
* Note: File-change Notification events (those with filePath + changeType) are
|
|
12
|
+
* handled by file-hooks.ts. This module handles message-bearing system
|
|
13
|
+
* notifications (Notification payloads with a message field).
|
|
14
|
+
*
|
|
15
|
+
* @task T166
|
|
8
16
|
*/
|
|
9
17
|
import { hooks } from '../registry.js';
|
|
10
|
-
|
|
11
|
-
if (!(err instanceof Error))
|
|
12
|
-
return false;
|
|
13
|
-
const message = String(err.message || '').toLowerCase();
|
|
14
|
-
return message.includes('no such table') && message.includes('brain_');
|
|
15
|
-
}
|
|
18
|
+
import { isAutoCaptureEnabled, isMissingBrainSchemaError } from './handler-helpers.js';
|
|
16
19
|
/**
|
|
17
|
-
* Check
|
|
18
|
-
*
|
|
20
|
+
* Check whether MCP-level brain capture is enabled.
|
|
21
|
+
*
|
|
22
|
+
* Resolution order (first truthy wins):
|
|
23
|
+
* 1. CLEO_BRAIN_CAPTURE_MCP env var (explicit override)
|
|
24
|
+
* 2. brain.captureMcp project config value
|
|
25
|
+
*
|
|
26
|
+
* Defaults to false when neither is set (too noisy for normal operation).
|
|
19
27
|
*/
|
|
20
|
-
function isBrainCaptureEnabled() {
|
|
21
|
-
|
|
28
|
+
async function isBrainCaptureEnabled(projectRoot) {
|
|
29
|
+
const envOverride = process.env['CLEO_BRAIN_CAPTURE_MCP'];
|
|
30
|
+
if (envOverride !== undefined) {
|
|
31
|
+
return envOverride === 'true';
|
|
32
|
+
}
|
|
33
|
+
try {
|
|
34
|
+
const { loadConfig } = await import('../../config.js');
|
|
35
|
+
const config = await loadConfig(projectRoot);
|
|
36
|
+
return config.brain?.captureMcp ?? false;
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
22
41
|
}
|
|
23
42
|
/**
|
|
24
|
-
* Handle
|
|
43
|
+
* Handle PromptSubmit - optionally capture ALL gateway prompt events to BRAIN.
|
|
25
44
|
*
|
|
26
|
-
* No-op by default.
|
|
45
|
+
* No-op by default. Enable via brain.captureMcp config or CLEO_BRAIN_CAPTURE_MCP env.
|
|
46
|
+
* For selective mutation-only capture, use work-capture-hooks.ts instead.
|
|
27
47
|
*/
|
|
28
48
|
export async function handlePromptSubmit(projectRoot, payload) {
|
|
29
|
-
if (!isBrainCaptureEnabled())
|
|
49
|
+
if (!(await isBrainCaptureEnabled(projectRoot)))
|
|
30
50
|
return;
|
|
31
51
|
const { observeBrain } = await import('../../memory/brain-retrieval.js');
|
|
32
52
|
try {
|
|
@@ -43,12 +63,13 @@ export async function handlePromptSubmit(projectRoot, payload) {
|
|
|
43
63
|
}
|
|
44
64
|
}
|
|
45
65
|
/**
|
|
46
|
-
* Handle
|
|
66
|
+
* Handle ResponseComplete - optionally capture ALL gateway response events to BRAIN.
|
|
47
67
|
*
|
|
48
|
-
* No-op by default.
|
|
68
|
+
* No-op by default. Enable via brain.captureMcp config or CLEO_BRAIN_CAPTURE_MCP env.
|
|
69
|
+
* For selective mutation-only capture, use work-capture-hooks.ts instead.
|
|
49
70
|
*/
|
|
50
71
|
export async function handleResponseComplete(projectRoot, payload) {
|
|
51
|
-
if (!isBrainCaptureEnabled())
|
|
72
|
+
if (!(await isBrainCaptureEnabled(projectRoot)))
|
|
52
73
|
return;
|
|
53
74
|
const { observeBrain } = await import('../../memory/brain-retrieval.js');
|
|
54
75
|
try {
|
|
@@ -64,17 +85,63 @@ export async function handleResponseComplete(projectRoot, payload) {
|
|
|
64
85
|
throw err;
|
|
65
86
|
}
|
|
66
87
|
}
|
|
88
|
+
/**
|
|
89
|
+
* Handle Notification — capture system notifications as BRAIN observations.
|
|
90
|
+
*
|
|
91
|
+
* Only fires for Notification payloads that carry a message field (i.e. system
|
|
92
|
+
* notifications). File-change notifications (filePath + changeType) are
|
|
93
|
+
* handled exclusively by file-hooks.ts and are skipped here to avoid
|
|
94
|
+
* double-capture.
|
|
95
|
+
*
|
|
96
|
+
* Gated behind brain.autoCapture config. Never throws.
|
|
97
|
+
*
|
|
98
|
+
* @param projectRoot - Absolute path to the project root directory.
|
|
99
|
+
* @param payload - Notification event payload.
|
|
100
|
+
*
|
|
101
|
+
* @task T166
|
|
102
|
+
*/
|
|
103
|
+
export async function handleSystemNotification(projectRoot, payload) {
|
|
104
|
+
// File-change notifications are handled by file-hooks.ts
|
|
105
|
+
if (payload.filePath || payload.changeType)
|
|
106
|
+
return;
|
|
107
|
+
// Only handle message-bearing system notifications
|
|
108
|
+
if (!payload.message)
|
|
109
|
+
return;
|
|
110
|
+
if (!(await isAutoCaptureEnabled(projectRoot)))
|
|
111
|
+
return;
|
|
112
|
+
const { observeBrain } = await import('../../memory/brain-retrieval.js');
|
|
113
|
+
try {
|
|
114
|
+
await observeBrain(projectRoot, {
|
|
115
|
+
text: `System notification: ${payload.message}`,
|
|
116
|
+
title: `Notification: ${payload.message.slice(0, 60)}`,
|
|
117
|
+
type: 'discovery',
|
|
118
|
+
sourceSessionId: payload.sessionId,
|
|
119
|
+
sourceType: 'agent',
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
catch (err) {
|
|
123
|
+
if (!isMissingBrainSchemaError(err))
|
|
124
|
+
throw err;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
67
127
|
// Register handlers on module load
|
|
68
128
|
hooks.register({
|
|
69
129
|
id: 'brain-prompt-submit',
|
|
70
|
-
event: '
|
|
130
|
+
event: 'PromptSubmit',
|
|
71
131
|
handler: handlePromptSubmit,
|
|
72
132
|
priority: 100,
|
|
73
133
|
});
|
|
74
134
|
hooks.register({
|
|
75
135
|
id: 'brain-response-complete',
|
|
76
|
-
event: '
|
|
136
|
+
event: 'ResponseComplete',
|
|
77
137
|
handler: handleResponseComplete,
|
|
78
138
|
priority: 100,
|
|
79
139
|
});
|
|
140
|
+
// Lower priority (90) so file-hooks.ts (100) runs first for Notification events
|
|
141
|
+
hooks.register({
|
|
142
|
+
id: 'brain-system-notification',
|
|
143
|
+
event: 'Notification',
|
|
144
|
+
handler: handleSystemNotification,
|
|
145
|
+
priority: 90,
|
|
146
|
+
});
|
|
80
147
|
//# sourceMappingURL=mcp-hooks.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-hooks.js","sourceRoot":"","sources":["../../../src/hooks/handlers/mcp-hooks.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"mcp-hooks.js","sourceRoot":"","sources":["../../../src/hooks/handlers/mcp-hooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-hooks.d.ts","sourceRoot":"","sources":["../../../src/hooks/handlers/session-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"session-hooks.d.ts","sourceRoot":"","sources":["../../../src/hooks/handlers/session-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAI1E;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAiBf;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CA8Cf"}
|
|
@@ -9,15 +9,10 @@
|
|
|
9
9
|
* T144: Extracts transcript observations on session end.
|
|
10
10
|
*/
|
|
11
11
|
import { hooks } from '../registry.js';
|
|
12
|
+
import { isMissingBrainSchemaError } from './handler-helpers.js';
|
|
12
13
|
import { maybeRefreshMemoryBridge } from './memory-bridge-refresh.js';
|
|
13
|
-
function isMissingBrainSchemaError(err) {
|
|
14
|
-
if (!(err instanceof Error))
|
|
15
|
-
return false;
|
|
16
|
-
const message = String(err.message || '').toLowerCase();
|
|
17
|
-
return message.includes('no such table') && message.includes('brain_');
|
|
18
|
-
}
|
|
19
14
|
/**
|
|
20
|
-
* Handle
|
|
15
|
+
* Handle SessionStart - capture initial session context
|
|
21
16
|
*
|
|
22
17
|
* T138: Refresh memory bridge on session start.
|
|
23
18
|
* T139: Regenerate bridge with session scope context.
|
|
@@ -41,7 +36,7 @@ export async function handleSessionStart(projectRoot, payload) {
|
|
|
41
36
|
await maybeRefreshMemoryBridge(projectRoot);
|
|
42
37
|
}
|
|
43
38
|
/**
|
|
44
|
-
* Handle
|
|
39
|
+
* Handle SessionEnd - capture session summary
|
|
45
40
|
*
|
|
46
41
|
* T138: Refresh memory bridge after session ends.
|
|
47
42
|
* T144: Extract transcript observations via cross-provider adapter.
|
|
@@ -96,13 +91,13 @@ export async function handleSessionEnd(projectRoot, payload) {
|
|
|
96
91
|
// Register handlers on module load
|
|
97
92
|
hooks.register({
|
|
98
93
|
id: 'brain-session-start',
|
|
99
|
-
event: '
|
|
94
|
+
event: 'SessionStart',
|
|
100
95
|
handler: handleSessionStart,
|
|
101
96
|
priority: 100,
|
|
102
97
|
});
|
|
103
98
|
hooks.register({
|
|
104
99
|
id: 'brain-session-end',
|
|
105
|
-
event: '
|
|
100
|
+
event: 'SessionEnd',
|
|
106
101
|
handler: handleSessionEnd,
|
|
107
102
|
priority: 100,
|
|
108
103
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-hooks.js","sourceRoot":"","sources":["../../../src/hooks/handlers/session-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEvC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"session-hooks.js","sourceRoot":"","sources":["../../../src/hooks/handlers/session-hooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-hooks.d.ts","sourceRoot":"","sources":["../../../src/hooks/handlers/task-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"task-hooks.d.ts","sourceRoot":"","sources":["../../../src/hooks/handlers/task-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAIzE;;GAEG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAaf;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAgBf"}
|
|
@@ -7,15 +7,10 @@
|
|
|
7
7
|
* T138: Triggers memory bridge refresh after task completion.
|
|
8
8
|
*/
|
|
9
9
|
import { hooks } from '../registry.js';
|
|
10
|
+
import { isMissingBrainSchemaError } from './handler-helpers.js';
|
|
10
11
|
import { maybeRefreshMemoryBridge } from './memory-bridge-refresh.js';
|
|
11
|
-
function isMissingBrainSchemaError(err) {
|
|
12
|
-
if (!(err instanceof Error))
|
|
13
|
-
return false;
|
|
14
|
-
const message = String(err.message || '').toLowerCase();
|
|
15
|
-
return message.includes('no such table') && message.includes('brain_');
|
|
16
|
-
}
|
|
17
12
|
/**
|
|
18
|
-
* Handle
|
|
13
|
+
* Handle PreToolUse (maps to task.start in CLEO, canonical: was onToolStart)
|
|
19
14
|
*/
|
|
20
15
|
export async function handleToolStart(projectRoot, payload) {
|
|
21
16
|
const { observeBrain } = await import('../../memory/brain-retrieval.js');
|
|
@@ -33,7 +28,7 @@ export async function handleToolStart(projectRoot, payload) {
|
|
|
33
28
|
}
|
|
34
29
|
}
|
|
35
30
|
/**
|
|
36
|
-
* Handle
|
|
31
|
+
* Handle PostToolUse (maps to task.complete in CLEO, canonical: was onToolComplete)
|
|
37
32
|
*
|
|
38
33
|
* T138: Refresh memory bridge after task completion.
|
|
39
34
|
*/
|
|
@@ -57,13 +52,13 @@ export async function handleToolComplete(projectRoot, payload) {
|
|
|
57
52
|
// Register handlers
|
|
58
53
|
hooks.register({
|
|
59
54
|
id: 'brain-tool-start',
|
|
60
|
-
event: '
|
|
55
|
+
event: 'PreToolUse',
|
|
61
56
|
handler: handleToolStart,
|
|
62
57
|
priority: 100,
|
|
63
58
|
});
|
|
64
59
|
hooks.register({
|
|
65
60
|
id: 'brain-tool-complete',
|
|
66
|
-
event: '
|
|
61
|
+
event: 'PostToolUse',
|
|
67
62
|
handler: handleToolComplete,
|
|
68
63
|
priority: 100,
|
|
69
64
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-hooks.js","sourceRoot":"","sources":["../../../src/hooks/handlers/task-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEvC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"task-hooks.js","sourceRoot":"","sources":["../../../src/hooks/handlers/task-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEvC,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAEtE;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,WAAmB,EACnB,OAA0B;IAE1B,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,iCAAiC,CAAC,CAAC;IAEzE,IAAI,CAAC;QACH,MAAM,YAAY,CAAC,WAAW,EAAE;YAC9B,IAAI,EAAE,mBAAmB,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,SAAS,EAAE;YAC/D,KAAK,EAAE,eAAe,OAAO,CAAC,MAAM,EAAE;YACtC,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,OAAO;SACpB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC;YAAE,MAAM,GAAG,CAAC;IACjD,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,WAAmB,EACnB,OAA2B;IAE3B,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,iCAAiC,CAAC,CAAC;IAEzE,IAAI,CAAC;QACH,MAAM,YAAY,CAAC,WAAW,EAAE;YAC9B,IAAI,EAAE,QAAQ,OAAO,CAAC,MAAM,2BAA2B,OAAO,CAAC,MAAM,EAAE;YACvE,KAAK,EAAE,kBAAkB,OAAO,CAAC,MAAM,EAAE;YACzC,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,OAAO;SACpB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC;YAAE,MAAM,GAAG,CAAC;IACjD,CAAC;IAED,iEAAiE;IACjE,MAAM,wBAAwB,CAAC,WAAW,CAAC,CAAC;AAC9C,CAAC;AAED,oBAAoB;AACpB,KAAK,CAAC,QAAQ,CAAC;IACb,EAAE,EAAE,kBAAkB;IACtB,KAAK,EAAE,YAAY;IACnB,OAAO,EAAE,eAAe;IACxB,QAAQ,EAAE,GAAG;CACd,CAAC,CAAC;AAEH,KAAK,CAAC,QAAQ,CAAC;IACb,EAAE,EAAE,qBAAqB;IACzB,KAAK,EAAE,aAAa;IACpB,OAAO,EAAE,kBAAkB;IAC3B,QAAQ,EAAE,GAAG;CACd,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"work-capture-hooks.d.ts","sourceRoot":"","sources":["../../../src/hooks/handlers/work-capture-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"work-capture-hooks.d.ts","sourceRoot":"","sources":["../../../src/hooks/handlers/work-capture-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAyEhF;;;;;;;;GAQG;AACH,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED;;;;;;;;;GASG;AACH,wBAAsB,0BAA0B,CAC9C,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAmBf"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Active-Work Capture Hook Handlers
|
|
3
|
+
*
|
|
4
|
+
* Captures dispatch mutation events to BRAIN during active work, closing
|
|
5
|
+
* the gap between lifecycle-only capture (session end, task complete) and
|
|
6
|
+
* continuous capture. Only WRITE operations that represent meaningful work
|
|
7
|
+
* are captured — reads and operations already handled by lifecycle hooks
|
|
8
|
+
* are skipped to avoid flooding brain.db.
|
|
9
|
+
*
|
|
10
|
+
* Disabled by default. Enable via:
|
|
11
|
+
* - Config: brain.captureWork = true (checked first)
|
|
12
|
+
* - Env: CLEO_BRAIN_CAPTURE_WORK=true (overrides config)
|
|
13
|
+
*
|
|
14
|
+
* Auto-registers on module load.
|
|
15
|
+
*
|
|
16
|
+
* @task T142
|
|
17
|
+
*/
|
|
18
|
+
import { hooks } from '../registry.js';
|
|
19
|
+
import { isMissingBrainSchemaError } from './handler-helpers.js';
|
|
20
|
+
/**
|
|
21
|
+
* Check whether active-work capture is enabled.
|
|
22
|
+
*
|
|
23
|
+
* Resolution order (first truthy wins):
|
|
24
|
+
* 1. CLEO_BRAIN_CAPTURE_WORK env var (explicit override)
|
|
25
|
+
* 2. brain.captureWork project config value
|
|
26
|
+
*
|
|
27
|
+
* Defaults to false when neither is set.
|
|
28
|
+
*/
|
|
29
|
+
async function isWorkCaptureEnabled(projectRoot) {
|
|
30
|
+
const envOverride = process.env['CLEO_BRAIN_CAPTURE_WORK'];
|
|
31
|
+
if (envOverride !== undefined) {
|
|
32
|
+
return envOverride === 'true';
|
|
33
|
+
}
|
|
34
|
+
try {
|
|
35
|
+
const { loadConfig } = await import('../../config.js');
|
|
36
|
+
const config = await loadConfig(projectRoot);
|
|
37
|
+
return config.brain?.captureWork ?? false;
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// ---------------------------------------------------------------------------
|
|
44
|
+
// Smart-filter: which mutations to capture
|
|
45
|
+
// ---------------------------------------------------------------------------
|
|
46
|
+
/**
|
|
47
|
+
* Mutations that represent novel work not already captured by lifecycle hooks.
|
|
48
|
+
*
|
|
49
|
+
* Excluded (already captured elsewhere):
|
|
50
|
+
* - tasks.complete → task-hooks.ts (PostToolUse)
|
|
51
|
+
* - session.start → session-hooks.ts (SessionStart)
|
|
52
|
+
* - session.end → session-hooks.ts (SessionEnd)
|
|
53
|
+
* - memory.brain.observe → observeBrain itself writes to brain; self-loop
|
|
54
|
+
*
|
|
55
|
+
* All query gateway operations are excluded by the gateway check before
|
|
56
|
+
* this set is consulted.
|
|
57
|
+
*/
|
|
58
|
+
const CAPTURE_OPERATIONS = new Set([
|
|
59
|
+
'tasks.add',
|
|
60
|
+
'tasks.update',
|
|
61
|
+
'tasks.move',
|
|
62
|
+
'tasks.link',
|
|
63
|
+
'tasks.unlink',
|
|
64
|
+
'tasks.label',
|
|
65
|
+
'tasks.unlabel',
|
|
66
|
+
'tasks.note',
|
|
67
|
+
]);
|
|
68
|
+
/**
|
|
69
|
+
* Determine whether a mutate operation should be captured.
|
|
70
|
+
*
|
|
71
|
+
* Only `mutate` gateway operations in CAPTURE_OPERATIONS are captured.
|
|
72
|
+
* All `query` gateway calls are skipped (reads produce no novel work).
|
|
73
|
+
*
|
|
74
|
+
* @param gateway - 'query' or 'mutate'
|
|
75
|
+
* @param domain - e.g. 'tasks'
|
|
76
|
+
* @param operation - e.g. 'add'
|
|
77
|
+
*/
|
|
78
|
+
function shouldCapture(gateway, domain, operation) {
|
|
79
|
+
if (gateway !== 'mutate')
|
|
80
|
+
return false;
|
|
81
|
+
const key = `${domain}.${operation}`;
|
|
82
|
+
return CAPTURE_OPERATIONS.has(key);
|
|
83
|
+
}
|
|
84
|
+
// ---------------------------------------------------------------------------
|
|
85
|
+
// Handlers
|
|
86
|
+
// ---------------------------------------------------------------------------
|
|
87
|
+
/**
|
|
88
|
+
* Handle PromptSubmit — log incoming mutation intents to BRAIN.
|
|
89
|
+
*
|
|
90
|
+
* Only fires for mutate operations in CAPTURE_OPERATIONS.
|
|
91
|
+
* Gated behind brain.captureWork config (or CLEO_BRAIN_CAPTURE_WORK env).
|
|
92
|
+
*
|
|
93
|
+
* @param projectRoot - Absolute path to the project root
|
|
94
|
+
* @param payload - PromptSubmit event payload
|
|
95
|
+
*/
|
|
96
|
+
export async function handleWorkPromptSubmit(projectRoot, payload) {
|
|
97
|
+
if (!shouldCapture(payload.gateway, payload.domain, payload.operation))
|
|
98
|
+
return;
|
|
99
|
+
if (!(await isWorkCaptureEnabled(projectRoot)))
|
|
100
|
+
return;
|
|
101
|
+
const { observeBrain } = await import('../../memory/brain-retrieval.js');
|
|
102
|
+
try {
|
|
103
|
+
await observeBrain(projectRoot, {
|
|
104
|
+
text: `Dispatch intent: ${payload.gateway}:${payload.domain}.${payload.operation}${payload.source ? ` (from ${payload.source})` : ''}`,
|
|
105
|
+
title: `Work intent: ${payload.domain}.${payload.operation}`,
|
|
106
|
+
type: 'discovery',
|
|
107
|
+
sourceType: 'agent',
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
if (!isMissingBrainSchemaError(err))
|
|
112
|
+
throw err;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Handle ResponseComplete — capture completed mutations to BRAIN.
|
|
117
|
+
*
|
|
118
|
+
* Only fires for successful mutate operations in CAPTURE_OPERATIONS.
|
|
119
|
+
* Failures are skipped — the intent was already captured by handleWorkPromptSubmit.
|
|
120
|
+
* Gated behind brain.captureWork config (or CLEO_BRAIN_CAPTURE_WORK env).
|
|
121
|
+
*
|
|
122
|
+
* @param projectRoot - Absolute path to the project root
|
|
123
|
+
* @param payload - ResponseComplete event payload
|
|
124
|
+
*/
|
|
125
|
+
export async function handleWorkResponseComplete(projectRoot, payload) {
|
|
126
|
+
if (!shouldCapture(payload.gateway, payload.domain, payload.operation))
|
|
127
|
+
return;
|
|
128
|
+
// Only capture successful completions — failures are noise
|
|
129
|
+
if (!payload.success)
|
|
130
|
+
return;
|
|
131
|
+
if (!(await isWorkCaptureEnabled(projectRoot)))
|
|
132
|
+
return;
|
|
133
|
+
const { observeBrain } = await import('../../memory/brain-retrieval.js');
|
|
134
|
+
try {
|
|
135
|
+
const durationNote = payload.durationMs != null ? ` (${payload.durationMs}ms)` : '';
|
|
136
|
+
await observeBrain(projectRoot, {
|
|
137
|
+
text: `Dispatch complete: ${payload.gateway}:${payload.domain}.${payload.operation}${durationNote}`,
|
|
138
|
+
title: `Work done: ${payload.domain}.${payload.operation}`,
|
|
139
|
+
type: 'change',
|
|
140
|
+
sourceType: 'agent',
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
catch (err) {
|
|
144
|
+
if (!isMissingBrainSchemaError(err))
|
|
145
|
+
throw err;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
// ---------------------------------------------------------------------------
|
|
149
|
+
// Auto-registration
|
|
150
|
+
// ---------------------------------------------------------------------------
|
|
151
|
+
// Register at lower priority (90) than lifecycle hooks (100) so lifecycle
|
|
152
|
+
// handlers always run first.
|
|
153
|
+
hooks.register({
|
|
154
|
+
id: 'work-capture-prompt-submit',
|
|
155
|
+
event: 'PromptSubmit',
|
|
156
|
+
handler: handleWorkPromptSubmit,
|
|
157
|
+
priority: 90,
|
|
158
|
+
});
|
|
159
|
+
hooks.register({
|
|
160
|
+
id: 'work-capture-response-complete',
|
|
161
|
+
event: 'ResponseComplete',
|
|
162
|
+
handler: handleWorkResponseComplete,
|
|
163
|
+
priority: 90,
|
|
164
|
+
});
|
|
165
|
+
//# sourceMappingURL=work-capture-hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"work-capture-hooks.js","sourceRoot":"","sources":["../../../src/hooks/handlers/work-capture-hooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,39 +22,53 @@ export const HookPayloadSchema = z.object({
|
|
|
22
22
|
// ============================================================================
|
|
23
23
|
// CAAMP-mapped Event Payload Schemas
|
|
24
24
|
// ============================================================================
|
|
25
|
-
/** Zod schema for {@link
|
|
26
|
-
export const
|
|
25
|
+
/** Zod schema for {@link SessionStartPayload}. */
|
|
26
|
+
export const SessionStartPayloadSchema = HookPayloadSchema.extend({
|
|
27
27
|
sessionId: z.string(),
|
|
28
28
|
name: z.string(),
|
|
29
29
|
scope: z.string(),
|
|
30
30
|
agent: z.string().optional(),
|
|
31
31
|
});
|
|
32
|
-
/**
|
|
33
|
-
export const
|
|
32
|
+
/** @deprecated Use {@link SessionStartPayloadSchema}. Kept for backward compatibility. */
|
|
33
|
+
export const OnSessionStartPayloadSchema = SessionStartPayloadSchema;
|
|
34
|
+
/** Zod schema for {@link SessionEndPayload}. */
|
|
35
|
+
export const SessionEndPayloadSchema = HookPayloadSchema.extend({
|
|
34
36
|
sessionId: z.string(),
|
|
35
37
|
duration: z.number(),
|
|
36
38
|
tasksCompleted: z.array(z.string()),
|
|
37
39
|
});
|
|
38
|
-
/**
|
|
39
|
-
export const
|
|
40
|
+
/** @deprecated Use {@link SessionEndPayloadSchema}. Kept for backward compatibility. */
|
|
41
|
+
export const OnSessionEndPayloadSchema = SessionEndPayloadSchema;
|
|
42
|
+
/** Zod schema for {@link PreToolUsePayload}. */
|
|
43
|
+
export const PreToolUsePayloadSchema = HookPayloadSchema.extend({
|
|
40
44
|
taskId: z.string(),
|
|
41
45
|
taskTitle: z.string(),
|
|
42
46
|
previousTask: z.string().optional(),
|
|
47
|
+
toolName: z.string().optional(),
|
|
48
|
+
toolInput: z.record(z.string(), z.unknown()).optional(),
|
|
43
49
|
});
|
|
44
|
-
/**
|
|
45
|
-
export const
|
|
50
|
+
/** @deprecated Use {@link PreToolUsePayloadSchema}. Kept for backward compatibility. */
|
|
51
|
+
export const OnToolStartPayloadSchema = PreToolUsePayloadSchema;
|
|
52
|
+
/** Zod schema for {@link PostToolUsePayload}. */
|
|
53
|
+
export const PostToolUsePayloadSchema = HookPayloadSchema.extend({
|
|
46
54
|
taskId: z.string(),
|
|
47
55
|
taskTitle: z.string(),
|
|
48
56
|
status: z.enum(['done', 'archived', 'cancelled']),
|
|
57
|
+
toolResult: z.record(z.string(), z.unknown()).optional(),
|
|
49
58
|
});
|
|
50
|
-
/**
|
|
51
|
-
export const
|
|
52
|
-
|
|
53
|
-
|
|
59
|
+
/** @deprecated Use {@link PostToolUsePayloadSchema}. Kept for backward compatibility. */
|
|
60
|
+
export const OnToolCompletePayloadSchema = PostToolUsePayloadSchema;
|
|
61
|
+
/** Zod schema for {@link NotificationPayload}. */
|
|
62
|
+
export const NotificationPayloadSchema = HookPayloadSchema.extend({
|
|
63
|
+
filePath: z.string().optional(),
|
|
64
|
+
changeType: z.enum(['write', 'create', 'delete']).optional(),
|
|
54
65
|
sizeBytes: z.number().optional(),
|
|
66
|
+
message: z.string().optional(),
|
|
55
67
|
});
|
|
56
|
-
/**
|
|
57
|
-
export const
|
|
68
|
+
/** @deprecated Use {@link NotificationPayloadSchema}. Kept for backward compatibility. */
|
|
69
|
+
export const OnFileChangePayloadSchema = NotificationPayloadSchema;
|
|
70
|
+
/** Zod schema for {@link PostToolUseFailurePayload}. */
|
|
71
|
+
export const PostToolUseFailurePayloadSchema = HookPayloadSchema.extend({
|
|
58
72
|
errorCode: z.union([z.number(), z.string()]),
|
|
59
73
|
message: z.string(),
|
|
60
74
|
domain: z.string().optional(),
|
|
@@ -62,15 +76,19 @@ export const OnErrorPayloadSchema = HookPayloadSchema.extend({
|
|
|
62
76
|
gateway: z.string().optional(),
|
|
63
77
|
stack: z.string().optional(),
|
|
64
78
|
});
|
|
65
|
-
/**
|
|
66
|
-
export const
|
|
79
|
+
/** @deprecated Use {@link PostToolUseFailurePayloadSchema}. Kept for backward compatibility. */
|
|
80
|
+
export const OnErrorPayloadSchema = PostToolUseFailurePayloadSchema;
|
|
81
|
+
/** Zod schema for {@link PromptSubmitPayload}. */
|
|
82
|
+
export const PromptSubmitPayloadSchema = HookPayloadSchema.extend({
|
|
67
83
|
gateway: z.string(),
|
|
68
84
|
domain: z.string(),
|
|
69
85
|
operation: z.string(),
|
|
70
86
|
source: z.string().optional(),
|
|
71
87
|
});
|
|
72
|
-
/**
|
|
73
|
-
export const
|
|
88
|
+
/** @deprecated Use {@link PromptSubmitPayloadSchema}. Kept for backward compatibility. */
|
|
89
|
+
export const OnPromptSubmitPayloadSchema = PromptSubmitPayloadSchema;
|
|
90
|
+
/** Zod schema for {@link ResponseCompletePayload}. */
|
|
91
|
+
export const ResponseCompletePayloadSchema = HookPayloadSchema.extend({
|
|
74
92
|
gateway: z.string(),
|
|
75
93
|
domain: z.string(),
|
|
76
94
|
operation: z.string(),
|
|
@@ -78,6 +96,38 @@ export const OnResponseCompletePayloadSchema = HookPayloadSchema.extend({
|
|
|
78
96
|
durationMs: z.number().optional(),
|
|
79
97
|
errorCode: z.string().optional(),
|
|
80
98
|
});
|
|
99
|
+
/** @deprecated Use {@link ResponseCompletePayloadSchema}. Kept for backward compatibility. */
|
|
100
|
+
export const OnResponseCompletePayloadSchema = ResponseCompletePayloadSchema;
|
|
101
|
+
/** Zod schema for {@link SubagentStartPayload}. */
|
|
102
|
+
export const SubagentStartPayloadSchema = HookPayloadSchema.extend({
|
|
103
|
+
agentId: z.string(),
|
|
104
|
+
role: z.string().optional(),
|
|
105
|
+
taskId: z.string().optional(),
|
|
106
|
+
});
|
|
107
|
+
/** Zod schema for {@link SubagentStopPayload}. */
|
|
108
|
+
export const SubagentStopPayloadSchema = HookPayloadSchema.extend({
|
|
109
|
+
agentId: z.string(),
|
|
110
|
+
status: z.enum(['complete', 'partial', 'blocked', 'failed']).optional(),
|
|
111
|
+
taskId: z.string().optional(),
|
|
112
|
+
summary: z.string().optional(),
|
|
113
|
+
});
|
|
114
|
+
/** Zod schema for {@link PreCompactPayload}. */
|
|
115
|
+
export const PreCompactPayloadSchema = HookPayloadSchema.extend({
|
|
116
|
+
tokensBefore: z.number().optional(),
|
|
117
|
+
reason: z.string().optional(),
|
|
118
|
+
});
|
|
119
|
+
/** Zod schema for {@link PostCompactPayload}. */
|
|
120
|
+
export const PostCompactPayloadSchema = HookPayloadSchema.extend({
|
|
121
|
+
tokensBefore: z.number().optional(),
|
|
122
|
+
tokensAfter: z.number().optional(),
|
|
123
|
+
success: z.boolean(),
|
|
124
|
+
});
|
|
125
|
+
/** Zod schema for {@link ConfigChangePayload}. */
|
|
126
|
+
export const ConfigChangePayloadSchema = HookPayloadSchema.extend({
|
|
127
|
+
key: z.string(),
|
|
128
|
+
previousValue: z.unknown().optional(),
|
|
129
|
+
newValue: z.unknown().optional(),
|
|
130
|
+
});
|
|
81
131
|
// ============================================================================
|
|
82
132
|
// CLEO Internal Event Payload Schemas
|
|
83
133
|
// ============================================================================
|
|
@@ -126,14 +176,21 @@ export const OnPatrolPayloadSchema = HookPayloadSchema.extend({
|
|
|
126
176
|
* this map fall back to the base {@link HookPayloadSchema}.
|
|
127
177
|
*/
|
|
128
178
|
const EVENT_SCHEMA_MAP = {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
179
|
+
// CAAMP canonical events (16)
|
|
180
|
+
SessionStart: SessionStartPayloadSchema,
|
|
181
|
+
SessionEnd: SessionEndPayloadSchema,
|
|
182
|
+
PreToolUse: PreToolUsePayloadSchema,
|
|
183
|
+
PostToolUse: PostToolUsePayloadSchema,
|
|
184
|
+
Notification: NotificationPayloadSchema,
|
|
185
|
+
PostToolUseFailure: PostToolUseFailurePayloadSchema,
|
|
186
|
+
PromptSubmit: PromptSubmitPayloadSchema,
|
|
187
|
+
ResponseComplete: ResponseCompletePayloadSchema,
|
|
188
|
+
SubagentStart: SubagentStartPayloadSchema,
|
|
189
|
+
SubagentStop: SubagentStopPayloadSchema,
|
|
190
|
+
PreCompact: PreCompactPayloadSchema,
|
|
191
|
+
PostCompact: PostCompactPayloadSchema,
|
|
192
|
+
ConfigChange: ConfigChangePayloadSchema,
|
|
193
|
+
// CLEO internal coordination events (5)
|
|
137
194
|
onWorkAvailable: OnWorkAvailablePayloadSchema,
|
|
138
195
|
onAgentSpawn: OnAgentSpawnPayloadSchema,
|
|
139
196
|
onAgentComplete: OnAgentCompletePayloadSchema,
|