@cleocode/core 2026.4.31 → 2026.4.35
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 +52 -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/index.js +15 -0
- package/dist/conduit/index.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 +400 -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/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.d.ts +4 -0
- package/dist/hooks/handlers/index.d.ts.map +1 -1
- package/dist/hooks/handlers/index.js +34 -0
- package/dist/hooks/handlers/index.js.map +1 -0
- package/dist/hooks/handlers/intelligence-hooks.d.ts +26 -0
- package/dist/hooks/handlers/intelligence-hooks.d.ts.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.d.ts +16 -0
- package/dist/hooks/handlers/session-hooks.d.ts.map +1 -1
- package/dist/hooks/handlers/session-hooks.js +157 -0
- package/dist/hooks/handlers/session-hooks.js.map +1 -0
- package/dist/hooks/handlers/task-hooks.js +65 -0
- package/dist/hooks/handlers/task-hooks.js.map +1 -0
- package/dist/hooks/handlers/watchdog-hooks.d.ts +49 -0
- package/dist/hooks/handlers/watchdog-hooks.d.ts.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/index.js +3828 -2167
- package/dist/index.js.map +4 -4
- package/dist/init.js +920 -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.d.ts +13 -1
- package/dist/injection.d.ts.map +1 -1
- 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/internal.d.ts +8 -3
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +320 -0
- package/dist/internal.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/auto-extract.js +96 -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.d.ts +48 -0
- package/dist/memory/brain-consolidator.d.ts.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-lifecycle.d.ts +83 -2
- package/dist/memory/brain-lifecycle.d.ts.map +1 -1
- package/dist/memory/brain-lifecycle.js +807 -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 +114 -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.d.ts +69 -1
- package/dist/memory/brain-retrieval.d.ts.map +1 -1
- package/dist/memory/brain-retrieval.js +912 -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.d.ts.map +1 -1
- package/dist/memory/brain-search.js +528 -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/claude-mem-migration.js +277 -0
- package/dist/memory/claude-mem-migration.js.map +1 -0
- package/dist/memory/decisions.d.ts.map +1 -1
- package/dist/memory/decisions.js +218 -0
- package/dist/memory/decisions.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.d.ts.map +1 -1
- package/dist/memory/engine-compat.js +1564 -0
- package/dist/memory/engine-compat.js.map +1 -0
- package/dist/memory/extraction-gate.d.ts +139 -0
- package/dist/memory/extraction-gate.d.ts.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-queries.js +290 -0
- package/dist/memory/graph-queries.js.map +1 -0
- package/dist/memory/index.d.ts +2 -0
- package/dist/memory/index.d.ts.map +1 -1
- package/dist/memory/index.js +1144 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/learnings.d.ts +14 -0
- package/dist/memory/learnings.d.ts.map +1 -1
- package/dist/memory/learnings.js +178 -0
- package/dist/memory/learnings.js.map +1 -0
- package/dist/memory/memory-bridge.js +370 -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/patterns.d.ts +24 -4
- package/dist/memory/patterns.d.ts.map +1 -1
- package/dist/memory/patterns.js +174 -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-scoring.d.ts +42 -5
- package/dist/memory/quality-scoring.d.ts.map +1 -1
- 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/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.d.ts +51 -0
- package/dist/nexus/nexus-bridge.d.ts.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 +584 -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.d.ts +18 -0
- package/dist/scaffold.d.ts.map +1 -1
- package/dist/scaffold.js +1798 -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.d.ts.map +1 -1
- 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.d.ts +496 -3
- package/dist/store/brain-schema.d.ts.map +1 -1
- package/dist/store/brain-schema.js +549 -0
- package/dist/store/brain-schema.js.map +1 -0
- package/dist/store/brain-sqlite.d.ts.map +1 -1
- package/dist/store/brain-sqlite.js +257 -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 +224 -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.d.ts +5 -1
- package/dist/store/migration-manager.d.ts.map +1 -1
- package/dist/store/migration-manager.js +288 -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 +268 -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 +787 -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.d.ts +1 -1
- 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.d.ts +6 -6
- 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.d.ts.map +1 -1
- package/dist/system/health.js +1206 -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 +229 -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.d.ts.map +1 -1
- 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/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 +1148 -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/migrations/drizzle-brain/20260411000001_t528-graph-schema-expansion/migration.sql +47 -0
- package/migrations/drizzle-brain/20260412000001_t531-quality-score-typed-tables/migration.sql +23 -0
- package/migrations/drizzle-brain/20260413000001_t549-tiered-typed-memory/migration.sql +195 -0
- package/migrations/drizzle-nexus/20260412000001_t529-nexus-graph-tables/migration.sql +49 -0
- package/package.json +8 -8
- package/src/hooks/handlers/index.ts +6 -0
- package/src/hooks/handlers/intelligence-hooks.ts +80 -0
- package/src/hooks/handlers/session-hooks.ts +41 -0
- package/src/hooks/handlers/watchdog-hooks.ts +187 -0
- package/src/injection.ts +41 -2
- package/src/internal.ts +31 -2
- package/src/memory/brain-consolidator.ts +344 -0
- package/src/memory/brain-lifecycle.ts +636 -2
- package/src/memory/brain-retrieval.ts +445 -2
- package/src/memory/brain-search.ts +38 -4
- package/src/memory/decisions.ts +21 -1
- package/src/memory/engine-compat.ts +9 -11
- package/src/memory/extraction-gate.ts +574 -0
- package/src/memory/index.ts +6 -2
- package/src/memory/learnings.ts +33 -1
- package/src/memory/patterns.ts +30 -1
- package/src/memory/quality-scoring.ts +93 -9
- package/src/nexus/nexus-bridge.ts +444 -0
- package/src/scaffold.ts +42 -0
- package/src/stats/index.ts +11 -3
- package/src/store/brain-schema.ts +238 -0
- package/src/store/brain-sqlite.ts +55 -0
- package/src/store/migration-manager.ts +83 -12
- package/src/system/health.ts +17 -0
- package/src/tasks/graph-ops.ts +1 -0
- package/src/tasks/task-ops.ts +1 -1
- package/templates/CLEO-INJECTION.md +15 -0
|
@@ -0,0 +1,187 @@
|
|
|
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
|
+
|
|
27
|
+
import { hooks } from '../registry.js';
|
|
28
|
+
import type { OnPatrolPayload, SessionEndPayload, SessionStartPayload } from '../types.js';
|
|
29
|
+
import { isAutoCaptureEnabled, isMissingBrainSchemaError } from './handler-helpers.js';
|
|
30
|
+
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
// Module-level watchdog state
|
|
33
|
+
// ---------------------------------------------------------------------------
|
|
34
|
+
|
|
35
|
+
/** One active timer per project root (resolved path). */
|
|
36
|
+
const activeWatchdogs = new Map<string, ReturnType<typeof setInterval>>();
|
|
37
|
+
|
|
38
|
+
/** Interval between watchdog ticks in milliseconds. */
|
|
39
|
+
const WATCHDOG_INTERVAL_MS = 60_000;
|
|
40
|
+
|
|
41
|
+
// ---------------------------------------------------------------------------
|
|
42
|
+
// Watchdog tick
|
|
43
|
+
// ---------------------------------------------------------------------------
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Execute one watchdog patrol tick.
|
|
47
|
+
*
|
|
48
|
+
* Steps:
|
|
49
|
+
* 1. detectCrashedAgents — find and mark stale agents as 'crashed'
|
|
50
|
+
* 2. processAgentLifecycleEvent — write failure events to brain.db for each
|
|
51
|
+
* 3. recoverCrashedAgents — reset crashed agents to 'starting'
|
|
52
|
+
* 4. hooks.dispatch('onPatrol') — emit observability event
|
|
53
|
+
*
|
|
54
|
+
* Any thrown error is caught and logged as a warning; the timer continues.
|
|
55
|
+
*
|
|
56
|
+
* @param projectRoot - Absolute path to the project root directory.
|
|
57
|
+
*/
|
|
58
|
+
async function runWatchdogTick(projectRoot: string): Promise<void> {
|
|
59
|
+
try {
|
|
60
|
+
const { detectCrashedAgents, STALE_THRESHOLD_MS } = await import(
|
|
61
|
+
'../../agents/health-monitor.js'
|
|
62
|
+
);
|
|
63
|
+
const { recoverCrashedAgents } = await import('../../agents/retry.js');
|
|
64
|
+
const { processAgentLifecycleEvent } = await import('../../agents/execution-learning.js');
|
|
65
|
+
|
|
66
|
+
// Step 1: Detect and mark crashed agents
|
|
67
|
+
const crashed = await detectCrashedAgents(STALE_THRESHOLD_MS, projectRoot);
|
|
68
|
+
|
|
69
|
+
// Step 2: Record each crash as a brain learning event
|
|
70
|
+
for (const agent of crashed) {
|
|
71
|
+
try {
|
|
72
|
+
await processAgentLifecycleEvent(
|
|
73
|
+
{
|
|
74
|
+
agentId: agent.id,
|
|
75
|
+
agentType:
|
|
76
|
+
(agent.agentType as import('../../agents/agent-schema.js').AgentType) ?? 'custom',
|
|
77
|
+
taskId: agent.taskId ?? 'unknown',
|
|
78
|
+
taskType: 'unknown',
|
|
79
|
+
outcome: 'failure',
|
|
80
|
+
errorMessage: 'Heartbeat timeout — agent presumed crashed',
|
|
81
|
+
errorType: 'retriable',
|
|
82
|
+
sessionId: agent.sessionId ?? undefined,
|
|
83
|
+
},
|
|
84
|
+
projectRoot,
|
|
85
|
+
);
|
|
86
|
+
} catch (err) {
|
|
87
|
+
if (!isMissingBrainSchemaError(err)) {
|
|
88
|
+
console.warn('[watchdog] Failed to record agent crash event:', err);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Step 3: Attempt recovery for all crashed agents
|
|
94
|
+
if (crashed.length > 0) {
|
|
95
|
+
await recoverCrashedAgents(STALE_THRESHOLD_MS, projectRoot);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// Step 4: Fire onPatrol for observability
|
|
99
|
+
const patrolPayload: OnPatrolPayload = {
|
|
100
|
+
timestamp: new Date().toISOString(),
|
|
101
|
+
watcherId: 'health-watchdog',
|
|
102
|
+
patrolType: 'health',
|
|
103
|
+
scope: `crashed=${crashed.length}`,
|
|
104
|
+
};
|
|
105
|
+
await hooks.dispatch('onPatrol', projectRoot, patrolPayload);
|
|
106
|
+
} catch (err) {
|
|
107
|
+
// Best-effort — never crash the watchdog timer
|
|
108
|
+
console.warn('[watchdog] Tick failed:', err);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// ---------------------------------------------------------------------------
|
|
113
|
+
// Lifecycle handlers
|
|
114
|
+
// ---------------------------------------------------------------------------
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Handle SessionStart — start the watchdog timer for this project root.
|
|
118
|
+
*
|
|
119
|
+
* Idempotent: if a watchdog is already running for this root (e.g. a second
|
|
120
|
+
* session in the same process), the existing timer is reused.
|
|
121
|
+
*
|
|
122
|
+
* Gated behind `brain.autoCapture` — watchdog does not start unless auto-capture
|
|
123
|
+
* is enabled. This aligns with all other brain-capture hooks.
|
|
124
|
+
*
|
|
125
|
+
* @param projectRoot - Absolute path to the project root directory.
|
|
126
|
+
* @param _payload - SessionStart payload (unused).
|
|
127
|
+
*/
|
|
128
|
+
export async function handleWatchdogStart(
|
|
129
|
+
projectRoot: string,
|
|
130
|
+
_payload: SessionStartPayload,
|
|
131
|
+
): Promise<void> {
|
|
132
|
+
try {
|
|
133
|
+
if (!(await isAutoCaptureEnabled(projectRoot))) return;
|
|
134
|
+
|
|
135
|
+
// Idempotency guard — one watchdog per project root
|
|
136
|
+
if (activeWatchdogs.has(projectRoot)) return;
|
|
137
|
+
|
|
138
|
+
const timer = setInterval(() => {
|
|
139
|
+
void runWatchdogTick(projectRoot);
|
|
140
|
+
}, WATCHDOG_INTERVAL_MS);
|
|
141
|
+
|
|
142
|
+
activeWatchdogs.set(projectRoot, timer);
|
|
143
|
+
} catch {
|
|
144
|
+
// Never block session start on watchdog errors
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Handle SessionEnd — stop the watchdog timer for this project root.
|
|
150
|
+
*
|
|
151
|
+
* Safe to call when no watchdog is running (no-op).
|
|
152
|
+
*
|
|
153
|
+
* @param projectRoot - Absolute path to the project root directory.
|
|
154
|
+
* @param _payload - SessionEnd payload (unused).
|
|
155
|
+
*/
|
|
156
|
+
export async function handleWatchdogStop(
|
|
157
|
+
projectRoot: string,
|
|
158
|
+
_payload: SessionEndPayload,
|
|
159
|
+
): Promise<void> {
|
|
160
|
+
try {
|
|
161
|
+
const timer = activeWatchdogs.get(projectRoot);
|
|
162
|
+
if (timer) {
|
|
163
|
+
clearInterval(timer);
|
|
164
|
+
activeWatchdogs.delete(projectRoot);
|
|
165
|
+
}
|
|
166
|
+
} catch {
|
|
167
|
+
// Never block session end on watchdog errors
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
// ---------------------------------------------------------------------------
|
|
172
|
+
// Auto-registration
|
|
173
|
+
// ---------------------------------------------------------------------------
|
|
174
|
+
|
|
175
|
+
hooks.register({
|
|
176
|
+
id: 'watchdog-session-start',
|
|
177
|
+
event: 'SessionStart',
|
|
178
|
+
handler: handleWatchdogStart,
|
|
179
|
+
priority: 50,
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
hooks.register({
|
|
183
|
+
id: 'watchdog-session-end',
|
|
184
|
+
event: 'SessionEnd',
|
|
185
|
+
handler: handleWatchdogStop,
|
|
186
|
+
priority: 50,
|
|
187
|
+
});
|
package/src/injection.ts
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
|
|
17
17
|
import { execFileSync } from 'node:child_process';
|
|
18
18
|
import { existsSync, readFileSync } from 'node:fs';
|
|
19
|
-
import { mkdir, rm, writeFile } from 'node:fs/promises';
|
|
19
|
+
import { mkdir, readFile, rm, writeFile } from 'node:fs/promises';
|
|
20
20
|
import { homedir } from 'node:os';
|
|
21
21
|
import { basename, join } from 'node:path';
|
|
22
22
|
import { getAgentsHome, getCleoHome, getCleoTemplatesTildePath } from './paths.js';
|
|
@@ -68,6 +68,32 @@ async function removeStaleAgentInjection(projectRoot: string): Promise<boolean>
|
|
|
68
68
|
return true;
|
|
69
69
|
}
|
|
70
70
|
|
|
71
|
+
/**
|
|
72
|
+
* Strip hardcoded `<!-- gitnexus:start -->...<!-- gitnexus:end -->` blocks
|
|
73
|
+
* from AGENTS.md. These blocks are replaced by the `@.cleo/nexus-bridge.md`
|
|
74
|
+
* reference which contains auto-generated code intelligence content (T552).
|
|
75
|
+
*
|
|
76
|
+
* Also strips any other known vendor marker blocks using the same pattern
|
|
77
|
+
* (e.g. `<!-- gitnexus:start -->...<!-- gitnexus:end -->`).
|
|
78
|
+
*
|
|
79
|
+
* @param filePath - Absolute path to the file to strip
|
|
80
|
+
* @returns True if the file was modified, false otherwise
|
|
81
|
+
*/
|
|
82
|
+
export async function stripGitNexusBlocks(filePath: string): Promise<boolean> {
|
|
83
|
+
if (!existsSync(filePath)) return false;
|
|
84
|
+
const content = await readFile(filePath, 'utf8');
|
|
85
|
+
// Strip <!-- gitnexus:start --> ... <!-- gitnexus:end --> blocks (case-insensitive markers)
|
|
86
|
+
const stripped = content.replace(
|
|
87
|
+
/\n?<!--\s*gitnexus:start\s*-->[\s\S]*?<!--\s*gitnexus:end\s*-->\n?/gi,
|
|
88
|
+
'',
|
|
89
|
+
);
|
|
90
|
+
if (stripped !== content) {
|
|
91
|
+
await writeFile(filePath, stripped, 'utf8');
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
|
|
71
97
|
// ── Ensure injection ─────────────────────────────────────────────────
|
|
72
98
|
|
|
73
99
|
/**
|
|
@@ -78,7 +104,7 @@ async function removeStaleAgentInjection(projectRoot: string): Promise<boolean>
|
|
|
78
104
|
*
|
|
79
105
|
* Target architecture:
|
|
80
106
|
* CLAUDE.md/GEMINI.md -> @AGENTS.md (via injectAll)
|
|
81
|
-
* AGENTS.md -> @~/.agents/AGENTS.md + @.cleo/project-context.json + @.cleo/memory-bridge.md
|
|
107
|
+
* AGENTS.md -> @~/.agents/AGENTS.md + @.cleo/project-context.json + @.cleo/memory-bridge.md + @.cleo/nexus-bridge.md
|
|
82
108
|
*
|
|
83
109
|
* @task T4682
|
|
84
110
|
*/
|
|
@@ -114,6 +140,13 @@ export async function ensureInjection(projectRoot: string): Promise<ScaffoldResu
|
|
|
114
140
|
actions.push('removed deprecated AGENT-INJECTION.md');
|
|
115
141
|
}
|
|
116
142
|
|
|
143
|
+
// Step 0b: Strip hardcoded gitnexus blocks from AGENTS.md (T552)
|
|
144
|
+
// These are replaced by the @.cleo/nexus-bridge.md reference.
|
|
145
|
+
const removedGitNexus = await stripGitNexusBlocks(join(projectRoot, 'AGENTS.md'));
|
|
146
|
+
if (removedGitNexus) {
|
|
147
|
+
actions.push('removed hardcoded gitnexus block from AGENTS.md');
|
|
148
|
+
}
|
|
149
|
+
|
|
117
150
|
// Step 1: Inject @AGENTS.md into all provider instruction files
|
|
118
151
|
const injectionContent = buildInjectionContent({ references: ['@AGENTS.md'] });
|
|
119
152
|
const results = await injectAll(providers, projectRoot, 'project', injectionContent);
|
|
@@ -140,6 +173,12 @@ export async function ensureInjection(projectRoot: string): Promise<ScaffoldResu
|
|
|
140
173
|
agentsMdLines.push('@.cleo/memory-bridge.md');
|
|
141
174
|
}
|
|
142
175
|
|
|
176
|
+
// Nexus bridge: auto-generated code intelligence summary (T552)
|
|
177
|
+
const nexusBridgePath = join(projectRoot, '.cleo', 'nexus-bridge.md');
|
|
178
|
+
if (existsSync(nexusBridgePath)) {
|
|
179
|
+
agentsMdLines.push('@.cleo/nexus-bridge.md');
|
|
180
|
+
}
|
|
181
|
+
|
|
143
182
|
// Contributor project warning (ADR-029): inject dev-channel guidance when
|
|
144
183
|
// this project IS the CLEO source repo, so agents use cleo-dev not @latest.
|
|
145
184
|
const contributorBlock = buildContributorInjectionBlock(projectRoot);
|
package/src/internal.ts
CHANGED
|
@@ -75,6 +75,19 @@ export type { HookEvent, ProviderHookEvent } from './hooks/provider-hooks.js';
|
|
|
75
75
|
export { isProviderHookEvent } from './hooks/types.js';
|
|
76
76
|
// Init (additional)
|
|
77
77
|
export { isAutoInitEnabled } from './init.js';
|
|
78
|
+
export type {
|
|
79
|
+
AdaptiveValidationSuggestion,
|
|
80
|
+
GateFocusRecommendation,
|
|
81
|
+
StorePredictionOptions,
|
|
82
|
+
VerificationConfidenceScore,
|
|
83
|
+
} from './intelligence/adaptive-validation.js';
|
|
84
|
+
// Intelligence — adaptive validation (suggestGateFocus, scoreVerificationConfidence)
|
|
85
|
+
export {
|
|
86
|
+
predictAndStore,
|
|
87
|
+
scoreVerificationConfidence,
|
|
88
|
+
storePrediction,
|
|
89
|
+
suggestGateFocus,
|
|
90
|
+
} from './intelligence/adaptive-validation.js';
|
|
78
91
|
export {
|
|
79
92
|
analyzeChangeImpact,
|
|
80
93
|
analyzeTaskImpact,
|
|
@@ -173,10 +186,13 @@ export { runBrainMaintenance } from './memory/brain-maintenance.js';
|
|
|
173
186
|
export type { PurgeResult } from './memory/brain-purge.js';
|
|
174
187
|
export { purgeBrainNoise } from './memory/brain-purge.js';
|
|
175
188
|
export type {
|
|
189
|
+
BudgetedEntry,
|
|
190
|
+
BudgetedResult,
|
|
191
|
+
BudgetedRetrievalOptions,
|
|
176
192
|
PopulateEmbeddingsOptions,
|
|
177
193
|
PopulateEmbeddingsResult,
|
|
178
194
|
} from './memory/brain-retrieval.js';
|
|
179
|
-
export { populateEmbeddings } from './memory/brain-retrieval.js';
|
|
195
|
+
export { populateEmbeddings, retrieveWithBudget } from './memory/brain-retrieval.js';
|
|
180
196
|
export { migrateClaudeMem } from './memory/claude-mem-migration.js';
|
|
181
197
|
// Memory — engine-compat
|
|
182
198
|
export {
|
|
@@ -437,6 +453,9 @@ export { createBackup, listBackups, restoreFromBackup } from './store/backup.js'
|
|
|
437
453
|
// Backup portability — bundle packer (T311 / T347)
|
|
438
454
|
export type { PackBundleInput, PackBundleResult } from './store/backup-pack.js';
|
|
439
455
|
export { packBundle } from './store/backup-pack.js';
|
|
456
|
+
export type { BrainDataAccessor } from './store/brain-accessor.js';
|
|
457
|
+
// Brain accessor — for intelligence domain handler construction
|
|
458
|
+
export { getBrainAccessor } from './store/brain-accessor.js';
|
|
440
459
|
export { getBrainDb, getBrainNativeDb } from './store/brain-sqlite.js';
|
|
441
460
|
export type { LegacyCleanupResult, StrayNexusCleanupResult } from './store/cleanup-legacy.js';
|
|
442
461
|
export {
|
|
@@ -867,7 +886,11 @@ export type {
|
|
|
867
886
|
BrainTimelineNeighborRow,
|
|
868
887
|
} from './memory/brain-row-types.js';
|
|
869
888
|
// Memory (additional)
|
|
870
|
-
export {
|
|
889
|
+
export {
|
|
890
|
+
generateContextAwareContent,
|
|
891
|
+
refreshMemoryBridge,
|
|
892
|
+
writeMemoryBridge,
|
|
893
|
+
} from './memory/memory-bridge.js';
|
|
871
894
|
export type { SessionMemoryContext } from './memory/session-memory.js';
|
|
872
895
|
export {
|
|
873
896
|
buildSummarizationPrompt,
|
|
@@ -881,6 +904,12 @@ export {
|
|
|
881
904
|
discoverRelated as nexusDiscoverRelated,
|
|
882
905
|
searchAcrossProjects as nexusSearchAcrossProjects,
|
|
883
906
|
} from './nexus/discover.js';
|
|
907
|
+
// Nexus — bridge (code intelligence summary for agents)
|
|
908
|
+
export {
|
|
909
|
+
generateNexusBridgeContent,
|
|
910
|
+
refreshNexusBridge,
|
|
911
|
+
writeNexusBridge,
|
|
912
|
+
} from './nexus/nexus-bridge.js';
|
|
884
913
|
// Nexus — readRegistry (exported as nexusReadRegistry to avoid name clash with skills readRegistry)
|
|
885
914
|
export { readRegistry as nexusReadRegistry } from './nexus/registry.js';
|
|
886
915
|
// Nexus — transfer
|
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Brain Consolidator — contradiction detection for the CLEO BRAIN memory system.
|
|
3
|
+
*
|
|
4
|
+
* Implements heuristic contradiction detection based on keyword polarity flip.
|
|
5
|
+
* No LLM required — uses negation markers to identify entries that assert
|
|
6
|
+
* opposing claims about the same subject.
|
|
7
|
+
*
|
|
8
|
+
* When a contradiction is detected:
|
|
9
|
+
* 1. A 'contradicts' edge is created in brain_page_edges (both directions).
|
|
10
|
+
* 2. The lower-quality entry's qualityScore is reduced by 0.15.
|
|
11
|
+
*
|
|
12
|
+
* All operations are BEST-EFFORT — failures never crash the consolidator.
|
|
13
|
+
*
|
|
14
|
+
* @task T549 Wave 3-C
|
|
15
|
+
* @epic T549
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import { getBrainDb, getBrainNativeDb } from '../store/brain-sqlite.js';
|
|
19
|
+
import { typedAll } from '../store/typed-query.js';
|
|
20
|
+
|
|
21
|
+
// ============================================================================
|
|
22
|
+
// Types
|
|
23
|
+
// ============================================================================
|
|
24
|
+
|
|
25
|
+
/** A detected contradiction between two memory entries. */
|
|
26
|
+
export interface ContradictionResult {
|
|
27
|
+
/** ID of the first entry in the contradiction pair. */
|
|
28
|
+
entryAId: string;
|
|
29
|
+
/** ID of the second entry in the contradiction pair. */
|
|
30
|
+
entryBId: string;
|
|
31
|
+
/** Which entry was considered the "contradicted" one (lower quality). */
|
|
32
|
+
contradictedId: string;
|
|
33
|
+
/** Table name where the entries live. */
|
|
34
|
+
table: string;
|
|
35
|
+
/** Shared keywords that connected the two entries. */
|
|
36
|
+
sharedKeywords: string[];
|
|
37
|
+
/** Negation markers found in one of the entries. */
|
|
38
|
+
negationMarkers: string[];
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// ============================================================================
|
|
42
|
+
// Constants
|
|
43
|
+
// ============================================================================
|
|
44
|
+
|
|
45
|
+
/** Minimum number of shared keywords to consider two entries related. */
|
|
46
|
+
const MIN_SHARED_KEYWORDS = 3;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Negation markers that, when present in one entry but not the other,
|
|
50
|
+
* indicate a potential contradiction.
|
|
51
|
+
*/
|
|
52
|
+
const NEGATION_MARKERS = [
|
|
53
|
+
'not',
|
|
54
|
+
'never',
|
|
55
|
+
'deprecated',
|
|
56
|
+
'removed',
|
|
57
|
+
'replaced',
|
|
58
|
+
'avoid',
|
|
59
|
+
'no longer',
|
|
60
|
+
'do not',
|
|
61
|
+
"don't",
|
|
62
|
+
'disabled',
|
|
63
|
+
'deleted',
|
|
64
|
+
'dropped',
|
|
65
|
+
'broken',
|
|
66
|
+
'invalid',
|
|
67
|
+
'obsolete',
|
|
68
|
+
'reverted',
|
|
69
|
+
'undone',
|
|
70
|
+
'superseded',
|
|
71
|
+
] as const;
|
|
72
|
+
|
|
73
|
+
/** Stop words excluded from keyword extraction (matches brain-lifecycle stop words). */
|
|
74
|
+
const STOP_WORDS = new Set([
|
|
75
|
+
'the',
|
|
76
|
+
'a',
|
|
77
|
+
'an',
|
|
78
|
+
'is',
|
|
79
|
+
'are',
|
|
80
|
+
'was',
|
|
81
|
+
'were',
|
|
82
|
+
'be',
|
|
83
|
+
'been',
|
|
84
|
+
'being',
|
|
85
|
+
'have',
|
|
86
|
+
'has',
|
|
87
|
+
'had',
|
|
88
|
+
'do',
|
|
89
|
+
'does',
|
|
90
|
+
'did',
|
|
91
|
+
'will',
|
|
92
|
+
'would',
|
|
93
|
+
'could',
|
|
94
|
+
'should',
|
|
95
|
+
'may',
|
|
96
|
+
'might',
|
|
97
|
+
'shall',
|
|
98
|
+
'can',
|
|
99
|
+
'to',
|
|
100
|
+
'of',
|
|
101
|
+
'in',
|
|
102
|
+
'for',
|
|
103
|
+
'on',
|
|
104
|
+
'with',
|
|
105
|
+
'at',
|
|
106
|
+
'by',
|
|
107
|
+
'from',
|
|
108
|
+
'as',
|
|
109
|
+
'into',
|
|
110
|
+
'through',
|
|
111
|
+
'and',
|
|
112
|
+
'but',
|
|
113
|
+
'or',
|
|
114
|
+
'nor',
|
|
115
|
+
'so',
|
|
116
|
+
'yet',
|
|
117
|
+
'this',
|
|
118
|
+
'that',
|
|
119
|
+
'these',
|
|
120
|
+
'those',
|
|
121
|
+
'it',
|
|
122
|
+
'its',
|
|
123
|
+
'not',
|
|
124
|
+
'no',
|
|
125
|
+
]);
|
|
126
|
+
|
|
127
|
+
// ============================================================================
|
|
128
|
+
// Helpers
|
|
129
|
+
// ============================================================================
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Extract significant keywords from text for overlap comparison.
|
|
133
|
+
* Filters stop words and tokens shorter than 4 characters.
|
|
134
|
+
*/
|
|
135
|
+
function extractKeywords(text: string): Set<string> {
|
|
136
|
+
const words = text
|
|
137
|
+
.toLowerCase()
|
|
138
|
+
.replace(/[^a-z0-9\s\-_]/g, ' ')
|
|
139
|
+
.split(/\s+/);
|
|
140
|
+
const keywords = new Set<string>();
|
|
141
|
+
for (const w of words) {
|
|
142
|
+
if (w.length >= 4 && !STOP_WORDS.has(w)) {
|
|
143
|
+
keywords.add(w);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return keywords;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Find negation markers present in the text.
|
|
151
|
+
*/
|
|
152
|
+
function findNegationMarkers(text: string): string[] {
|
|
153
|
+
const lower = text.toLowerCase();
|
|
154
|
+
return NEGATION_MARKERS.filter((marker) => lower.includes(marker));
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Return the intersection of two keyword sets.
|
|
159
|
+
*/
|
|
160
|
+
function keywordIntersection(a: Set<string>, b: Set<string>): string[] {
|
|
161
|
+
const result: string[] = [];
|
|
162
|
+
for (const w of a) {
|
|
163
|
+
if (b.has(w)) result.push(w);
|
|
164
|
+
}
|
|
165
|
+
return result;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// ============================================================================
|
|
169
|
+
// Row types for raw SQL queries
|
|
170
|
+
// ============================================================================
|
|
171
|
+
|
|
172
|
+
interface EntryRow {
|
|
173
|
+
id: string;
|
|
174
|
+
text: string;
|
|
175
|
+
quality_score: number | null;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
// ============================================================================
|
|
179
|
+
// Main Export
|
|
180
|
+
// ============================================================================
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Detect contradiction pairs across all verified memory entries.
|
|
184
|
+
*
|
|
185
|
+
* For each verified entry:
|
|
186
|
+
* 1. Find entries with >= MIN_SHARED_KEYWORDS shared keywords.
|
|
187
|
+
* 2. Check for negation markers in one but not the other.
|
|
188
|
+
* 3. If contradiction detected: create 'contradicts' graph edges.
|
|
189
|
+
* 4. Lower quality score of the contradicted (lower quality) entry by 0.15.
|
|
190
|
+
*
|
|
191
|
+
* Only considers entries where invalid_at IS NULL (currently valid).
|
|
192
|
+
* Short-circuits after 50 contradiction pairs to limit consolidation cost.
|
|
193
|
+
*
|
|
194
|
+
* @param projectRoot - Project root directory for brain.db resolution
|
|
195
|
+
* @returns List of contradiction pairs found
|
|
196
|
+
*/
|
|
197
|
+
export async function detectContradictions(projectRoot: string): Promise<ContradictionResult[]> {
|
|
198
|
+
await getBrainDb(projectRoot);
|
|
199
|
+
const nativeDb = getBrainNativeDb();
|
|
200
|
+
if (!nativeDb) return [];
|
|
201
|
+
|
|
202
|
+
const results: ContradictionResult[] = [];
|
|
203
|
+
const now = new Date().toISOString().replace('T', ' ').slice(0, 19);
|
|
204
|
+
|
|
205
|
+
// Process each table that holds verified entries
|
|
206
|
+
const tables: Array<{ table: string; textCol: string }> = [
|
|
207
|
+
{ table: 'brain_observations', textCol: 'narrative' },
|
|
208
|
+
{ table: 'brain_learnings', textCol: 'insight' },
|
|
209
|
+
{ table: 'brain_patterns', textCol: 'pattern' },
|
|
210
|
+
{ table: 'brain_decisions', textCol: 'decision' },
|
|
211
|
+
];
|
|
212
|
+
|
|
213
|
+
for (const { table, textCol } of tables) {
|
|
214
|
+
if (results.length >= 50) break;
|
|
215
|
+
|
|
216
|
+
let entries: EntryRow[] = [];
|
|
217
|
+
try {
|
|
218
|
+
// Only examine verified, valid entries for contradiction scanning
|
|
219
|
+
entries = typedAll<EntryRow>(
|
|
220
|
+
nativeDb.prepare(`
|
|
221
|
+
SELECT id, COALESCE(${textCol}, '') AS text, quality_score
|
|
222
|
+
FROM ${table}
|
|
223
|
+
WHERE invalid_at IS NULL
|
|
224
|
+
AND verified = 1
|
|
225
|
+
LIMIT 200
|
|
226
|
+
`),
|
|
227
|
+
);
|
|
228
|
+
} catch {
|
|
229
|
+
// Table or column may not exist — best-effort
|
|
230
|
+
continue;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
if (entries.length < 2) continue;
|
|
234
|
+
|
|
235
|
+
// Extract keywords for all entries up front
|
|
236
|
+
const keywordMap = new Map<string, Set<string>>();
|
|
237
|
+
const negationMap = new Map<string, string[]>();
|
|
238
|
+
for (const entry of entries) {
|
|
239
|
+
keywordMap.set(entry.id, extractKeywords(entry.text));
|
|
240
|
+
negationMap.set(entry.id, findNegationMarkers(entry.text));
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// Compare all pairs — O(n²) but capped at 200 entries (40k ops max)
|
|
244
|
+
for (let i = 0; i < entries.length; i++) {
|
|
245
|
+
if (results.length >= 50) break;
|
|
246
|
+
const entryA = entries[i]!;
|
|
247
|
+
const keywordsA = keywordMap.get(entryA.id)!;
|
|
248
|
+
const negationsA = negationMap.get(entryA.id)!;
|
|
249
|
+
|
|
250
|
+
for (let j = i + 1; j < entries.length; j++) {
|
|
251
|
+
if (results.length >= 50) break;
|
|
252
|
+
const entryB = entries[j]!;
|
|
253
|
+
const keywordsB = keywordMap.get(entryB.id)!;
|
|
254
|
+
const negationsB = negationMap.get(entryB.id)!;
|
|
255
|
+
|
|
256
|
+
// Step 1: Need sufficient shared keywords to be "about the same thing"
|
|
257
|
+
const shared = keywordIntersection(keywordsA, keywordsB);
|
|
258
|
+
if (shared.length < MIN_SHARED_KEYWORDS) continue;
|
|
259
|
+
|
|
260
|
+
// Step 2: Check for negation polarity flip — one entry negates the other
|
|
261
|
+
// A contradiction occurs when one entry has negation markers that the other lacks
|
|
262
|
+
const negationsOnlyInA = negationsA.filter((m) => !negationsB.includes(m));
|
|
263
|
+
const negationsOnlyInB = negationsB.filter((m) => !negationsA.includes(m));
|
|
264
|
+
const negationFlip = negationsOnlyInA.length > 0 || negationsOnlyInB.length > 0;
|
|
265
|
+
|
|
266
|
+
if (!negationFlip) continue;
|
|
267
|
+
|
|
268
|
+
// Found a contradiction pair
|
|
269
|
+
const negMarkers = [...negationsOnlyInA, ...negationsOnlyInB];
|
|
270
|
+
|
|
271
|
+
// The contradicted entry is the lower-quality one
|
|
272
|
+
const qualA = entryA.quality_score ?? 0.5;
|
|
273
|
+
const qualB = entryB.quality_score ?? 0.5;
|
|
274
|
+
const contradictedId = qualA <= qualB ? entryA.id : entryB.id;
|
|
275
|
+
const winningId = contradictedId === entryA.id ? entryB.id : entryA.id;
|
|
276
|
+
|
|
277
|
+
results.push({
|
|
278
|
+
entryAId: entryA.id,
|
|
279
|
+
entryBId: entryB.id,
|
|
280
|
+
contradictedId,
|
|
281
|
+
table,
|
|
282
|
+
sharedKeywords: shared.slice(0, 10),
|
|
283
|
+
negationMarkers: negMarkers.slice(0, 5),
|
|
284
|
+
});
|
|
285
|
+
|
|
286
|
+
// Step 3: Create 'contradicts' graph edges (best-effort)
|
|
287
|
+
const nodeA = buildNodeId(table, entryA.id);
|
|
288
|
+
const nodeB = buildNodeId(table, entryB.id);
|
|
289
|
+
|
|
290
|
+
try {
|
|
291
|
+
nativeDb
|
|
292
|
+
.prepare(`
|
|
293
|
+
INSERT OR IGNORE INTO brain_page_edges
|
|
294
|
+
(from_id, to_id, edge_type, weight, provenance, created_at)
|
|
295
|
+
VALUES (?, ?, 'contradicts', 0.8, 'consolidation:contradiction', ?)
|
|
296
|
+
`)
|
|
297
|
+
.run(nodeA, nodeB, now);
|
|
298
|
+
nativeDb
|
|
299
|
+
.prepare(`
|
|
300
|
+
INSERT OR IGNORE INTO brain_page_edges
|
|
301
|
+
(from_id, to_id, edge_type, weight, provenance, created_at)
|
|
302
|
+
VALUES (?, ?, 'contradicts', 0.8, 'consolidation:contradiction', ?)
|
|
303
|
+
`)
|
|
304
|
+
.run(nodeB, nodeA, now);
|
|
305
|
+
} catch {
|
|
306
|
+
/* graph population is best-effort */
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
// Step 4: Lower quality of the contradicted entry by 0.15
|
|
310
|
+
try {
|
|
311
|
+
nativeDb
|
|
312
|
+
.prepare(`
|
|
313
|
+
UPDATE ${table}
|
|
314
|
+
SET quality_score = MAX(0.0, COALESCE(quality_score, 0.5) - 0.15),
|
|
315
|
+
updated_at = ?
|
|
316
|
+
WHERE id = ?
|
|
317
|
+
`)
|
|
318
|
+
.run(now, contradictedId);
|
|
319
|
+
// Also ensure the winning entry's quality is noted
|
|
320
|
+
void winningId; // used above for clarity
|
|
321
|
+
} catch {
|
|
322
|
+
/* best-effort */
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
return results;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
/**
|
|
332
|
+
* Build the graph node ID for a given table + entry ID combination.
|
|
333
|
+
* Mirrors the convention used in graph-auto-populate.ts.
|
|
334
|
+
*/
|
|
335
|
+
function buildNodeId(table: string, entryId: string): string {
|
|
336
|
+
const typeMap: Record<string, string> = {
|
|
337
|
+
brain_observations: 'observation',
|
|
338
|
+
brain_learnings: 'learning',
|
|
339
|
+
brain_patterns: 'pattern',
|
|
340
|
+
brain_decisions: 'decision',
|
|
341
|
+
};
|
|
342
|
+
const type = typeMap[table] ?? 'entry';
|
|
343
|
+
return `${type}:${entryId}`;
|
|
344
|
+
}
|