@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,613 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Full-text search across BRAIN memory using SQLite FTS5.
|
|
3
|
+
* Uses raw SQL via nativeDb because drizzle doesn't support FTS5 virtual tables.
|
|
4
|
+
*
|
|
5
|
+
* Falls back to LIKE queries if FTS5 is not available (some SQLite builds lack it).
|
|
6
|
+
*
|
|
7
|
+
* @task T5130
|
|
8
|
+
* @epic T5149
|
|
9
|
+
*/
|
|
10
|
+
import { getBrainAccessor } from '../store/brain-accessor.js';
|
|
11
|
+
import { typedAll } from '../store/typed-query.js';
|
|
12
|
+
import { searchSimilar } from './brain-similarity.js';
|
|
13
|
+
import { QUALITY_SCORE_THRESHOLD } from './quality-scoring.js';
|
|
14
|
+
/** Track whether FTS5 is available in the current SQLite build. */
|
|
15
|
+
let _fts5Available = null;
|
|
16
|
+
/** Track whether FTS tables have been created and indexed this session. */
|
|
17
|
+
let _fts5Initialized = false;
|
|
18
|
+
/**
|
|
19
|
+
* Check if FTS5 is available in the current SQLite build.
|
|
20
|
+
*/
|
|
21
|
+
function checkFts5Available(nativeDb) {
|
|
22
|
+
if (_fts5Available !== null)
|
|
23
|
+
return _fts5Available;
|
|
24
|
+
try {
|
|
25
|
+
// Use run() to execute DDL statements
|
|
26
|
+
nativeDb.prepare('CREATE VIRTUAL TABLE IF NOT EXISTS _fts5_check USING fts5(test)').run();
|
|
27
|
+
nativeDb.prepare('DROP TABLE IF EXISTS _fts5_check').run();
|
|
28
|
+
_fts5Available = true;
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
_fts5Available = false;
|
|
32
|
+
}
|
|
33
|
+
return _fts5Available;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Execute a DDL statement using the native database.
|
|
37
|
+
* Wraps nativeDb.prepare().run() for consistent usage.
|
|
38
|
+
*/
|
|
39
|
+
function execDDL(nativeDb, sql) {
|
|
40
|
+
nativeDb.prepare(sql).run();
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Create FTS5 virtual tables and content-sync triggers if they don't exist.
|
|
44
|
+
*
|
|
45
|
+
* Uses content= to sync from main tables, so inserts to main tables
|
|
46
|
+
* auto-populate FTS. UPDATE/DELETE require triggers.
|
|
47
|
+
*
|
|
48
|
+
* @task T5130
|
|
49
|
+
*/
|
|
50
|
+
export function ensureFts5Tables(nativeDb) {
|
|
51
|
+
if (!checkFts5Available(nativeDb)) {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
// Decisions FTS
|
|
55
|
+
execDDL(nativeDb, `
|
|
56
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS brain_decisions_fts
|
|
57
|
+
USING fts5(id, decision, rationale, content=brain_decisions, content_rowid=rowid)
|
|
58
|
+
`);
|
|
59
|
+
// Patterns FTS
|
|
60
|
+
execDDL(nativeDb, `
|
|
61
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS brain_patterns_fts
|
|
62
|
+
USING fts5(id, pattern, context, content=brain_patterns, content_rowid=rowid)
|
|
63
|
+
`);
|
|
64
|
+
// Learnings FTS
|
|
65
|
+
execDDL(nativeDb, `
|
|
66
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS brain_learnings_fts
|
|
67
|
+
USING fts5(id, insight, source, content=brain_learnings, content_rowid=rowid)
|
|
68
|
+
`);
|
|
69
|
+
// Content-sync triggers for decisions
|
|
70
|
+
execDDL(nativeDb, `
|
|
71
|
+
CREATE TRIGGER IF NOT EXISTS brain_decisions_ai AFTER INSERT ON brain_decisions BEGIN
|
|
72
|
+
INSERT INTO brain_decisions_fts(rowid, id, decision, rationale)
|
|
73
|
+
VALUES (new.rowid, new.id, new.decision, new.rationale);
|
|
74
|
+
END
|
|
75
|
+
`);
|
|
76
|
+
execDDL(nativeDb, `
|
|
77
|
+
CREATE TRIGGER IF NOT EXISTS brain_decisions_ad AFTER DELETE ON brain_decisions BEGIN
|
|
78
|
+
INSERT INTO brain_decisions_fts(brain_decisions_fts, rowid, id, decision, rationale)
|
|
79
|
+
VALUES('delete', old.rowid, old.id, old.decision, old.rationale);
|
|
80
|
+
END
|
|
81
|
+
`);
|
|
82
|
+
execDDL(nativeDb, `
|
|
83
|
+
CREATE TRIGGER IF NOT EXISTS brain_decisions_au AFTER UPDATE ON brain_decisions BEGIN
|
|
84
|
+
INSERT INTO brain_decisions_fts(brain_decisions_fts, rowid, id, decision, rationale)
|
|
85
|
+
VALUES('delete', old.rowid, old.id, old.decision, old.rationale);
|
|
86
|
+
INSERT INTO brain_decisions_fts(rowid, id, decision, rationale)
|
|
87
|
+
VALUES (new.rowid, new.id, new.decision, new.rationale);
|
|
88
|
+
END
|
|
89
|
+
`);
|
|
90
|
+
// Content-sync triggers for patterns
|
|
91
|
+
execDDL(nativeDb, `
|
|
92
|
+
CREATE TRIGGER IF NOT EXISTS brain_patterns_ai AFTER INSERT ON brain_patterns BEGIN
|
|
93
|
+
INSERT INTO brain_patterns_fts(rowid, id, pattern, context)
|
|
94
|
+
VALUES (new.rowid, new.id, new.pattern, new.context);
|
|
95
|
+
END
|
|
96
|
+
`);
|
|
97
|
+
execDDL(nativeDb, `
|
|
98
|
+
CREATE TRIGGER IF NOT EXISTS brain_patterns_ad AFTER DELETE ON brain_patterns BEGIN
|
|
99
|
+
INSERT INTO brain_patterns_fts(brain_patterns_fts, rowid, id, pattern, context)
|
|
100
|
+
VALUES('delete', old.rowid, old.id, old.pattern, old.context);
|
|
101
|
+
END
|
|
102
|
+
`);
|
|
103
|
+
execDDL(nativeDb, `
|
|
104
|
+
CREATE TRIGGER IF NOT EXISTS brain_patterns_au AFTER UPDATE ON brain_patterns BEGIN
|
|
105
|
+
INSERT INTO brain_patterns_fts(brain_patterns_fts, rowid, id, pattern, context)
|
|
106
|
+
VALUES('delete', old.rowid, old.id, old.pattern, old.context);
|
|
107
|
+
INSERT INTO brain_patterns_fts(rowid, id, pattern, context)
|
|
108
|
+
VALUES (new.rowid, new.id, new.pattern, new.context);
|
|
109
|
+
END
|
|
110
|
+
`);
|
|
111
|
+
// Content-sync triggers for learnings
|
|
112
|
+
execDDL(nativeDb, `
|
|
113
|
+
CREATE TRIGGER IF NOT EXISTS brain_learnings_ai AFTER INSERT ON brain_learnings BEGIN
|
|
114
|
+
INSERT INTO brain_learnings_fts(rowid, id, insight, source)
|
|
115
|
+
VALUES (new.rowid, new.id, new.insight, new.source);
|
|
116
|
+
END
|
|
117
|
+
`);
|
|
118
|
+
execDDL(nativeDb, `
|
|
119
|
+
CREATE TRIGGER IF NOT EXISTS brain_learnings_ad AFTER DELETE ON brain_learnings BEGIN
|
|
120
|
+
INSERT INTO brain_learnings_fts(brain_learnings_fts, rowid, id, insight, source)
|
|
121
|
+
VALUES('delete', old.rowid, old.id, old.insight, old.source);
|
|
122
|
+
END
|
|
123
|
+
`);
|
|
124
|
+
execDDL(nativeDb, `
|
|
125
|
+
CREATE TRIGGER IF NOT EXISTS brain_learnings_au AFTER UPDATE ON brain_learnings BEGIN
|
|
126
|
+
INSERT INTO brain_learnings_fts(brain_learnings_fts, rowid, id, insight, source)
|
|
127
|
+
VALUES('delete', old.rowid, old.id, old.insight, old.source);
|
|
128
|
+
INSERT INTO brain_learnings_fts(rowid, id, insight, source)
|
|
129
|
+
VALUES (new.rowid, new.id, new.insight, new.source);
|
|
130
|
+
END
|
|
131
|
+
`);
|
|
132
|
+
// Observations FTS
|
|
133
|
+
execDDL(nativeDb, `
|
|
134
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS brain_observations_fts
|
|
135
|
+
USING fts5(id, title, narrative, content=brain_observations, content_rowid=rowid)
|
|
136
|
+
`);
|
|
137
|
+
// Content-sync triggers for observations
|
|
138
|
+
execDDL(nativeDb, `
|
|
139
|
+
CREATE TRIGGER IF NOT EXISTS brain_observations_ai AFTER INSERT ON brain_observations BEGIN
|
|
140
|
+
INSERT INTO brain_observations_fts(rowid, id, title, narrative)
|
|
141
|
+
VALUES (new.rowid, new.id, new.title, new.narrative);
|
|
142
|
+
END
|
|
143
|
+
`);
|
|
144
|
+
execDDL(nativeDb, `
|
|
145
|
+
CREATE TRIGGER IF NOT EXISTS brain_observations_ad AFTER DELETE ON brain_observations BEGIN
|
|
146
|
+
INSERT INTO brain_observations_fts(brain_observations_fts, rowid, id, title, narrative)
|
|
147
|
+
VALUES('delete', old.rowid, old.id, old.title, old.narrative);
|
|
148
|
+
END
|
|
149
|
+
`);
|
|
150
|
+
execDDL(nativeDb, `
|
|
151
|
+
CREATE TRIGGER IF NOT EXISTS brain_observations_au AFTER UPDATE ON brain_observations BEGIN
|
|
152
|
+
INSERT INTO brain_observations_fts(brain_observations_fts, rowid, id, title, narrative)
|
|
153
|
+
VALUES('delete', old.rowid, old.id, old.title, old.narrative);
|
|
154
|
+
INSERT INTO brain_observations_fts(rowid, id, title, narrative)
|
|
155
|
+
VALUES (new.rowid, new.id, new.title, new.narrative);
|
|
156
|
+
END
|
|
157
|
+
`);
|
|
158
|
+
return true;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Rebuild FTS5 indexes from the content tables.
|
|
162
|
+
* Useful after bulk inserts that bypass triggers.
|
|
163
|
+
*
|
|
164
|
+
* @task T5130
|
|
165
|
+
*/
|
|
166
|
+
export function rebuildFts5Index(nativeDb) {
|
|
167
|
+
if (!checkFts5Available(nativeDb)) {
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
nativeDb.prepare("INSERT INTO brain_decisions_fts(brain_decisions_fts) VALUES('rebuild')").run();
|
|
171
|
+
nativeDb.prepare("INSERT INTO brain_patterns_fts(brain_patterns_fts) VALUES('rebuild')").run();
|
|
172
|
+
nativeDb.prepare("INSERT INTO brain_learnings_fts(brain_learnings_fts) VALUES('rebuild')").run();
|
|
173
|
+
// Observations FTS rebuild — table may not exist yet in older DBs
|
|
174
|
+
try {
|
|
175
|
+
nativeDb
|
|
176
|
+
.prepare("INSERT INTO brain_observations_fts(brain_observations_fts) VALUES('rebuild')")
|
|
177
|
+
.run();
|
|
178
|
+
}
|
|
179
|
+
catch {
|
|
180
|
+
// brain_observations_fts not created yet — skip
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Unified search across all BRAIN memory tables.
|
|
185
|
+
*
|
|
186
|
+
* Uses FTS5 MATCH for full-text search with BM25 ranking when available,
|
|
187
|
+
* falls back to LIKE queries otherwise.
|
|
188
|
+
*
|
|
189
|
+
* @task T5130
|
|
190
|
+
*/
|
|
191
|
+
export async function searchBrain(projectRoot, query, options) {
|
|
192
|
+
if (!query?.trim()) {
|
|
193
|
+
return { decisions: [], patterns: [], learnings: [], observations: [] };
|
|
194
|
+
}
|
|
195
|
+
// Ensure brain.db is initialized
|
|
196
|
+
const { getBrainDb, getBrainNativeDb } = await import('../store/brain-sqlite.js');
|
|
197
|
+
await getBrainDb(projectRoot);
|
|
198
|
+
const nativeDb = getBrainNativeDb();
|
|
199
|
+
if (!nativeDb) {
|
|
200
|
+
return { decisions: [], patterns: [], learnings: [], observations: [] };
|
|
201
|
+
}
|
|
202
|
+
const limit = options?.limit ?? 10;
|
|
203
|
+
const tables = options?.tables ?? ['decisions', 'patterns', 'learnings', 'observations'];
|
|
204
|
+
const ftsAvailable = ensureFts5Tables(nativeDb);
|
|
205
|
+
if (ftsAvailable) {
|
|
206
|
+
// On first initialization, rebuild FTS indexes to sync any data
|
|
207
|
+
// that was inserted before the FTS triggers existed.
|
|
208
|
+
if (!_fts5Initialized) {
|
|
209
|
+
_fts5Initialized = true;
|
|
210
|
+
rebuildFts5Index(nativeDb);
|
|
211
|
+
}
|
|
212
|
+
return searchWithFts5(nativeDb, query, tables, limit);
|
|
213
|
+
}
|
|
214
|
+
return searchWithLike(nativeDb, query, tables, limit);
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Search using FTS5 MATCH with BM25 ranking.
|
|
218
|
+
*/
|
|
219
|
+
function searchWithFts5(nativeDb, query, tables, limit) {
|
|
220
|
+
const result = {
|
|
221
|
+
decisions: [],
|
|
222
|
+
patterns: [],
|
|
223
|
+
learnings: [],
|
|
224
|
+
observations: [],
|
|
225
|
+
};
|
|
226
|
+
// Escape FTS5 special characters for safety
|
|
227
|
+
const safeQuery = escapeFts5Query(query);
|
|
228
|
+
if (tables.includes('decisions')) {
|
|
229
|
+
try {
|
|
230
|
+
const rows = typedAll(nativeDb.prepare(`
|
|
231
|
+
SELECT d.*
|
|
232
|
+
FROM brain_decisions_fts fts
|
|
233
|
+
JOIN brain_decisions d ON d.rowid = fts.rowid
|
|
234
|
+
WHERE brain_decisions_fts MATCH ?
|
|
235
|
+
AND (d.quality_score IS NULL OR d.quality_score >= ?)
|
|
236
|
+
ORDER BY bm25(brain_decisions_fts)
|
|
237
|
+
LIMIT ?
|
|
238
|
+
`), safeQuery, QUALITY_SCORE_THRESHOLD, limit);
|
|
239
|
+
result.decisions = rows;
|
|
240
|
+
}
|
|
241
|
+
catch {
|
|
242
|
+
// FTS query failed, fall back to LIKE for this table
|
|
243
|
+
result.decisions = likeSearchDecisions(nativeDb, query, limit);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
if (tables.includes('patterns')) {
|
|
247
|
+
try {
|
|
248
|
+
const rows = typedAll(nativeDb.prepare(`
|
|
249
|
+
SELECT p.*
|
|
250
|
+
FROM brain_patterns_fts fts
|
|
251
|
+
JOIN brain_patterns p ON p.rowid = fts.rowid
|
|
252
|
+
WHERE brain_patterns_fts MATCH ?
|
|
253
|
+
AND (p.quality_score IS NULL OR p.quality_score >= ?)
|
|
254
|
+
ORDER BY bm25(brain_patterns_fts)
|
|
255
|
+
LIMIT ?
|
|
256
|
+
`), safeQuery, QUALITY_SCORE_THRESHOLD, limit);
|
|
257
|
+
result.patterns = rows;
|
|
258
|
+
}
|
|
259
|
+
catch {
|
|
260
|
+
result.patterns = likeSearchPatterns(nativeDb, query, limit);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
if (tables.includes('learnings')) {
|
|
264
|
+
try {
|
|
265
|
+
const rows = typedAll(nativeDb.prepare(`
|
|
266
|
+
SELECT l.*
|
|
267
|
+
FROM brain_learnings_fts fts
|
|
268
|
+
JOIN brain_learnings l ON l.rowid = fts.rowid
|
|
269
|
+
WHERE brain_learnings_fts MATCH ?
|
|
270
|
+
AND (l.quality_score IS NULL OR l.quality_score >= ?)
|
|
271
|
+
ORDER BY bm25(brain_learnings_fts)
|
|
272
|
+
LIMIT ?
|
|
273
|
+
`), safeQuery, QUALITY_SCORE_THRESHOLD, limit);
|
|
274
|
+
result.learnings = rows;
|
|
275
|
+
}
|
|
276
|
+
catch {
|
|
277
|
+
result.learnings = likeSearchLearnings(nativeDb, query, limit);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
if (tables.includes('observations')) {
|
|
281
|
+
try {
|
|
282
|
+
const rows = typedAll(nativeDb.prepare(`
|
|
283
|
+
SELECT o.*
|
|
284
|
+
FROM brain_observations_fts fts
|
|
285
|
+
JOIN brain_observations o ON o.rowid = fts.rowid
|
|
286
|
+
WHERE brain_observations_fts MATCH ?
|
|
287
|
+
AND (o.quality_score IS NULL OR o.quality_score >= ?)
|
|
288
|
+
ORDER BY bm25(brain_observations_fts)
|
|
289
|
+
LIMIT ?
|
|
290
|
+
`), safeQuery, QUALITY_SCORE_THRESHOLD, limit);
|
|
291
|
+
result.observations = rows;
|
|
292
|
+
}
|
|
293
|
+
catch {
|
|
294
|
+
result.observations = likeSearchObservations(nativeDb, query, limit);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
return result;
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Search using LIKE queries as fallback when FTS5 is unavailable.
|
|
301
|
+
*/
|
|
302
|
+
function searchWithLike(nativeDb, query, tables, limit) {
|
|
303
|
+
const result = {
|
|
304
|
+
decisions: [],
|
|
305
|
+
patterns: [],
|
|
306
|
+
learnings: [],
|
|
307
|
+
observations: [],
|
|
308
|
+
};
|
|
309
|
+
if (tables.includes('decisions')) {
|
|
310
|
+
result.decisions = likeSearchDecisions(nativeDb, query, limit);
|
|
311
|
+
}
|
|
312
|
+
if (tables.includes('patterns')) {
|
|
313
|
+
result.patterns = likeSearchPatterns(nativeDb, query, limit);
|
|
314
|
+
}
|
|
315
|
+
if (tables.includes('learnings')) {
|
|
316
|
+
result.learnings = likeSearchLearnings(nativeDb, query, limit);
|
|
317
|
+
}
|
|
318
|
+
if (tables.includes('observations')) {
|
|
319
|
+
result.observations = likeSearchObservations(nativeDb, query, limit);
|
|
320
|
+
}
|
|
321
|
+
return result;
|
|
322
|
+
}
|
|
323
|
+
function likeSearchDecisions(nativeDb, query, limit) {
|
|
324
|
+
const likePattern = `%${query}%`;
|
|
325
|
+
return typedAll(nativeDb.prepare(`
|
|
326
|
+
SELECT * FROM brain_decisions
|
|
327
|
+
WHERE (decision LIKE ? OR rationale LIKE ?)
|
|
328
|
+
AND (quality_score IS NULL OR quality_score >= ?)
|
|
329
|
+
ORDER BY created_at DESC
|
|
330
|
+
LIMIT ?
|
|
331
|
+
`), likePattern, likePattern, QUALITY_SCORE_THRESHOLD, limit);
|
|
332
|
+
}
|
|
333
|
+
function likeSearchPatterns(nativeDb, query, limit) {
|
|
334
|
+
const likePattern = `%${query}%`;
|
|
335
|
+
return typedAll(nativeDb.prepare(`
|
|
336
|
+
SELECT * FROM brain_patterns
|
|
337
|
+
WHERE (pattern LIKE ? OR context LIKE ?)
|
|
338
|
+
AND (quality_score IS NULL OR quality_score >= ?)
|
|
339
|
+
ORDER BY frequency DESC
|
|
340
|
+
LIMIT ?
|
|
341
|
+
`), likePattern, likePattern, QUALITY_SCORE_THRESHOLD, limit);
|
|
342
|
+
}
|
|
343
|
+
function likeSearchLearnings(nativeDb, query, limit) {
|
|
344
|
+
const likePattern = `%${query}%`;
|
|
345
|
+
return typedAll(nativeDb.prepare(`
|
|
346
|
+
SELECT * FROM brain_learnings
|
|
347
|
+
WHERE (insight LIKE ? OR source LIKE ?)
|
|
348
|
+
AND (quality_score IS NULL OR quality_score >= ?)
|
|
349
|
+
ORDER BY confidence DESC
|
|
350
|
+
LIMIT ?
|
|
351
|
+
`), likePattern, likePattern, QUALITY_SCORE_THRESHOLD, limit);
|
|
352
|
+
}
|
|
353
|
+
function likeSearchObservations(nativeDb, query, limit) {
|
|
354
|
+
const likePattern = `%${query}%`;
|
|
355
|
+
return typedAll(nativeDb.prepare(`
|
|
356
|
+
SELECT * FROM brain_observations
|
|
357
|
+
WHERE (title LIKE ? OR narrative LIKE ?)
|
|
358
|
+
AND (quality_score IS NULL OR quality_score >= ?)
|
|
359
|
+
ORDER BY created_at DESC
|
|
360
|
+
LIMIT ?
|
|
361
|
+
`), likePattern, likePattern, QUALITY_SCORE_THRESHOLD, limit);
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* Escape special FTS5 characters in query string.
|
|
365
|
+
*
|
|
366
|
+
* Wraps each meaningful token in double quotes and joins with OR so that
|
|
367
|
+
* partial matches are returned even when some tokens are not indexable
|
|
368
|
+
* (e.g. task prefixes like "EPIC:", em-dashes "—", or short stop-words).
|
|
369
|
+
*
|
|
370
|
+
* Strategy:
|
|
371
|
+
* 1. Split on whitespace.
|
|
372
|
+
* 2. Keep only tokens that contain at least one word character (\w), which
|
|
373
|
+
* ensures punctuation-only tokens (em dashes, colons standalone, etc.)
|
|
374
|
+
* are dropped before they zero-out the entire result set.
|
|
375
|
+
* 3. Deduplicate case-insensitively.
|
|
376
|
+
* 4. Join with OR so the query broadens rather than requiring ALL tokens.
|
|
377
|
+
*
|
|
378
|
+
* Using AND (implicit FTS5 join) caused empty results whenever a task title
|
|
379
|
+
* contained non-word tokens such as em dashes ("—") or trailing colons
|
|
380
|
+
* ("EPIC:"), because FTS5's default tokenizer cannot index them and the
|
|
381
|
+
* AND semantics then guaranteed zero matches for the whole query. (T553 bug fix)
|
|
382
|
+
*/
|
|
383
|
+
function escapeFts5Query(query) {
|
|
384
|
+
const rawTokens = query.trim().split(/\s+/).filter(Boolean);
|
|
385
|
+
if (rawTokens.length === 0)
|
|
386
|
+
return '""';
|
|
387
|
+
// Keep tokens that have at least one alphanumeric character and are not
|
|
388
|
+
// pure stop-words (length ≥ 2 after stripping leading/trailing punctuation).
|
|
389
|
+
const seen = new Set();
|
|
390
|
+
const tokens = [];
|
|
391
|
+
for (const t of rawTokens) {
|
|
392
|
+
// Strip leading/trailing non-word characters (e.g. "EPIC:" → "EPIC", "—" → "")
|
|
393
|
+
const stripped = t.replace(/^\W+|\W+$/g, '');
|
|
394
|
+
if (stripped.length < 2)
|
|
395
|
+
continue; // skip very short or empty tokens
|
|
396
|
+
if (!/\w/.test(stripped))
|
|
397
|
+
continue; // skip tokens with no word chars
|
|
398
|
+
const lower = stripped.toLowerCase();
|
|
399
|
+
if (seen.has(lower))
|
|
400
|
+
continue; // deduplicate
|
|
401
|
+
seen.add(lower);
|
|
402
|
+
tokens.push(`"${stripped.replace(/"/g, '""')}"`);
|
|
403
|
+
}
|
|
404
|
+
if (tokens.length === 0)
|
|
405
|
+
return '""';
|
|
406
|
+
// OR semantics: any matching token returns the row, ranked by BM25 relevance.
|
|
407
|
+
return tokens.join(' OR ');
|
|
408
|
+
}
|
|
409
|
+
/**
|
|
410
|
+
* Reset the cached FTS5 availability flag.
|
|
411
|
+
* Used in tests to force re-detection.
|
|
412
|
+
*/
|
|
413
|
+
export function resetFts5Cache() {
|
|
414
|
+
_fts5Available = null;
|
|
415
|
+
_fts5Initialized = false;
|
|
416
|
+
}
|
|
417
|
+
// ============================================================================
|
|
418
|
+
// Reciprocal Rank Fusion (RRF) — Hybrid Retrieval
|
|
419
|
+
// ============================================================================
|
|
420
|
+
/**
|
|
421
|
+
* The RRF smoothing constant (research-proven at 60).
|
|
422
|
+
*
|
|
423
|
+
* Balances noise vs. signal: small values amplify top-rank differences;
|
|
424
|
+
* large values compress ranks toward a flat distribution. 60 is the
|
|
425
|
+
* standard value from Cormack, Clarke & Buettcher (SIGIR 2009).
|
|
426
|
+
*/
|
|
427
|
+
export const RRF_K = 60;
|
|
428
|
+
/**
|
|
429
|
+
* Fuse ranked lists from multiple retrieval sources using Reciprocal Rank Fusion.
|
|
430
|
+
*
|
|
431
|
+
* Implements the RRF algorithm from Cormack, Clarke & Buettcher (SIGIR 2009):
|
|
432
|
+
*
|
|
433
|
+
* score(d) = Σ 1 / (k + rank(d, list)) for each list containing d
|
|
434
|
+
*
|
|
435
|
+
* where k=60 is the research-proven smoothing constant.
|
|
436
|
+
*
|
|
437
|
+
* Properties:
|
|
438
|
+
* - Rank-based: actual scores from each source are ignored (only rank matters).
|
|
439
|
+
* - Additive: items appearing in multiple lists accumulate higher scores.
|
|
440
|
+
* - Robust: the +60 constant prevents rank-1 items from dominating.
|
|
441
|
+
*
|
|
442
|
+
* @param sources - Named arrays of ranked hits (order = rank, index 0 = best)
|
|
443
|
+
* @param k - RRF smoothing constant (default: RRF_K = 60)
|
|
444
|
+
* @returns Array of fused results sorted by rrfScore descending
|
|
445
|
+
*
|
|
446
|
+
* @example
|
|
447
|
+
* ```ts
|
|
448
|
+
* const fused = reciprocalRankFusion([
|
|
449
|
+
* { source: 'fts', hits: ftsHits },
|
|
450
|
+
* { source: 'vec', hits: vecHits },
|
|
451
|
+
* ]);
|
|
452
|
+
* ```
|
|
453
|
+
*/
|
|
454
|
+
export function reciprocalRankFusion(sources, k = RRF_K) {
|
|
455
|
+
// Accumulator: id -> mutable result record
|
|
456
|
+
const accum = new Map();
|
|
457
|
+
for (const { source, hits } of sources) {
|
|
458
|
+
for (let rank = 0; rank < hits.length; rank++) {
|
|
459
|
+
const hit = hits[rank];
|
|
460
|
+
const contribution = 1 / (k + rank);
|
|
461
|
+
const existing = accum.get(hit.id);
|
|
462
|
+
if (existing) {
|
|
463
|
+
existing.rrfScore += contribution;
|
|
464
|
+
existing.sources.add(source);
|
|
465
|
+
if (source === 'fts')
|
|
466
|
+
existing.ftsRank = rank;
|
|
467
|
+
if (source === 'vec')
|
|
468
|
+
existing.vecRank = rank;
|
|
469
|
+
}
|
|
470
|
+
else {
|
|
471
|
+
accum.set(hit.id, {
|
|
472
|
+
rrfScore: contribution,
|
|
473
|
+
type: hit.type,
|
|
474
|
+
title: hit.title,
|
|
475
|
+
text: hit.text,
|
|
476
|
+
sources: new Set([source]),
|
|
477
|
+
ftsRank: source === 'fts' ? rank : undefined,
|
|
478
|
+
vecRank: source === 'vec' ? rank : undefined,
|
|
479
|
+
});
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
return [...accum.entries()]
|
|
484
|
+
.map(([id, data]) => ({
|
|
485
|
+
id,
|
|
486
|
+
rrfScore: data.rrfScore,
|
|
487
|
+
type: data.type,
|
|
488
|
+
title: data.title,
|
|
489
|
+
text: data.text,
|
|
490
|
+
sources: [...data.sources],
|
|
491
|
+
ftsRank: data.ftsRank,
|
|
492
|
+
vecRank: data.vecRank,
|
|
493
|
+
}))
|
|
494
|
+
.sort((a, b) => b.rrfScore - a.rrfScore);
|
|
495
|
+
}
|
|
496
|
+
/**
|
|
497
|
+
* Hybrid search across FTS5, vector similarity, and graph neighbors using
|
|
498
|
+
* Reciprocal Rank Fusion (RRF) for result combination.
|
|
499
|
+
*
|
|
500
|
+
* Algorithm:
|
|
501
|
+
* 1. Run FTS5 search and vector similarity search in parallel.
|
|
502
|
+
* 2. Optionally expand via graph neighbors (best-effort).
|
|
503
|
+
* 3. Fuse all ranked lists with RRF: score = Σ 1/(rank+60).
|
|
504
|
+
* 4. Return top-N sorted by fused RRF score.
|
|
505
|
+
*
|
|
506
|
+
* Graceful degradation: vector and graph sources are silently skipped when
|
|
507
|
+
* unavailable — RRF naturally handles partial source lists.
|
|
508
|
+
*
|
|
509
|
+
* @param query - Search query text
|
|
510
|
+
* @param projectRoot - Project root directory
|
|
511
|
+
* @param options - Limit and RRF tuning
|
|
512
|
+
* @returns Array of hybrid results ranked by RRF score descending
|
|
513
|
+
*/
|
|
514
|
+
export async function hybridSearch(query, projectRoot, options) {
|
|
515
|
+
if (!query?.trim())
|
|
516
|
+
return [];
|
|
517
|
+
const maxResults = options?.limit ?? 10;
|
|
518
|
+
const rrfK = options?.rrfK ?? RRF_K;
|
|
519
|
+
// --- 1. Run FTS5 and vector in parallel ---
|
|
520
|
+
const [ftsResults, vecResults] = await Promise.all([
|
|
521
|
+
searchBrain(projectRoot, query, { limit: maxResults * 3 }).catch(() => ({
|
|
522
|
+
decisions: [],
|
|
523
|
+
patterns: [],
|
|
524
|
+
learnings: [],
|
|
525
|
+
observations: [],
|
|
526
|
+
})),
|
|
527
|
+
searchSimilar(query, projectRoot, maxResults * 3).catch(() => []),
|
|
528
|
+
]);
|
|
529
|
+
// --- 2. Project FTS results into ranked RrfHit list ---
|
|
530
|
+
const ftsHits = [];
|
|
531
|
+
for (const d of ftsResults.decisions) {
|
|
532
|
+
ftsHits.push({
|
|
533
|
+
id: d.id,
|
|
534
|
+
type: 'decision',
|
|
535
|
+
title: d.decision,
|
|
536
|
+
text: `${d.decision} — ${d.rationale}`,
|
|
537
|
+
});
|
|
538
|
+
}
|
|
539
|
+
for (const p of ftsResults.patterns) {
|
|
540
|
+
ftsHits.push({
|
|
541
|
+
id: p.id,
|
|
542
|
+
type: 'pattern',
|
|
543
|
+
title: p.pattern,
|
|
544
|
+
text: `${p.pattern} — ${p.context}`,
|
|
545
|
+
});
|
|
546
|
+
}
|
|
547
|
+
for (const l of ftsResults.learnings) {
|
|
548
|
+
ftsHits.push({
|
|
549
|
+
id: l.id,
|
|
550
|
+
type: 'learning',
|
|
551
|
+
title: l.insight,
|
|
552
|
+
text: `${l.insight} (source: ${l.source})`,
|
|
553
|
+
});
|
|
554
|
+
}
|
|
555
|
+
for (const o of ftsResults.observations) {
|
|
556
|
+
ftsHits.push({ id: o.id, type: 'observation', title: o.title, text: o.narrative ?? o.title });
|
|
557
|
+
}
|
|
558
|
+
// --- 3. Project vector results into ranked RrfHit list (ascending distance = descending quality) ---
|
|
559
|
+
const vecHits = vecResults.map((r) => ({
|
|
560
|
+
id: r.id,
|
|
561
|
+
type: r.type,
|
|
562
|
+
title: r.title,
|
|
563
|
+
text: r.text,
|
|
564
|
+
}));
|
|
565
|
+
// --- 4. Build source list for RRF ---
|
|
566
|
+
const rrfSources = [];
|
|
567
|
+
if (ftsHits.length > 0)
|
|
568
|
+
rrfSources.push({ source: 'fts', hits: ftsHits });
|
|
569
|
+
if (vecHits.length > 0)
|
|
570
|
+
rrfSources.push({ source: 'vec', hits: vecHits });
|
|
571
|
+
// --- 5. Graph neighbor expansion (best-effort) ---
|
|
572
|
+
try {
|
|
573
|
+
const accessor = await getBrainAccessor(projectRoot);
|
|
574
|
+
const possibleNodeIds = [
|
|
575
|
+
`concept:${query.toLowerCase().replace(/\s+/g, '-')}`,
|
|
576
|
+
`task:${query}`,
|
|
577
|
+
`doc:${query}`,
|
|
578
|
+
];
|
|
579
|
+
const graphHits = [];
|
|
580
|
+
for (const nodeId of possibleNodeIds) {
|
|
581
|
+
const node = await accessor.getPageNode(nodeId);
|
|
582
|
+
if (!node)
|
|
583
|
+
continue;
|
|
584
|
+
const neighbors = await accessor.getNeighbors(nodeId);
|
|
585
|
+
for (const neighbor of neighbors) {
|
|
586
|
+
graphHits.push({
|
|
587
|
+
id: neighbor.id,
|
|
588
|
+
type: neighbor.nodeType,
|
|
589
|
+
title: neighbor.label,
|
|
590
|
+
text: neighbor.label,
|
|
591
|
+
});
|
|
592
|
+
}
|
|
593
|
+
}
|
|
594
|
+
if (graphHits.length > 0)
|
|
595
|
+
rrfSources.push({ source: 'graph', hits: graphHits });
|
|
596
|
+
}
|
|
597
|
+
catch {
|
|
598
|
+
// Graph unavailable — RRF handles gracefully with remaining sources
|
|
599
|
+
}
|
|
600
|
+
// --- 6. Fuse with RRF and return top-N ---
|
|
601
|
+
const fused = reciprocalRankFusion(rrfSources, rrfK);
|
|
602
|
+
return fused.slice(0, maxResults).map((r) => ({
|
|
603
|
+
id: r.id,
|
|
604
|
+
score: r.rrfScore,
|
|
605
|
+
type: r.type,
|
|
606
|
+
title: r.title,
|
|
607
|
+
text: r.text,
|
|
608
|
+
sources: r.sources,
|
|
609
|
+
ftsRank: r.ftsRank,
|
|
610
|
+
vecRank: r.vecRank,
|
|
611
|
+
}));
|
|
612
|
+
}
|
|
613
|
+
//# sourceMappingURL=brain-search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brain-search.js","sourceRoot":"","sources":["../../src/memory/brain-search.ts"],"names":[],"mappings":"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"}
|