@cleocode/core 2026.4.12 → 2026.4.14
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/index.js +69233 -175
- package/dist/index.js.map +7 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/internal.d.ts +16 -5
- package/dist/internal.d.ts.map +1 -1
- package/dist/memory/brain-embedding.d.ts +1 -1
- package/dist/memory/embedding-local.d.ts +8 -3
- package/dist/memory/embedding-local.d.ts.map +1 -1
- package/dist/memory/embedding-worker.d.ts +1 -1
- package/dist/memory/learnings.d.ts +2 -2
- package/dist/memory/patterns.d.ts +6 -6
- package/dist/store/agent-registry-accessor.d.ts +54 -1
- package/dist/store/agent-registry-accessor.d.ts.map +1 -1
- package/dist/store/backup-crypto.d.ts +89 -0
- package/dist/store/backup-crypto.d.ts.map +1 -0
- package/dist/store/backup-pack.d.ts +91 -0
- package/dist/store/backup-pack.d.ts.map +1 -0
- package/dist/store/backup-unpack.d.ts +140 -0
- package/dist/store/backup-unpack.d.ts.map +1 -0
- package/dist/store/migrate-signaldock-to-conduit.d.ts.map +1 -1
- package/dist/store/regenerators.d.ts +126 -0
- package/dist/store/regenerators.d.ts.map +1 -0
- package/dist/store/restore-conflict-report.d.ts +118 -0
- package/dist/store/restore-conflict-report.d.ts.map +1 -0
- package/dist/store/restore-json-merge.d.ts +187 -0
- package/dist/store/restore-json-merge.d.ts.map +1 -0
- package/dist/store/sqlite-backup.d.ts +60 -5
- package/dist/store/sqlite-backup.d.ts.map +1 -1
- package/dist/store/t310-readiness.d.ts +83 -0
- package/dist/store/t310-readiness.d.ts.map +1 -0
- package/package.json +11 -9
- package/src/__tests__/cli-parity.test.ts +19 -14
- package/src/__tests__/human-output.test.ts +13 -11
- package/src/init.ts +18 -8
- package/src/internal.ts +52 -2
- package/src/memory/__tests__/brain-automation.test.ts +2 -2
- package/src/memory/brain-embedding.ts +1 -1
- package/src/memory/embedding-local.ts +10 -5
- package/src/memory/embedding-worker.ts +1 -1
- package/src/skills/__tests__/discovery.test.ts +22 -7
- package/src/store/__tests__/backup-crypto.test.ts +101 -0
- package/src/store/__tests__/backup-pack.test.ts +491 -0
- package/src/store/__tests__/backup-unpack.test.ts +298 -0
- package/src/store/__tests__/performance-safety.test.ts +11 -5
- package/src/store/__tests__/regenerators.test.ts +234 -0
- package/src/store/__tests__/restore-conflict-report.test.ts +274 -0
- package/src/store/__tests__/restore-json-merge.test.ts +521 -0
- package/src/store/__tests__/t310-readiness.test.ts +111 -0
- package/src/store/__tests__/t311-integration.test.ts +661 -0
- package/src/store/backup-crypto.ts +209 -0
- package/src/store/backup-pack.ts +739 -0
- package/src/store/backup-unpack.ts +583 -0
- package/src/store/migrate-signaldock-to-conduit.ts +14 -7
- package/src/store/regenerators.ts +243 -0
- package/src/store/restore-conflict-report.ts +317 -0
- package/src/store/restore-json-merge.ts +653 -0
- package/src/store/t310-readiness.ts +119 -0
- package/src/validation/protocols/_shared.ts +1 -1
- package/dist/adapters/adapter-registry.js +0 -64
- package/dist/adapters/adapter-registry.js.map +0 -1
- package/dist/adapters/discovery.js +0 -83
- package/dist/adapters/discovery.js.map +0 -1
- package/dist/adapters/index.js +0 -9
- package/dist/adapters/index.js.map +0 -1
- package/dist/adapters/manager.js +0 -260
- package/dist/adapters/manager.js.map +0 -1
- package/dist/admin/export-tasks.js +0 -171
- package/dist/admin/export-tasks.js.map +0 -1
- package/dist/admin/export.js +0 -103
- package/dist/admin/export.js.map +0 -1
- package/dist/admin/help.js +0 -106
- package/dist/admin/help.js.map +0 -1
- package/dist/admin/import-tasks.js +0 -182
- package/dist/admin/import-tasks.js.map +0 -1
- package/dist/admin/import.js +0 -129
- package/dist/admin/import.js.map +0 -1
- package/dist/admin/index.js +0 -13
- package/dist/admin/index.js.map +0 -1
- package/dist/adrs/find.js +0 -134
- package/dist/adrs/find.js.map +0 -1
- package/dist/adrs/index.js +0 -15
- package/dist/adrs/index.js.map +0 -1
- package/dist/adrs/link-pipeline.js +0 -160
- package/dist/adrs/link-pipeline.js.map +0 -1
- package/dist/adrs/list.js +0 -43
- package/dist/adrs/list.js.map +0 -1
- package/dist/adrs/parse.js +0 -51
- package/dist/adrs/parse.js.map +0 -1
- package/dist/adrs/show.js +0 -22
- package/dist/adrs/show.js.map +0 -1
- package/dist/adrs/sync.js +0 -188
- package/dist/adrs/sync.js.map +0 -1
- package/dist/adrs/types.js +0 -9
- package/dist/adrs/types.js.map +0 -1
- package/dist/adrs/validate.js +0 -57
- package/dist/adrs/validate.js.map +0 -1
- package/dist/agents/agent-registry.js +0 -288
- package/dist/agents/agent-registry.js.map +0 -1
- package/dist/agents/agent-schema.js +0 -82
- package/dist/agents/agent-schema.js.map +0 -1
- package/dist/agents/capacity.js +0 -116
- package/dist/agents/capacity.js.map +0 -1
- package/dist/agents/execution-learning.js +0 -474
- package/dist/agents/execution-learning.js.map +0 -1
- package/dist/agents/health-monitor.js +0 -217
- package/dist/agents/health-monitor.js.map +0 -1
- package/dist/agents/index.js +0 -29
- package/dist/agents/index.js.map +0 -1
- package/dist/agents/registry.js +0 -314
- package/dist/agents/registry.js.map +0 -1
- package/dist/agents/retry.js +0 -215
- package/dist/agents/retry.js.map +0 -1
- package/dist/audit-prune.js +0 -94
- package/dist/audit-prune.js.map +0 -1
- package/dist/audit.js +0 -68
- package/dist/audit.js.map +0 -1
- package/dist/backfill/index.js +0 -229
- package/dist/backfill/index.js.map +0 -1
- package/dist/bootstrap.js +0 -344
- package/dist/bootstrap.js.map +0 -1
- package/dist/caamp/adapter.js +0 -259
- package/dist/caamp/adapter.js.map +0 -1
- package/dist/caamp/capability-check.js +0 -38
- package/dist/caamp/capability-check.js.map +0 -1
- package/dist/caamp/index.js +0 -21
- package/dist/caamp/index.js.map +0 -1
- package/dist/caamp-init.js +0 -16
- package/dist/caamp-init.js.map +0 -1
- package/dist/cleo.js +0 -322
- package/dist/cleo.js.map +0 -1
- package/dist/code/index.js +0 -10
- package/dist/code/index.js.map +0 -1
- package/dist/code/outline.js +0 -165
- package/dist/code/outline.js.map +0 -1
- package/dist/code/parser.js +0 -295
- package/dist/code/parser.js.map +0 -1
- package/dist/code/search.js +0 -135
- package/dist/code/search.js.map +0 -1
- package/dist/code/unfold.js +0 -155
- package/dist/code/unfold.js.map +0 -1
- package/dist/codebase-map/analyzers/architecture.js +0 -129
- package/dist/codebase-map/analyzers/architecture.js.map +0 -1
- package/dist/codebase-map/analyzers/concerns.js +0 -122
- package/dist/codebase-map/analyzers/concerns.js.map +0 -1
- package/dist/codebase-map/analyzers/conventions.js +0 -149
- package/dist/codebase-map/analyzers/conventions.js.map +0 -1
- package/dist/codebase-map/analyzers/integrations.js +0 -108
- package/dist/codebase-map/analyzers/integrations.js.map +0 -1
- package/dist/codebase-map/analyzers/stack.js +0 -117
- package/dist/codebase-map/analyzers/stack.js.map +0 -1
- package/dist/codebase-map/analyzers/structure.js +0 -137
- package/dist/codebase-map/analyzers/structure.js.map +0 -1
- package/dist/codebase-map/analyzers/testing.js +0 -118
- package/dist/codebase-map/analyzers/testing.js.map +0 -1
- package/dist/codebase-map/index.js +0 -57
- package/dist/codebase-map/index.js.map +0 -1
- package/dist/codebase-map/store.js +0 -122
- package/dist/codebase-map/store.js.map +0 -1
- package/dist/codebase-map/summary.js +0 -152
- package/dist/codebase-map/summary.js.map +0 -1
- package/dist/compliance/index.js +0 -288
- package/dist/compliance/index.js.map +0 -1
- package/dist/compliance/protocol-enforcement.js +0 -332
- package/dist/compliance/protocol-enforcement.js.map +0 -1
- package/dist/compliance/protocol-rules.js +0 -786
- package/dist/compliance/protocol-rules.js.map +0 -1
- package/dist/compliance/protocol-types.js +0 -79
- package/dist/compliance/protocol-types.js.map +0 -1
- package/dist/compliance/store.js +0 -53
- package/dist/compliance/store.js.map +0 -1
- package/dist/conduit/conduit-client.js +0 -107
- package/dist/conduit/conduit-client.js.map +0 -1
- package/dist/conduit/factory.js +0 -52
- package/dist/conduit/factory.js.map +0 -1
- package/dist/conduit/http-transport.js +0 -155
- package/dist/conduit/http-transport.js.map +0 -1
- package/dist/conduit/index.js +0 -15
- package/dist/conduit/index.js.map +0 -1
- package/dist/conduit/local-transport.js +0 -255
- package/dist/conduit/local-transport.js.map +0 -1
- package/dist/conduit/sse-transport.js +0 -299
- package/dist/conduit/sse-transport.js.map +0 -1
- package/dist/config/build-config.js +0 -29
- package/dist/config/build-config.js.map +0 -1
- package/dist/config.js +0 -400
- package/dist/config.js.map +0 -1
- package/dist/constants.js +0 -18
- package/dist/constants.js.map +0 -1
- package/dist/context/index.js +0 -137
- package/dist/context/index.js.map +0 -1
- package/dist/crypto/credentials.js +0 -191
- package/dist/crypto/credentials.js.map +0 -1
- package/dist/discovery.js +0 -182
- package/dist/discovery.js.map +0 -1
- package/dist/engine-result.js +0 -12
- package/dist/engine-result.js.map +0 -1
- package/dist/error-catalog.js +0 -404
- package/dist/error-catalog.js.map +0 -1
- package/dist/error-registry.js +0 -393
- package/dist/error-registry.js.map +0 -1
- package/dist/errors.js +0 -173
- package/dist/errors.js.map +0 -1
- package/dist/hooks/handlers/agent-hooks.js +0 -106
- package/dist/hooks/handlers/agent-hooks.js.map +0 -1
- package/dist/hooks/handlers/context-hooks.js +0 -111
- package/dist/hooks/handlers/context-hooks.js.map +0 -1
- package/dist/hooks/handlers/error-hooks.js +0 -52
- package/dist/hooks/handlers/error-hooks.js.map +0 -1
- package/dist/hooks/handlers/file-hooks.js +0 -104
- package/dist/hooks/handlers/file-hooks.js.map +0 -1
- package/dist/hooks/handlers/handler-helpers.js +0 -61
- package/dist/hooks/handlers/handler-helpers.js.map +0 -1
- package/dist/hooks/handlers/index.js +0 -28
- package/dist/hooks/handlers/index.js.map +0 -1
- package/dist/hooks/handlers/memory-bridge-refresh.js +0 -42
- package/dist/hooks/handlers/memory-bridge-refresh.js.map +0 -1
- package/dist/hooks/handlers/notification-hooks.js +0 -62
- package/dist/hooks/handlers/notification-hooks.js.map +0 -1
- package/dist/hooks/handlers/session-hooks.js +0 -142
- package/dist/hooks/handlers/session-hooks.js.map +0 -1
- package/dist/hooks/handlers/task-hooks.js +0 -65
- package/dist/hooks/handlers/task-hooks.js.map +0 -1
- package/dist/hooks/handlers/work-capture-hooks.js +0 -165
- package/dist/hooks/handlers/work-capture-hooks.js.map +0 -1
- package/dist/hooks/index.js +0 -13
- package/dist/hooks/index.js.map +0 -1
- package/dist/hooks/payload-schemas.js +0 -220
- package/dist/hooks/payload-schemas.js.map +0 -1
- package/dist/hooks/provider-hooks.js +0 -66
- package/dist/hooks/provider-hooks.js.map +0 -1
- package/dist/hooks/registry.js +0 -229
- package/dist/hooks/registry.js.map +0 -1
- package/dist/hooks/types.js +0 -66
- package/dist/hooks/types.js.map +0 -1
- package/dist/hooks.js +0 -136
- package/dist/hooks.js.map +0 -1
- package/dist/init.js +0 -851
- package/dist/init.js.map +0 -1
- package/dist/inject/index.js +0 -82
- package/dist/inject/index.js.map +0 -1
- package/dist/injection.js +0 -343
- package/dist/injection.js.map +0 -1
- package/dist/intelligence/adaptive-validation.js +0 -497
- package/dist/intelligence/adaptive-validation.js.map +0 -1
- package/dist/intelligence/impact.js +0 -675
- package/dist/intelligence/impact.js.map +0 -1
- package/dist/intelligence/index.js +0 -22
- package/dist/intelligence/index.js.map +0 -1
- package/dist/intelligence/patterns.js +0 -492
- package/dist/intelligence/patterns.js.map +0 -1
- package/dist/intelligence/prediction.js +0 -499
- package/dist/intelligence/prediction.js.map +0 -1
- package/dist/intelligence/types.js +0 -13
- package/dist/intelligence/types.js.map +0 -1
- package/dist/internal.js +0 -306
- package/dist/internal.js.map +0 -1
- package/dist/issue/create.js +0 -121
- package/dist/issue/create.js.map +0 -1
- package/dist/issue/diagnostics.js +0 -59
- package/dist/issue/diagnostics.js.map +0 -1
- package/dist/issue/index.js +0 -10
- package/dist/issue/index.js.map +0 -1
- package/dist/issue/template-parser.js +0 -267
- package/dist/issue/template-parser.js.map +0 -1
- package/dist/json-schema-validator.js +0 -76
- package/dist/json-schema-validator.js.map +0 -1
- package/dist/lib/index.js +0 -11
- package/dist/lib/index.js.map +0 -1
- package/dist/lib/retry.js +0 -152
- package/dist/lib/retry.js.map +0 -1
- package/dist/lib/tree-sitter-languages.js +0 -71
- package/dist/lib/tree-sitter-languages.js.map +0 -1
- package/dist/lifecycle/chain-composition.js +0 -152
- package/dist/lifecycle/chain-composition.js.map +0 -1
- package/dist/lifecycle/chain-store.js +0 -246
- package/dist/lifecycle/chain-store.js.map +0 -1
- package/dist/lifecycle/consolidate-rcasd.js +0 -352
- package/dist/lifecycle/consolidate-rcasd.js.map +0 -1
- package/dist/lifecycle/default-chain.js +0 -176
- package/dist/lifecycle/default-chain.js.map +0 -1
- package/dist/lifecycle/evidence.js +0 -180
- package/dist/lifecycle/evidence.js.map +0 -1
- package/dist/lifecycle/frontmatter.js +0 -363
- package/dist/lifecycle/frontmatter.js.map +0 -1
- package/dist/lifecycle/index.js +0 -756
- package/dist/lifecycle/index.js.map +0 -1
- package/dist/lifecycle/pipeline.js +0 -656
- package/dist/lifecycle/pipeline.js.map +0 -1
- package/dist/lifecycle/rcasd-index.js +0 -326
- package/dist/lifecycle/rcasd-index.js.map +0 -1
- package/dist/lifecycle/rcasd-paths.js +0 -220
- package/dist/lifecycle/rcasd-paths.js.map +0 -1
- package/dist/lifecycle/resume.js +0 -864
- package/dist/lifecycle/resume.js.map +0 -1
- package/dist/lifecycle/stage-artifacts.js +0 -94
- package/dist/lifecycle/stage-artifacts.js.map +0 -1
- package/dist/lifecycle/stage-guidance.js +0 -234
- package/dist/lifecycle/stage-guidance.js.map +0 -1
- package/dist/lifecycle/stages.js +0 -534
- package/dist/lifecycle/stages.js.map +0 -1
- package/dist/lifecycle/state-machine.js +0 -516
- package/dist/lifecycle/state-machine.js.map +0 -1
- package/dist/lifecycle/tessera-engine.js +0 -249
- package/dist/lifecycle/tessera-engine.js.map +0 -1
- package/dist/logger.js +0 -140
- package/dist/logger.js.map +0 -1
- package/dist/memory/auto-extract.js +0 -177
- package/dist/memory/auto-extract.js.map +0 -1
- package/dist/memory/brain-embedding.js +0 -66
- package/dist/memory/brain-embedding.js.map +0 -1
- package/dist/memory/brain-lifecycle.js +0 -298
- package/dist/memory/brain-lifecycle.js.map +0 -1
- package/dist/memory/brain-links.js +0 -161
- package/dist/memory/brain-links.js.map +0 -1
- package/dist/memory/brain-maintenance.js +0 -114
- package/dist/memory/brain-maintenance.js.map +0 -1
- package/dist/memory/brain-migration.js +0 -149
- package/dist/memory/brain-migration.js.map +0 -1
- package/dist/memory/brain-reasoning.js +0 -215
- package/dist/memory/brain-reasoning.js.map +0 -1
- package/dist/memory/brain-retrieval.js +0 -542
- package/dist/memory/brain-retrieval.js.map +0 -1
- package/dist/memory/brain-row-types.js +0 -10
- package/dist/memory/brain-row-types.js.map +0 -1
- package/dist/memory/brain-search.js +0 -519
- package/dist/memory/brain-search.js.map +0 -1
- package/dist/memory/brain-similarity.js +0 -145
- package/dist/memory/brain-similarity.js.map +0 -1
- package/dist/memory/claude-mem-migration.js +0 -277
- package/dist/memory/claude-mem-migration.js.map +0 -1
- package/dist/memory/decisions.js +0 -162
- package/dist/memory/decisions.js.map +0 -1
- package/dist/memory/embedding-local.js +0 -97
- package/dist/memory/embedding-local.js.map +0 -1
- package/dist/memory/embedding-queue.js +0 -271
- package/dist/memory/embedding-queue.js.map +0 -1
- package/dist/memory/embedding-worker.js +0 -58
- package/dist/memory/embedding-worker.js.map +0 -1
- package/dist/memory/engine-compat.js +0 -1397
- package/dist/memory/engine-compat.js.map +0 -1
- package/dist/memory/index.js +0 -1140
- package/dist/memory/index.js.map +0 -1
- package/dist/memory/learnings.js +0 -121
- package/dist/memory/learnings.js.map +0 -1
- package/dist/memory/memory-bridge.js +0 -370
- package/dist/memory/memory-bridge.js.map +0 -1
- package/dist/memory/patterns.js +0 -122
- package/dist/memory/patterns.js.map +0 -1
- package/dist/memory/pipeline-manifest-sqlite.js +0 -975
- package/dist/memory/pipeline-manifest-sqlite.js.map +0 -1
- package/dist/memory/session-memory.js +0 -331
- package/dist/memory/session-memory.js.map +0 -1
- package/dist/metrics/ab-test.js +0 -260
- package/dist/metrics/ab-test.js.map +0 -1
- package/dist/metrics/aggregation.js +0 -363
- package/dist/metrics/aggregation.js.map +0 -1
- package/dist/metrics/common.js +0 -64
- package/dist/metrics/common.js.map +0 -1
- package/dist/metrics/enums.js +0 -78
- package/dist/metrics/enums.js.map +0 -1
- package/dist/metrics/index.js +0 -19
- package/dist/metrics/index.js.map +0 -1
- package/dist/metrics/model-provider-registry.js +0 -88
- package/dist/metrics/model-provider-registry.js.map +0 -1
- package/dist/metrics/otel-integration.js +0 -263
- package/dist/metrics/otel-integration.js.map +0 -1
- package/dist/metrics/provider-detection.js +0 -103
- package/dist/metrics/provider-detection.js.map +0 -1
- package/dist/metrics/token-estimation.js +0 -253
- package/dist/metrics/token-estimation.js.map +0 -1
- package/dist/metrics/token-service.js +0 -450
- package/dist/metrics/token-service.js.map +0 -1
- package/dist/migration/agent-outputs.js +0 -316
- package/dist/migration/agent-outputs.js.map +0 -1
- package/dist/migration/checksum.js +0 -92
- package/dist/migration/checksum.js.map +0 -1
- package/dist/migration/index.js +0 -282
- package/dist/migration/index.js.map +0 -1
- package/dist/migration/logger.js +0 -360
- package/dist/migration/logger.js.map +0 -1
- package/dist/migration/preflight.js +0 -9
- package/dist/migration/preflight.js.map +0 -1
- package/dist/migration/state.js +0 -421
- package/dist/migration/state.js.map +0 -1
- package/dist/migration/validate.js +0 -241
- package/dist/migration/validate.js.map +0 -1
- package/dist/mvi-helpers.js +0 -74
- package/dist/mvi-helpers.js.map +0 -1
- package/dist/nexus/deps.js +0 -375
- package/dist/nexus/deps.js.map +0 -1
- package/dist/nexus/discover.js +0 -288
- package/dist/nexus/discover.js.map +0 -1
- package/dist/nexus/hash.js +0 -10
- package/dist/nexus/hash.js.map +0 -1
- package/dist/nexus/index.js +0 -40
- package/dist/nexus/index.js.map +0 -1
- package/dist/nexus/migrate-json-to-sqlite.js +0 -115
- package/dist/nexus/migrate-json-to-sqlite.js.map +0 -1
- package/dist/nexus/permissions.js +0 -105
- package/dist/nexus/permissions.js.map +0 -1
- package/dist/nexus/query.js +0 -175
- package/dist/nexus/query.js.map +0 -1
- package/dist/nexus/registry.js +0 -584
- package/dist/nexus/registry.js.map +0 -1
- package/dist/nexus/sharing/index.js +0 -288
- package/dist/nexus/sharing/index.js.map +0 -1
- package/dist/nexus/transfer-types.js +0 -8
- package/dist/nexus/transfer-types.js.map +0 -1
- package/dist/nexus/transfer.js +0 -263
- package/dist/nexus/transfer.js.map +0 -1
- package/dist/nexus/workspace.js +0 -355
- package/dist/nexus/workspace.js.map +0 -1
- package/dist/observability/index.js +0 -103
- package/dist/observability/index.js.map +0 -1
- package/dist/observability/log-filter.js +0 -63
- package/dist/observability/log-filter.js.map +0 -1
- package/dist/observability/log-parser.js +0 -99
- package/dist/observability/log-parser.js.map +0 -1
- package/dist/observability/log-reader.js +0 -139
- package/dist/observability/log-reader.js.map +0 -1
- package/dist/observability/types.js +0 -19
- package/dist/observability/types.js.map +0 -1
- package/dist/orchestration/analyze.js +0 -107
- package/dist/orchestration/analyze.js.map +0 -1
- package/dist/orchestration/bootstrap.js +0 -132
- package/dist/orchestration/bootstrap.js.map +0 -1
- package/dist/orchestration/context.js +0 -56
- package/dist/orchestration/context.js.map +0 -1
- package/dist/orchestration/critical-path.js +0 -100
- package/dist/orchestration/critical-path.js.map +0 -1
- package/dist/orchestration/hierarchy.js +0 -183
- package/dist/orchestration/hierarchy.js.map +0 -1
- package/dist/orchestration/index.js +0 -287
- package/dist/orchestration/index.js.map +0 -1
- package/dist/orchestration/parallel.js +0 -89
- package/dist/orchestration/parallel.js.map +0 -1
- package/dist/orchestration/protocol-validators.js +0 -815
- package/dist/orchestration/protocol-validators.js.map +0 -1
- package/dist/orchestration/skill-ops.js +0 -98
- package/dist/orchestration/skill-ops.js.map +0 -1
- package/dist/orchestration/status.js +0 -107
- package/dist/orchestration/status.js.map +0 -1
- package/dist/orchestration/unblock.js +0 -103
- package/dist/orchestration/unblock.js.map +0 -1
- package/dist/orchestration/validate-spawn.js +0 -67
- package/dist/orchestration/validate-spawn.js.map +0 -1
- package/dist/orchestration/waves.js +0 -86
- package/dist/orchestration/waves.js.map +0 -1
- package/dist/otel/index.js +0 -163
- package/dist/otel/index.js.map +0 -1
- package/dist/output.js +0 -164
- package/dist/output.js.map +0 -1
- package/dist/pagination.js +0 -64
- package/dist/pagination.js.map +0 -1
- package/dist/paths.js +0 -842
- package/dist/paths.js.map +0 -1
- package/dist/phases/deps.js +0 -372
- package/dist/phases/deps.js.map +0 -1
- package/dist/phases/index.js +0 -349
- package/dist/phases/index.js.map +0 -1
- package/dist/pipeline/index.js +0 -10
- package/dist/pipeline/index.js.map +0 -1
- package/dist/pipeline/phase.js +0 -45
- package/dist/pipeline/phase.js.map +0 -1
- package/dist/platform.js +0 -211
- package/dist/platform.js.map +0 -1
- package/dist/project-info.js +0 -84
- package/dist/project-info.js.map +0 -1
- package/dist/reconciliation/index.js +0 -10
- package/dist/reconciliation/index.js.map +0 -1
- package/dist/reconciliation/link-store.js +0 -129
- package/dist/reconciliation/link-store.js.map +0 -1
- package/dist/reconciliation/reconciliation-engine.js +0 -298
- package/dist/reconciliation/reconciliation-engine.js.map +0 -1
- package/dist/release/artifacts.js +0 -427
- package/dist/release/artifacts.js.map +0 -1
- package/dist/release/changelog-writer.js +0 -151
- package/dist/release/changelog-writer.js.map +0 -1
- package/dist/release/channel.js +0 -144
- package/dist/release/channel.js.map +0 -1
- package/dist/release/ci.js +0 -166
- package/dist/release/ci.js.map +0 -1
- package/dist/release/github-pr.js +0 -225
- package/dist/release/github-pr.js.map +0 -1
- package/dist/release/guards.js +0 -116
- package/dist/release/guards.js.map +0 -1
- package/dist/release/index.js +0 -22
- package/dist/release/index.js.map +0 -1
- package/dist/release/release-config.js +0 -158
- package/dist/release/release-config.js.map +0 -1
- package/dist/release/release-manifest.js +0 -1019
- package/dist/release/release-manifest.js.map +0 -1
- package/dist/release/version-bump.js +0 -255
- package/dist/release/version-bump.js.map +0 -1
- package/dist/remote/index.js +0 -257
- package/dist/remote/index.js.map +0 -1
- package/dist/repair.js +0 -130
- package/dist/repair.js.map +0 -1
- package/dist/research/index.js +0 -2
- package/dist/research/index.js.map +0 -1
- package/dist/roadmap/index.js +0 -59
- package/dist/roadmap/index.js.map +0 -1
- package/dist/routing/capability-matrix.js +0 -1556
- package/dist/routing/capability-matrix.js.map +0 -1
- package/dist/routing/index.js +0 -9
- package/dist/routing/index.js.map +0 -1
- package/dist/scaffold.js +0 -1759
- package/dist/scaffold.js.map +0 -1
- package/dist/schema-management.js +0 -295
- package/dist/schema-management.js.map +0 -1
- package/dist/security/index.js +0 -9
- package/dist/security/index.js.map +0 -1
- package/dist/security/input-sanitization.js +0 -321
- package/dist/security/input-sanitization.js.map +0 -1
- package/dist/sequence/index.js +0 -295
- package/dist/sequence/index.js.map +0 -1
- package/dist/sessions/assumptions.js +0 -54
- package/dist/sessions/assumptions.js.map +0 -1
- package/dist/sessions/briefing.js +0 -377
- package/dist/sessions/briefing.js.map +0 -1
- package/dist/sessions/context-alert.js +0 -222
- package/dist/sessions/context-alert.js.map +0 -1
- package/dist/sessions/context-inject.js +0 -61
- package/dist/sessions/context-inject.js.map +0 -1
- package/dist/sessions/context-monitor.js +0 -98
- package/dist/sessions/context-monitor.js.map +0 -1
- package/dist/sessions/decisions.js +0 -65
- package/dist/sessions/decisions.js.map +0 -1
- package/dist/sessions/find.js +0 -65
- package/dist/sessions/find.js.map +0 -1
- package/dist/sessions/handoff.js +0 -328
- package/dist/sessions/handoff.js.map +0 -1
- package/dist/sessions/hitl-warnings.js +0 -254
- package/dist/sessions/hitl-warnings.js.map +0 -1
- package/dist/sessions/index.js +0 -327
- package/dist/sessions/index.js.map +0 -1
- package/dist/sessions/session-archive.js +0 -40
- package/dist/sessions/session-archive.js.map +0 -1
- package/dist/sessions/session-cleanup.js +0 -59
- package/dist/sessions/session-cleanup.js.map +0 -1
- package/dist/sessions/session-drift.js +0 -134
- package/dist/sessions/session-drift.js.map +0 -1
- package/dist/sessions/session-enforcement.js +0 -144
- package/dist/sessions/session-enforcement.js.map +0 -1
- package/dist/sessions/session-grade.js +0 -253
- package/dist/sessions/session-grade.js.map +0 -1
- package/dist/sessions/session-history.js +0 -42
- package/dist/sessions/session-history.js.map +0 -1
- package/dist/sessions/session-id.js +0 -81
- package/dist/sessions/session-id.js.map +0 -1
- package/dist/sessions/session-memory-bridge.js +0 -52
- package/dist/sessions/session-memory-bridge.js.map +0 -1
- package/dist/sessions/session-show.js +0 -24
- package/dist/sessions/session-show.js.map +0 -1
- package/dist/sessions/session-stats.js +0 -69
- package/dist/sessions/session-stats.js.map +0 -1
- package/dist/sessions/session-suspend.js +0 -39
- package/dist/sessions/session-suspend.js.map +0 -1
- package/dist/sessions/session-switch.js +0 -51
- package/dist/sessions/session-switch.js.map +0 -1
- package/dist/sessions/session-view.js +0 -76
- package/dist/sessions/session-view.js.map +0 -1
- package/dist/sessions/snapshot.js +0 -213
- package/dist/sessions/snapshot.js.map +0 -1
- package/dist/sessions/statusline-setup.js +0 -85
- package/dist/sessions/statusline-setup.js.map +0 -1
- package/dist/sessions/types.js +0 -8
- package/dist/sessions/types.js.map +0 -1
- package/dist/skills/agents/config.js +0 -94
- package/dist/skills/agents/config.js.map +0 -1
- package/dist/skills/agents/install.js +0 -116
- package/dist/skills/agents/install.js.map +0 -1
- package/dist/skills/agents/registry.js +0 -161
- package/dist/skills/agents/registry.js.map +0 -1
- package/dist/skills/discovery.js +0 -333
- package/dist/skills/discovery.js.map +0 -1
- package/dist/skills/dispatch.js +0 -347
- package/dist/skills/dispatch.js.map +0 -1
- package/dist/skills/dynamic-skill-generator.js +0 -87
- package/dist/skills/dynamic-skill-generator.js.map +0 -1
- package/dist/skills/index.js +0 -44
- package/dist/skills/index.js.map +0 -1
- package/dist/skills/injection/subagent.js +0 -195
- package/dist/skills/injection/subagent.js.map +0 -1
- package/dist/skills/injection/token.js +0 -260
- package/dist/skills/injection/token.js.map +0 -1
- package/dist/skills/install.js +0 -40
- package/dist/skills/install.js.map +0 -1
- package/dist/skills/manifests/contribution.js +0 -175
- package/dist/skills/manifests/contribution.js.map +0 -1
- package/dist/skills/manifests/research.js +0 -281
- package/dist/skills/manifests/research.js.map +0 -1
- package/dist/skills/manifests/resolver.js +0 -146
- package/dist/skills/manifests/resolver.js.map +0 -1
- package/dist/skills/marketplace.js +0 -90
- package/dist/skills/marketplace.js.map +0 -1
- package/dist/skills/orchestrator/spawn.js +0 -178
- package/dist/skills/orchestrator/spawn.js.map +0 -1
- package/dist/skills/orchestrator/startup.js +0 -451
- package/dist/skills/orchestrator/startup.js.map +0 -1
- package/dist/skills/orchestrator/validator.js +0 -301
- package/dist/skills/orchestrator/validator.js.map +0 -1
- package/dist/skills/precedence-integration.js +0 -73
- package/dist/skills/precedence-integration.js.map +0 -1
- package/dist/skills/precedence-types.js +0 -16
- package/dist/skills/precedence-types.js.map +0 -1
- package/dist/skills/routing-table.js +0 -63
- package/dist/skills/routing-table.js.map +0 -1
- package/dist/skills/skill-paths.js +0 -217
- package/dist/skills/skill-paths.js.map +0 -1
- package/dist/skills/test-utility.js +0 -55
- package/dist/skills/test-utility.js.map +0 -1
- package/dist/skills/types.js +0 -118
- package/dist/skills/types.js.map +0 -1
- package/dist/skills/validation.js +0 -183
- package/dist/skills/validation.js.map +0 -1
- package/dist/skills/version.js +0 -57
- package/dist/skills/version.js.map +0 -1
- package/dist/snapshot/index.js +0 -188
- package/dist/snapshot/index.js.map +0 -1
- package/dist/spawn/adapter-registry.js +0 -246
- package/dist/spawn/adapter-registry.js.map +0 -1
- package/dist/spawn/index.js +0 -10
- package/dist/spawn/index.js.map +0 -1
- package/dist/stats/index.js +0 -343
- package/dist/stats/index.js.map +0 -1
- package/dist/stats/workflow-telemetry.js +0 -400
- package/dist/stats/workflow-telemetry.js.map +0 -1
- package/dist/sticky/archive.js +0 -47
- package/dist/sticky/archive.js.map +0 -1
- package/dist/sticky/convert.js +0 -235
- package/dist/sticky/convert.js.map +0 -1
- package/dist/sticky/create.js +0 -48
- package/dist/sticky/create.js.map +0 -1
- package/dist/sticky/id.js +0 -35
- package/dist/sticky/id.js.map +0 -1
- package/dist/sticky/index.js +0 -16
- package/dist/sticky/index.js.map +0 -1
- package/dist/sticky/list.js +0 -44
- package/dist/sticky/list.js.map +0 -1
- package/dist/sticky/purge.js +0 -45
- package/dist/sticky/purge.js.map +0 -1
- package/dist/sticky/show.js +0 -42
- package/dist/sticky/show.js.map +0 -1
- package/dist/sticky/types.js +0 -10
- package/dist/sticky/types.js.map +0 -1
- package/dist/store/agent-registry-accessor.js +0 -783
- package/dist/store/agent-registry-accessor.js.map +0 -1
- package/dist/store/api-key-kdf.js +0 -84
- package/dist/store/api-key-kdf.js.map +0 -1
- package/dist/store/atomic.js +0 -167
- package/dist/store/atomic.js.map +0 -1
- package/dist/store/backup.js +0 -94
- package/dist/store/backup.js.map +0 -1
- package/dist/store/brain-accessor.js +0 -397
- package/dist/store/brain-accessor.js.map +0 -1
- package/dist/store/brain-schema.js +0 -215
- package/dist/store/brain-schema.js.map +0 -1
- package/dist/store/brain-sqlite.js +0 -222
- package/dist/store/brain-sqlite.js.map +0 -1
- package/dist/store/cache.js +0 -168
- package/dist/store/cache.js.map +0 -1
- package/dist/store/chain-schema.js +0 -51
- package/dist/store/chain-schema.js.map +0 -1
- package/dist/store/cleanup-legacy.js +0 -171
- package/dist/store/cleanup-legacy.js.map +0 -1
- package/dist/store/conduit-sqlite.js +0 -570
- package/dist/store/conduit-sqlite.js.map +0 -1
- package/dist/store/converters.js +0 -124
- package/dist/store/converters.js.map +0 -1
- package/dist/store/cross-db-cleanup.js +0 -319
- package/dist/store/cross-db-cleanup.js.map +0 -1
- package/dist/store/data-accessor.js +0 -26
- package/dist/store/data-accessor.js.map +0 -1
- package/dist/store/data-safety-central.js +0 -269
- package/dist/store/data-safety-central.js.map +0 -1
- package/dist/store/data-safety.js +0 -274
- package/dist/store/data-safety.js.map +0 -1
- package/dist/store/db-helpers.js +0 -224
- package/dist/store/db-helpers.js.map +0 -1
- package/dist/store/export.js +0 -155
- package/dist/store/export.js.map +0 -1
- package/dist/store/file-utils.js +0 -270
- package/dist/store/file-utils.js.map +0 -1
- package/dist/store/git-checkpoint.js +0 -365
- package/dist/store/git-checkpoint.js.map +0 -1
- package/dist/store/global-salt.js +0 -147
- package/dist/store/global-salt.js.map +0 -1
- package/dist/store/import-logging.js +0 -139
- package/dist/store/import-logging.js.map +0 -1
- package/dist/store/import-remap.js +0 -145
- package/dist/store/import-remap.js.map +0 -1
- package/dist/store/import-sort.js +0 -121
- package/dist/store/import-sort.js.map +0 -1
- package/dist/store/index.js +0 -29
- package/dist/store/index.js.map +0 -1
- package/dist/store/json.js +0 -208
- package/dist/store/json.js.map +0 -1
- package/dist/store/lifecycle-store.js +0 -249
- package/dist/store/lifecycle-store.js.map +0 -1
- package/dist/store/lock.js +0 -70
- package/dist/store/lock.js.map +0 -1
- package/dist/store/migrate-signaldock-to-conduit.js +0 -555
- package/dist/store/migrate-signaldock-to-conduit.js.map +0 -1
- package/dist/store/migration-manager.js +0 -151
- package/dist/store/migration-manager.js.map +0 -1
- package/dist/store/migration-sqlite.js +0 -676
- package/dist/store/migration-sqlite.js.map +0 -1
- package/dist/store/nexus-schema.js +0 -62
- package/dist/store/nexus-schema.js.map +0 -1
- package/dist/store/nexus-sqlite.js +0 -242
- package/dist/store/nexus-sqlite.js.map +0 -1
- package/dist/store/nexus-validation-schemas.js +0 -40
- package/dist/store/nexus-validation-schemas.js.map +0 -1
- package/dist/store/parsers.js +0 -37
- package/dist/store/parsers.js.map +0 -1
- package/dist/store/project-detect.js +0 -457
- package/dist/store/project-detect.js.map +0 -1
- package/dist/store/provider.js +0 -101
- package/dist/store/provider.js.map +0 -1
- package/dist/store/safety-data-accessor.js +0 -257
- package/dist/store/safety-data-accessor.js.map +0 -1
- package/dist/store/schema.js +0 -7
- package/dist/store/schema.js.map +0 -1
- package/dist/store/session-store.js +0 -219
- package/dist/store/session-store.js.map +0 -1
- package/dist/store/signaldock-sqlite.js +0 -550
- package/dist/store/signaldock-sqlite.js.map +0 -1
- package/dist/store/sqlite-backup.js +0 -359
- package/dist/store/sqlite-backup.js.map +0 -1
- package/dist/store/sqlite-data-accessor.js +0 -787
- package/dist/store/sqlite-data-accessor.js.map +0 -1
- package/dist/store/sqlite.js +0 -481
- package/dist/store/sqlite.js.map +0 -1
- package/dist/store/status-registry.js +0 -8
- package/dist/store/status-registry.js.map +0 -1
- package/dist/store/task-store.js +0 -358
- package/dist/store/task-store.js.map +0 -1
- package/dist/store/tasks-schema.js +0 -610
- package/dist/store/tasks-schema.js.map +0 -1
- package/dist/store/typed-query.js +0 -15
- package/dist/store/typed-query.js.map +0 -1
- package/dist/store/validation-schemas.js +0 -278
- package/dist/store/validation-schemas.js.map +0 -1
- package/dist/system/archive-analytics.js +0 -277
- package/dist/system/archive-analytics.js.map +0 -1
- package/dist/system/archive-stats.js +0 -64
- package/dist/system/archive-stats.js.map +0 -1
- package/dist/system/audit.js +0 -145
- package/dist/system/audit.js.map +0 -1
- package/dist/system/backup.js +0 -280
- package/dist/system/backup.js.map +0 -1
- package/dist/system/cleanup.js +0 -134
- package/dist/system/cleanup.js.map +0 -1
- package/dist/system/health.js +0 -1100
- package/dist/system/health.js.map +0 -1
- package/dist/system/index.js +0 -18
- package/dist/system/index.js.map +0 -1
- package/dist/system/inject-generate.js +0 -122
- package/dist/system/inject-generate.js.map +0 -1
- package/dist/system/labels.js +0 -38
- package/dist/system/labels.js.map +0 -1
- package/dist/system/metrics.js +0 -61
- package/dist/system/metrics.js.map +0 -1
- package/dist/system/migrate.js +0 -43
- package/dist/system/migrate.js.map +0 -1
- package/dist/system/platform-paths.js +0 -80
- package/dist/system/platform-paths.js.map +0 -1
- package/dist/system/runtime.js +0 -161
- package/dist/system/runtime.js.map +0 -1
- package/dist/system/safestop.js +0 -99
- package/dist/system/safestop.js.map +0 -1
- package/dist/system/storage-preflight.js +0 -123
- package/dist/system/storage-preflight.js.map +0 -1
- package/dist/task-work/index.js +0 -159
- package/dist/task-work/index.js.map +0 -1
- package/dist/tasks/add.js +0 -736
- package/dist/tasks/add.js.map +0 -1
- package/dist/tasks/analyze.js +0 -85
- package/dist/tasks/analyze.js.map +0 -1
- package/dist/tasks/archive.js +0 -90
- package/dist/tasks/archive.js.map +0 -1
- package/dist/tasks/atomicity.js +0 -83
- package/dist/tasks/atomicity.js.map +0 -1
- package/dist/tasks/cancel-ops.js +0 -83
- package/dist/tasks/cancel-ops.js.map +0 -1
- package/dist/tasks/complete.js +0 -214
- package/dist/tasks/complete.js.map +0 -1
- package/dist/tasks/crossref-extract.js +0 -73
- package/dist/tasks/crossref-extract.js.map +0 -1
- package/dist/tasks/delete-preview.js +0 -192
- package/dist/tasks/delete-preview.js.map +0 -1
- package/dist/tasks/delete.js +0 -120
- package/dist/tasks/delete.js.map +0 -1
- package/dist/tasks/deletion-strategy.js +0 -200
- package/dist/tasks/deletion-strategy.js.map +0 -1
- package/dist/tasks/dependency-check.js +0 -278
- package/dist/tasks/dependency-check.js.map +0 -1
- package/dist/tasks/deps-ready.js +0 -32
- package/dist/tasks/deps-ready.js.map +0 -1
- package/dist/tasks/enforcement.js +0 -86
- package/dist/tasks/enforcement.js.map +0 -1
- package/dist/tasks/epic-enforcement.js +0 -294
- package/dist/tasks/epic-enforcement.js.map +0 -1
- package/dist/tasks/find.js +0 -157
- package/dist/tasks/find.js.map +0 -1
- package/dist/tasks/graph-cache.js +0 -127
- package/dist/tasks/graph-cache.js.map +0 -1
- package/dist/tasks/graph-ops.js +0 -171
- package/dist/tasks/graph-ops.js.map +0 -1
- package/dist/tasks/graph-rag.js +0 -328
- package/dist/tasks/graph-rag.js.map +0 -1
- package/dist/tasks/hierarchy-policy.js +0 -149
- package/dist/tasks/hierarchy-policy.js.map +0 -1
- package/dist/tasks/hierarchy.js +0 -185
- package/dist/tasks/hierarchy.js.map +0 -1
- package/dist/tasks/id-generator.js +0 -65
- package/dist/tasks/id-generator.js.map +0 -1
- package/dist/tasks/index.js +0 -14
- package/dist/tasks/index.js.map +0 -1
- package/dist/tasks/labels.js +0 -55
- package/dist/tasks/labels.js.map +0 -1
- package/dist/tasks/list.js +0 -75
- package/dist/tasks/list.js.map +0 -1
- package/dist/tasks/phase-tracking.js +0 -133
- package/dist/tasks/phase-tracking.js.map +0 -1
- package/dist/tasks/pipeline-stage.js +0 -248
- package/dist/tasks/pipeline-stage.js.map +0 -1
- package/dist/tasks/plan.js +0 -268
- package/dist/tasks/plan.js.map +0 -1
- package/dist/tasks/relates.js +0 -101
- package/dist/tasks/relates.js.map +0 -1
- package/dist/tasks/show.js +0 -83
- package/dist/tasks/show.js.map +0 -1
- package/dist/tasks/size-weighting.js +0 -86
- package/dist/tasks/size-weighting.js.map +0 -1
- package/dist/tasks/staleness.js +0 -86
- package/dist/tasks/staleness.js.map +0 -1
- package/dist/tasks/task-ops.js +0 -1741
- package/dist/tasks/task-ops.js.map +0 -1
- package/dist/tasks/update.js +0 -303
- package/dist/tasks/update.js.map +0 -1
- package/dist/templates/index.js +0 -10
- package/dist/templates/index.js.map +0 -1
- package/dist/templates/parser.js +0 -254
- package/dist/templates/parser.js.map +0 -1
- package/dist/ui/aliases.js +0 -153
- package/dist/ui/aliases.js.map +0 -1
- package/dist/ui/changelog.js +0 -184
- package/dist/ui/changelog.js.map +0 -1
- package/dist/ui/command-registry.js +0 -168
- package/dist/ui/command-registry.js.map +0 -1
- package/dist/ui/flags.js +0 -94
- package/dist/ui/flags.js.map +0 -1
- package/dist/ui/index.js +0 -24
- package/dist/ui/index.js.map +0 -1
- package/dist/upgrade.js +0 -1148
- package/dist/upgrade.js.map +0 -1
- package/dist/validation/chain-validation.js +0 -146
- package/dist/validation/chain-validation.js.map +0 -1
- package/dist/validation/compliance.js +0 -155
- package/dist/validation/compliance.js.map +0 -1
- package/dist/validation/docs-sync.js +0 -212
- package/dist/validation/docs-sync.js.map +0 -1
- package/dist/validation/doctor/checks.js +0 -1069
- package/dist/validation/doctor/checks.js.map +0 -1
- package/dist/validation/doctor/index.js +0 -9
- package/dist/validation/doctor/index.js.map +0 -1
- package/dist/validation/doctor/project-cache.js +0 -160
- package/dist/validation/doctor/project-cache.js.map +0 -1
- package/dist/validation/doctor/utils.js +0 -155
- package/dist/validation/doctor/utils.js.map +0 -1
- package/dist/validation/engine.js +0 -914
- package/dist/validation/engine.js.map +0 -1
- package/dist/validation/gap-check.js +0 -175
- package/dist/validation/gap-check.js.map +0 -1
- package/dist/validation/index.js +0 -40
- package/dist/validation/index.js.map +0 -1
- package/dist/validation/manifest.js +0 -237
- package/dist/validation/manifest.js.map +0 -1
- package/dist/validation/operation-gate-validators.js +0 -724
- package/dist/validation/operation-gate-validators.js.map +0 -1
- package/dist/validation/operation-verification-gates.js +0 -532
- package/dist/validation/operation-verification-gates.js.map +0 -1
- package/dist/validation/param-utils.js +0 -141
- package/dist/validation/param-utils.js.map +0 -1
- package/dist/validation/protocol-common.js +0 -300
- package/dist/validation/protocol-common.js.map +0 -1
- package/dist/validation/protocols/_shared.js +0 -82
- package/dist/validation/protocols/_shared.js.map +0 -1
- package/dist/validation/protocols/architecture-decision.js +0 -31
- package/dist/validation/protocols/architecture-decision.js.map +0 -1
- package/dist/validation/protocols/artifact-publish.js +0 -28
- package/dist/validation/protocols/artifact-publish.js.map +0 -1
- package/dist/validation/protocols/consensus.js +0 -41
- package/dist/validation/protocols/consensus.js.map +0 -1
- package/dist/validation/protocols/contribution.js +0 -27
- package/dist/validation/protocols/contribution.js.map +0 -1
- package/dist/validation/protocols/decomposition.js +0 -28
- package/dist/validation/protocols/decomposition.js.map +0 -1
- package/dist/validation/protocols/implementation.js +0 -24
- package/dist/validation/protocols/implementation.js.map +0 -1
- package/dist/validation/protocols/provenance.js +0 -29
- package/dist/validation/protocols/provenance.js.map +0 -1
- package/dist/validation/protocols/release.js +0 -29
- package/dist/validation/protocols/release.js.map +0 -1
- package/dist/validation/protocols/research.js +0 -24
- package/dist/validation/protocols/research.js.map +0 -1
- package/dist/validation/protocols/specification.js +0 -27
- package/dist/validation/protocols/specification.js.map +0 -1
- package/dist/validation/protocols/testing.js +0 -30
- package/dist/validation/protocols/testing.js.map +0 -1
- package/dist/validation/protocols/validation.js +0 -30
- package/dist/validation/protocols/validation.js.map +0 -1
- package/dist/validation/schema-integrity.js +0 -170
- package/dist/validation/schema-integrity.js.map +0 -1
- package/dist/validation/schema-validator.js +0 -176
- package/dist/validation/schema-validator.js.map +0 -1
- package/dist/validation/validate-ops.js +0 -937
- package/dist/validation/validate-ops.js.map +0 -1
- package/dist/validation/validation-rules.js +0 -226
- package/dist/validation/validation-rules.js.map +0 -1
- package/dist/validation/verification.js +0 -321
- package/dist/validation/verification.js.map +0 -1
|
@@ -1,519 +0,0 @@
|
|
|
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
|
-
/** Track whether FTS5 is available in the current SQLite build. */
|
|
14
|
-
let _fts5Available = null;
|
|
15
|
-
/** Track whether FTS tables have been created and indexed this session. */
|
|
16
|
-
let _fts5Initialized = false;
|
|
17
|
-
/**
|
|
18
|
-
* Check if FTS5 is available in the current SQLite build.
|
|
19
|
-
*/
|
|
20
|
-
function checkFts5Available(nativeDb) {
|
|
21
|
-
if (_fts5Available !== null)
|
|
22
|
-
return _fts5Available;
|
|
23
|
-
try {
|
|
24
|
-
// Use run() to execute DDL statements
|
|
25
|
-
nativeDb.prepare('CREATE VIRTUAL TABLE IF NOT EXISTS _fts5_check USING fts5(test)').run();
|
|
26
|
-
nativeDb.prepare('DROP TABLE IF EXISTS _fts5_check').run();
|
|
27
|
-
_fts5Available = true;
|
|
28
|
-
}
|
|
29
|
-
catch {
|
|
30
|
-
_fts5Available = false;
|
|
31
|
-
}
|
|
32
|
-
return _fts5Available;
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Execute a DDL statement using the native database.
|
|
36
|
-
* Wraps nativeDb.prepare().run() for consistent usage.
|
|
37
|
-
*/
|
|
38
|
-
function execDDL(nativeDb, sql) {
|
|
39
|
-
nativeDb.prepare(sql).run();
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Create FTS5 virtual tables and content-sync triggers if they don't exist.
|
|
43
|
-
*
|
|
44
|
-
* Uses content= to sync from main tables, so inserts to main tables
|
|
45
|
-
* auto-populate FTS. UPDATE/DELETE require triggers.
|
|
46
|
-
*
|
|
47
|
-
* @task T5130
|
|
48
|
-
*/
|
|
49
|
-
export function ensureFts5Tables(nativeDb) {
|
|
50
|
-
if (!checkFts5Available(nativeDb)) {
|
|
51
|
-
return false;
|
|
52
|
-
}
|
|
53
|
-
// Decisions FTS
|
|
54
|
-
execDDL(nativeDb, `
|
|
55
|
-
CREATE VIRTUAL TABLE IF NOT EXISTS brain_decisions_fts
|
|
56
|
-
USING fts5(id, decision, rationale, content=brain_decisions, content_rowid=rowid)
|
|
57
|
-
`);
|
|
58
|
-
// Patterns FTS
|
|
59
|
-
execDDL(nativeDb, `
|
|
60
|
-
CREATE VIRTUAL TABLE IF NOT EXISTS brain_patterns_fts
|
|
61
|
-
USING fts5(id, pattern, context, content=brain_patterns, content_rowid=rowid)
|
|
62
|
-
`);
|
|
63
|
-
// Learnings FTS
|
|
64
|
-
execDDL(nativeDb, `
|
|
65
|
-
CREATE VIRTUAL TABLE IF NOT EXISTS brain_learnings_fts
|
|
66
|
-
USING fts5(id, insight, source, content=brain_learnings, content_rowid=rowid)
|
|
67
|
-
`);
|
|
68
|
-
// Content-sync triggers for decisions
|
|
69
|
-
execDDL(nativeDb, `
|
|
70
|
-
CREATE TRIGGER IF NOT EXISTS brain_decisions_ai AFTER INSERT ON brain_decisions BEGIN
|
|
71
|
-
INSERT INTO brain_decisions_fts(rowid, id, decision, rationale)
|
|
72
|
-
VALUES (new.rowid, new.id, new.decision, new.rationale);
|
|
73
|
-
END
|
|
74
|
-
`);
|
|
75
|
-
execDDL(nativeDb, `
|
|
76
|
-
CREATE TRIGGER IF NOT EXISTS brain_decisions_ad AFTER DELETE ON brain_decisions BEGIN
|
|
77
|
-
INSERT INTO brain_decisions_fts(brain_decisions_fts, rowid, id, decision, rationale)
|
|
78
|
-
VALUES('delete', old.rowid, old.id, old.decision, old.rationale);
|
|
79
|
-
END
|
|
80
|
-
`);
|
|
81
|
-
execDDL(nativeDb, `
|
|
82
|
-
CREATE TRIGGER IF NOT EXISTS brain_decisions_au AFTER UPDATE ON brain_decisions BEGIN
|
|
83
|
-
INSERT INTO brain_decisions_fts(brain_decisions_fts, rowid, id, decision, rationale)
|
|
84
|
-
VALUES('delete', old.rowid, old.id, old.decision, old.rationale);
|
|
85
|
-
INSERT INTO brain_decisions_fts(rowid, id, decision, rationale)
|
|
86
|
-
VALUES (new.rowid, new.id, new.decision, new.rationale);
|
|
87
|
-
END
|
|
88
|
-
`);
|
|
89
|
-
// Content-sync triggers for patterns
|
|
90
|
-
execDDL(nativeDb, `
|
|
91
|
-
CREATE TRIGGER IF NOT EXISTS brain_patterns_ai AFTER INSERT ON brain_patterns BEGIN
|
|
92
|
-
INSERT INTO brain_patterns_fts(rowid, id, pattern, context)
|
|
93
|
-
VALUES (new.rowid, new.id, new.pattern, new.context);
|
|
94
|
-
END
|
|
95
|
-
`);
|
|
96
|
-
execDDL(nativeDb, `
|
|
97
|
-
CREATE TRIGGER IF NOT EXISTS brain_patterns_ad AFTER DELETE ON brain_patterns BEGIN
|
|
98
|
-
INSERT INTO brain_patterns_fts(brain_patterns_fts, rowid, id, pattern, context)
|
|
99
|
-
VALUES('delete', old.rowid, old.id, old.pattern, old.context);
|
|
100
|
-
END
|
|
101
|
-
`);
|
|
102
|
-
execDDL(nativeDb, `
|
|
103
|
-
CREATE TRIGGER IF NOT EXISTS brain_patterns_au AFTER UPDATE ON brain_patterns BEGIN
|
|
104
|
-
INSERT INTO brain_patterns_fts(brain_patterns_fts, rowid, id, pattern, context)
|
|
105
|
-
VALUES('delete', old.rowid, old.id, old.pattern, old.context);
|
|
106
|
-
INSERT INTO brain_patterns_fts(rowid, id, pattern, context)
|
|
107
|
-
VALUES (new.rowid, new.id, new.pattern, new.context);
|
|
108
|
-
END
|
|
109
|
-
`);
|
|
110
|
-
// Content-sync triggers for learnings
|
|
111
|
-
execDDL(nativeDb, `
|
|
112
|
-
CREATE TRIGGER IF NOT EXISTS brain_learnings_ai AFTER INSERT ON brain_learnings BEGIN
|
|
113
|
-
INSERT INTO brain_learnings_fts(rowid, id, insight, source)
|
|
114
|
-
VALUES (new.rowid, new.id, new.insight, new.source);
|
|
115
|
-
END
|
|
116
|
-
`);
|
|
117
|
-
execDDL(nativeDb, `
|
|
118
|
-
CREATE TRIGGER IF NOT EXISTS brain_learnings_ad AFTER DELETE ON brain_learnings BEGIN
|
|
119
|
-
INSERT INTO brain_learnings_fts(brain_learnings_fts, rowid, id, insight, source)
|
|
120
|
-
VALUES('delete', old.rowid, old.id, old.insight, old.source);
|
|
121
|
-
END
|
|
122
|
-
`);
|
|
123
|
-
execDDL(nativeDb, `
|
|
124
|
-
CREATE TRIGGER IF NOT EXISTS brain_learnings_au AFTER UPDATE ON brain_learnings BEGIN
|
|
125
|
-
INSERT INTO brain_learnings_fts(brain_learnings_fts, rowid, id, insight, source)
|
|
126
|
-
VALUES('delete', old.rowid, old.id, old.insight, old.source);
|
|
127
|
-
INSERT INTO brain_learnings_fts(rowid, id, insight, source)
|
|
128
|
-
VALUES (new.rowid, new.id, new.insight, new.source);
|
|
129
|
-
END
|
|
130
|
-
`);
|
|
131
|
-
// Observations FTS
|
|
132
|
-
execDDL(nativeDb, `
|
|
133
|
-
CREATE VIRTUAL TABLE IF NOT EXISTS brain_observations_fts
|
|
134
|
-
USING fts5(id, title, narrative, content=brain_observations, content_rowid=rowid)
|
|
135
|
-
`);
|
|
136
|
-
// Content-sync triggers for observations
|
|
137
|
-
execDDL(nativeDb, `
|
|
138
|
-
CREATE TRIGGER IF NOT EXISTS brain_observations_ai AFTER INSERT ON brain_observations BEGIN
|
|
139
|
-
INSERT INTO brain_observations_fts(rowid, id, title, narrative)
|
|
140
|
-
VALUES (new.rowid, new.id, new.title, new.narrative);
|
|
141
|
-
END
|
|
142
|
-
`);
|
|
143
|
-
execDDL(nativeDb, `
|
|
144
|
-
CREATE TRIGGER IF NOT EXISTS brain_observations_ad AFTER DELETE ON brain_observations BEGIN
|
|
145
|
-
INSERT INTO brain_observations_fts(brain_observations_fts, rowid, id, title, narrative)
|
|
146
|
-
VALUES('delete', old.rowid, old.id, old.title, old.narrative);
|
|
147
|
-
END
|
|
148
|
-
`);
|
|
149
|
-
execDDL(nativeDb, `
|
|
150
|
-
CREATE TRIGGER IF NOT EXISTS brain_observations_au AFTER UPDATE ON brain_observations BEGIN
|
|
151
|
-
INSERT INTO brain_observations_fts(brain_observations_fts, rowid, id, title, narrative)
|
|
152
|
-
VALUES('delete', old.rowid, old.id, old.title, old.narrative);
|
|
153
|
-
INSERT INTO brain_observations_fts(rowid, id, title, narrative)
|
|
154
|
-
VALUES (new.rowid, new.id, new.title, new.narrative);
|
|
155
|
-
END
|
|
156
|
-
`);
|
|
157
|
-
return true;
|
|
158
|
-
}
|
|
159
|
-
/**
|
|
160
|
-
* Rebuild FTS5 indexes from the content tables.
|
|
161
|
-
* Useful after bulk inserts that bypass triggers.
|
|
162
|
-
*
|
|
163
|
-
* @task T5130
|
|
164
|
-
*/
|
|
165
|
-
export function rebuildFts5Index(nativeDb) {
|
|
166
|
-
if (!checkFts5Available(nativeDb)) {
|
|
167
|
-
return;
|
|
168
|
-
}
|
|
169
|
-
nativeDb.prepare("INSERT INTO brain_decisions_fts(brain_decisions_fts) VALUES('rebuild')").run();
|
|
170
|
-
nativeDb.prepare("INSERT INTO brain_patterns_fts(brain_patterns_fts) VALUES('rebuild')").run();
|
|
171
|
-
nativeDb.prepare("INSERT INTO brain_learnings_fts(brain_learnings_fts) VALUES('rebuild')").run();
|
|
172
|
-
// Observations FTS rebuild — table may not exist yet in older DBs
|
|
173
|
-
try {
|
|
174
|
-
nativeDb
|
|
175
|
-
.prepare("INSERT INTO brain_observations_fts(brain_observations_fts) VALUES('rebuild')")
|
|
176
|
-
.run();
|
|
177
|
-
}
|
|
178
|
-
catch {
|
|
179
|
-
// brain_observations_fts not created yet — skip
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
/**
|
|
183
|
-
* Unified search across all BRAIN memory tables.
|
|
184
|
-
*
|
|
185
|
-
* Uses FTS5 MATCH for full-text search with BM25 ranking when available,
|
|
186
|
-
* falls back to LIKE queries otherwise.
|
|
187
|
-
*
|
|
188
|
-
* @task T5130
|
|
189
|
-
*/
|
|
190
|
-
export async function searchBrain(projectRoot, query, options) {
|
|
191
|
-
if (!query || !query.trim()) {
|
|
192
|
-
return { decisions: [], patterns: [], learnings: [], observations: [] };
|
|
193
|
-
}
|
|
194
|
-
// Ensure brain.db is initialized
|
|
195
|
-
const { getBrainDb, getBrainNativeDb } = await import('../store/brain-sqlite.js');
|
|
196
|
-
await getBrainDb(projectRoot);
|
|
197
|
-
const nativeDb = getBrainNativeDb();
|
|
198
|
-
if (!nativeDb) {
|
|
199
|
-
return { decisions: [], patterns: [], learnings: [], observations: [] };
|
|
200
|
-
}
|
|
201
|
-
const limit = options?.limit ?? 10;
|
|
202
|
-
const tables = options?.tables ?? ['decisions', 'patterns', 'learnings', 'observations'];
|
|
203
|
-
const ftsAvailable = ensureFts5Tables(nativeDb);
|
|
204
|
-
if (ftsAvailable) {
|
|
205
|
-
// On first initialization, rebuild FTS indexes to sync any data
|
|
206
|
-
// that was inserted before the FTS triggers existed.
|
|
207
|
-
if (!_fts5Initialized) {
|
|
208
|
-
_fts5Initialized = true;
|
|
209
|
-
rebuildFts5Index(nativeDb);
|
|
210
|
-
}
|
|
211
|
-
return searchWithFts5(nativeDb, query, tables, limit);
|
|
212
|
-
}
|
|
213
|
-
return searchWithLike(nativeDb, query, tables, limit);
|
|
214
|
-
}
|
|
215
|
-
/**
|
|
216
|
-
* Search using FTS5 MATCH with BM25 ranking.
|
|
217
|
-
*/
|
|
218
|
-
function searchWithFts5(nativeDb, query, tables, limit) {
|
|
219
|
-
const result = {
|
|
220
|
-
decisions: [],
|
|
221
|
-
patterns: [],
|
|
222
|
-
learnings: [],
|
|
223
|
-
observations: [],
|
|
224
|
-
};
|
|
225
|
-
// Escape FTS5 special characters for safety
|
|
226
|
-
const safeQuery = escapeFts5Query(query);
|
|
227
|
-
if (tables.includes('decisions')) {
|
|
228
|
-
try {
|
|
229
|
-
const rows = typedAll(nativeDb.prepare(`
|
|
230
|
-
SELECT d.*
|
|
231
|
-
FROM brain_decisions_fts fts
|
|
232
|
-
JOIN brain_decisions d ON d.rowid = fts.rowid
|
|
233
|
-
WHERE brain_decisions_fts MATCH ?
|
|
234
|
-
ORDER BY bm25(brain_decisions_fts)
|
|
235
|
-
LIMIT ?
|
|
236
|
-
`), safeQuery, limit);
|
|
237
|
-
result.decisions = rows;
|
|
238
|
-
}
|
|
239
|
-
catch {
|
|
240
|
-
// FTS query failed, fall back to LIKE for this table
|
|
241
|
-
result.decisions = likeSearchDecisions(nativeDb, query, limit);
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
if (tables.includes('patterns')) {
|
|
245
|
-
try {
|
|
246
|
-
const rows = typedAll(nativeDb.prepare(`
|
|
247
|
-
SELECT p.*
|
|
248
|
-
FROM brain_patterns_fts fts
|
|
249
|
-
JOIN brain_patterns p ON p.rowid = fts.rowid
|
|
250
|
-
WHERE brain_patterns_fts MATCH ?
|
|
251
|
-
ORDER BY bm25(brain_patterns_fts)
|
|
252
|
-
LIMIT ?
|
|
253
|
-
`), safeQuery, limit);
|
|
254
|
-
result.patterns = rows;
|
|
255
|
-
}
|
|
256
|
-
catch {
|
|
257
|
-
result.patterns = likeSearchPatterns(nativeDb, query, limit);
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
if (tables.includes('learnings')) {
|
|
261
|
-
try {
|
|
262
|
-
const rows = typedAll(nativeDb.prepare(`
|
|
263
|
-
SELECT l.*
|
|
264
|
-
FROM brain_learnings_fts fts
|
|
265
|
-
JOIN brain_learnings l ON l.rowid = fts.rowid
|
|
266
|
-
WHERE brain_learnings_fts MATCH ?
|
|
267
|
-
ORDER BY bm25(brain_learnings_fts)
|
|
268
|
-
LIMIT ?
|
|
269
|
-
`), safeQuery, limit);
|
|
270
|
-
result.learnings = rows;
|
|
271
|
-
}
|
|
272
|
-
catch {
|
|
273
|
-
result.learnings = likeSearchLearnings(nativeDb, query, limit);
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
if (tables.includes('observations')) {
|
|
277
|
-
try {
|
|
278
|
-
const rows = typedAll(nativeDb.prepare(`
|
|
279
|
-
SELECT o.*
|
|
280
|
-
FROM brain_observations_fts fts
|
|
281
|
-
JOIN brain_observations o ON o.rowid = fts.rowid
|
|
282
|
-
WHERE brain_observations_fts MATCH ?
|
|
283
|
-
ORDER BY bm25(brain_observations_fts)
|
|
284
|
-
LIMIT ?
|
|
285
|
-
`), safeQuery, limit);
|
|
286
|
-
result.observations = rows;
|
|
287
|
-
}
|
|
288
|
-
catch {
|
|
289
|
-
result.observations = likeSearchObservations(nativeDb, query, limit);
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
return result;
|
|
293
|
-
}
|
|
294
|
-
/**
|
|
295
|
-
* Search using LIKE queries as fallback when FTS5 is unavailable.
|
|
296
|
-
*/
|
|
297
|
-
function searchWithLike(nativeDb, query, tables, limit) {
|
|
298
|
-
const result = {
|
|
299
|
-
decisions: [],
|
|
300
|
-
patterns: [],
|
|
301
|
-
learnings: [],
|
|
302
|
-
observations: [],
|
|
303
|
-
};
|
|
304
|
-
if (tables.includes('decisions')) {
|
|
305
|
-
result.decisions = likeSearchDecisions(nativeDb, query, limit);
|
|
306
|
-
}
|
|
307
|
-
if (tables.includes('patterns')) {
|
|
308
|
-
result.patterns = likeSearchPatterns(nativeDb, query, limit);
|
|
309
|
-
}
|
|
310
|
-
if (tables.includes('learnings')) {
|
|
311
|
-
result.learnings = likeSearchLearnings(nativeDb, query, limit);
|
|
312
|
-
}
|
|
313
|
-
if (tables.includes('observations')) {
|
|
314
|
-
result.observations = likeSearchObservations(nativeDb, query, limit);
|
|
315
|
-
}
|
|
316
|
-
return result;
|
|
317
|
-
}
|
|
318
|
-
function likeSearchDecisions(nativeDb, query, limit) {
|
|
319
|
-
const likePattern = `%${query}%`;
|
|
320
|
-
return typedAll(nativeDb.prepare(`
|
|
321
|
-
SELECT * FROM brain_decisions
|
|
322
|
-
WHERE decision LIKE ? OR rationale LIKE ?
|
|
323
|
-
ORDER BY created_at DESC
|
|
324
|
-
LIMIT ?
|
|
325
|
-
`), likePattern, likePattern, limit);
|
|
326
|
-
}
|
|
327
|
-
function likeSearchPatterns(nativeDb, query, limit) {
|
|
328
|
-
const likePattern = `%${query}%`;
|
|
329
|
-
return typedAll(nativeDb.prepare(`
|
|
330
|
-
SELECT * FROM brain_patterns
|
|
331
|
-
WHERE pattern LIKE ? OR context LIKE ?
|
|
332
|
-
ORDER BY frequency DESC
|
|
333
|
-
LIMIT ?
|
|
334
|
-
`), likePattern, likePattern, limit);
|
|
335
|
-
}
|
|
336
|
-
function likeSearchLearnings(nativeDb, query, limit) {
|
|
337
|
-
const likePattern = `%${query}%`;
|
|
338
|
-
return typedAll(nativeDb.prepare(`
|
|
339
|
-
SELECT * FROM brain_learnings
|
|
340
|
-
WHERE insight LIKE ? OR source LIKE ?
|
|
341
|
-
ORDER BY confidence DESC
|
|
342
|
-
LIMIT ?
|
|
343
|
-
`), likePattern, likePattern, limit);
|
|
344
|
-
}
|
|
345
|
-
function likeSearchObservations(nativeDb, query, limit) {
|
|
346
|
-
const likePattern = `%${query}%`;
|
|
347
|
-
return typedAll(nativeDb.prepare(`
|
|
348
|
-
SELECT * FROM brain_observations
|
|
349
|
-
WHERE title LIKE ? OR narrative LIKE ?
|
|
350
|
-
ORDER BY created_at DESC
|
|
351
|
-
LIMIT ?
|
|
352
|
-
`), likePattern, likePattern, limit);
|
|
353
|
-
}
|
|
354
|
-
/**
|
|
355
|
-
* Escape special FTS5 characters in query string.
|
|
356
|
-
* Wraps each token in quotes to prevent syntax errors from special chars.
|
|
357
|
-
*/
|
|
358
|
-
function escapeFts5Query(query) {
|
|
359
|
-
// Split on whitespace, wrap each token in double quotes
|
|
360
|
-
const tokens = query.trim().split(/\s+/).filter(Boolean);
|
|
361
|
-
if (tokens.length === 0)
|
|
362
|
-
return '""';
|
|
363
|
-
return tokens.map((t) => `"${t.replace(/"/g, '""')}"`).join(' ');
|
|
364
|
-
}
|
|
365
|
-
/**
|
|
366
|
-
* Reset the cached FTS5 availability flag.
|
|
367
|
-
* Used in tests to force re-detection.
|
|
368
|
-
*/
|
|
369
|
-
export function resetFts5Cache() {
|
|
370
|
-
_fts5Available = null;
|
|
371
|
-
_fts5Initialized = false;
|
|
372
|
-
}
|
|
373
|
-
/**
|
|
374
|
-
* Hybrid search across FTS5, vector similarity, and graph neighbors.
|
|
375
|
-
*
|
|
376
|
-
* 1. Runs FTS5 search via existing searchBrain.
|
|
377
|
-
* 2. Runs vector similarity via searchSimilar (if available).
|
|
378
|
-
* 3. Runs graph neighbor expansion via getNeighbors (if query matches a node).
|
|
379
|
-
* 4. Normalizes scores to 0-1 using min-max normalization.
|
|
380
|
-
* 5. Combines with configurable weights.
|
|
381
|
-
* 6. Deduplicates by ID, keeping highest combined score.
|
|
382
|
-
* 7. Returns top-N sorted by score descending.
|
|
383
|
-
*
|
|
384
|
-
* Graceful fallback: if vec unavailable, redistributes weight to FTS5.
|
|
385
|
-
*
|
|
386
|
-
* @param query - Search query text
|
|
387
|
-
* @param projectRoot - Project root directory
|
|
388
|
-
* @param options - Weight and limit configuration
|
|
389
|
-
* @returns Array of hybrid results ranked by combined score
|
|
390
|
-
*/
|
|
391
|
-
export async function hybridSearch(query, projectRoot, options) {
|
|
392
|
-
if (!query || !query.trim())
|
|
393
|
-
return [];
|
|
394
|
-
const maxResults = options?.limit ?? 10;
|
|
395
|
-
let ftsWeight = options?.ftsWeight ?? 0.5;
|
|
396
|
-
let vecWeight = options?.vecWeight ?? 0.4;
|
|
397
|
-
const graphWeight = options?.graphWeight ?? 0.1;
|
|
398
|
-
// Score accumulators: id -> { score, sources, type, title, text }
|
|
399
|
-
const scoreMap = new Map();
|
|
400
|
-
const addScore = (id, normalizedScore, weight, source, type, title, text) => {
|
|
401
|
-
const existing = scoreMap.get(id);
|
|
402
|
-
if (existing) {
|
|
403
|
-
existing.score += normalizedScore * weight;
|
|
404
|
-
existing.sources.add(source);
|
|
405
|
-
}
|
|
406
|
-
else {
|
|
407
|
-
scoreMap.set(id, {
|
|
408
|
-
score: normalizedScore * weight,
|
|
409
|
-
type,
|
|
410
|
-
title,
|
|
411
|
-
text,
|
|
412
|
-
sources: new Set([source]),
|
|
413
|
-
});
|
|
414
|
-
}
|
|
415
|
-
};
|
|
416
|
-
// --- 1. FTS5 search ---
|
|
417
|
-
const ftsResults = await searchBrain(projectRoot, query, { limit: maxResults * 2 });
|
|
418
|
-
// Collect all FTS hits into a flat list with position-based scores
|
|
419
|
-
const ftsHits = [];
|
|
420
|
-
for (const d of ftsResults.decisions) {
|
|
421
|
-
ftsHits.push({
|
|
422
|
-
id: d.id,
|
|
423
|
-
type: 'decision',
|
|
424
|
-
title: d.decision,
|
|
425
|
-
text: `${d.decision} — ${d.rationale}`,
|
|
426
|
-
});
|
|
427
|
-
}
|
|
428
|
-
for (const p of ftsResults.patterns) {
|
|
429
|
-
ftsHits.push({
|
|
430
|
-
id: p.id,
|
|
431
|
-
type: 'pattern',
|
|
432
|
-
title: p.pattern,
|
|
433
|
-
text: `${p.pattern} — ${p.context}`,
|
|
434
|
-
});
|
|
435
|
-
}
|
|
436
|
-
for (const l of ftsResults.learnings) {
|
|
437
|
-
ftsHits.push({
|
|
438
|
-
id: l.id,
|
|
439
|
-
type: 'learning',
|
|
440
|
-
title: l.insight,
|
|
441
|
-
text: `${l.insight} (source: ${l.source})`,
|
|
442
|
-
});
|
|
443
|
-
}
|
|
444
|
-
for (const o of ftsResults.observations) {
|
|
445
|
-
ftsHits.push({ id: o.id, type: 'observation', title: o.title, text: o.narrative ?? o.title });
|
|
446
|
-
}
|
|
447
|
-
// Normalize FTS: position-based (first result = 1.0, last = near 0)
|
|
448
|
-
for (let i = 0; i < ftsHits.length; i++) {
|
|
449
|
-
const hit = ftsHits[i];
|
|
450
|
-
const normalizedScore = ftsHits.length > 1 ? 1.0 - i / (ftsHits.length - 1) : 1.0;
|
|
451
|
-
addScore(hit.id, normalizedScore, ftsWeight, 'fts', hit.type, hit.title, hit.text);
|
|
452
|
-
}
|
|
453
|
-
// --- 2. Vector similarity search ---
|
|
454
|
-
let vecResults = [];
|
|
455
|
-
try {
|
|
456
|
-
vecResults = await searchSimilar(query, projectRoot, maxResults * 2);
|
|
457
|
-
}
|
|
458
|
-
catch {
|
|
459
|
-
// Vector search unavailable
|
|
460
|
-
}
|
|
461
|
-
if (vecResults.length > 0) {
|
|
462
|
-
// Normalize vector: distance-based (smaller distance = higher score)
|
|
463
|
-
const maxDist = Math.max(...vecResults.map((r) => r.distance), 0.001);
|
|
464
|
-
for (const r of vecResults) {
|
|
465
|
-
const normalizedScore = 1.0 - r.distance / maxDist;
|
|
466
|
-
addScore(r.id, normalizedScore, vecWeight, 'vec', r.type, r.title, r.text);
|
|
467
|
-
}
|
|
468
|
-
}
|
|
469
|
-
else {
|
|
470
|
-
// Redistribute vec weight to FTS if vector unavailable
|
|
471
|
-
ftsWeight += vecWeight;
|
|
472
|
-
vecWeight = 0;
|
|
473
|
-
// Re-score FTS hits with updated weight
|
|
474
|
-
scoreMap.clear();
|
|
475
|
-
for (let i = 0; i < ftsHits.length; i++) {
|
|
476
|
-
const hit = ftsHits[i];
|
|
477
|
-
const normalizedScore = ftsHits.length > 1 ? 1.0 - i / (ftsHits.length - 1) : 1.0;
|
|
478
|
-
addScore(hit.id, normalizedScore, ftsWeight, 'fts', hit.type, hit.title, hit.text);
|
|
479
|
-
}
|
|
480
|
-
}
|
|
481
|
-
// --- 3. Graph neighbor expansion ---
|
|
482
|
-
try {
|
|
483
|
-
const accessor = await getBrainAccessor(projectRoot);
|
|
484
|
-
// Check if query matches a known graph node ID pattern
|
|
485
|
-
const possibleNodeIds = [
|
|
486
|
-
`concept:${query.toLowerCase().replace(/\s+/g, '-')}`,
|
|
487
|
-
`task:${query}`,
|
|
488
|
-
`doc:${query}`,
|
|
489
|
-
];
|
|
490
|
-
for (const nodeId of possibleNodeIds) {
|
|
491
|
-
const node = await accessor.getPageNode(nodeId);
|
|
492
|
-
if (!node)
|
|
493
|
-
continue;
|
|
494
|
-
const neighbors = await accessor.getNeighbors(nodeId);
|
|
495
|
-
for (let i = 0; i < neighbors.length; i++) {
|
|
496
|
-
const neighbor = neighbors[i];
|
|
497
|
-
const normalizedScore = neighbors.length > 1 ? 1.0 - i / (neighbors.length - 1) : 1.0;
|
|
498
|
-
addScore(neighbor.id, normalizedScore, graphWeight, 'graph', neighbor.nodeType, neighbor.label, neighbor.label);
|
|
499
|
-
}
|
|
500
|
-
}
|
|
501
|
-
}
|
|
502
|
-
catch {
|
|
503
|
-
// Graph search unavailable — no redistribution needed (small weight)
|
|
504
|
-
}
|
|
505
|
-
// --- 4. Sort and return top-N ---
|
|
506
|
-
const sorted = [...scoreMap.entries()]
|
|
507
|
-
.map(([id, data]) => ({
|
|
508
|
-
id,
|
|
509
|
-
score: data.score,
|
|
510
|
-
type: data.type,
|
|
511
|
-
title: data.title,
|
|
512
|
-
text: data.text,
|
|
513
|
-
sources: [...data.sources],
|
|
514
|
-
}))
|
|
515
|
-
.sort((a, b) => b.score - a.score)
|
|
516
|
-
.slice(0, maxResults);
|
|
517
|
-
return sorted;
|
|
518
|
-
}
|
|
519
|
-
//# sourceMappingURL=brain-search.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"brain-search.js","sourceRoot":"","sources":["../../src/memory/brain-search.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* BRAIN Vector Similarity Search
|
|
3
|
-
*
|
|
4
|
-
* Provides vector-based KNN search against brain_embeddings vec0 table.
|
|
5
|
-
* Falls back gracefully when no embedding provider is registered or
|
|
6
|
-
* sqlite-vec is unavailable.
|
|
7
|
-
*
|
|
8
|
-
* @task T5388
|
|
9
|
-
* @epic T5149
|
|
10
|
-
*/
|
|
11
|
-
import { getBrainAccessor } from '../store/brain-accessor.js';
|
|
12
|
-
import { typedAll } from '../store/typed-query.js';
|
|
13
|
-
import { embedText, isEmbeddingAvailable } from './brain-embedding.js';
|
|
14
|
-
// ============================================================================
|
|
15
|
-
// ID prefix -> table type
|
|
16
|
-
// ============================================================================
|
|
17
|
-
function parseIdPrefix(id) {
|
|
18
|
-
if (id.startsWith('D-') || /^D\d/.test(id))
|
|
19
|
-
return 'decision';
|
|
20
|
-
if (id.startsWith('P-') || /^P\d/.test(id))
|
|
21
|
-
return 'pattern';
|
|
22
|
-
if (id.startsWith('L-') || /^L\d/.test(id))
|
|
23
|
-
return 'learning';
|
|
24
|
-
if (id.startsWith('O-') || id.startsWith('O') || id.startsWith('CM-'))
|
|
25
|
-
return 'observation';
|
|
26
|
-
return null;
|
|
27
|
-
}
|
|
28
|
-
// ============================================================================
|
|
29
|
-
// Implementation
|
|
30
|
-
// ============================================================================
|
|
31
|
-
/**
|
|
32
|
-
* Search for entries similar to a query string using vector similarity.
|
|
33
|
-
*
|
|
34
|
-
* 1. Embeds the query text via the registered embedding provider.
|
|
35
|
-
* 2. Runs KNN query against brain_embeddings vec0 table.
|
|
36
|
-
* 3. Joins with observation/decision/pattern/learning tables for full entries.
|
|
37
|
-
*
|
|
38
|
-
* Returns empty array when embedding is unavailable (graceful fallback).
|
|
39
|
-
*
|
|
40
|
-
* @param query - Text to find similar entries for
|
|
41
|
-
* @param projectRoot - Project root directory
|
|
42
|
-
* @param limit - Maximum results to return (default 10)
|
|
43
|
-
* @returns Array of similar entries ranked by distance (ascending)
|
|
44
|
-
*/
|
|
45
|
-
export async function searchSimilar(query, projectRoot, limit) {
|
|
46
|
-
if (!query || !query.trim())
|
|
47
|
-
return [];
|
|
48
|
-
if (!isEmbeddingAvailable())
|
|
49
|
-
return [];
|
|
50
|
-
const maxResults = limit ?? 10;
|
|
51
|
-
// Embed the query text
|
|
52
|
-
const queryVector = await embedText(query);
|
|
53
|
-
if (!queryVector)
|
|
54
|
-
return [];
|
|
55
|
-
// Ensure brain.db is initialized
|
|
56
|
-
const { getBrainDb, getBrainNativeDb, isBrainVecLoaded } = await import('../store/brain-sqlite.js');
|
|
57
|
-
await getBrainDb(projectRoot);
|
|
58
|
-
const nativeDb = getBrainNativeDb();
|
|
59
|
-
if (!nativeDb)
|
|
60
|
-
return [];
|
|
61
|
-
// Require sqlite-vec for KNN queries
|
|
62
|
-
if (!isBrainVecLoaded())
|
|
63
|
-
return [];
|
|
64
|
-
// Run KNN query against vec0 table
|
|
65
|
-
let knnRows;
|
|
66
|
-
try {
|
|
67
|
-
const stmt = nativeDb.prepare('SELECT id, distance FROM brain_embeddings WHERE embedding MATCH ? ORDER BY distance LIMIT ?');
|
|
68
|
-
knnRows = typedAll(stmt, new Float32Array(queryVector.buffer, queryVector.byteOffset, queryVector.length), maxResults);
|
|
69
|
-
}
|
|
70
|
-
catch {
|
|
71
|
-
// vec0 query failed — table may not exist or extension not loaded
|
|
72
|
-
return [];
|
|
73
|
-
}
|
|
74
|
-
if (knnRows.length === 0)
|
|
75
|
-
return [];
|
|
76
|
-
// Resolve each ID to its full entry
|
|
77
|
-
const accessor = await getBrainAccessor(projectRoot);
|
|
78
|
-
const results = [];
|
|
79
|
-
for (const row of knnRows) {
|
|
80
|
-
const entryType = parseIdPrefix(row.id);
|
|
81
|
-
if (!entryType)
|
|
82
|
-
continue;
|
|
83
|
-
try {
|
|
84
|
-
switch (entryType) {
|
|
85
|
-
case 'observation': {
|
|
86
|
-
const entry = await accessor.getObservation(row.id);
|
|
87
|
-
if (entry) {
|
|
88
|
-
results.push({
|
|
89
|
-
id: row.id,
|
|
90
|
-
distance: row.distance,
|
|
91
|
-
type: 'observation',
|
|
92
|
-
title: entry.title,
|
|
93
|
-
text: entry.narrative ?? entry.title,
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
break;
|
|
97
|
-
}
|
|
98
|
-
case 'decision': {
|
|
99
|
-
const entry = await accessor.getDecision(row.id);
|
|
100
|
-
if (entry) {
|
|
101
|
-
results.push({
|
|
102
|
-
id: row.id,
|
|
103
|
-
distance: row.distance,
|
|
104
|
-
type: 'decision',
|
|
105
|
-
title: entry.decision,
|
|
106
|
-
text: `${entry.decision} — ${entry.rationale}`,
|
|
107
|
-
});
|
|
108
|
-
}
|
|
109
|
-
break;
|
|
110
|
-
}
|
|
111
|
-
case 'pattern': {
|
|
112
|
-
const entry = await accessor.getPattern(row.id);
|
|
113
|
-
if (entry) {
|
|
114
|
-
results.push({
|
|
115
|
-
id: row.id,
|
|
116
|
-
distance: row.distance,
|
|
117
|
-
type: 'pattern',
|
|
118
|
-
title: entry.pattern,
|
|
119
|
-
text: `${entry.pattern} — ${entry.context}`,
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
break;
|
|
123
|
-
}
|
|
124
|
-
case 'learning': {
|
|
125
|
-
const entry = await accessor.getLearning(row.id);
|
|
126
|
-
if (entry) {
|
|
127
|
-
results.push({
|
|
128
|
-
id: row.id,
|
|
129
|
-
distance: row.distance,
|
|
130
|
-
type: 'learning',
|
|
131
|
-
title: entry.insight,
|
|
132
|
-
text: `${entry.insight} (source: ${entry.source})`,
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
break;
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
catch {
|
|
140
|
-
// Skip entries that fail to resolve
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
return results;
|
|
144
|
-
}
|
|
145
|
-
//# sourceMappingURL=brain-similarity.js.map
|