@cleocode/core 2026.4.31 → 2026.4.36
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.d.ts.map +1 -1
- 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.d.ts +72 -0
- package/dist/hooks/handlers/conduit-hooks.d.ts.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.d.ts +6 -0
- package/dist/hooks/handlers/index.d.ts.map +1 -1
- package/dist/hooks/handlers/index.js +37 -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 +30 -0
- package/dist/hooks/handlers/session-hooks.d.ts.map +1 -1
- 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.d.ts +2 -0
- package/dist/hooks/handlers/task-hooks.d.ts.map +1 -1
- package/dist/hooks/handlers/task-hooks.js +79 -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 +56736 -47002
- 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 +10 -3
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +321 -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/anthropic-key-resolver.d.ts +35 -0
- package/dist/memory/anthropic-key-resolver.d.ts.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.d.ts +38 -42
- package/dist/memory/auto-extract.d.ts.map +1 -1
- 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.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 +75 -1
- package/dist/memory/brain-retrieval.d.ts.map +1 -1
- package/dist/memory/brain-retrieval.js +1044 -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 +82 -15
- package/dist/memory/brain-search.d.ts.map +1 -1
- 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/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 +16 -1
- package/dist/memory/engine-compat.d.ts.map +1 -1
- package/dist/memory/engine-compat.js +1561 -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 +179 -0
- package/dist/memory/learnings.js.map +1 -0
- package/dist/memory/llm-extraction.d.ts +107 -0
- package/dist/memory/llm-extraction.d.ts.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.d.ts +157 -0
- package/dist/memory/observer-reflector.d.ts.map +1 -0
- package/dist/memory/observer-reflector.js +626 -0
- package/dist/memory/observer-reflector.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 +663 -39
- package/dist/store/brain-schema.d.ts.map +1 -1
- package/dist/store/brain-schema.js +579 -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 +297 -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.d.ts.map +1 -1
- package/dist/tasks/complete.js +228 -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 +13 -12
- package/src/config.ts +7 -0
- package/src/hooks/handlers/__tests__/conduit-hooks.test.ts +356 -0
- package/src/hooks/handlers/conduit-hooks.ts +258 -0
- package/src/hooks/handlers/index.ts +13 -0
- package/src/hooks/handlers/intelligence-hooks.ts +80 -0
- package/src/hooks/handlers/session-hooks.ts +78 -0
- package/src/hooks/handlers/task-hooks.ts +14 -0
- package/src/hooks/handlers/watchdog-hooks.ts +187 -0
- package/src/injection.ts +41 -2
- package/src/internal.ts +39 -2
- package/src/memory/__tests__/auto-extract.test.ts +43 -114
- package/src/memory/__tests__/brain-automation.test.ts +16 -39
- package/src/memory/__tests__/brain-rrf.test.ts +431 -0
- package/src/memory/__tests__/llm-extraction.test.ts +342 -0
- package/src/memory/__tests__/observer-reflector.test.ts +475 -0
- package/src/memory/anthropic-key-resolver.ts +113 -0
- package/src/memory/auto-extract.ts +40 -72
- package/src/memory/brain-consolidator.ts +344 -0
- package/src/memory/brain-lifecycle.ts +636 -2
- package/src/memory/brain-retrieval.ts +630 -18
- package/src/memory/brain-search.ts +234 -132
- package/src/memory/decisions.ts +21 -1
- package/src/memory/engine-compat.ts +25 -15
- package/src/memory/extraction-gate.ts +574 -0
- package/src/memory/index.ts +6 -2
- package/src/memory/learnings.ts +34 -1
- package/src/memory/llm-extraction.ts +524 -0
- package/src/memory/memory-bridge.ts +29 -12
- package/src/memory/observer-reflector.ts +829 -0
- 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 +282 -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/complete.ts +7 -10
- 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,459 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extraction Gate — Verification layer before BRAIN memory storage.
|
|
3
|
+
*
|
|
4
|
+
* Wraps all memory writes with three ordered checks:
|
|
5
|
+
* A. Content-hash deduplication (always runs — fast, no embedding needed)
|
|
6
|
+
* B. Cosine similarity deduplication (runs when embedding is available; skipped for trusted sources)
|
|
7
|
+
* C. Confidence threshold enforcement (always runs)
|
|
8
|
+
*
|
|
9
|
+
* Trusted sources (manual, owner) bypass Check B but still run A and C.
|
|
10
|
+
*
|
|
11
|
+
* Design goals:
|
|
12
|
+
* - NEVER block the primary write path on error — all checks wrapped in try/catch
|
|
13
|
+
* - Degrade gracefully to hash-only dedup when embedding is unavailable
|
|
14
|
+
* - Contradiction detection uses a polarity-flip heuristic (no LLM required)
|
|
15
|
+
*
|
|
16
|
+
* @task T549 Wave 2-A
|
|
17
|
+
* @epic T549
|
|
18
|
+
*/
|
|
19
|
+
import { createHash } from 'node:crypto';
|
|
20
|
+
import { isEmbeddingAvailable } from './brain-embedding.js';
|
|
21
|
+
import { searchSimilar } from './brain-similarity.js';
|
|
22
|
+
import { addGraphEdge } from './graph-auto-populate.js';
|
|
23
|
+
// ============================================================================
|
|
24
|
+
// Constants
|
|
25
|
+
// ============================================================================
|
|
26
|
+
/** Cosine distance below which two entries are considered exact duplicates. */
|
|
27
|
+
const DUPLICATE_THRESHOLD = 0.15;
|
|
28
|
+
/** Cosine distance below which two entries are considered closely related. */
|
|
29
|
+
const SIMILAR_THRESHOLD = 0.3;
|
|
30
|
+
/** Minimum confidence score required to store an entry. */
|
|
31
|
+
const MINIMUM_CONFIDENCE = 0.4;
|
|
32
|
+
/**
|
|
33
|
+
* Negation markers used in polarity-flip contradiction detection.
|
|
34
|
+
* A contradiction is signalled when exactly one of two related entries
|
|
35
|
+
* contains one of these markers near shared keyword overlap.
|
|
36
|
+
*/
|
|
37
|
+
const NEGATION_MARKERS = [
|
|
38
|
+
'not',
|
|
39
|
+
'never',
|
|
40
|
+
'no longer',
|
|
41
|
+
'deprecated',
|
|
42
|
+
'removed',
|
|
43
|
+
'replaced',
|
|
44
|
+
'broken',
|
|
45
|
+
'avoid',
|
|
46
|
+
'do not',
|
|
47
|
+
"don't",
|
|
48
|
+
'invalid',
|
|
49
|
+
'obsolete',
|
|
50
|
+
];
|
|
51
|
+
// ============================================================================
|
|
52
|
+
// Helpers
|
|
53
|
+
// ============================================================================
|
|
54
|
+
/**
|
|
55
|
+
* Compute a short SHA-256 prefix over the normalised text content.
|
|
56
|
+
* Used for exact-duplicate detection without embedding.
|
|
57
|
+
*/
|
|
58
|
+
function contentHashPrefix(text) {
|
|
59
|
+
return createHash('sha256').update(text.trim().toLowerCase()).digest('hex').slice(0, 16);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Polarity-flip contradiction heuristic.
|
|
63
|
+
*
|
|
64
|
+
* Returns true when exactly one of the two texts carries a negation marker
|
|
65
|
+
* AND both texts share at least 3 meaningful keywords (>4 chars).
|
|
66
|
+
*
|
|
67
|
+
* This is intentionally approximate — false positives cause a supersede
|
|
68
|
+
* write (safe), false negatives allow a duplicate (harmless, caught later
|
|
69
|
+
* by cosine merge).
|
|
70
|
+
*/
|
|
71
|
+
function hasContradictingPolarity(existingText, newText) {
|
|
72
|
+
const existingLower = existingText.toLowerCase();
|
|
73
|
+
const newLower = newText.toLowerCase();
|
|
74
|
+
const existingNegated = NEGATION_MARKERS.some((m) => existingLower.includes(m));
|
|
75
|
+
const newNegated = NEGATION_MARKERS.some((m) => newLower.includes(m));
|
|
76
|
+
// Contradiction: exactly one of the two carries negation
|
|
77
|
+
if (existingNegated === newNegated)
|
|
78
|
+
return false;
|
|
79
|
+
// Require at least 3 shared meaningful keywords
|
|
80
|
+
const existingWords = new Set(existingLower.split(/\s+/).filter((w) => w.length > 4));
|
|
81
|
+
const newWords = new Set(newLower.split(/\s+/).filter((w) => w.length > 4));
|
|
82
|
+
const overlap = [...newWords].filter((w) => existingWords.has(w));
|
|
83
|
+
return overlap.length >= 3;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Mark an existing entry as invalid (superseded).
|
|
87
|
+
* Sets the invalid_at column to now on whichever typed table owns the entry.
|
|
88
|
+
*
|
|
89
|
+
* Determined by ID prefix conventions:
|
|
90
|
+
* D... → brain_decisions
|
|
91
|
+
* P... → brain_patterns
|
|
92
|
+
* L... → brain_learnings
|
|
93
|
+
* O... / CM-... → brain_observations
|
|
94
|
+
*/
|
|
95
|
+
async function invalidateEntry(projectRoot, entryId) {
|
|
96
|
+
const now = new Date().toISOString().replace('T', ' ').slice(0, 19);
|
|
97
|
+
try {
|
|
98
|
+
const { getBrainNativeDb, getBrainDb } = await import('../store/brain-sqlite.js');
|
|
99
|
+
await getBrainDb(projectRoot);
|
|
100
|
+
const nativeDb = getBrainNativeDb();
|
|
101
|
+
if (!nativeDb)
|
|
102
|
+
return;
|
|
103
|
+
// Route by ID prefix to correct table
|
|
104
|
+
if (entryId.startsWith('D-') || /^D\d/.test(entryId)) {
|
|
105
|
+
nativeDb
|
|
106
|
+
.prepare('UPDATE brain_decisions SET invalid_at = ? WHERE id = ? AND invalid_at IS NULL')
|
|
107
|
+
.run(now, entryId);
|
|
108
|
+
}
|
|
109
|
+
else if (entryId.startsWith('P-') || /^P\d/.test(entryId)) {
|
|
110
|
+
nativeDb
|
|
111
|
+
.prepare('UPDATE brain_patterns SET invalid_at = ? WHERE id = ? AND invalid_at IS NULL')
|
|
112
|
+
.run(now, entryId);
|
|
113
|
+
}
|
|
114
|
+
else if (entryId.startsWith('L-') || /^L\d/.test(entryId)) {
|
|
115
|
+
nativeDb
|
|
116
|
+
.prepare('UPDATE brain_learnings SET invalid_at = ? WHERE id = ? AND invalid_at IS NULL')
|
|
117
|
+
.run(now, entryId);
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
// O-, O[base36], CM- → observations
|
|
121
|
+
nativeDb
|
|
122
|
+
.prepare('UPDATE brain_observations SET invalid_at = ? WHERE id = ? AND invalid_at IS NULL')
|
|
123
|
+
.run(now, entryId);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
// Best-effort — invalidation failure must not block the primary write
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Increment the citation_count of an existing entry by 1.
|
|
132
|
+
* Routes by the same ID-prefix convention as invalidateEntry.
|
|
133
|
+
*/
|
|
134
|
+
async function incrementCitationCount(projectRoot, entryId) {
|
|
135
|
+
try {
|
|
136
|
+
const { getBrainNativeDb, getBrainDb } = await import('../store/brain-sqlite.js');
|
|
137
|
+
await getBrainDb(projectRoot);
|
|
138
|
+
const nativeDb = getBrainNativeDb();
|
|
139
|
+
if (!nativeDb)
|
|
140
|
+
return;
|
|
141
|
+
if (entryId.startsWith('D-') || /^D\d/.test(entryId)) {
|
|
142
|
+
nativeDb
|
|
143
|
+
.prepare('UPDATE brain_decisions SET citation_count = citation_count + 1 WHERE id = ?')
|
|
144
|
+
.run(entryId);
|
|
145
|
+
}
|
|
146
|
+
else if (entryId.startsWith('P-') || /^P\d/.test(entryId)) {
|
|
147
|
+
nativeDb
|
|
148
|
+
.prepare('UPDATE brain_patterns SET citation_count = citation_count + 1 WHERE id = ?')
|
|
149
|
+
.run(entryId);
|
|
150
|
+
}
|
|
151
|
+
else if (entryId.startsWith('L-') || /^L\d/.test(entryId)) {
|
|
152
|
+
nativeDb
|
|
153
|
+
.prepare('UPDATE brain_learnings SET citation_count = citation_count + 1 WHERE id = ?')
|
|
154
|
+
.run(entryId);
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
nativeDb
|
|
158
|
+
.prepare('UPDATE brain_observations SET citation_count = citation_count + 1 WHERE id = ?')
|
|
159
|
+
.run(entryId);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
catch {
|
|
163
|
+
// Best-effort
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Check A (degraded): SHA-256 content-hash deduplication only.
|
|
168
|
+
*
|
|
169
|
+
* Queries brain_observations for a matching content_hash within the last
|
|
170
|
+
* 24 hours. When a match is found, returns 'merged' so the caller avoids
|
|
171
|
+
* a duplicate insert.
|
|
172
|
+
*
|
|
173
|
+
* Only checks brain_observations because it is the only table that stores
|
|
174
|
+
* a content_hash column. For other memory types, hash dedup is not supported
|
|
175
|
+
* and this returns null.
|
|
176
|
+
*/
|
|
177
|
+
async function hashDedupCheck(projectRoot, text) {
|
|
178
|
+
try {
|
|
179
|
+
const { getBrainNativeDb, getBrainDb } = await import('../store/brain-sqlite.js');
|
|
180
|
+
await getBrainDb(projectRoot);
|
|
181
|
+
const nativeDb = getBrainNativeDb();
|
|
182
|
+
if (!nativeDb)
|
|
183
|
+
return { matched: false };
|
|
184
|
+
const hash = contentHashPrefix(text);
|
|
185
|
+
// Search across all observations (no time window — permanent dedup)
|
|
186
|
+
const rows = nativeDb
|
|
187
|
+
.prepare('SELECT id FROM brain_observations WHERE content_hash = ? AND invalid_at IS NULL LIMIT 1')
|
|
188
|
+
.all(hash);
|
|
189
|
+
if (rows.length > 0) {
|
|
190
|
+
return { matched: true, id: rows[0].id };
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
catch {
|
|
194
|
+
// Degrade gracefully — if dedup check fails, allow the write
|
|
195
|
+
}
|
|
196
|
+
return { matched: false };
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Determine whether the candidate is from a trusted source that bypasses
|
|
200
|
+
* the similarity/contradiction checks (Checks B).
|
|
201
|
+
*
|
|
202
|
+
* Trusted: explicit candidate.trusted flag, source='manual', or
|
|
203
|
+
* sourceConfidence='owner' or 'task-outcome'.
|
|
204
|
+
*/
|
|
205
|
+
function isTrustedSource(candidate) {
|
|
206
|
+
if (candidate.trusted === true)
|
|
207
|
+
return true;
|
|
208
|
+
if (candidate.source === 'manual')
|
|
209
|
+
return true;
|
|
210
|
+
if (candidate.sourceConfidence === 'owner' || candidate.sourceConfidence === 'task-outcome') {
|
|
211
|
+
return true;
|
|
212
|
+
}
|
|
213
|
+
return false;
|
|
214
|
+
}
|
|
215
|
+
// ============================================================================
|
|
216
|
+
// Core Gate Logic
|
|
217
|
+
// ============================================================================
|
|
218
|
+
/**
|
|
219
|
+
* Run a MemoryCandidate through the verification gate.
|
|
220
|
+
*
|
|
221
|
+
* Checks (in order):
|
|
222
|
+
* A. Content-hash deduplication (always; degrades to observations-only when DB unavailable)
|
|
223
|
+
* B. Cosine similarity deduplication + contradiction detection (skipped for trusted sources)
|
|
224
|
+
* C. Confidence threshold >= 0.40 (always)
|
|
225
|
+
*
|
|
226
|
+
* The gate NEVER stores the entry itself — it only decides whether the caller
|
|
227
|
+
* should store, merge into an existing entry, queue as pending, or reject.
|
|
228
|
+
*
|
|
229
|
+
* To store after receiving action='stored', call the appropriate storage
|
|
230
|
+
* function (observeBrain, storeLearning, storePattern, storeDecision).
|
|
231
|
+
*
|
|
232
|
+
* @param projectRoot - Project root for brain.db access
|
|
233
|
+
* @param candidate - Candidate to verify
|
|
234
|
+
* @returns GateResult describing what should happen
|
|
235
|
+
*/
|
|
236
|
+
export async function verifyCandidate(projectRoot, candidate) {
|
|
237
|
+
try {
|
|
238
|
+
// -----------------------------------------------------------------------
|
|
239
|
+
// Check A: Content-hash dedup (always, fast)
|
|
240
|
+
// -----------------------------------------------------------------------
|
|
241
|
+
const hashCheck = await hashDedupCheck(projectRoot, candidate.text);
|
|
242
|
+
if (hashCheck.matched) {
|
|
243
|
+
// Bump citation count on the existing entry (fire-and-forget)
|
|
244
|
+
incrementCitationCount(projectRoot, hashCheck.id).catch(() => undefined);
|
|
245
|
+
return {
|
|
246
|
+
action: 'merged',
|
|
247
|
+
id: hashCheck.id,
|
|
248
|
+
reason: `exact-duplicate (hash match) of ${hashCheck.id}`,
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
// -----------------------------------------------------------------------
|
|
252
|
+
// Check B: Cosine similarity + contradiction (skip for trusted sources)
|
|
253
|
+
// -----------------------------------------------------------------------
|
|
254
|
+
const trusted = isTrustedSource(candidate);
|
|
255
|
+
if (!trusted && isEmbeddingAvailable()) {
|
|
256
|
+
try {
|
|
257
|
+
const similar = await searchSimilar(candidate.text, projectRoot, 5);
|
|
258
|
+
if (similar.length > 0) {
|
|
259
|
+
const nearest = similar[0];
|
|
260
|
+
if (nearest.distance < DUPLICATE_THRESHOLD) {
|
|
261
|
+
// Near-identical — merge into existing
|
|
262
|
+
incrementCitationCount(projectRoot, nearest.id).catch(() => undefined);
|
|
263
|
+
return {
|
|
264
|
+
action: 'merged',
|
|
265
|
+
id: nearest.id,
|
|
266
|
+
reason: `near-duplicate of ${nearest.id} (cosine distance=${nearest.distance.toFixed(3)})`,
|
|
267
|
+
similarity: nearest.distance,
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
if (nearest.distance < SIMILAR_THRESHOLD) {
|
|
271
|
+
// Related — check for contradiction
|
|
272
|
+
if (hasContradictingPolarity(nearest.text, candidate.text)) {
|
|
273
|
+
// New text supersedes old — invalidate old entry
|
|
274
|
+
await invalidateEntry(projectRoot, nearest.id);
|
|
275
|
+
// Record supersession graph edge (fire-and-forget)
|
|
276
|
+
// Note: we don't have the new entry's ID yet so we'll skip the edge here.
|
|
277
|
+
// The caller should add the supersedes edge after storage using the returned existingId.
|
|
278
|
+
return {
|
|
279
|
+
action: 'stored',
|
|
280
|
+
id: null,
|
|
281
|
+
reason: `contradiction-supersedes ${nearest.id}`,
|
|
282
|
+
similarity: nearest.distance,
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
// Similar but not contradicting — store as new (link will be added post-storage)
|
|
286
|
+
return {
|
|
287
|
+
action: 'stored',
|
|
288
|
+
id: null,
|
|
289
|
+
reason: `similar-but-distinct to ${nearest.id} (distance=${nearest.distance.toFixed(3)})`,
|
|
290
|
+
similarity: nearest.distance,
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
catch {
|
|
296
|
+
// Embedding/similarity check failed — degrade to hash-only (already passed above)
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
// -----------------------------------------------------------------------
|
|
300
|
+
// Check C: Confidence threshold
|
|
301
|
+
// -----------------------------------------------------------------------
|
|
302
|
+
if (candidate.confidence < MINIMUM_CONFIDENCE) {
|
|
303
|
+
return {
|
|
304
|
+
action: 'pending',
|
|
305
|
+
id: null,
|
|
306
|
+
reason: `confidence ${candidate.confidence.toFixed(2)} below minimum ${MINIMUM_CONFIDENCE}`,
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
// All checks passed — caller should store
|
|
310
|
+
return {
|
|
311
|
+
action: 'stored',
|
|
312
|
+
id: null,
|
|
313
|
+
reason: 'verified-new',
|
|
314
|
+
};
|
|
315
|
+
}
|
|
316
|
+
catch (err) {
|
|
317
|
+
// Safety net: gate errors must never block writes.
|
|
318
|
+
// Log a warning and allow the store to proceed.
|
|
319
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
320
|
+
console.warn(`[extraction-gate] verifyCandidate error (allowing store): ${message}`);
|
|
321
|
+
return {
|
|
322
|
+
action: 'stored',
|
|
323
|
+
id: null,
|
|
324
|
+
reason: `gate-error-passthrough: ${message}`,
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Run a batch of candidates through the verification gate sequentially.
|
|
330
|
+
*
|
|
331
|
+
* Sequential (not parallel) so that a 'merged' action on an earlier candidate
|
|
332
|
+
* is visible as an existing entry when later candidates run their similarity checks.
|
|
333
|
+
*
|
|
334
|
+
* @param projectRoot - Project root for brain.db access
|
|
335
|
+
* @param candidates - Array of candidates to verify
|
|
336
|
+
* @returns Array of GateResults in input order
|
|
337
|
+
*/
|
|
338
|
+
export async function verifyBatch(projectRoot, candidates) {
|
|
339
|
+
const results = [];
|
|
340
|
+
for (const candidate of candidates) {
|
|
341
|
+
results.push(await verifyCandidate(projectRoot, candidate));
|
|
342
|
+
}
|
|
343
|
+
return results;
|
|
344
|
+
}
|
|
345
|
+
// ============================================================================
|
|
346
|
+
// Storage Routing
|
|
347
|
+
// ============================================================================
|
|
348
|
+
/**
|
|
349
|
+
* Store a verified candidate in the appropriate BRAIN table based on memoryType.
|
|
350
|
+
*
|
|
351
|
+
* Routes:
|
|
352
|
+
* semantic → brain_learnings (storeLearning)
|
|
353
|
+
* episodic → brain_observations (observeBrain)
|
|
354
|
+
* procedural → brain_patterns (storePattern)
|
|
355
|
+
*
|
|
356
|
+
* Called only after verifyCandidate returns action='stored'.
|
|
357
|
+
*
|
|
358
|
+
* @param projectRoot - Project root for brain.db access
|
|
359
|
+
* @param candidate - Verified candidate to store
|
|
360
|
+
* @returns ID of the newly created entry
|
|
361
|
+
*/
|
|
362
|
+
export async function storeVerifiedCandidate(projectRoot, candidate) {
|
|
363
|
+
const title = candidate.title ?? candidate.text.slice(0, 120);
|
|
364
|
+
switch (candidate.memoryType) {
|
|
365
|
+
case 'semantic': {
|
|
366
|
+
const { storeLearning } = await import('./learnings.js');
|
|
367
|
+
const row = await storeLearning(projectRoot, {
|
|
368
|
+
insight: candidate.text,
|
|
369
|
+
source: candidate.source,
|
|
370
|
+
confidence: candidate.confidence,
|
|
371
|
+
actionable: candidate.source === 'task-completion',
|
|
372
|
+
});
|
|
373
|
+
return row.id;
|
|
374
|
+
}
|
|
375
|
+
case 'episodic': {
|
|
376
|
+
const { observeBrain } = await import('./brain-retrieval.js');
|
|
377
|
+
const result = await observeBrain(projectRoot, {
|
|
378
|
+
text: candidate.text,
|
|
379
|
+
title,
|
|
380
|
+
sourceSessionId: candidate.sourceSessionId,
|
|
381
|
+
sourceType: candidate.source === 'manual' ? 'manual' : 'agent',
|
|
382
|
+
});
|
|
383
|
+
return result.id;
|
|
384
|
+
}
|
|
385
|
+
case 'procedural': {
|
|
386
|
+
const { storePattern } = await import('./patterns.js');
|
|
387
|
+
const row = await storePattern(projectRoot, {
|
|
388
|
+
type: 'workflow',
|
|
389
|
+
pattern: candidate.text,
|
|
390
|
+
context: title,
|
|
391
|
+
});
|
|
392
|
+
return row.id;
|
|
393
|
+
}
|
|
394
|
+
default: {
|
|
395
|
+
// Exhaustive fallback — should never reach here with correct types
|
|
396
|
+
const { observeBrain } = await import('./brain-retrieval.js');
|
|
397
|
+
const result = await observeBrain(projectRoot, {
|
|
398
|
+
text: candidate.text,
|
|
399
|
+
title,
|
|
400
|
+
sourceSessionId: candidate.sourceSessionId,
|
|
401
|
+
sourceType: candidate.source === 'manual' ? 'manual' : 'agent',
|
|
402
|
+
});
|
|
403
|
+
return result.id;
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
/**
|
|
408
|
+
* Full gate-and-store pipeline for a single candidate.
|
|
409
|
+
*
|
|
410
|
+
* Runs verifyCandidate then calls storeVerifiedCandidate when action='stored'.
|
|
411
|
+
* For 'merged', increments the existing entry's citation_count (already done inside verifyCandidate).
|
|
412
|
+
* For 'pending' and 'rejected', returns the GateResult with no storage.
|
|
413
|
+
*
|
|
414
|
+
* After storage, adds a supersedes edge when the gate returned a contradiction reason.
|
|
415
|
+
*
|
|
416
|
+
* @param projectRoot - Project root for brain.db access
|
|
417
|
+
* @param candidate - Candidate to verify and store
|
|
418
|
+
* @returns Final GateResult with the stored/merged entry ID populated
|
|
419
|
+
*/
|
|
420
|
+
export async function verifyAndStore(projectRoot, candidate) {
|
|
421
|
+
const gateResult = await verifyCandidate(projectRoot, candidate);
|
|
422
|
+
if (gateResult.action !== 'stored') {
|
|
423
|
+
return gateResult;
|
|
424
|
+
}
|
|
425
|
+
try {
|
|
426
|
+
const newId = await storeVerifiedCandidate(projectRoot, candidate);
|
|
427
|
+
// If this was a contradiction supersession, add a graph edge (best-effort)
|
|
428
|
+
if (gateResult.reason.startsWith('contradiction-supersedes ')) {
|
|
429
|
+
const oldId = gateResult.reason.replace('contradiction-supersedes ', '');
|
|
430
|
+
addGraphEdge(projectRoot, `observation:${newId}`, `observation:${oldId}`, 'supersedes', 1.0, 'extraction-gate').catch(() => undefined);
|
|
431
|
+
}
|
|
432
|
+
return { ...gateResult, id: newId };
|
|
433
|
+
}
|
|
434
|
+
catch (err) {
|
|
435
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
436
|
+
return {
|
|
437
|
+
action: 'rejected',
|
|
438
|
+
id: null,
|
|
439
|
+
reason: `storage-error: ${message}`,
|
|
440
|
+
};
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
/**
|
|
444
|
+
* Full gate-and-store pipeline for a batch of candidates.
|
|
445
|
+
*
|
|
446
|
+
* Sequential execution ensures that earlier stores are visible to later similarity checks.
|
|
447
|
+
*
|
|
448
|
+
* @param projectRoot - Project root for brain.db access
|
|
449
|
+
* @param candidates - Array of candidates to verify and store
|
|
450
|
+
* @returns Array of final GateResults in input order
|
|
451
|
+
*/
|
|
452
|
+
export async function verifyAndStoreBatch(projectRoot, candidates) {
|
|
453
|
+
const results = [];
|
|
454
|
+
for (const candidate of candidates) {
|
|
455
|
+
results.push(await verifyAndStore(projectRoot, candidate));
|
|
456
|
+
}
|
|
457
|
+
return results;
|
|
458
|
+
}
|
|
459
|
+
//# sourceMappingURL=extraction-gate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extraction-gate.js","sourceRoot":"","sources":["../../src/memory/extraction-gate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Graph auto-population helpers for CLEO BRAIN.
|
|
3
|
+
*
|
|
4
|
+
* Provides upsertGraphNode and addGraphEdge helpers that write to the
|
|
5
|
+
* brain_page_nodes and brain_page_edges tables whenever memory entries
|
|
6
|
+
* are created via the legitimate write paths (storeDecision, observeBrain,
|
|
7
|
+
* storePattern, storeLearning, and task completion).
|
|
8
|
+
*
|
|
9
|
+
* Design constraints:
|
|
10
|
+
* - All writes are BEST-EFFORT — never block or fail the primary operation.
|
|
11
|
+
* - All writes are gated on brain.autoCapture via isAutoCaptureEnabled.
|
|
12
|
+
* - Uses INSERT OR REPLACE (onConflictDoUpdate) for upsert semantics.
|
|
13
|
+
* - Edge inserts are idempotent via the composite PK (fromId, toId, edgeType).
|
|
14
|
+
*
|
|
15
|
+
* @task T537
|
|
16
|
+
* @epic T523
|
|
17
|
+
*/
|
|
18
|
+
import { createHash } from 'node:crypto';
|
|
19
|
+
import { brainPageEdges, brainPageNodes } from '../store/brain-schema.js';
|
|
20
|
+
import { getBrainDb } from '../store/brain-sqlite.js';
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
// Internal helpers
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
/**
|
|
25
|
+
* Return true when brain.autoCapture is enabled for the project.
|
|
26
|
+
* Delegates to the shared isAutoCaptureEnabled helper in handler-helpers.ts.
|
|
27
|
+
* Returns false on any error to keep graph writes safely disabled when the
|
|
28
|
+
* config or brain.db is unavailable.
|
|
29
|
+
*/
|
|
30
|
+
async function shouldAutoPopulateGraph(projectRoot) {
|
|
31
|
+
try {
|
|
32
|
+
const { isAutoCaptureEnabled } = await import('../hooks/handlers/handler-helpers.js');
|
|
33
|
+
return isAutoCaptureEnabled(projectRoot);
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// ---------------------------------------------------------------------------
|
|
40
|
+
// Public API
|
|
41
|
+
// ---------------------------------------------------------------------------
|
|
42
|
+
/**
|
|
43
|
+
* Upsert a graph node for a typed table entry.
|
|
44
|
+
*
|
|
45
|
+
* Uses INSERT OR REPLACE to handle both new and existing entries. If the
|
|
46
|
+
* node already exists (same id), its label, qualityScore, lastActivityAt,
|
|
47
|
+
* updatedAt, and metadataJson are refreshed while createdAt is preserved.
|
|
48
|
+
*
|
|
49
|
+
* The contentHash is derived from a SHA-256 prefix of the canonical content.
|
|
50
|
+
* External-reference nodes (task, session, epic) may pass an empty string for
|
|
51
|
+
* content; their hash will be null so duplicates are not rejected.
|
|
52
|
+
*
|
|
53
|
+
* This function is gated on brain.autoCapture. If the gate is disabled or any
|
|
54
|
+
* error occurs, it returns silently without throwing.
|
|
55
|
+
*
|
|
56
|
+
* @param projectRoot - Absolute path to the project root directory.
|
|
57
|
+
* @param nodeId - Stable composite ID in the form '<type>:<source-id>'.
|
|
58
|
+
* @param nodeType - Discriminated type from BRAIN_NODE_TYPES.
|
|
59
|
+
* @param label - Human-readable label (title, task ID, etc.).
|
|
60
|
+
* @param qualityScore - 0.0 (noise) to 1.0 (canonical).
|
|
61
|
+
* @param content - Canonical text used to derive the content hash.
|
|
62
|
+
* @param metadata - Optional type-specific metadata blob.
|
|
63
|
+
*
|
|
64
|
+
* @task T537
|
|
65
|
+
*/
|
|
66
|
+
export async function upsertGraphNode(projectRoot, nodeId, nodeType, label, qualityScore, content, metadata) {
|
|
67
|
+
try {
|
|
68
|
+
if (!(await shouldAutoPopulateGraph(projectRoot)))
|
|
69
|
+
return;
|
|
70
|
+
const db = await getBrainDb(projectRoot);
|
|
71
|
+
const now = new Date().toISOString().replace('T', ' ').slice(0, 19);
|
|
72
|
+
// Only compute a content hash for non-trivial content (external reference
|
|
73
|
+
// nodes like task/session/epic may have empty content).
|
|
74
|
+
const trimmed = content.trim().toLowerCase();
|
|
75
|
+
const contentHash = trimmed
|
|
76
|
+
? createHash('sha256').update(trimmed).digest('hex').substring(0, 16)
|
|
77
|
+
: null;
|
|
78
|
+
await db
|
|
79
|
+
.insert(brainPageNodes)
|
|
80
|
+
.values({
|
|
81
|
+
id: nodeId,
|
|
82
|
+
nodeType,
|
|
83
|
+
label: label.substring(0, 200),
|
|
84
|
+
qualityScore,
|
|
85
|
+
contentHash,
|
|
86
|
+
metadataJson: metadata ? JSON.stringify(metadata) : null,
|
|
87
|
+
lastActivityAt: now,
|
|
88
|
+
createdAt: now,
|
|
89
|
+
updatedAt: now,
|
|
90
|
+
})
|
|
91
|
+
.onConflictDoUpdate({
|
|
92
|
+
target: brainPageNodes.id,
|
|
93
|
+
set: {
|
|
94
|
+
label: label.substring(0, 200),
|
|
95
|
+
qualityScore,
|
|
96
|
+
lastActivityAt: now,
|
|
97
|
+
updatedAt: now,
|
|
98
|
+
metadataJson: metadata ? JSON.stringify(metadata) : null,
|
|
99
|
+
},
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
catch (err) {
|
|
103
|
+
// Log but never surface — this is a best-effort side effect.
|
|
104
|
+
console.warn('[brain-graph] upsertGraphNode failed:', err);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Add a directed, typed edge between two graph nodes (idempotent).
|
|
109
|
+
*
|
|
110
|
+
* The composite primary key (fromId, toId, edgeType) prevents duplicate edges
|
|
111
|
+
* of the same type. Conflicting rows are ignored so this is safe to call
|
|
112
|
+
* multiple times with the same arguments.
|
|
113
|
+
*
|
|
114
|
+
* This function is gated on brain.autoCapture. If the gate is disabled or any
|
|
115
|
+
* error occurs, it returns silently without throwing.
|
|
116
|
+
*
|
|
117
|
+
* @param projectRoot - Absolute path to the project root directory.
|
|
118
|
+
* @param fromId - Source node ID (brain_page_nodes.id).
|
|
119
|
+
* @param toId - Target node ID (brain_page_nodes.id or external nexus ID).
|
|
120
|
+
* @param edgeType - Typed relationship from BRAIN_EDGE_TYPES.
|
|
121
|
+
* @param weight - Edge confidence/weight (0.0–1.0). Defaults to 1.0.
|
|
122
|
+
* @param provenance - Human-readable note on why this edge was emitted.
|
|
123
|
+
*
|
|
124
|
+
* @task T537
|
|
125
|
+
*/
|
|
126
|
+
export async function addGraphEdge(projectRoot, fromId, toId, edgeType, weight = 1.0, provenance) {
|
|
127
|
+
try {
|
|
128
|
+
if (!(await shouldAutoPopulateGraph(projectRoot)))
|
|
129
|
+
return;
|
|
130
|
+
const db = await getBrainDb(projectRoot);
|
|
131
|
+
const now = new Date().toISOString().replace('T', ' ').slice(0, 19);
|
|
132
|
+
await db
|
|
133
|
+
.insert(brainPageEdges)
|
|
134
|
+
.values({
|
|
135
|
+
fromId,
|
|
136
|
+
toId,
|
|
137
|
+
edgeType,
|
|
138
|
+
weight,
|
|
139
|
+
provenance: provenance ?? null,
|
|
140
|
+
createdAt: now,
|
|
141
|
+
})
|
|
142
|
+
.onConflictDoNothing();
|
|
143
|
+
}
|
|
144
|
+
catch (err) {
|
|
145
|
+
console.warn('[brain-graph] addGraphEdge failed:', err);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=graph-auto-populate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-auto-populate.js","sourceRoot":"","sources":["../../src/memory/graph-auto-populate.ts"],"names":[],"mappings":"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"}
|