@cleocode/core 2026.4.57 → 2026.4.59
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/adapters/adapter-registry.js +64 -0
- package/dist/adapters/adapter-registry.js.map +1 -0
- package/dist/adapters/discovery.js +83 -0
- package/dist/adapters/discovery.js.map +1 -0
- package/dist/adapters/index.js +9 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/manager.js +260 -0
- package/dist/adapters/manager.js.map +1 -0
- package/dist/admin/export-tasks.js +171 -0
- package/dist/admin/export-tasks.js.map +1 -0
- package/dist/admin/export.js +103 -0
- package/dist/admin/export.js.map +1 -0
- package/dist/admin/help.js +106 -0
- package/dist/admin/help.js.map +1 -0
- package/dist/admin/import-tasks.js +182 -0
- package/dist/admin/import-tasks.js.map +1 -0
- package/dist/admin/import.js +129 -0
- package/dist/admin/import.js.map +1 -0
- package/dist/admin/index.js +13 -0
- package/dist/admin/index.js.map +1 -0
- package/dist/adrs/find.js +134 -0
- package/dist/adrs/find.js.map +1 -0
- package/dist/adrs/index.js +15 -0
- package/dist/adrs/index.js.map +1 -0
- package/dist/adrs/link-pipeline.js +160 -0
- package/dist/adrs/link-pipeline.js.map +1 -0
- package/dist/adrs/list.js +43 -0
- package/dist/adrs/list.js.map +1 -0
- package/dist/adrs/parse.js +51 -0
- package/dist/adrs/parse.js.map +1 -0
- package/dist/adrs/show.js +22 -0
- package/dist/adrs/show.js.map +1 -0
- package/dist/adrs/sync.js +232 -0
- package/dist/adrs/sync.js.map +1 -0
- package/dist/adrs/types.js +9 -0
- package/dist/adrs/types.js.map +1 -0
- package/dist/adrs/validate.js +57 -0
- package/dist/adrs/validate.js.map +1 -0
- package/dist/agents/agent-registry.js +288 -0
- package/dist/agents/agent-registry.js.map +1 -0
- package/dist/agents/agent-schema.js +82 -0
- package/dist/agents/agent-schema.js.map +1 -0
- package/dist/agents/capacity.js +116 -0
- package/dist/agents/capacity.js.map +1 -0
- package/dist/agents/execution-learning.js +474 -0
- package/dist/agents/execution-learning.js.map +1 -0
- package/dist/agents/health-monitor.js +217 -0
- package/dist/agents/health-monitor.js.map +1 -0
- package/dist/agents/index.js +29 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/registry.js +314 -0
- package/dist/agents/registry.js.map +1 -0
- package/dist/agents/retry.js +215 -0
- package/dist/agents/retry.js.map +1 -0
- package/dist/audit-prune.js +94 -0
- package/dist/audit-prune.js.map +1 -0
- package/dist/audit.js +68 -0
- package/dist/audit.js.map +1 -0
- package/dist/backfill/index.js +229 -0
- package/dist/backfill/index.js.map +1 -0
- package/dist/bootstrap.js +435 -0
- package/dist/bootstrap.js.map +1 -0
- package/dist/caamp/adapter.js +259 -0
- package/dist/caamp/adapter.js.map +1 -0
- package/dist/caamp/capability-check.js +38 -0
- package/dist/caamp/capability-check.js.map +1 -0
- package/dist/caamp/index.js +21 -0
- package/dist/caamp/index.js.map +1 -0
- package/dist/caamp-init.js +16 -0
- package/dist/caamp-init.js.map +1 -0
- package/dist/cleo.js +322 -0
- package/dist/cleo.js.map +1 -0
- package/dist/code/index.js +14 -0
- package/dist/code/index.js.map +1 -0
- package/dist/code/outline.js +165 -0
- package/dist/code/outline.js.map +1 -0
- package/dist/code/parser.js +420 -0
- package/dist/code/parser.js.map +1 -0
- package/dist/code/search.js +135 -0
- package/dist/code/search.js.map +1 -0
- package/dist/code/unfold.js +155 -0
- package/dist/code/unfold.js.map +1 -0
- package/dist/codebase-map/analyzers/architecture.js +129 -0
- package/dist/codebase-map/analyzers/architecture.js.map +1 -0
- package/dist/codebase-map/analyzers/concerns.js +122 -0
- package/dist/codebase-map/analyzers/concerns.js.map +1 -0
- package/dist/codebase-map/analyzers/conventions.js +149 -0
- package/dist/codebase-map/analyzers/conventions.js.map +1 -0
- package/dist/codebase-map/analyzers/integrations.js +108 -0
- package/dist/codebase-map/analyzers/integrations.js.map +1 -0
- package/dist/codebase-map/analyzers/stack.js +117 -0
- package/dist/codebase-map/analyzers/stack.js.map +1 -0
- package/dist/codebase-map/analyzers/structure.js +137 -0
- package/dist/codebase-map/analyzers/structure.js.map +1 -0
- package/dist/codebase-map/analyzers/testing.js +118 -0
- package/dist/codebase-map/analyzers/testing.js.map +1 -0
- package/dist/codebase-map/index.js +57 -0
- package/dist/codebase-map/index.js.map +1 -0
- package/dist/codebase-map/store.js +122 -0
- package/dist/codebase-map/store.js.map +1 -0
- package/dist/codebase-map/summary.js +152 -0
- package/dist/codebase-map/summary.js.map +1 -0
- package/dist/compliance/index.js +288 -0
- package/dist/compliance/index.js.map +1 -0
- package/dist/compliance/protocol-enforcement.js +332 -0
- package/dist/compliance/protocol-enforcement.js.map +1 -0
- package/dist/compliance/protocol-rules.js +786 -0
- package/dist/compliance/protocol-rules.js.map +1 -0
- package/dist/compliance/protocol-types.js +79 -0
- package/dist/compliance/protocol-types.js.map +1 -0
- package/dist/compliance/store.js +53 -0
- package/dist/compliance/store.js.map +1 -0
- package/dist/conduit/conduit-client.js +107 -0
- package/dist/conduit/conduit-client.js.map +1 -0
- package/dist/conduit/factory.js +55 -0
- package/dist/conduit/factory.js.map +1 -0
- package/dist/conduit/http-transport.js +155 -0
- package/dist/conduit/http-transport.js.map +1 -0
- package/dist/conduit/local-transport.js +255 -0
- package/dist/conduit/local-transport.js.map +1 -0
- package/dist/conduit/sse-transport.js +299 -0
- package/dist/conduit/sse-transport.js.map +1 -0
- package/dist/config/build-config.js +29 -0
- package/dist/config/build-config.js.map +1 -0
- package/dist/config.js +407 -0
- package/dist/config.js.map +1 -0
- package/dist/constants.js +18 -0
- package/dist/constants.js.map +1 -0
- package/dist/context/index.js +137 -0
- package/dist/context/index.js.map +1 -0
- package/dist/crypto/credentials.js +219 -0
- package/dist/crypto/credentials.js.map +1 -0
- package/dist/discovery.js +182 -0
- package/dist/discovery.js.map +1 -0
- package/dist/engine-result.js +12 -0
- package/dist/engine-result.js.map +1 -0
- package/dist/error-catalog.js +404 -0
- package/dist/error-catalog.js.map +1 -0
- package/dist/error-registry.js +393 -0
- package/dist/error-registry.js.map +1 -0
- package/dist/errors.js +173 -0
- package/dist/errors.js.map +1 -0
- package/dist/hooks/handlers/agent-hooks.js +106 -0
- package/dist/hooks/handlers/agent-hooks.js.map +1 -0
- package/dist/hooks/handlers/conduit-hooks.js +229 -0
- package/dist/hooks/handlers/conduit-hooks.js.map +1 -0
- 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.js +52 -0
- package/dist/hooks/handlers/error-hooks.js.map +1 -0
- package/dist/hooks/handlers/file-hooks.js +104 -0
- package/dist/hooks/handlers/file-hooks.js.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 +37 -0
- package/dist/hooks/handlers/index.js.map +1 -0
- package/dist/hooks/handlers/intelligence-hooks.js +69 -0
- package/dist/hooks/handlers/intelligence-hooks.js.map +1 -0
- package/dist/hooks/handlers/memory-bridge-refresh.js +42 -0
- package/dist/hooks/handlers/memory-bridge-refresh.js.map +1 -0
- package/dist/hooks/handlers/notification-hooks.js +62 -0
- package/dist/hooks/handlers/notification-hooks.js.map +1 -0
- package/dist/hooks/handlers/session-hooks.js +190 -0
- package/dist/hooks/handlers/session-hooks.js.map +1 -0
- package/dist/hooks/handlers/task-hooks.js +90 -0
- package/dist/hooks/handlers/task-hooks.js.map +1 -0
- package/dist/hooks/handlers/watchdog-hooks.js +162 -0
- package/dist/hooks/handlers/watchdog-hooks.js.map +1 -0
- package/dist/hooks/handlers/work-capture-hooks.js +165 -0
- package/dist/hooks/handlers/work-capture-hooks.js.map +1 -0
- package/dist/hooks/index.js +13 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/payload-schemas.js +220 -0
- package/dist/hooks/payload-schemas.js.map +1 -0
- package/dist/hooks/provider-hooks.js +66 -0
- package/dist/hooks/provider-hooks.js.map +1 -0
- package/dist/hooks/registry.js +229 -0
- package/dist/hooks/registry.js.map +1 -0
- package/dist/hooks/types.js +66 -0
- package/dist/hooks/types.js.map +1 -0
- package/dist/hooks.js +136 -0
- package/dist/hooks.js.map +1 -0
- package/dist/init.js +959 -0
- package/dist/init.js.map +1 -0
- package/dist/inject/index.js +82 -0
- package/dist/inject/index.js.map +1 -0
- package/dist/injection.js +377 -0
- package/dist/injection.js.map +1 -0
- package/dist/intelligence/adaptive-validation.js +497 -0
- package/dist/intelligence/adaptive-validation.js.map +1 -0
- package/dist/intelligence/impact.js +675 -0
- package/dist/intelligence/impact.js.map +1 -0
- package/dist/intelligence/index.js +22 -0
- package/dist/intelligence/index.js.map +1 -0
- package/dist/intelligence/patterns.js +492 -0
- package/dist/intelligence/patterns.js.map +1 -0
- package/dist/intelligence/prediction.js +499 -0
- package/dist/intelligence/prediction.js.map +1 -0
- package/dist/intelligence/types.js +13 -0
- package/dist/intelligence/types.js.map +1 -0
- package/dist/issue/create.js +121 -0
- package/dist/issue/create.js.map +1 -0
- package/dist/issue/diagnostics.js +59 -0
- package/dist/issue/diagnostics.js.map +1 -0
- package/dist/issue/index.js +10 -0
- package/dist/issue/index.js.map +1 -0
- package/dist/issue/template-parser.js +267 -0
- package/dist/issue/template-parser.js.map +1 -0
- package/dist/json-schema-validator.js +76 -0
- package/dist/json-schema-validator.js.map +1 -0
- package/dist/lib/index.js +11 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/retry.js +152 -0
- package/dist/lib/retry.js.map +1 -0
- package/dist/lib/tree-sitter-languages.js +75 -0
- package/dist/lib/tree-sitter-languages.js.map +1 -0
- package/dist/lifecycle/chain-composition.js +152 -0
- package/dist/lifecycle/chain-composition.js.map +1 -0
- package/dist/lifecycle/chain-store.js +246 -0
- package/dist/lifecycle/chain-store.js.map +1 -0
- package/dist/lifecycle/consolidate-rcasd.js +352 -0
- package/dist/lifecycle/consolidate-rcasd.js.map +1 -0
- package/dist/lifecycle/default-chain.js +176 -0
- package/dist/lifecycle/default-chain.js.map +1 -0
- package/dist/lifecycle/evidence.js +180 -0
- package/dist/lifecycle/evidence.js.map +1 -0
- package/dist/lifecycle/frontmatter.js +363 -0
- package/dist/lifecycle/frontmatter.js.map +1 -0
- package/dist/lifecycle/index.js +756 -0
- package/dist/lifecycle/index.js.map +1 -0
- package/dist/lifecycle/pipeline.js +656 -0
- package/dist/lifecycle/pipeline.js.map +1 -0
- package/dist/lifecycle/rcasd-index.js +326 -0
- package/dist/lifecycle/rcasd-index.js.map +1 -0
- package/dist/lifecycle/rcasd-paths.js +220 -0
- package/dist/lifecycle/rcasd-paths.js.map +1 -0
- package/dist/lifecycle/resume.js +864 -0
- package/dist/lifecycle/resume.js.map +1 -0
- package/dist/lifecycle/stage-artifacts.js +94 -0
- package/dist/lifecycle/stage-artifacts.js.map +1 -0
- package/dist/lifecycle/stage-guidance.js +234 -0
- package/dist/lifecycle/stage-guidance.js.map +1 -0
- package/dist/lifecycle/stages.js +534 -0
- package/dist/lifecycle/stages.js.map +1 -0
- package/dist/lifecycle/state-machine.js +516 -0
- package/dist/lifecycle/state-machine.js.map +1 -0
- package/dist/lifecycle/tessera-engine.js +249 -0
- package/dist/lifecycle/tessera-engine.js.map +1 -0
- package/dist/logger.js +140 -0
- package/dist/logger.js.map +1 -0
- package/dist/memory/anthropic-key-resolver.js +105 -0
- package/dist/memory/anthropic-key-resolver.js.map +1 -0
- package/dist/memory/auto-extract.js +77 -0
- package/dist/memory/auto-extract.js.map +1 -0
- package/dist/memory/brain-backfill.js +389 -0
- package/dist/memory/brain-backfill.js.map +1 -0
- package/dist/memory/brain-consolidator.js +294 -0
- package/dist/memory/brain-consolidator.js.map +1 -0
- package/dist/memory/brain-embedding.js +66 -0
- package/dist/memory/brain-embedding.js.map +1 -0
- package/dist/memory/brain-export.js +239 -0
- package/dist/memory/brain-export.js.map +1 -0
- package/dist/memory/brain-lifecycle.js +841 -0
- package/dist/memory/brain-lifecycle.js.map +1 -0
- package/dist/memory/brain-links.js +161 -0
- package/dist/memory/brain-links.js.map +1 -0
- package/dist/memory/brain-maintenance.js +125 -0
- package/dist/memory/brain-maintenance.js.map +1 -0
- package/dist/memory/brain-migration.js +149 -0
- package/dist/memory/brain-migration.js.map +1 -0
- package/dist/memory/brain-purge.js +243 -0
- package/dist/memory/brain-purge.js.map +1 -0
- package/dist/memory/brain-reasoning.js +215 -0
- package/dist/memory/brain-reasoning.js.map +1 -0
- package/dist/memory/brain-retrieval.js +1088 -0
- package/dist/memory/brain-retrieval.js.map +1 -0
- package/dist/memory/brain-row-types.js +10 -0
- package/dist/memory/brain-row-types.js.map +1 -0
- package/dist/memory/brain-search.js +613 -0
- package/dist/memory/brain-search.js.map +1 -0
- package/dist/memory/brain-similarity.js +145 -0
- package/dist/memory/brain-similarity.js.map +1 -0
- package/dist/memory/brain-stdp.js +297 -0
- package/dist/memory/brain-stdp.js.map +1 -0
- package/dist/memory/claude-mem-migration.js +277 -0
- package/dist/memory/claude-mem-migration.js.map +1 -0
- package/dist/memory/decision-cross-link.js +228 -0
- package/dist/memory/decision-cross-link.js.map +1 -0
- package/dist/memory/decisions.js +242 -0
- package/dist/memory/decisions.js.map +1 -0
- package/dist/memory/edge-types.js +31 -0
- package/dist/memory/edge-types.js.map +1 -0
- package/dist/memory/embedding-local.js +102 -0
- package/dist/memory/embedding-local.js.map +1 -0
- package/dist/memory/embedding-queue.js +271 -0
- package/dist/memory/embedding-queue.js.map +1 -0
- package/dist/memory/embedding-worker.js +58 -0
- package/dist/memory/embedding-worker.js.map +1 -0
- package/dist/memory/engine-compat.js +1597 -0
- package/dist/memory/engine-compat.js.map +1 -0
- package/dist/memory/extraction-gate.js +459 -0
- package/dist/memory/extraction-gate.js.map +1 -0
- package/dist/memory/graph-auto-populate.js +148 -0
- package/dist/memory/graph-auto-populate.js.map +1 -0
- package/dist/memory/graph-memory-bridge.js +517 -0
- package/dist/memory/graph-memory-bridge.js.map +1 -0
- package/dist/memory/graph-queries.js +290 -0
- package/dist/memory/graph-queries.js.map +1 -0
- package/dist/memory/index.js +1148 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/learnings.js +197 -0
- package/dist/memory/learnings.js.map +1 -0
- package/dist/memory/llm-extraction.js +425 -0
- package/dist/memory/llm-extraction.js.map +1 -0
- package/dist/memory/memory-bridge.js +382 -0
- package/dist/memory/memory-bridge.js.map +1 -0
- package/dist/memory/mental-model-injection.js +61 -0
- package/dist/memory/mental-model-injection.js.map +1 -0
- package/dist/memory/mental-model-queue.js +211 -0
- package/dist/memory/mental-model-queue.js.map +1 -0
- package/dist/memory/observer-reflector.js +626 -0
- package/dist/memory/observer-reflector.js.map +1 -0
- package/dist/memory/patterns.js +192 -0
- package/dist/memory/patterns.js.map +1 -0
- package/dist/memory/pipeline-manifest-sqlite.js +975 -0
- package/dist/memory/pipeline-manifest-sqlite.js.map +1 -0
- package/dist/memory/quality-feedback.js +449 -0
- package/dist/memory/quality-feedback.js.map +1 -0
- package/dist/memory/quality-scoring.js +182 -0
- package/dist/memory/quality-scoring.js.map +1 -0
- package/dist/memory/session-memory.js +331 -0
- package/dist/memory/session-memory.js.map +1 -0
- package/dist/memory/sleep-consolidation.js +706 -0
- package/dist/memory/sleep-consolidation.js.map +1 -0
- package/dist/memory/temporal-supersession.js +403 -0
- package/dist/memory/temporal-supersession.js.map +1 -0
- package/dist/metrics/ab-test.js +260 -0
- package/dist/metrics/ab-test.js.map +1 -0
- package/dist/metrics/aggregation.js +363 -0
- package/dist/metrics/aggregation.js.map +1 -0
- package/dist/metrics/common.js +64 -0
- package/dist/metrics/common.js.map +1 -0
- package/dist/metrics/enums.js +78 -0
- package/dist/metrics/enums.js.map +1 -0
- package/dist/metrics/index.js +19 -0
- package/dist/metrics/index.js.map +1 -0
- package/dist/metrics/model-provider-registry.js +88 -0
- package/dist/metrics/model-provider-registry.js.map +1 -0
- package/dist/metrics/otel-integration.js +263 -0
- package/dist/metrics/otel-integration.js.map +1 -0
- package/dist/metrics/provider-detection.js +103 -0
- package/dist/metrics/provider-detection.js.map +1 -0
- package/dist/metrics/token-estimation.js +253 -0
- package/dist/metrics/token-estimation.js.map +1 -0
- package/dist/metrics/token-service.js +450 -0
- package/dist/metrics/token-service.js.map +1 -0
- package/dist/migration/agent-outputs.js +316 -0
- package/dist/migration/agent-outputs.js.map +1 -0
- package/dist/migration/checksum.js +92 -0
- package/dist/migration/checksum.js.map +1 -0
- package/dist/migration/index.js +282 -0
- package/dist/migration/index.js.map +1 -0
- package/dist/migration/logger.js +360 -0
- package/dist/migration/logger.js.map +1 -0
- package/dist/migration/preflight.js +9 -0
- package/dist/migration/preflight.js.map +1 -0
- package/dist/migration/state.js +421 -0
- package/dist/migration/state.js.map +1 -0
- package/dist/migration/validate.js +241 -0
- package/dist/migration/validate.js.map +1 -0
- package/dist/mvi-helpers.js +73 -0
- package/dist/mvi-helpers.js.map +1 -0
- package/dist/nexus/deps.js +375 -0
- package/dist/nexus/deps.js.map +1 -0
- package/dist/nexus/discover.js +288 -0
- package/dist/nexus/discover.js.map +1 -0
- package/dist/nexus/hash.js +10 -0
- package/dist/nexus/hash.js.map +1 -0
- package/dist/nexus/index.js +40 -0
- package/dist/nexus/index.js.map +1 -0
- package/dist/nexus/migrate-json-to-sqlite.js +115 -0
- package/dist/nexus/migrate-json-to-sqlite.js.map +1 -0
- package/dist/nexus/nexus-bridge.js +321 -0
- package/dist/nexus/nexus-bridge.js.map +1 -0
- package/dist/nexus/permissions.js +105 -0
- package/dist/nexus/permissions.js.map +1 -0
- package/dist/nexus/query.js +175 -0
- package/dist/nexus/query.js.map +1 -0
- package/dist/nexus/registry.js +665 -0
- package/dist/nexus/registry.js.map +1 -0
- package/dist/nexus/sharing/index.js +288 -0
- package/dist/nexus/sharing/index.js.map +1 -0
- package/dist/nexus/transfer-types.js +8 -0
- package/dist/nexus/transfer-types.js.map +1 -0
- package/dist/nexus/transfer.js +271 -0
- package/dist/nexus/transfer.js.map +1 -0
- package/dist/nexus/workspace.js +355 -0
- package/dist/nexus/workspace.js.map +1 -0
- package/dist/observability/index.js +103 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/log-filter.js +63 -0
- package/dist/observability/log-filter.js.map +1 -0
- package/dist/observability/log-parser.js +99 -0
- package/dist/observability/log-parser.js.map +1 -0
- package/dist/observability/log-reader.js +139 -0
- package/dist/observability/log-reader.js.map +1 -0
- package/dist/observability/types.js +19 -0
- package/dist/observability/types.js.map +1 -0
- package/dist/orchestration/analyze.js +107 -0
- package/dist/orchestration/analyze.js.map +1 -0
- package/dist/orchestration/bootstrap.js +132 -0
- package/dist/orchestration/bootstrap.js.map +1 -0
- package/dist/orchestration/context.js +56 -0
- package/dist/orchestration/context.js.map +1 -0
- package/dist/orchestration/critical-path.js +100 -0
- package/dist/orchestration/critical-path.js.map +1 -0
- package/dist/orchestration/hierarchy.js +183 -0
- package/dist/orchestration/hierarchy.js.map +1 -0
- package/dist/orchestration/index.js +287 -0
- package/dist/orchestration/index.js.map +1 -0
- package/dist/orchestration/parallel.js +89 -0
- package/dist/orchestration/parallel.js.map +1 -0
- package/dist/orchestration/protocol-validators.js +815 -0
- package/dist/orchestration/protocol-validators.js.map +1 -0
- package/dist/orchestration/skill-ops.js +98 -0
- package/dist/orchestration/skill-ops.js.map +1 -0
- package/dist/orchestration/status.js +107 -0
- package/dist/orchestration/status.js.map +1 -0
- package/dist/orchestration/unblock.js +103 -0
- package/dist/orchestration/unblock.js.map +1 -0
- package/dist/orchestration/validate-spawn.js +67 -0
- package/dist/orchestration/validate-spawn.js.map +1 -0
- package/dist/orchestration/waves.js +86 -0
- package/dist/orchestration/waves.js.map +1 -0
- package/dist/otel/index.js +163 -0
- package/dist/otel/index.js.map +1 -0
- package/dist/output.js +164 -0
- package/dist/output.js.map +1 -0
- package/dist/pagination.js +64 -0
- package/dist/pagination.js.map +1 -0
- package/dist/paths.js +882 -0
- package/dist/paths.js.map +1 -0
- package/dist/phases/deps.js +372 -0
- package/dist/phases/deps.js.map +1 -0
- package/dist/phases/index.js +349 -0
- package/dist/phases/index.js.map +1 -0
- package/dist/pipeline/index.js +10 -0
- package/dist/pipeline/index.js.map +1 -0
- package/dist/pipeline/phase.js +45 -0
- package/dist/pipeline/phase.js.map +1 -0
- package/dist/platform.js +211 -0
- package/dist/platform.js.map +1 -0
- package/dist/project-info.js +84 -0
- package/dist/project-info.js.map +1 -0
- package/dist/reconciliation/index.js +10 -0
- package/dist/reconciliation/index.js.map +1 -0
- package/dist/reconciliation/link-store.js +175 -0
- package/dist/reconciliation/link-store.js.map +1 -0
- package/dist/reconciliation/reconciliation-engine.js +298 -0
- package/dist/reconciliation/reconciliation-engine.js.map +1 -0
- package/dist/release/artifacts.js +427 -0
- package/dist/release/artifacts.js.map +1 -0
- package/dist/release/changelog-writer.js +151 -0
- package/dist/release/changelog-writer.js.map +1 -0
- package/dist/release/channel.js +144 -0
- package/dist/release/channel.js.map +1 -0
- package/dist/release/ci.js +166 -0
- package/dist/release/ci.js.map +1 -0
- package/dist/release/github-pr.js +225 -0
- package/dist/release/github-pr.js.map +1 -0
- package/dist/release/guards.js +116 -0
- package/dist/release/guards.js.map +1 -0
- package/dist/release/index.js +22 -0
- package/dist/release/index.js.map +1 -0
- package/dist/release/release-config.js +158 -0
- package/dist/release/release-config.js.map +1 -0
- package/dist/release/release-manifest.js +1019 -0
- package/dist/release/release-manifest.js.map +1 -0
- package/dist/release/version-bump.js +255 -0
- package/dist/release/version-bump.js.map +1 -0
- package/dist/remote/index.js +257 -0
- package/dist/remote/index.js.map +1 -0
- package/dist/repair.js +130 -0
- package/dist/repair.js.map +1 -0
- package/dist/research/index.js +2 -0
- package/dist/research/index.js.map +1 -0
- package/dist/roadmap/index.js +59 -0
- package/dist/roadmap/index.js.map +1 -0
- package/dist/routing/capability-matrix.js +1556 -0
- package/dist/routing/capability-matrix.js.map +1 -0
- package/dist/routing/index.js +9 -0
- package/dist/routing/index.js.map +1 -0
- package/dist/scaffold.js +1937 -0
- package/dist/scaffold.js.map +1 -0
- package/dist/schema-management.js +295 -0
- package/dist/schema-management.js.map +1 -0
- package/dist/security/index.js +9 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/input-sanitization.js +326 -0
- package/dist/security/input-sanitization.js.map +1 -0
- package/dist/sequence/index.js +295 -0
- package/dist/sequence/index.js.map +1 -0
- package/dist/sessions/assumptions.js +54 -0
- package/dist/sessions/assumptions.js.map +1 -0
- package/dist/sessions/briefing.js +377 -0
- package/dist/sessions/briefing.js.map +1 -0
- package/dist/sessions/context-alert.js +222 -0
- package/dist/sessions/context-alert.js.map +1 -0
- package/dist/sessions/context-inject.js +61 -0
- package/dist/sessions/context-inject.js.map +1 -0
- package/dist/sessions/context-monitor.js +98 -0
- package/dist/sessions/context-monitor.js.map +1 -0
- package/dist/sessions/decisions.js +65 -0
- package/dist/sessions/decisions.js.map +1 -0
- package/dist/sessions/find.js +65 -0
- package/dist/sessions/find.js.map +1 -0
- package/dist/sessions/handoff.js +328 -0
- package/dist/sessions/handoff.js.map +1 -0
- package/dist/sessions/hitl-warnings.js +254 -0
- package/dist/sessions/hitl-warnings.js.map +1 -0
- package/dist/sessions/index.js +327 -0
- package/dist/sessions/index.js.map +1 -0
- package/dist/sessions/session-archive.js +40 -0
- package/dist/sessions/session-archive.js.map +1 -0
- package/dist/sessions/session-cleanup.js +59 -0
- package/dist/sessions/session-cleanup.js.map +1 -0
- package/dist/sessions/session-drift.js +134 -0
- package/dist/sessions/session-drift.js.map +1 -0
- package/dist/sessions/session-enforcement.js +144 -0
- package/dist/sessions/session-enforcement.js.map +1 -0
- package/dist/sessions/session-grade.js +253 -0
- package/dist/sessions/session-grade.js.map +1 -0
- package/dist/sessions/session-history.js +42 -0
- package/dist/sessions/session-history.js.map +1 -0
- package/dist/sessions/session-id.js +81 -0
- package/dist/sessions/session-id.js.map +1 -0
- package/dist/sessions/session-memory-bridge.js +30 -0
- package/dist/sessions/session-memory-bridge.js.map +1 -0
- package/dist/sessions/session-show.js +24 -0
- package/dist/sessions/session-show.js.map +1 -0
- package/dist/sessions/session-stats.js +69 -0
- package/dist/sessions/session-stats.js.map +1 -0
- package/dist/sessions/session-suspend.js +39 -0
- package/dist/sessions/session-suspend.js.map +1 -0
- package/dist/sessions/session-switch.js +51 -0
- package/dist/sessions/session-switch.js.map +1 -0
- package/dist/sessions/session-view.js +76 -0
- package/dist/sessions/session-view.js.map +1 -0
- package/dist/sessions/snapshot.js +213 -0
- package/dist/sessions/snapshot.js.map +1 -0
- package/dist/sessions/statusline-setup.js +85 -0
- package/dist/sessions/statusline-setup.js.map +1 -0
- package/dist/sessions/types.js +8 -0
- package/dist/sessions/types.js.map +1 -0
- package/dist/skills/agents/config.js +94 -0
- package/dist/skills/agents/config.js.map +1 -0
- package/dist/skills/agents/install.js +116 -0
- package/dist/skills/agents/install.js.map +1 -0
- package/dist/skills/agents/registry.js +161 -0
- package/dist/skills/agents/registry.js.map +1 -0
- package/dist/skills/discovery.js +333 -0
- package/dist/skills/discovery.js.map +1 -0
- package/dist/skills/dispatch.js +347 -0
- package/dist/skills/dispatch.js.map +1 -0
- package/dist/skills/dynamic-skill-generator.js +87 -0
- package/dist/skills/dynamic-skill-generator.js.map +1 -0
- package/dist/skills/index.js +44 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/injection/subagent.js +195 -0
- package/dist/skills/injection/subagent.js.map +1 -0
- package/dist/skills/injection/token.js +260 -0
- package/dist/skills/injection/token.js.map +1 -0
- package/dist/skills/install.js +40 -0
- package/dist/skills/install.js.map +1 -0
- package/dist/skills/manifests/contribution.js +175 -0
- package/dist/skills/manifests/contribution.js.map +1 -0
- package/dist/skills/manifests/research.js +281 -0
- package/dist/skills/manifests/research.js.map +1 -0
- package/dist/skills/manifests/resolver.js +146 -0
- package/dist/skills/manifests/resolver.js.map +1 -0
- package/dist/skills/marketplace.js +90 -0
- package/dist/skills/marketplace.js.map +1 -0
- package/dist/skills/orchestrator/spawn.js +178 -0
- package/dist/skills/orchestrator/spawn.js.map +1 -0
- package/dist/skills/orchestrator/startup.js +451 -0
- package/dist/skills/orchestrator/startup.js.map +1 -0
- package/dist/skills/orchestrator/validator.js +301 -0
- package/dist/skills/orchestrator/validator.js.map +1 -0
- package/dist/skills/precedence-integration.js +73 -0
- package/dist/skills/precedence-integration.js.map +1 -0
- package/dist/skills/precedence-types.js +16 -0
- package/dist/skills/precedence-types.js.map +1 -0
- package/dist/skills/routing-table.js +63 -0
- package/dist/skills/routing-table.js.map +1 -0
- package/dist/skills/skill-paths.js +217 -0
- package/dist/skills/skill-paths.js.map +1 -0
- package/dist/skills/test-utility.js +55 -0
- package/dist/skills/test-utility.js.map +1 -0
- package/dist/skills/types.js +118 -0
- package/dist/skills/types.js.map +1 -0
- package/dist/skills/validation.js +183 -0
- package/dist/skills/validation.js.map +1 -0
- package/dist/skills/version.js +57 -0
- package/dist/skills/version.js.map +1 -0
- package/dist/snapshot/index.js +188 -0
- package/dist/snapshot/index.js.map +1 -0
- package/dist/spawn/adapter-registry.js +246 -0
- package/dist/spawn/adapter-registry.js.map +1 -0
- package/dist/spawn/index.js +10 -0
- package/dist/spawn/index.js.map +1 -0
- package/dist/stats/index.js +350 -0
- package/dist/stats/index.js.map +1 -0
- package/dist/stats/workflow-telemetry.js +400 -0
- package/dist/stats/workflow-telemetry.js.map +1 -0
- package/dist/sticky/archive.js +47 -0
- package/dist/sticky/archive.js.map +1 -0
- package/dist/sticky/convert.js +235 -0
- package/dist/sticky/convert.js.map +1 -0
- package/dist/sticky/create.js +48 -0
- package/dist/sticky/create.js.map +1 -0
- package/dist/sticky/id.js +35 -0
- package/dist/sticky/id.js.map +1 -0
- package/dist/sticky/index.js +16 -0
- package/dist/sticky/index.js.map +1 -0
- package/dist/sticky/list.js +57 -0
- package/dist/sticky/list.js.map +1 -0
- package/dist/sticky/purge.js +45 -0
- package/dist/sticky/purge.js.map +1 -0
- package/dist/sticky/show.js +42 -0
- package/dist/sticky/show.js.map +1 -0
- package/dist/sticky/types.js +10 -0
- package/dist/sticky/types.js.map +1 -0
- package/dist/store/agent-registry-accessor.js +886 -0
- package/dist/store/agent-registry-accessor.js.map +1 -0
- package/dist/store/api-key-kdf.js +84 -0
- package/dist/store/api-key-kdf.js.map +1 -0
- package/dist/store/atomic.js +167 -0
- package/dist/store/atomic.js.map +1 -0
- package/dist/store/backup-crypto.js +184 -0
- package/dist/store/backup-crypto.js.map +1 -0
- package/dist/store/backup-pack.js +581 -0
- package/dist/store/backup-pack.js.map +1 -0
- package/dist/store/backup-unpack.js +449 -0
- package/dist/store/backup-unpack.js.map +1 -0
- package/dist/store/backup.js +94 -0
- package/dist/store/backup.js.map +1 -0
- package/dist/store/brain-accessor.js +429 -0
- package/dist/store/brain-accessor.js.map +1 -0
- package/dist/store/brain-schema.js +628 -0
- package/dist/store/brain-schema.js.map +1 -0
- package/dist/store/brain-sqlite.js +320 -0
- package/dist/store/brain-sqlite.js.map +1 -0
- package/dist/store/cache.js +168 -0
- package/dist/store/cache.js.map +1 -0
- package/dist/store/chain-schema.js +51 -0
- package/dist/store/chain-schema.js.map +1 -0
- package/dist/store/cleanup-legacy.js +171 -0
- package/dist/store/cleanup-legacy.js.map +1 -0
- package/dist/store/conduit-sqlite.js +570 -0
- package/dist/store/conduit-sqlite.js.map +1 -0
- package/dist/store/converters.js +124 -0
- package/dist/store/converters.js.map +1 -0
- package/dist/store/cross-db-cleanup.js +319 -0
- package/dist/store/cross-db-cleanup.js.map +1 -0
- package/dist/store/data-accessor.js +26 -0
- package/dist/store/data-accessor.js.map +1 -0
- package/dist/store/data-safety-central.js +269 -0
- package/dist/store/data-safety-central.js.map +1 -0
- package/dist/store/data-safety.js +274 -0
- package/dist/store/data-safety.js.map +1 -0
- package/dist/store/db-helpers.js +241 -0
- package/dist/store/db-helpers.js.map +1 -0
- package/dist/store/export.js +155 -0
- package/dist/store/export.js.map +1 -0
- package/dist/store/file-utils.js +270 -0
- package/dist/store/file-utils.js.map +1 -0
- package/dist/store/git-checkpoint.js +365 -0
- package/dist/store/git-checkpoint.js.map +1 -0
- package/dist/store/global-salt.js +147 -0
- package/dist/store/global-salt.js.map +1 -0
- package/dist/store/import-logging.js +139 -0
- package/dist/store/import-logging.js.map +1 -0
- package/dist/store/import-remap.js +145 -0
- package/dist/store/import-remap.js.map +1 -0
- package/dist/store/import-sort.js +121 -0
- package/dist/store/import-sort.js.map +1 -0
- package/dist/store/index.js +29 -0
- package/dist/store/index.js.map +1 -0
- package/dist/store/json.js +208 -0
- package/dist/store/json.js.map +1 -0
- package/dist/store/lifecycle-store.js +249 -0
- package/dist/store/lifecycle-store.js.map +1 -0
- package/dist/store/lock.js +70 -0
- package/dist/store/lock.js.map +1 -0
- package/dist/store/migrate-signaldock-to-conduit.js +562 -0
- package/dist/store/migrate-signaldock-to-conduit.js.map +1 -0
- package/dist/store/migration-manager.js +403 -0
- package/dist/store/migration-manager.js.map +1 -0
- package/dist/store/migration-sqlite.js +676 -0
- package/dist/store/migration-sqlite.js.map +1 -0
- package/dist/store/nexus-schema.js +277 -0
- package/dist/store/nexus-schema.js.map +1 -0
- package/dist/store/nexus-sqlite.js +242 -0
- package/dist/store/nexus-sqlite.js.map +1 -0
- package/dist/store/nexus-validation-schemas.js +40 -0
- package/dist/store/nexus-validation-schemas.js.map +1 -0
- package/dist/store/parsers.js +37 -0
- package/dist/store/parsers.js.map +1 -0
- package/dist/store/project-detect.js +457 -0
- package/dist/store/project-detect.js.map +1 -0
- package/dist/store/provider.js +101 -0
- package/dist/store/provider.js.map +1 -0
- package/dist/store/regenerators.js +207 -0
- package/dist/store/regenerators.js.map +1 -0
- package/dist/store/restore-conflict-report.js +206 -0
- package/dist/store/restore-conflict-report.js.map +1 -0
- package/dist/store/restore-json-merge.js +454 -0
- package/dist/store/restore-json-merge.js.map +1 -0
- package/dist/store/safety-data-accessor.js +257 -0
- package/dist/store/safety-data-accessor.js.map +1 -0
- package/dist/store/schema.js +7 -0
- package/dist/store/schema.js.map +1 -0
- package/dist/store/session-store.js +219 -0
- package/dist/store/session-store.js.map +1 -0
- package/dist/store/signaldock-sqlite.js +550 -0
- package/dist/store/signaldock-sqlite.js.map +1 -0
- package/dist/store/sqlite-backup.js +498 -0
- package/dist/store/sqlite-backup.js.map +1 -0
- package/dist/store/sqlite-data-accessor.js +788 -0
- package/dist/store/sqlite-data-accessor.js.map +1 -0
- package/dist/store/sqlite.js +483 -0
- package/dist/store/sqlite.js.map +1 -0
- package/dist/store/status-registry.js +8 -0
- package/dist/store/status-registry.js.map +1 -0
- package/dist/store/t310-readiness.js +115 -0
- package/dist/store/t310-readiness.js.map +1 -0
- package/dist/store/task-store.js +358 -0
- package/dist/store/task-store.js.map +1 -0
- package/dist/store/tasks-schema.js +610 -0
- package/dist/store/tasks-schema.js.map +1 -0
- package/dist/store/typed-query.js +15 -0
- package/dist/store/typed-query.js.map +1 -0
- package/dist/store/validation-schemas.js +278 -0
- package/dist/store/validation-schemas.js.map +1 -0
- package/dist/system/archive-analytics.js +277 -0
- package/dist/system/archive-analytics.js.map +1 -0
- package/dist/system/archive-stats.js +64 -0
- package/dist/system/archive-stats.js.map +1 -0
- package/dist/system/audit.js +145 -0
- package/dist/system/audit.js.map +1 -0
- package/dist/system/backup.js +280 -0
- package/dist/system/backup.js.map +1 -0
- package/dist/system/cleanup.js +134 -0
- package/dist/system/cleanup.js.map +1 -0
- package/dist/system/dependencies.js +466 -0
- package/dist/system/dependencies.js.map +1 -0
- package/dist/system/health.js +1207 -0
- package/dist/system/health.js.map +1 -0
- package/dist/system/index.js +18 -0
- package/dist/system/index.js.map +1 -0
- package/dist/system/inject-generate.js +122 -0
- package/dist/system/inject-generate.js.map +1 -0
- package/dist/system/labels.js +38 -0
- package/dist/system/labels.js.map +1 -0
- package/dist/system/metrics.js +61 -0
- package/dist/system/metrics.js.map +1 -0
- package/dist/system/migrate.js +43 -0
- package/dist/system/migrate.js.map +1 -0
- package/dist/system/platform-paths.js +80 -0
- package/dist/system/platform-paths.js.map +1 -0
- package/dist/system/runtime.js +161 -0
- package/dist/system/runtime.js.map +1 -0
- package/dist/system/safestop.js +89 -0
- package/dist/system/safestop.js.map +1 -0
- package/dist/system/storage-preflight.js +123 -0
- package/dist/system/storage-preflight.js.map +1 -0
- package/dist/task-work/index.js +159 -0
- package/dist/task-work/index.js.map +1 -0
- package/dist/tasks/add.js +837 -0
- package/dist/tasks/add.js.map +1 -0
- package/dist/tasks/analyze.js +85 -0
- package/dist/tasks/analyze.js.map +1 -0
- package/dist/tasks/archive.js +90 -0
- package/dist/tasks/archive.js.map +1 -0
- package/dist/tasks/atomicity.js +83 -0
- package/dist/tasks/atomicity.js.map +1 -0
- package/dist/tasks/cancel-ops.js +83 -0
- package/dist/tasks/cancel-ops.js.map +1 -0
- package/dist/tasks/complete.js +252 -0
- package/dist/tasks/complete.js.map +1 -0
- package/dist/tasks/crossref-extract.js +73 -0
- package/dist/tasks/crossref-extract.js.map +1 -0
- package/dist/tasks/delete-preview.js +192 -0
- package/dist/tasks/delete-preview.js.map +1 -0
- package/dist/tasks/delete.js +120 -0
- package/dist/tasks/delete.js.map +1 -0
- package/dist/tasks/deletion-strategy.js +200 -0
- package/dist/tasks/deletion-strategy.js.map +1 -0
- package/dist/tasks/dependency-check.js +278 -0
- package/dist/tasks/dependency-check.js.map +1 -0
- package/dist/tasks/deps-ready.js +32 -0
- package/dist/tasks/deps-ready.js.map +1 -0
- package/dist/tasks/enforcement.js +86 -0
- package/dist/tasks/enforcement.js.map +1 -0
- package/dist/tasks/epic-enforcement.js +294 -0
- package/dist/tasks/epic-enforcement.js.map +1 -0
- package/dist/tasks/find.js +163 -0
- package/dist/tasks/find.js.map +1 -0
- package/dist/tasks/graph-cache.js +127 -0
- package/dist/tasks/graph-cache.js.map +1 -0
- package/dist/tasks/graph-ops.js +173 -0
- package/dist/tasks/graph-ops.js.map +1 -0
- package/dist/tasks/graph-rag.js +328 -0
- package/dist/tasks/graph-rag.js.map +1 -0
- package/dist/tasks/hierarchy-policy.js +149 -0
- package/dist/tasks/hierarchy-policy.js.map +1 -0
- package/dist/tasks/hierarchy.js +185 -0
- package/dist/tasks/hierarchy.js.map +1 -0
- package/dist/tasks/id-generator.js +65 -0
- package/dist/tasks/id-generator.js.map +1 -0
- package/dist/tasks/index.js +14 -0
- package/dist/tasks/index.js.map +1 -0
- package/dist/tasks/labels.js +55 -0
- package/dist/tasks/labels.js.map +1 -0
- package/dist/tasks/list.js +75 -0
- package/dist/tasks/list.js.map +1 -0
- package/dist/tasks/phase-tracking.js +133 -0
- package/dist/tasks/phase-tracking.js.map +1 -0
- package/dist/tasks/pipeline-stage.js +248 -0
- package/dist/tasks/pipeline-stage.js.map +1 -0
- package/dist/tasks/plan.js +268 -0
- package/dist/tasks/plan.js.map +1 -0
- package/dist/tasks/relates.js +101 -0
- package/dist/tasks/relates.js.map +1 -0
- package/dist/tasks/show.js +83 -0
- package/dist/tasks/show.js.map +1 -0
- package/dist/tasks/size-weighting.js +86 -0
- package/dist/tasks/size-weighting.js.map +1 -0
- package/dist/tasks/staleness.js +86 -0
- package/dist/tasks/staleness.js.map +1 -0
- package/dist/tasks/task-ops.js +1741 -0
- package/dist/tasks/task-ops.js.map +1 -0
- package/dist/tasks/update.js +303 -0
- package/dist/tasks/update.js.map +1 -0
- package/dist/telemetry/index.js +249 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/telemetry/schema.js +60 -0
- package/dist/telemetry/schema.js.map +1 -0
- package/dist/telemetry/sqlite.js +111 -0
- package/dist/telemetry/sqlite.js.map +1 -0
- package/dist/templates/index.js +10 -0
- package/dist/templates/index.js.map +1 -0
- package/dist/templates/parser.js +254 -0
- package/dist/templates/parser.js.map +1 -0
- package/dist/ui/aliases.js +153 -0
- package/dist/ui/aliases.js.map +1 -0
- package/dist/ui/changelog.js +184 -0
- package/dist/ui/changelog.js.map +1 -0
- package/dist/ui/command-registry.js +168 -0
- package/dist/ui/command-registry.js.map +1 -0
- package/dist/ui/flags.js +94 -0
- package/dist/ui/flags.js.map +1 -0
- package/dist/ui/index.js +24 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/upgrade.js +1387 -0
- package/dist/upgrade.js.map +1 -0
- package/dist/validation/chain-validation.js +146 -0
- package/dist/validation/chain-validation.js.map +1 -0
- package/dist/validation/compliance.js +155 -0
- package/dist/validation/compliance.js.map +1 -0
- package/dist/validation/docs-sync.js +212 -0
- package/dist/validation/docs-sync.js.map +1 -0
- package/dist/validation/doctor/checks.js +1069 -0
- package/dist/validation/doctor/checks.js.map +1 -0
- package/dist/validation/doctor/index.js +9 -0
- package/dist/validation/doctor/index.js.map +1 -0
- package/dist/validation/doctor/project-cache.js +160 -0
- package/dist/validation/doctor/project-cache.js.map +1 -0
- package/dist/validation/doctor/utils.js +155 -0
- package/dist/validation/doctor/utils.js.map +1 -0
- package/dist/validation/engine.js +914 -0
- package/dist/validation/engine.js.map +1 -0
- package/dist/validation/gap-check.js +175 -0
- package/dist/validation/gap-check.js.map +1 -0
- package/dist/validation/index.js +40 -0
- package/dist/validation/index.js.map +1 -0
- package/dist/validation/manifest.js +237 -0
- package/dist/validation/manifest.js.map +1 -0
- package/dist/validation/operation-gate-validators.js +724 -0
- package/dist/validation/operation-gate-validators.js.map +1 -0
- package/dist/validation/operation-verification-gates.js +532 -0
- package/dist/validation/operation-verification-gates.js.map +1 -0
- package/dist/validation/param-utils.js +141 -0
- package/dist/validation/param-utils.js.map +1 -0
- package/dist/validation/protocol-common.js +300 -0
- package/dist/validation/protocol-common.js.map +1 -0
- package/dist/validation/protocols/_shared.js +82 -0
- package/dist/validation/protocols/_shared.js.map +1 -0
- package/dist/validation/protocols/architecture-decision.js +31 -0
- package/dist/validation/protocols/architecture-decision.js.map +1 -0
- package/dist/validation/protocols/artifact-publish.js +28 -0
- package/dist/validation/protocols/artifact-publish.js.map +1 -0
- package/dist/validation/protocols/consensus.js +41 -0
- package/dist/validation/protocols/consensus.js.map +1 -0
- package/dist/validation/protocols/contribution.js +27 -0
- package/dist/validation/protocols/contribution.js.map +1 -0
- package/dist/validation/protocols/decomposition.js +28 -0
- package/dist/validation/protocols/decomposition.js.map +1 -0
- package/dist/validation/protocols/implementation.js +24 -0
- package/dist/validation/protocols/implementation.js.map +1 -0
- package/dist/validation/protocols/provenance.js +29 -0
- package/dist/validation/protocols/provenance.js.map +1 -0
- package/dist/validation/protocols/release.js +29 -0
- package/dist/validation/protocols/release.js.map +1 -0
- package/dist/validation/protocols/research.js +24 -0
- package/dist/validation/protocols/research.js.map +1 -0
- package/dist/validation/protocols/specification.js +27 -0
- package/dist/validation/protocols/specification.js.map +1 -0
- package/dist/validation/protocols/testing.js +30 -0
- package/dist/validation/protocols/testing.js.map +1 -0
- package/dist/validation/protocols/validation.js +30 -0
- package/dist/validation/protocols/validation.js.map +1 -0
- package/dist/validation/schema-integrity.js +170 -0
- package/dist/validation/schema-integrity.js.map +1 -0
- package/dist/validation/schema-validator.js +176 -0
- package/dist/validation/schema-validator.js.map +1 -0
- package/dist/validation/validate-ops.js +937 -0
- package/dist/validation/validate-ops.js.map +1 -0
- package/dist/validation/validation-rules.js +226 -0
- package/dist/validation/validation-rules.js.map +1 -0
- package/dist/validation/verification.js +321 -0
- package/dist/validation/verification.js.map +1 -0
- package/package.json +8 -8
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Intelligence Hook Handlers — Wave 5-D/E of T549
|
|
3
|
+
*
|
|
4
|
+
* Best-effort intelligence side-effects wired into task lifecycle events.
|
|
5
|
+
*
|
|
6
|
+
* On task start → calculate risk; if riskScore exceeds the HIGH threshold
|
|
7
|
+
* (≥ 0.8), store a warning observation so future agents see it.
|
|
8
|
+
*
|
|
9
|
+
* All handlers are fire-and-forget: failures MUST NOT propagate or block the
|
|
10
|
+
* operation that triggered them.
|
|
11
|
+
*
|
|
12
|
+
* @task T549
|
|
13
|
+
* @epic T549
|
|
14
|
+
*/
|
|
15
|
+
import { hooks } from '../registry.js';
|
|
16
|
+
// Risk thresholds — mirror RISK_THRESHOLDS in intelligence/prediction.ts
|
|
17
|
+
const RISK_HIGH = 0.8;
|
|
18
|
+
// ============================================================================
|
|
19
|
+
// Task Start — Risk Detection
|
|
20
|
+
// ============================================================================
|
|
21
|
+
/**
|
|
22
|
+
* Handle task start: calculate risk and store a warning observation if the
|
|
23
|
+
* riskScore is at or above the HIGH threshold (≥ 0.8).
|
|
24
|
+
*
|
|
25
|
+
* Uses deferred imports so this module can be imported in environments where
|
|
26
|
+
* not all transitive dependencies (brain.db, tasks.db) are present.
|
|
27
|
+
*
|
|
28
|
+
* Best-effort: any error is silently swallowed.
|
|
29
|
+
*/
|
|
30
|
+
export async function handleTaskStartIntelligence(projectRoot, payload) {
|
|
31
|
+
try {
|
|
32
|
+
// Deferred relative imports — avoids circular dependency issues and keeps
|
|
33
|
+
// this module loadable in environments where brain.db is not initialised.
|
|
34
|
+
const { getAccessor } = await import('../../store/data-accessor.js');
|
|
35
|
+
const { getBrainAccessor } = await import('../../store/brain-accessor.js');
|
|
36
|
+
const { calculateTaskRisk } = await import('../../intelligence/prediction.js');
|
|
37
|
+
const { observeBrain } = await import('../../memory/brain-retrieval.js');
|
|
38
|
+
const [accessor, brain] = await Promise.all([
|
|
39
|
+
getAccessor(projectRoot),
|
|
40
|
+
getBrainAccessor(projectRoot),
|
|
41
|
+
]);
|
|
42
|
+
const risk = await calculateTaskRisk(payload.taskId, accessor, brain);
|
|
43
|
+
if (risk.riskScore >= RISK_HIGH) {
|
|
44
|
+
const level = risk.riskScore >= 0.95 ? 'critical' : 'high';
|
|
45
|
+
const factorNames = risk.factors.map((f) => f.name).join(', ');
|
|
46
|
+
await observeBrain(projectRoot, {
|
|
47
|
+
text: `Risk alert for ${payload.taskId} (score ${risk.riskScore.toFixed(2)}): ${factorNames}. ${risk.recommendation}`,
|
|
48
|
+
title: `Task risk: ${level} — ${payload.taskId}`,
|
|
49
|
+
type: 'discovery',
|
|
50
|
+
sourceType: 'agent',
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
// Best-effort — never block task start
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// ============================================================================
|
|
59
|
+
// Registration
|
|
60
|
+
// ============================================================================
|
|
61
|
+
hooks.register({
|
|
62
|
+
id: 'intelligence-task-start',
|
|
63
|
+
event: 'PreToolUse',
|
|
64
|
+
handler: handleTaskStartIntelligence,
|
|
65
|
+
// Priority 50: runs after brain-tool-start (100) so the task observation is
|
|
66
|
+
// already persisted before we assess risk.
|
|
67
|
+
priority: 50,
|
|
68
|
+
});
|
|
69
|
+
//# sourceMappingURL=intelligence-hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intelligence-hooks.js","sourceRoot":"","sources":["../../../src/hooks/handlers/intelligence-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAGvC,yEAAyE;AACzE,MAAM,SAAS,GAAG,GAAG,CAAC;AAEtB,+EAA+E;AAC/E,8BAA8B;AAC9B,+EAA+E;AAE/E;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,WAAmB,EACnB,OAA0B;IAE1B,IAAI,CAAC;QACH,0EAA0E;QAC1E,0EAA0E;QAC1E,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAC;QACrE,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,+BAA+B,CAAC,CAAC;QAC3E,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,kCAAkC,CAAC,CAAC;QAC/E,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,iCAAiC,CAAC,CAAC;QAEzE,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC1C,WAAW,CAAC,WAAW,CAAC;YACxB,gBAAgB,CAAC,WAAW,CAAC;SAC9B,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QAEtE,IAAI,IAAI,CAAC,SAAS,IAAI,SAAS,EAAE,CAAC;YAChC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;YAC3D,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/D,MAAM,YAAY,CAAC,WAAW,EAAE;gBAC9B,IAAI,EAAE,kBAAkB,OAAO,CAAC,MAAM,WAAW,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,WAAW,KAAK,IAAI,CAAC,cAAc,EAAE;gBACrH,KAAK,EAAE,cAAc,KAAK,MAAM,OAAO,CAAC,MAAM,EAAE;gBAChD,IAAI,EAAE,WAAW;gBACjB,UAAU,EAAE,OAAO;aACpB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,uCAAuC;IACzC,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,eAAe;AACf,+EAA+E;AAE/E,KAAK,CAAC,QAAQ,CAAC;IACb,EAAE,EAAE,yBAAyB;IAC7B,KAAK,EAAE,YAAY;IACnB,OAAO,EAAE,2BAA2B;IACpC,4EAA4E;IAC5E,2CAA2C;IAC3C,QAAQ,EAAE,EAAE;CACb,CAAC,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared memory bridge refresh helper for hook handlers.
|
|
3
|
+
*
|
|
4
|
+
* Provides a config-gated, debounced wrapper around refreshMemoryBridge().
|
|
5
|
+
* Prevents rapid regeneration of .cleo/memory-bridge.md when multiple
|
|
6
|
+
* lifecycle events fire in quick succession (e.g. session end + task complete).
|
|
7
|
+
*
|
|
8
|
+
* Debounce: max one refresh per 30 seconds across all callers in the process.
|
|
9
|
+
*
|
|
10
|
+
* @task T138
|
|
11
|
+
* @epic T134
|
|
12
|
+
*/
|
|
13
|
+
/** Debounce window in milliseconds. */
|
|
14
|
+
const DEBOUNCE_MS = 30_000;
|
|
15
|
+
/** Timestamp of the last successful refresh call (module-level singleton). */
|
|
16
|
+
let lastRefreshTime = 0;
|
|
17
|
+
/**
|
|
18
|
+
* Refresh the memory bridge if autoRefresh is enabled and the debounce window
|
|
19
|
+
* has elapsed. Reads config via loadConfig() (cascaded). Never throws.
|
|
20
|
+
*
|
|
21
|
+
* @param projectRoot - Absolute path to the project root directory.
|
|
22
|
+
*/
|
|
23
|
+
export async function maybeRefreshMemoryBridge(projectRoot) {
|
|
24
|
+
try {
|
|
25
|
+
const { loadConfig } = await import('../../config.js');
|
|
26
|
+
const config = await loadConfig(projectRoot);
|
|
27
|
+
if (!config.brain?.memoryBridge?.autoRefresh) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const now = Date.now();
|
|
31
|
+
if (now - lastRefreshTime < DEBOUNCE_MS) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
lastRefreshTime = now;
|
|
35
|
+
const { refreshMemoryBridge } = await import('../../memory/memory-bridge.js');
|
|
36
|
+
await refreshMemoryBridge(projectRoot);
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
// Best-effort: never block lifecycle events
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=memory-bridge-refresh.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-bridge-refresh.js","sourceRoot":"","sources":["../../../src/hooks/handlers/memory-bridge-refresh.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,uCAAuC;AACvC,MAAM,WAAW,GAAG,MAAM,CAAC;AAE3B,8EAA8E;AAC9E,IAAI,eAAe,GAAG,CAAC,CAAC;AAExB;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,WAAmB;IAChE,IAAI,CAAC;QACH,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC;QAE7C,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC;YAC7C,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,GAAG,GAAG,eAAe,GAAG,WAAW,EAAE,CAAC;YACxC,OAAO;QACT,CAAC;QAED,eAAe,GAAG,GAAG,CAAC;QAEtB,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,+BAA+B,CAAC,CAAC;QAC9E,MAAM,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,4CAA4C;IAC9C,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* System Notification Hook Handler
|
|
3
|
+
*
|
|
4
|
+
* Captures message-bearing system notifications as BRAIN observations.
|
|
5
|
+
* File-change notifications (filePath + changeType) are handled by
|
|
6
|
+
* file-hooks.ts; this module only handles Notification payloads with
|
|
7
|
+
* a `message` field.
|
|
8
|
+
*
|
|
9
|
+
* Gated behind brain.autoCapture config. Never throws.
|
|
10
|
+
* Auto-registers on module load.
|
|
11
|
+
*
|
|
12
|
+
* @task T166
|
|
13
|
+
*/
|
|
14
|
+
import { hooks } from '../registry.js';
|
|
15
|
+
import { isAutoCaptureEnabled, isMissingBrainSchemaError } from './handler-helpers.js';
|
|
16
|
+
/**
|
|
17
|
+
* Handle Notification — capture system notifications as BRAIN observations.
|
|
18
|
+
*
|
|
19
|
+
* Only fires for Notification payloads that carry a message field (i.e. system
|
|
20
|
+
* notifications). File-change notifications (filePath + changeType) are
|
|
21
|
+
* handled exclusively by file-hooks.ts and are skipped here to avoid
|
|
22
|
+
* double-capture.
|
|
23
|
+
*
|
|
24
|
+
* Gated behind brain.autoCapture config. Never throws.
|
|
25
|
+
*
|
|
26
|
+
* @param projectRoot - Absolute path to the project root directory.
|
|
27
|
+
* @param payload - Notification event payload.
|
|
28
|
+
*
|
|
29
|
+
* @task T166
|
|
30
|
+
*/
|
|
31
|
+
export async function handleSystemNotification(projectRoot, payload) {
|
|
32
|
+
// File-change notifications are handled by file-hooks.ts
|
|
33
|
+
if (payload.filePath || payload.changeType)
|
|
34
|
+
return;
|
|
35
|
+
// Only handle message-bearing system notifications
|
|
36
|
+
if (!payload.message)
|
|
37
|
+
return;
|
|
38
|
+
if (!(await isAutoCaptureEnabled(projectRoot)))
|
|
39
|
+
return;
|
|
40
|
+
const { observeBrain } = await import('../../memory/brain-retrieval.js');
|
|
41
|
+
try {
|
|
42
|
+
await observeBrain(projectRoot, {
|
|
43
|
+
text: `System notification: ${payload.message}`,
|
|
44
|
+
title: `Notification: ${payload.message.slice(0, 60)}`,
|
|
45
|
+
type: 'discovery',
|
|
46
|
+
sourceSessionId: payload.sessionId,
|
|
47
|
+
sourceType: 'agent',
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
if (!isMissingBrainSchemaError(err))
|
|
52
|
+
throw err;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// Lower priority (90) so file-hooks.ts (100) runs first for Notification events
|
|
56
|
+
hooks.register({
|
|
57
|
+
id: 'brain-system-notification',
|
|
58
|
+
event: 'Notification',
|
|
59
|
+
handler: handleSystemNotification,
|
|
60
|
+
priority: 90,
|
|
61
|
+
});
|
|
62
|
+
//# sourceMappingURL=notification-hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notification-hooks.js","sourceRoot":"","sources":["../../../src/hooks/handlers/notification-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEvC,OAAO,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEvF;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,WAAmB,EACnB,OAA4B;IAE5B,yDAAyD;IACzD,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,UAAU;QAAE,OAAO;IACnD,mDAAmD;IACnD,IAAI,CAAC,OAAO,CAAC,OAAO;QAAE,OAAO;IAC7B,IAAI,CAAC,CAAC,MAAM,oBAAoB,CAAC,WAAW,CAAC,CAAC;QAAE,OAAO;IAEvD,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,iCAAiC,CAAC,CAAC;IAEzE,IAAI,CAAC;QACH,MAAM,YAAY,CAAC,WAAW,EAAE;YAC9B,IAAI,EAAE,wBAAwB,OAAO,CAAC,OAAO,EAAE;YAC/C,KAAK,EAAE,iBAAiB,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;YACtD,IAAI,EAAE,WAAW;YACjB,eAAe,EAAE,OAAO,CAAC,SAAS;YAClC,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,gFAAgF;AAChF,KAAK,CAAC,QAAQ,CAAC;IACb,EAAE,EAAE,2BAA2B;IAC/B,KAAK,EAAE,cAAc;IACrB,OAAO,EAAE,wBAAwB;IACjC,QAAQ,EAAE,EAAE;CACb,CAAC,CAAC"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Hook Handlers - Phase 2D of T5237
|
|
3
|
+
*
|
|
4
|
+
* Handlers that capture session lifecycle events.
|
|
5
|
+
* Auto-registers on module load.
|
|
6
|
+
*
|
|
7
|
+
* T138: Triggers memory bridge refresh on session start and end.
|
|
8
|
+
* T139: Regenerates bridge with session scope on start.
|
|
9
|
+
* T144: Extracts transcript observations on session end.
|
|
10
|
+
* T5158: Auto-snapshots SQLite databases (tasks.db + brain.db) via
|
|
11
|
+
* VACUUM INTO on SessionEnd to preserve a recovery point now that
|
|
12
|
+
* the databases are no longer tracked in project git (ADR-013).
|
|
13
|
+
* T527: Removed duplicate session observeBrain writes — session data already
|
|
14
|
+
* lives in the sessions table; writing it again to brain_observations
|
|
15
|
+
* was pure noise.
|
|
16
|
+
* T549 Wave 3-E: Fire-and-forget sleep-time consolidation on session end.
|
|
17
|
+
* Runs after backup (priority 5) so brain.db snapshot is captured first.
|
|
18
|
+
* T554: Fire-and-forget LLM reflector on session end. Runs at priority 4
|
|
19
|
+
* (after consolidation at priority 5) to synthesize final session knowledge.
|
|
20
|
+
*/
|
|
21
|
+
import { hooks } from '../registry.js';
|
|
22
|
+
import { maybeRefreshMemoryBridge } from './memory-bridge-refresh.js';
|
|
23
|
+
/**
|
|
24
|
+
* Handle SessionStart - refresh memory bridge on session start.
|
|
25
|
+
*
|
|
26
|
+
* T138: Refresh memory bridge on session start.
|
|
27
|
+
* T139: Regenerate bridge with session scope context.
|
|
28
|
+
* T527: Removed duplicate observeBrain write — session data is already
|
|
29
|
+
* persisted in the sessions table.
|
|
30
|
+
*/
|
|
31
|
+
export async function handleSessionStart(projectRoot, _payload) {
|
|
32
|
+
// T138/T139: Refresh memory bridge after session starts (best-effort)
|
|
33
|
+
await maybeRefreshMemoryBridge(projectRoot);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Handle SessionEnd - run post-session tasks and refresh memory bridge.
|
|
37
|
+
*
|
|
38
|
+
* T138: Refresh memory bridge after session ends.
|
|
39
|
+
* T144: Extract transcript observations via cross-provider adapter.
|
|
40
|
+
* T527: Removed duplicate observeBrain write — session data is already
|
|
41
|
+
* persisted in the sessions table.
|
|
42
|
+
*/
|
|
43
|
+
export async function handleSessionEnd(projectRoot, payload) {
|
|
44
|
+
// Auto-grade session and feed insights to brain.db (best-effort)
|
|
45
|
+
try {
|
|
46
|
+
const { gradeSession } = await import('../../sessions/session-grade.js');
|
|
47
|
+
await gradeSession(payload.sessionId, projectRoot);
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
// Grading must never block session end
|
|
51
|
+
}
|
|
52
|
+
// T144: Cross-provider transcript extraction (best-effort)
|
|
53
|
+
try {
|
|
54
|
+
const { loadConfig } = await import('../../config.js');
|
|
55
|
+
const config = await loadConfig(projectRoot);
|
|
56
|
+
if (config.brain?.autoCapture) {
|
|
57
|
+
const { AdapterManager } = await import('../../adapters/index.js');
|
|
58
|
+
const manager = AdapterManager.getInstance(projectRoot);
|
|
59
|
+
const activeAdapter = manager.getActive();
|
|
60
|
+
const hookProvider = activeAdapter?.hooks;
|
|
61
|
+
if (hookProvider && typeof hookProvider.getTranscript === 'function') {
|
|
62
|
+
const transcript = await hookProvider.getTranscript(payload.sessionId, projectRoot);
|
|
63
|
+
if (transcript) {
|
|
64
|
+
const { extractFromTranscript } = await import('../../memory/auto-extract.js');
|
|
65
|
+
await extractFromTranscript(projectRoot, payload.sessionId, transcript);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
// Graceful no-op: transcript extraction must never block session end
|
|
72
|
+
}
|
|
73
|
+
// T138: Refresh memory bridge after session ends (best-effort)
|
|
74
|
+
await maybeRefreshMemoryBridge(projectRoot);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Handle SessionEnd - snapshot SQLite databases to `.cleo/backups/sqlite/`.
|
|
78
|
+
*
|
|
79
|
+
* ADR-013 / T5158: `.cleo/tasks.db` and `.cleo/brain.db` are NOT tracked in
|
|
80
|
+
* project git, so we need an out-of-band recovery mechanism. This handler
|
|
81
|
+
* calls `vacuumIntoBackupAll` with `force: true` at every session end to
|
|
82
|
+
* guarantee a fresh point-in-time snapshot of both databases.
|
|
83
|
+
*
|
|
84
|
+
* Rotation (MAX_SNAPSHOTS = 10 per database) is handled inside
|
|
85
|
+
* `sqlite-backup.ts`. Failures here are non-fatal: a backup error must
|
|
86
|
+
* never block session end.
|
|
87
|
+
*
|
|
88
|
+
* The `vacuumIntoBackupAll` import is deferred to call time so tests that
|
|
89
|
+
* auto-load session-hooks (e.g. via `handlers/index.ts`) do not have to
|
|
90
|
+
* mock every transitive dependency of `sqlite-backup.ts` at hoisted
|
|
91
|
+
* `vi.mock` time.
|
|
92
|
+
*/
|
|
93
|
+
export async function handleSessionEndBackup(projectRoot, _payload) {
|
|
94
|
+
try {
|
|
95
|
+
const { vacuumIntoBackupAll } = await import('../../store/sqlite-backup.js');
|
|
96
|
+
await vacuumIntoBackupAll({ cwd: projectRoot, force: true });
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
// Backup failures are best-effort — never block session end on them.
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Handle SessionEnd — fire-and-forget sleep-time memory consolidation.
|
|
104
|
+
*
|
|
105
|
+
* T549 Wave 3-E: Runs the full consolidation pipeline (dedup, quality recompute,
|
|
106
|
+
* tier promotion, contradiction detection, soft eviction, graph strengthening,
|
|
107
|
+
* summary generation) in the background after the session backup has completed.
|
|
108
|
+
*
|
|
109
|
+
* Uses setImmediate to yield control so the session end flow completes before
|
|
110
|
+
* consolidation begins. Consolidation errors are caught and logged to console.warn
|
|
111
|
+
* — they MUST NOT block session end or throw to callers.
|
|
112
|
+
*
|
|
113
|
+
* Priority 5 ensures this runs last (after backup at priority 10).
|
|
114
|
+
*/
|
|
115
|
+
export async function handleSessionEndConsolidation(projectRoot, _payload) {
|
|
116
|
+
// Schedule consolidation to run after the current event loop turn.
|
|
117
|
+
// This ensures the session end response reaches the caller before
|
|
118
|
+
// consolidation begins, matching the "sleep-time compute" pattern.
|
|
119
|
+
setImmediate(async () => {
|
|
120
|
+
try {
|
|
121
|
+
const { runConsolidation } = await import('../../memory/brain-lifecycle.js');
|
|
122
|
+
await runConsolidation(projectRoot);
|
|
123
|
+
}
|
|
124
|
+
catch (err) {
|
|
125
|
+
console.warn('[consolidation] Session-end consolidation failed:', err);
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Handle SessionEnd — fire-and-forget LLM reflector synthesis.
|
|
131
|
+
*
|
|
132
|
+
* T554: Runs the Reflector after the consolidation pass (priority 5) to
|
|
133
|
+
* synthesize session observations into durable patterns and learnings.
|
|
134
|
+
*
|
|
135
|
+
* Uses setImmediate to yield control before the LLM call. Errors are caught
|
|
136
|
+
* and logged — they MUST NOT block session end or throw to callers.
|
|
137
|
+
*
|
|
138
|
+
* Priority 4 ensures this runs after consolidation (priority 5).
|
|
139
|
+
*/
|
|
140
|
+
export async function handleSessionEndReflector(projectRoot, payload) {
|
|
141
|
+
setImmediate(async () => {
|
|
142
|
+
try {
|
|
143
|
+
const { runReflector } = await import('../../memory/observer-reflector.js');
|
|
144
|
+
await runReflector(projectRoot, payload.sessionId);
|
|
145
|
+
}
|
|
146
|
+
catch (err) {
|
|
147
|
+
console.warn('[reflector] Session-end reflector failed:', err);
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
// Register handlers on module load
|
|
152
|
+
hooks.register({
|
|
153
|
+
id: 'brain-session-start',
|
|
154
|
+
event: 'SessionStart',
|
|
155
|
+
handler: handleSessionStart,
|
|
156
|
+
priority: 100,
|
|
157
|
+
});
|
|
158
|
+
hooks.register({
|
|
159
|
+
id: 'brain-session-end',
|
|
160
|
+
event: 'SessionEnd',
|
|
161
|
+
handler: handleSessionEnd,
|
|
162
|
+
priority: 100,
|
|
163
|
+
});
|
|
164
|
+
// Lower priority (10) runs AFTER the brain/memory-bridge handlers so the
|
|
165
|
+
// snapshot captures the most up-to-date brain.db state including the
|
|
166
|
+
// SessionEnd observation just written by handleSessionEnd above.
|
|
167
|
+
hooks.register({
|
|
168
|
+
id: 'backup-session-end',
|
|
169
|
+
event: 'SessionEnd',
|
|
170
|
+
handler: handleSessionEndBackup,
|
|
171
|
+
priority: 10,
|
|
172
|
+
});
|
|
173
|
+
// Priority 5 runs AFTER backup (priority 10) — consolidation is purely
|
|
174
|
+
// additive and should not delay the backup point-in-time snapshot.
|
|
175
|
+
hooks.register({
|
|
176
|
+
id: 'consolidation-session-end',
|
|
177
|
+
event: 'SessionEnd',
|
|
178
|
+
handler: handleSessionEndConsolidation,
|
|
179
|
+
priority: 5,
|
|
180
|
+
});
|
|
181
|
+
// Priority 4 runs AFTER consolidation (priority 5) — reflector synthesizes
|
|
182
|
+
// the final session knowledge using observations that consolidation may have
|
|
183
|
+
// updated (tier promotions, dedup).
|
|
184
|
+
hooks.register({
|
|
185
|
+
id: 'reflector-session-end',
|
|
186
|
+
event: 'SessionEnd',
|
|
187
|
+
handler: handleSessionEndReflector,
|
|
188
|
+
priority: 4,
|
|
189
|
+
});
|
|
190
|
+
//# sourceMappingURL=session-hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-hooks.js","sourceRoot":"","sources":["../../../src/hooks/handlers/session-hooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Task Hook Handlers - Phase 2D of T5237
|
|
3
|
+
*
|
|
4
|
+
* Handlers that capture task lifecycle events to BRAIN via memory.observe.
|
|
5
|
+
* Auto-registers on module load.
|
|
6
|
+
*
|
|
7
|
+
* T138: Triggers memory bridge refresh after task completion.
|
|
8
|
+
* T554: Triggers LLM observer after task completion when observation count ≥ threshold.
|
|
9
|
+
*/
|
|
10
|
+
import { hooks } from '../registry.js';
|
|
11
|
+
import { isMissingBrainSchemaError } from './handler-helpers.js';
|
|
12
|
+
import { maybeRefreshMemoryBridge } from './memory-bridge-refresh.js';
|
|
13
|
+
/**
|
|
14
|
+
* Handle PreToolUse (maps to task.start in CLEO, canonical: was onToolStart)
|
|
15
|
+
*/
|
|
16
|
+
export async function handleToolStart(projectRoot, payload) {
|
|
17
|
+
const { observeBrain } = await import('../../memory/brain-retrieval.js');
|
|
18
|
+
try {
|
|
19
|
+
await observeBrain(projectRoot, {
|
|
20
|
+
text: `Started work on ${payload.taskId}: ${payload.taskTitle}`,
|
|
21
|
+
title: `Task start: ${payload.taskId}`,
|
|
22
|
+
type: 'change',
|
|
23
|
+
sourceType: 'agent',
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
catch (err) {
|
|
27
|
+
if (!isMissingBrainSchemaError(err))
|
|
28
|
+
throw err;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Handle PostToolUse (maps to task.complete in CLEO, canonical: was onToolComplete)
|
|
33
|
+
*
|
|
34
|
+
* T138: Refresh memory bridge after task completion.
|
|
35
|
+
* T554: Fire-and-forget LLM observer when observation count ≥ threshold.
|
|
36
|
+
*/
|
|
37
|
+
export async function handleToolComplete(projectRoot, payload) {
|
|
38
|
+
const { observeBrain } = await import('../../memory/brain-retrieval.js');
|
|
39
|
+
try {
|
|
40
|
+
await observeBrain(projectRoot, {
|
|
41
|
+
text: `Task ${payload.taskId} completed with status: ${payload.status}`,
|
|
42
|
+
title: `Task complete: ${payload.taskId}`,
|
|
43
|
+
type: 'change',
|
|
44
|
+
sourceType: 'agent',
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
if (!isMissingBrainSchemaError(err))
|
|
49
|
+
throw err;
|
|
50
|
+
}
|
|
51
|
+
// T554: Fire-and-forget observer — runs after observation is stored so the
|
|
52
|
+
// new observation is included in the count. setImmediate ensures the task
|
|
53
|
+
// complete response reaches the caller before the LLM call begins.
|
|
54
|
+
setImmediate(async () => {
|
|
55
|
+
try {
|
|
56
|
+
const { runObserver } = await import('../../memory/observer-reflector.js');
|
|
57
|
+
await runObserver(projectRoot);
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
// Observer errors must never surface to the task complete flow
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
// T555: Correlate retrieval outcomes against this task completion.
|
|
64
|
+
// Fire-and-forget: quality score adjustments must never block the response.
|
|
65
|
+
setImmediate(async () => {
|
|
66
|
+
try {
|
|
67
|
+
const { correlateOutcomes } = await import('../../memory/quality-feedback.js');
|
|
68
|
+
await correlateOutcomes(projectRoot);
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
// Quality correlation errors must never surface to the task complete flow
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
// T138: Refresh memory bridge after task completes (best-effort)
|
|
75
|
+
await maybeRefreshMemoryBridge(projectRoot);
|
|
76
|
+
}
|
|
77
|
+
// Register handlers
|
|
78
|
+
hooks.register({
|
|
79
|
+
id: 'brain-tool-start',
|
|
80
|
+
event: 'PreToolUse',
|
|
81
|
+
handler: handleToolStart,
|
|
82
|
+
priority: 100,
|
|
83
|
+
});
|
|
84
|
+
hooks.register({
|
|
85
|
+
id: 'brain-tool-complete',
|
|
86
|
+
event: 'PostToolUse',
|
|
87
|
+
handler: handleToolComplete,
|
|
88
|
+
priority: 100,
|
|
89
|
+
});
|
|
90
|
+
//# sourceMappingURL=task-hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-hooks.js","sourceRoot":"","sources":["../../../src/hooks/handlers/task-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;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;;;;;GAKG;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,2EAA2E;IAC3E,0EAA0E;IAC1E,mEAAmE;IACnE,YAAY,CAAC,KAAK,IAAI,EAAE;QACtB,IAAI,CAAC;YACH,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,oCAAoC,CAAC,CAAC;YAC3E,MAAM,WAAW,CAAC,WAAW,CAAC,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,+DAA+D;QACjE,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,mEAAmE;IACnE,4EAA4E;IAC5E,YAAY,CAAC,KAAK,IAAI,EAAE;QACtB,IAAI,CAAC;YACH,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,kCAAkC,CAAC,CAAC;YAC/E,MAAM,iBAAiB,CAAC,WAAW,CAAC,CAAC;QACvC,CAAC;QAAC,MAAM,CAAC;YACP,0EAA0E;QAC5E,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,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"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Watchdog Scheduler Hook Handlers
|
|
3
|
+
*
|
|
4
|
+
* Starts a periodic health-check timer when a session begins and stops it when
|
|
5
|
+
* the session ends. One watchdog per project root, enforced by a module-level
|
|
6
|
+
* Map keyed on the resolved project root.
|
|
7
|
+
*
|
|
8
|
+
* Each 60-second tick:
|
|
9
|
+
* 1. Detects agents with a stale heartbeat (> STALE_THRESHOLD_MS)
|
|
10
|
+
* 2. Records each crash as a learning event in brain.db
|
|
11
|
+
* 3. Attempts recovery (status reset to 'starting') for all crashed agents
|
|
12
|
+
* 4. Fires the `onPatrol` hook for observability
|
|
13
|
+
*
|
|
14
|
+
* Best-effort contract: the watchdog NEVER crashes or throws. Any tick failure
|
|
15
|
+
* is swallowed so the timer continues. Any error in the start/stop handlers is
|
|
16
|
+
* also swallowed so it never blocks session operations.
|
|
17
|
+
*
|
|
18
|
+
* Gated behind `brain.autoCapture` config — the watchdog does NOT start unless
|
|
19
|
+
* auto-capture is enabled.
|
|
20
|
+
*
|
|
21
|
+
* Auto-registers on module load.
|
|
22
|
+
*
|
|
23
|
+
* @task T549
|
|
24
|
+
* @epic T5149
|
|
25
|
+
*/
|
|
26
|
+
import { hooks } from '../registry.js';
|
|
27
|
+
import { isAutoCaptureEnabled, isMissingBrainSchemaError } from './handler-helpers.js';
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
// Module-level watchdog state
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
/** One active timer per project root (resolved path). */
|
|
32
|
+
const activeWatchdogs = new Map();
|
|
33
|
+
/** Interval between watchdog ticks in milliseconds. */
|
|
34
|
+
const WATCHDOG_INTERVAL_MS = 60_000;
|
|
35
|
+
// ---------------------------------------------------------------------------
|
|
36
|
+
// Watchdog tick
|
|
37
|
+
// ---------------------------------------------------------------------------
|
|
38
|
+
/**
|
|
39
|
+
* Execute one watchdog patrol tick.
|
|
40
|
+
*
|
|
41
|
+
* Steps:
|
|
42
|
+
* 1. detectCrashedAgents — find and mark stale agents as 'crashed'
|
|
43
|
+
* 2. processAgentLifecycleEvent — write failure events to brain.db for each
|
|
44
|
+
* 3. recoverCrashedAgents — reset crashed agents to 'starting'
|
|
45
|
+
* 4. hooks.dispatch('onPatrol') — emit observability event
|
|
46
|
+
*
|
|
47
|
+
* Any thrown error is caught and logged as a warning; the timer continues.
|
|
48
|
+
*
|
|
49
|
+
* @param projectRoot - Absolute path to the project root directory.
|
|
50
|
+
*/
|
|
51
|
+
async function runWatchdogTick(projectRoot) {
|
|
52
|
+
try {
|
|
53
|
+
const { detectCrashedAgents, STALE_THRESHOLD_MS } = await import('../../agents/health-monitor.js');
|
|
54
|
+
const { recoverCrashedAgents } = await import('../../agents/retry.js');
|
|
55
|
+
const { processAgentLifecycleEvent } = await import('../../agents/execution-learning.js');
|
|
56
|
+
// Step 1: Detect and mark crashed agents
|
|
57
|
+
const crashed = await detectCrashedAgents(STALE_THRESHOLD_MS, projectRoot);
|
|
58
|
+
// Step 2: Record each crash as a brain learning event
|
|
59
|
+
for (const agent of crashed) {
|
|
60
|
+
try {
|
|
61
|
+
await processAgentLifecycleEvent({
|
|
62
|
+
agentId: agent.id,
|
|
63
|
+
agentType: agent.agentType ?? 'custom',
|
|
64
|
+
taskId: agent.taskId ?? 'unknown',
|
|
65
|
+
taskType: 'unknown',
|
|
66
|
+
outcome: 'failure',
|
|
67
|
+
errorMessage: 'Heartbeat timeout — agent presumed crashed',
|
|
68
|
+
errorType: 'retriable',
|
|
69
|
+
sessionId: agent.sessionId ?? undefined,
|
|
70
|
+
}, projectRoot);
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
if (!isMissingBrainSchemaError(err)) {
|
|
74
|
+
console.warn('[watchdog] Failed to record agent crash event:', err);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// Step 3: Attempt recovery for all crashed agents
|
|
79
|
+
if (crashed.length > 0) {
|
|
80
|
+
await recoverCrashedAgents(STALE_THRESHOLD_MS, projectRoot);
|
|
81
|
+
}
|
|
82
|
+
// Step 4: Fire onPatrol for observability
|
|
83
|
+
const patrolPayload = {
|
|
84
|
+
timestamp: new Date().toISOString(),
|
|
85
|
+
watcherId: 'health-watchdog',
|
|
86
|
+
patrolType: 'health',
|
|
87
|
+
scope: `crashed=${crashed.length}`,
|
|
88
|
+
};
|
|
89
|
+
await hooks.dispatch('onPatrol', projectRoot, patrolPayload);
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
// Best-effort — never crash the watchdog timer
|
|
93
|
+
console.warn('[watchdog] Tick failed:', err);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// ---------------------------------------------------------------------------
|
|
97
|
+
// Lifecycle handlers
|
|
98
|
+
// ---------------------------------------------------------------------------
|
|
99
|
+
/**
|
|
100
|
+
* Handle SessionStart — start the watchdog timer for this project root.
|
|
101
|
+
*
|
|
102
|
+
* Idempotent: if a watchdog is already running for this root (e.g. a second
|
|
103
|
+
* session in the same process), the existing timer is reused.
|
|
104
|
+
*
|
|
105
|
+
* Gated behind `brain.autoCapture` — watchdog does not start unless auto-capture
|
|
106
|
+
* is enabled. This aligns with all other brain-capture hooks.
|
|
107
|
+
*
|
|
108
|
+
* @param projectRoot - Absolute path to the project root directory.
|
|
109
|
+
* @param _payload - SessionStart payload (unused).
|
|
110
|
+
*/
|
|
111
|
+
export async function handleWatchdogStart(projectRoot, _payload) {
|
|
112
|
+
try {
|
|
113
|
+
if (!(await isAutoCaptureEnabled(projectRoot)))
|
|
114
|
+
return;
|
|
115
|
+
// Idempotency guard — one watchdog per project root
|
|
116
|
+
if (activeWatchdogs.has(projectRoot))
|
|
117
|
+
return;
|
|
118
|
+
const timer = setInterval(() => {
|
|
119
|
+
void runWatchdogTick(projectRoot);
|
|
120
|
+
}, WATCHDOG_INTERVAL_MS);
|
|
121
|
+
activeWatchdogs.set(projectRoot, timer);
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
// Never block session start on watchdog errors
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Handle SessionEnd — stop the watchdog timer for this project root.
|
|
129
|
+
*
|
|
130
|
+
* Safe to call when no watchdog is running (no-op).
|
|
131
|
+
*
|
|
132
|
+
* @param projectRoot - Absolute path to the project root directory.
|
|
133
|
+
* @param _payload - SessionEnd payload (unused).
|
|
134
|
+
*/
|
|
135
|
+
export async function handleWatchdogStop(projectRoot, _payload) {
|
|
136
|
+
try {
|
|
137
|
+
const timer = activeWatchdogs.get(projectRoot);
|
|
138
|
+
if (timer) {
|
|
139
|
+
clearInterval(timer);
|
|
140
|
+
activeWatchdogs.delete(projectRoot);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
// Never block session end on watchdog errors
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
// ---------------------------------------------------------------------------
|
|
148
|
+
// Auto-registration
|
|
149
|
+
// ---------------------------------------------------------------------------
|
|
150
|
+
hooks.register({
|
|
151
|
+
id: 'watchdog-session-start',
|
|
152
|
+
event: 'SessionStart',
|
|
153
|
+
handler: handleWatchdogStart,
|
|
154
|
+
priority: 50,
|
|
155
|
+
});
|
|
156
|
+
hooks.register({
|
|
157
|
+
id: 'watchdog-session-end',
|
|
158
|
+
event: 'SessionEnd',
|
|
159
|
+
handler: handleWatchdogStop,
|
|
160
|
+
priority: 50,
|
|
161
|
+
});
|
|
162
|
+
//# sourceMappingURL=watchdog-hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watchdog-hooks.js","sourceRoot":"","sources":["../../../src/hooks/handlers/watchdog-hooks.ts"],"names":[],"mappings":"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"}
|