causantic 0.2.0 → 0.3.0
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/README.md +53 -66
- package/config.schema.json +12 -87
- package/dist/cli/commands/archive.d.ts.map +1 -1
- package/dist/cli/commands/archive.js.map +1 -1
- package/dist/cli/commands/benchmark-collection.d.ts.map +1 -1
- package/dist/cli/commands/benchmark-collection.js.map +1 -1
- package/dist/cli/commands/encryption.d.ts.map +1 -1
- package/dist/cli/commands/encryption.js.map +1 -1
- package/dist/cli/commands/hook.d.ts.map +1 -1
- package/dist/cli/commands/hook.js +8 -2
- package/dist/cli/commands/hook.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +39 -32
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/maintenance.d.ts.map +1 -1
- package/dist/cli/commands/maintenance.js +10 -3
- package/dist/cli/commands/maintenance.js.map +1 -1
- package/dist/cli/commands/serve.d.ts.map +1 -1
- package/dist/cli/commands/serve.js +3 -3
- package/dist/cli/commands/serve.js.map +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/cli/skill-templates.d.ts.map +1 -1
- package/dist/cli/skill-templates.js +223 -153
- package/dist/cli/skill-templates.js.map +1 -1
- package/dist/cli/uninstall.d.ts.map +1 -1
- package/dist/cli/uninstall.js +4 -1
- package/dist/cli/uninstall.js.map +1 -1
- package/dist/clusters/cluster-manager.d.ts +23 -0
- package/dist/clusters/cluster-manager.d.ts.map +1 -1
- package/dist/clusters/cluster-manager.js +69 -2
- package/dist/clusters/cluster-manager.js.map +1 -1
- package/dist/clusters/cluster-refresh.d.ts.map +1 -1
- package/dist/clusters/cluster-refresh.js +5 -1
- package/dist/clusters/cluster-refresh.js.map +1 -1
- package/dist/clusters/hdbscan/cluster-extraction.d.ts.map +1 -1
- package/dist/clusters/hdbscan/cluster-extraction.js +1 -2
- package/dist/clusters/hdbscan/cluster-extraction.js.map +1 -1
- package/dist/clusters/hdbscan/hierarchy.d.ts.map +1 -1
- package/dist/clusters/hdbscan/hierarchy.js +1 -3
- package/dist/clusters/hdbscan/hierarchy.js.map +1 -1
- package/dist/clusters/hdbscan/incremental.d.ts.map +1 -1
- package/dist/clusters/hdbscan/incremental.js.map +1 -1
- package/dist/clusters/hdbscan/probabilities.d.ts +1 -1
- package/dist/clusters/hdbscan/probabilities.d.ts.map +1 -1
- package/dist/clusters/hdbscan/probabilities.js +1 -1
- package/dist/clusters/hdbscan/probabilities.js.map +1 -1
- package/dist/clusters/hdbscan.d.ts.map +1 -1
- package/dist/clusters/hdbscan.js +3 -5
- package/dist/clusters/hdbscan.js.map +1 -1
- package/dist/config/loader.d.ts +10 -15
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +40 -71
- package/dist/config/loader.js.map +1 -1
- package/dist/config/memory-config.d.ts +2 -45
- package/dist/config/memory-config.d.ts.map +1 -1
- package/dist/config/memory-config.js +6 -109
- package/dist/config/memory-config.js.map +1 -1
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/lexical-features.d.ts.map +1 -1
- package/dist/core/lexical-features.js +141 -20
- package/dist/core/lexical-features.js.map +1 -1
- package/dist/dashboard/client/assets/index-DdImwNQ0.css +1 -0
- package/dist/dashboard/client/assets/index-Ofx8zngH.js +166 -0
- package/dist/dashboard/client/index.html +2 -2
- package/dist/dashboard/routes/benchmark-collection.d.ts.map +1 -1
- package/dist/dashboard/routes/benchmark-collection.js +2 -6
- package/dist/dashboard/routes/benchmark-collection.js.map +1 -1
- package/dist/dashboard/routes/chain.d.ts +3 -0
- package/dist/dashboard/routes/chain.d.ts.map +1 -0
- package/dist/dashboard/routes/chain.js +74 -0
- package/dist/dashboard/routes/chain.js.map +1 -0
- package/dist/dashboard/routes/chunks.d.ts.map +1 -1
- package/dist/dashboard/routes/chunks.js +16 -1
- package/dist/dashboard/routes/chunks.js.map +1 -1
- package/dist/dashboard/routes/graph.d.ts.map +1 -1
- package/dist/dashboard/routes/graph.js.map +1 -1
- package/dist/dashboard/routes/search.d.ts.map +1 -1
- package/dist/dashboard/routes/search.js.map +1 -1
- package/dist/dashboard/routes/stats.d.ts.map +1 -1
- package/dist/dashboard/routes/stats.js +8 -6
- package/dist/dashboard/routes/stats.js.map +1 -1
- package/dist/dashboard/routes/timeline.d.ts +3 -0
- package/dist/dashboard/routes/timeline.d.ts.map +1 -0
- package/dist/dashboard/routes/timeline.js +90 -0
- package/dist/dashboard/routes/timeline.js.map +1 -0
- package/dist/dashboard/server.d.ts.map +1 -1
- package/dist/dashboard/server.js +4 -0
- package/dist/dashboard/server.js.map +1 -1
- package/dist/eval/annotation-schema.d.ts.map +1 -1
- package/dist/eval/annotation-schema.js +2 -5
- package/dist/eval/annotation-schema.js.map +1 -1
- package/dist/eval/benchmark-runner.d.ts.map +1 -1
- package/dist/eval/benchmark-runner.js +2 -2
- package/dist/eval/benchmark-runner.js.map +1 -1
- package/dist/eval/cluster-evaluator.d.ts.map +1 -1
- package/dist/eval/cluster-evaluator.js.map +1 -1
- package/dist/eval/collection-benchmark/chain-quality.d.ts +15 -0
- package/dist/eval/collection-benchmark/chain-quality.d.ts.map +1 -0
- package/dist/eval/collection-benchmark/chain-quality.js +60 -0
- package/dist/eval/collection-benchmark/chain-quality.js.map +1 -0
- package/dist/eval/collection-benchmark/health.d.ts.map +1 -1
- package/dist/eval/collection-benchmark/health.js +2 -2
- package/dist/eval/collection-benchmark/health.js.map +1 -1
- package/dist/eval/collection-benchmark/history.d.ts.map +1 -1
- package/dist/eval/collection-benchmark/history.js +14 -11
- package/dist/eval/collection-benchmark/history.js.map +1 -1
- package/dist/eval/collection-benchmark/latency.d.ts.map +1 -1
- package/dist/eval/collection-benchmark/latency.js +14 -11
- package/dist/eval/collection-benchmark/latency.js.map +1 -1
- package/dist/eval/collection-benchmark/reporter.d.ts.map +1 -1
- package/dist/eval/collection-benchmark/reporter.js +18 -28
- package/dist/eval/collection-benchmark/reporter.js.map +1 -1
- package/dist/eval/collection-benchmark/retrieval.d.ts.map +1 -1
- package/dist/eval/collection-benchmark/retrieval.js +14 -8
- package/dist/eval/collection-benchmark/retrieval.js.map +1 -1
- package/dist/eval/collection-benchmark/runner.d.ts +3 -3
- package/dist/eval/collection-benchmark/runner.d.ts.map +1 -1
- package/dist/eval/collection-benchmark/runner.js +46 -37
- package/dist/eval/collection-benchmark/runner.js.map +1 -1
- package/dist/eval/collection-benchmark/sampler.d.ts.map +1 -1
- package/dist/eval/collection-benchmark/sampler.js +14 -12
- package/dist/eval/collection-benchmark/sampler.js.map +1 -1
- package/dist/eval/collection-benchmark/tuning.d.ts.map +1 -1
- package/dist/eval/collection-benchmark/tuning.js +56 -71
- package/dist/eval/collection-benchmark/tuning.js.map +1 -1
- package/dist/eval/collection-benchmark/types.d.ts +12 -24
- package/dist/eval/collection-benchmark/types.d.ts.map +1 -1
- package/dist/eval/corpus-builder.d.ts.map +1 -1
- package/dist/eval/corpus-builder.js.map +1 -1
- package/dist/eval/experiments/boilerplate-filter.d.ts.map +1 -1
- package/dist/eval/experiments/boilerplate-filter.js.map +1 -1
- package/dist/eval/experiments/cluster-threshold/run-threshold-sweep.d.ts.map +1 -1
- package/dist/eval/experiments/cluster-threshold/run-threshold-sweep.js +3 -5
- package/dist/eval/experiments/cluster-threshold/run-threshold-sweep.js.map +1 -1
- package/dist/eval/experiments/code-focused-mode.d.ts.map +1 -1
- package/dist/eval/experiments/code-focused-mode.js +1 -1
- package/dist/eval/experiments/code-focused-mode.js.map +1 -1
- package/dist/eval/experiments/edge-decay/decay-curves.d.ts +25 -19
- package/dist/eval/experiments/edge-decay/decay-curves.d.ts.map +1 -1
- package/dist/eval/experiments/edge-decay/decay-curves.js +47 -40
- package/dist/eval/experiments/edge-decay/decay-curves.js.map +1 -1
- package/dist/eval/experiments/edge-decay/index.d.ts +6 -4
- package/dist/eval/experiments/edge-decay/index.d.ts.map +1 -1
- package/dist/eval/experiments/edge-decay/index.js +5 -3
- package/dist/eval/experiments/edge-decay/index.js.map +1 -1
- package/dist/eval/experiments/edge-decay/presets.d.ts +14 -4
- package/dist/eval/experiments/edge-decay/presets.d.ts.map +1 -1
- package/dist/eval/experiments/edge-decay/presets.js +73 -68
- package/dist/eval/experiments/edge-decay/presets.js.map +1 -1
- package/dist/eval/experiments/edge-decay/reference-extractor.d.ts +2 -1
- package/dist/eval/experiments/edge-decay/reference-extractor.d.ts.map +1 -1
- package/dist/eval/experiments/edge-decay/reference-extractor.js +26 -40
- package/dist/eval/experiments/edge-decay/reference-extractor.js.map +1 -1
- package/dist/eval/experiments/edge-decay/reference-types.d.ts +24 -17
- package/dist/eval/experiments/edge-decay/reference-types.d.ts.map +1 -1
- package/dist/eval/experiments/edge-decay/reference-types.js +3 -0
- package/dist/eval/experiments/edge-decay/reference-types.js.map +1 -1
- package/dist/eval/experiments/edge-decay/retrieval-ranking.d.ts +8 -8
- package/dist/eval/experiments/edge-decay/retrieval-ranking.d.ts.map +1 -1
- package/dist/eval/experiments/edge-decay/retrieval-ranking.js +77 -133
- package/dist/eval/experiments/edge-decay/retrieval-ranking.js.map +1 -1
- package/dist/eval/experiments/edge-decay/run-experiments.d.ts +7 -3
- package/dist/eval/experiments/edge-decay/run-experiments.d.ts.map +1 -1
- package/dist/eval/experiments/edge-decay/run-experiments.js +71 -52
- package/dist/eval/experiments/edge-decay/run-experiments.js.map +1 -1
- package/dist/eval/experiments/edge-decay/simulate.d.ts +1 -1
- package/dist/eval/experiments/edge-decay/simulate.d.ts.map +1 -1
- package/dist/eval/experiments/edge-decay/simulate.js +7 -19
- package/dist/eval/experiments/edge-decay/simulate.js.map +1 -1
- package/dist/eval/experiments/hdbscan-sweep.d.ts.map +1 -1
- package/dist/eval/experiments/hdbscan-sweep.js +2 -6
- package/dist/eval/experiments/hdbscan-sweep.js.map +1 -1
- package/dist/eval/experiments/single-model-run.d.ts.map +1 -1
- package/dist/eval/experiments/single-model-run.js +2 -2
- package/dist/eval/experiments/single-model-run.js.map +1 -1
- package/dist/eval/experiments/thinking-ablation.d.ts.map +1 -1
- package/dist/eval/experiments/thinking-ablation.js +1 -1
- package/dist/eval/experiments/thinking-ablation.js.map +1 -1
- package/dist/eval/experiments/topic-continuity/hybrid-classifier.d.ts.map +1 -1
- package/dist/eval/experiments/topic-continuity/hybrid-classifier.js +54 -6
- package/dist/eval/experiments/topic-continuity/hybrid-classifier.js.map +1 -1
- package/dist/eval/experiments/topic-continuity/labeler.d.ts.map +1 -1
- package/dist/eval/experiments/topic-continuity/labeler.js +1 -4
- package/dist/eval/experiments/topic-continuity/labeler.js.map +1 -1
- package/dist/eval/experiments/topic-continuity/run-experiment.d.ts.map +1 -1
- package/dist/eval/experiments/topic-continuity/run-experiment.js +5 -13
- package/dist/eval/experiments/topic-continuity/run-experiment.js.map +1 -1
- package/dist/eval/experiments/truncation.d.ts.map +1 -1
- package/dist/eval/experiments/truncation.js.map +1 -1
- package/dist/eval/experiments/types.d.ts.map +1 -1
- package/dist/eval/experiments/types.js.map +1 -1
- package/dist/eval/metrics.d.ts.map +1 -1
- package/dist/eval/metrics.js.map +1 -1
- package/dist/hooks/claudemd-generator.d.ts.map +1 -1
- package/dist/hooks/claudemd-generator.js +3 -4
- package/dist/hooks/claudemd-generator.js.map +1 -1
- package/dist/hooks/hook-utils.d.ts +16 -0
- package/dist/hooks/hook-utils.d.ts.map +1 -1
- package/dist/hooks/hook-utils.js +51 -2
- package/dist/hooks/hook-utils.js.map +1 -1
- package/dist/hooks/index.d.ts +4 -2
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +3 -1
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/pre-compact.d.ts.map +1 -1
- package/dist/hooks/pre-compact.js +6 -51
- package/dist/hooks/pre-compact.js.map +1 -1
- package/dist/hooks/session-end.d.ts +58 -0
- package/dist/hooks/session-end.d.ts.map +1 -0
- package/dist/hooks/session-end.js +82 -0
- package/dist/hooks/session-end.js.map +1 -0
- package/dist/hooks/session-start.d.ts.map +1 -1
- package/dist/hooks/session-start.js +3 -5
- package/dist/hooks/session-start.js.map +1 -1
- package/dist/index.d.ts +1 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -3
- package/dist/index.js.map +1 -1
- package/dist/ingest/batch-ingest.d.ts.map +1 -1
- package/dist/ingest/batch-ingest.js.map +1 -1
- package/dist/ingest/brief-debrief-detector.d.ts +6 -13
- package/dist/ingest/brief-debrief-detector.d.ts.map +1 -1
- package/dist/ingest/brief-debrief-detector.js +9 -16
- package/dist/ingest/brief-debrief-detector.js.map +1 -1
- package/dist/ingest/cross-session-linker.d.ts +2 -1
- package/dist/ingest/cross-session-linker.d.ts.map +1 -1
- package/dist/ingest/cross-session-linker.js +17 -7
- package/dist/ingest/cross-session-linker.js.map +1 -1
- package/dist/ingest/edge-creator.d.ts +14 -40
- package/dist/ingest/edge-creator.d.ts.map +1 -1
- package/dist/ingest/edge-creator.js +34 -132
- package/dist/ingest/edge-creator.js.map +1 -1
- package/dist/ingest/edge-detector.d.ts +27 -12
- package/dist/ingest/edge-detector.d.ts.map +1 -1
- package/dist/ingest/edge-detector.js +68 -200
- package/dist/ingest/edge-detector.js.map +1 -1
- package/dist/ingest/index.d.ts +3 -3
- package/dist/ingest/index.d.ts.map +1 -1
- package/dist/ingest/index.js +3 -3
- package/dist/ingest/index.js.map +1 -1
- package/dist/ingest/ingest-session.d.ts +1 -8
- package/dist/ingest/ingest-session.d.ts.map +1 -1
- package/dist/ingest/ingest-session.js +54 -107
- package/dist/ingest/ingest-session.js.map +1 -1
- package/dist/ingest/rebuild-edges.d.ts +17 -0
- package/dist/ingest/rebuild-edges.d.ts.map +1 -0
- package/dist/ingest/rebuild-edges.js +97 -0
- package/dist/ingest/rebuild-edges.js.map +1 -0
- package/dist/maintenance/scheduler.d.ts +2 -3
- package/dist/maintenance/scheduler.d.ts.map +1 -1
- package/dist/maintenance/scheduler.js +14 -23
- package/dist/maintenance/scheduler.js.map +1 -1
- package/dist/maintenance/tasks/cleanup-vectors.d.ts +3 -1
- package/dist/maintenance/tasks/cleanup-vectors.d.ts.map +1 -1
- package/dist/maintenance/tasks/cleanup-vectors.js +6 -4
- package/dist/maintenance/tasks/cleanup-vectors.js.map +1 -1
- package/dist/maintenance/tasks/index.d.ts +0 -1
- package/dist/maintenance/tasks/index.d.ts.map +1 -1
- package/dist/maintenance/tasks/index.js +0 -1
- package/dist/maintenance/tasks/index.js.map +1 -1
- package/dist/mcp/index.d.ts +1 -1
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +1 -1
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +9 -8
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools.d.ts +5 -5
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +42 -36
- package/dist/mcp/tools.js.map +1 -1
- package/dist/models/device-detector.d.ts.map +1 -1
- package/dist/models/device-detector.js +20 -10
- package/dist/models/device-detector.js.map +1 -1
- package/dist/models/embedder.d.ts.map +1 -1
- package/dist/models/embedder.js +5 -2
- package/dist/models/embedder.js.map +1 -1
- package/dist/models/model-registry.d.ts.map +1 -1
- package/dist/models/model-registry.js.map +1 -1
- package/dist/parser/chunker.d.ts +5 -40
- package/dist/parser/chunker.d.ts.map +1 -1
- package/dist/parser/chunker.js +5 -111
- package/dist/parser/chunker.js.map +1 -1
- package/dist/parser/session-reader.d.ts.map +1 -1
- package/dist/parser/session-reader.js +3 -6
- package/dist/parser/session-reader.js.map +1 -1
- package/dist/parser/turn-assembler.d.ts.map +1 -1
- package/dist/parser/turn-assembler.js +0 -1
- package/dist/parser/turn-assembler.js.map +1 -1
- package/dist/parser/types.d.ts.map +1 -1
- package/dist/report/reporter.d.ts.map +1 -1
- package/dist/report/reporter.js +1 -3
- package/dist/report/reporter.js.map +1 -1
- package/dist/retrieval/chain-assembler.d.ts +58 -0
- package/dist/retrieval/chain-assembler.d.ts.map +1 -0
- package/dist/retrieval/chain-assembler.js +126 -0
- package/dist/retrieval/chain-assembler.js.map +1 -0
- package/dist/retrieval/chain-walker.d.ts +57 -0
- package/dist/retrieval/chain-walker.d.ts.map +1 -0
- package/dist/retrieval/chain-walker.js +121 -0
- package/dist/retrieval/chain-walker.js.map +1 -0
- package/dist/retrieval/cluster-expander.d.ts.map +1 -1
- package/dist/retrieval/cluster-expander.js +3 -3
- package/dist/retrieval/cluster-expander.js.map +1 -1
- package/dist/retrieval/context-assembler.d.ts +13 -36
- package/dist/retrieval/context-assembler.d.ts.map +1 -1
- package/dist/retrieval/context-assembler.js +50 -287
- package/dist/retrieval/context-assembler.js.map +1 -1
- package/dist/retrieval/index.d.ts +8 -4
- package/dist/retrieval/index.d.ts.map +1 -1
- package/dist/retrieval/index.js +7 -3
- package/dist/retrieval/index.js.map +1 -1
- package/dist/retrieval/rrf.d.ts.map +1 -1
- package/dist/retrieval/rrf.js +4 -2
- package/dist/retrieval/rrf.js.map +1 -1
- package/dist/retrieval/search-assembler.d.ts +59 -0
- package/dist/retrieval/search-assembler.d.ts.map +1 -0
- package/dist/retrieval/search-assembler.js +209 -0
- package/dist/retrieval/search-assembler.js.map +1 -0
- package/dist/retrieval/session-reconstructor.d.ts.map +1 -1
- package/dist/retrieval/session-reconstructor.js +9 -7
- package/dist/retrieval/session-reconstructor.js.map +1 -1
- package/dist/storage/archive.d.ts +0 -2
- package/dist/storage/archive.d.ts.map +1 -1
- package/dist/storage/archive.js +18 -12
- package/dist/storage/archive.js.map +1 -1
- package/dist/storage/checkpoint-store.d.ts +0 -1
- package/dist/storage/checkpoint-store.d.ts.map +1 -1
- package/dist/storage/checkpoint-store.js +5 -7
- package/dist/storage/checkpoint-store.js.map +1 -1
- package/dist/storage/chunk-store.d.ts.map +1 -1
- package/dist/storage/chunk-store.js +15 -17
- package/dist/storage/chunk-store.js.map +1 -1
- package/dist/storage/cluster-store.d.ts.map +1 -1
- package/dist/storage/cluster-store.js.map +1 -1
- package/dist/storage/db.d.ts.map +1 -1
- package/dist/storage/db.js.map +1 -1
- package/dist/storage/edge-store.d.ts +17 -30
- package/dist/storage/edge-store.d.ts.map +1 -1
- package/dist/storage/edge-store.js +43 -123
- package/dist/storage/edge-store.js.map +1 -1
- package/dist/storage/embedding-cache.d.ts.map +1 -1
- package/dist/storage/embedding-cache.js +1 -3
- package/dist/storage/embedding-cache.js.map +1 -1
- package/dist/storage/encryption.d.ts.map +1 -1
- package/dist/storage/encryption.js +4 -15
- package/dist/storage/encryption.js.map +1 -1
- package/dist/storage/index.d.ts +1 -4
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +1 -5
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/keyword-store.d.ts.map +1 -1
- package/dist/storage/keyword-store.js +11 -7
- package/dist/storage/keyword-store.js.map +1 -1
- package/dist/storage/migrations.d.ts.map +1 -1
- package/dist/storage/migrations.js +56 -4
- package/dist/storage/migrations.js.map +1 -1
- package/dist/storage/schema.sql +8 -20
- package/dist/storage/types.d.ts +12 -26
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/storage/types.js +1 -2
- package/dist/storage/types.js.map +1 -1
- package/dist/storage/vector-store.d.ts +9 -15
- package/dist/storage/vector-store.d.ts.map +1 -1
- package/dist/storage/vector-store.js +64 -43
- package/dist/storage/vector-store.js.map +1 -1
- package/dist/utils/angular-distance.d.ts.map +1 -1
- package/dist/utils/angular-distance.js.map +1 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/secret-store.d.ts.map +1 -1
- package/dist/utils/secret-store.js +17 -13
- package/dist/utils/secret-store.js.map +1 -1
- package/dist/utils/secure-buffer.d.ts.map +1 -1
- package/dist/utils/secure-buffer.js.map +1 -1
- package/package.json +7 -6
- package/src/dashboard/client/package-lock.json +3 -3
- package/src/dashboard/client/package.json +3 -3
- package/dist/dashboard/client/assets/index-CMUKy4f9.css +0 -1
- package/dist/dashboard/client/assets/index-esv8TpCN.js +0 -168
- package/dist/eval/collection-benchmark/graph-value.d.ts +0 -16
- package/dist/eval/collection-benchmark/graph-value.d.ts.map +0 -1
- package/dist/eval/collection-benchmark/graph-value.js +0 -162
- package/dist/eval/collection-benchmark/graph-value.js.map +0 -1
- package/dist/eval/experiments/vector-decay-shapes/curve-shapes-experiment.d.ts +0 -10
- package/dist/eval/experiments/vector-decay-shapes/curve-shapes-experiment.d.ts.map +0 -1
- package/dist/eval/experiments/vector-decay-shapes/curve-shapes-experiment.js +0 -229
- package/dist/eval/experiments/vector-decay-shapes/curve-shapes-experiment.js.map +0 -1
- package/dist/eval/experiments/vector-decay-shapes/graph-range-experiment.d.ts +0 -12
- package/dist/eval/experiments/vector-decay-shapes/graph-range-experiment.d.ts.map +0 -1
- package/dist/eval/experiments/vector-decay-shapes/graph-range-experiment.js +0 -316
- package/dist/eval/experiments/vector-decay-shapes/graph-range-experiment.js.map +0 -1
- package/dist/eval/experiments/vector-decay-shapes/hop-decay.d.ts +0 -19
- package/dist/eval/experiments/vector-decay-shapes/hop-decay.d.ts.map +0 -1
- package/dist/eval/experiments/vector-decay-shapes/hop-decay.js +0 -127
- package/dist/eval/experiments/vector-decay-shapes/hop-decay.js.map +0 -1
- package/dist/eval/experiments/vector-decay-shapes/index.d.ts +0 -11
- package/dist/eval/experiments/vector-decay-shapes/index.d.ts.map +0 -1
- package/dist/eval/experiments/vector-decay-shapes/index.js +0 -11
- package/dist/eval/experiments/vector-decay-shapes/index.js.map +0 -1
- package/dist/eval/experiments/vector-decay-shapes/path-traversal-experiment.d.ts +0 -14
- package/dist/eval/experiments/vector-decay-shapes/path-traversal-experiment.d.ts.map +0 -1
- package/dist/eval/experiments/vector-decay-shapes/path-traversal-experiment.js +0 -274
- package/dist/eval/experiments/vector-decay-shapes/path-traversal-experiment.js.map +0 -1
- package/dist/eval/experiments/vector-decay-shapes/presets.d.ts +0 -36
- package/dist/eval/experiments/vector-decay-shapes/presets.d.ts.map +0 -1
- package/dist/eval/experiments/vector-decay-shapes/presets.js +0 -157
- package/dist/eval/experiments/vector-decay-shapes/presets.js.map +0 -1
- package/dist/eval/experiments/vector-decay-shapes/run-experiment.d.ts +0 -20
- package/dist/eval/experiments/vector-decay-shapes/run-experiment.d.ts.map +0 -1
- package/dist/eval/experiments/vector-decay-shapes/run-experiment.js +0 -504
- package/dist/eval/experiments/vector-decay-shapes/run-experiment.js.map +0 -1
- package/dist/eval/experiments/vector-decay-shapes/types.d.ts +0 -111
- package/dist/eval/experiments/vector-decay-shapes/types.d.ts.map +0 -1
- package/dist/eval/experiments/vector-decay-shapes/types.js +0 -15
- package/dist/eval/experiments/vector-decay-shapes/types.js.map +0 -1
- package/dist/eval/experiments/vector-decay-sweep/index.d.ts +0 -7
- package/dist/eval/experiments/vector-decay-sweep/index.d.ts.map +0 -1
- package/dist/eval/experiments/vector-decay-sweep/index.js +0 -7
- package/dist/eval/experiments/vector-decay-sweep/index.js.map +0 -1
- package/dist/eval/experiments/vector-decay-sweep/run-sweep.d.ts +0 -30
- package/dist/eval/experiments/vector-decay-sweep/run-sweep.d.ts.map +0 -1
- package/dist/eval/experiments/vector-decay-sweep/run-sweep.js +0 -378
- package/dist/eval/experiments/vector-decay-sweep/run-sweep.js.map +0 -1
- package/dist/eval/experiments/vector-decay-sweep/types.d.ts +0 -109
- package/dist/eval/experiments/vector-decay-sweep/types.d.ts.map +0 -1
- package/dist/eval/experiments/vector-decay-sweep/types.js +0 -16
- package/dist/eval/experiments/vector-decay-sweep/types.js.map +0 -1
- package/dist/maintenance/tasks/prune-graph.d.ts +0 -12
- package/dist/maintenance/tasks/prune-graph.d.ts.map +0 -1
- package/dist/maintenance/tasks/prune-graph.js +0 -23
- package/dist/maintenance/tasks/prune-graph.js.map +0 -1
- package/dist/retrieval/traverser.d.ts +0 -66
- package/dist/retrieval/traverser.d.ts.map +0 -1
- package/dist/retrieval/traverser.js +0 -160
- package/dist/retrieval/traverser.js.map +0 -1
- package/dist/storage/clock-store.d.ts +0 -80
- package/dist/storage/clock-store.d.ts.map +0 -1
- package/dist/storage/clock-store.js +0 -155
- package/dist/storage/clock-store.js.map +0 -1
- package/dist/storage/decay.d.ts +0 -125
- package/dist/storage/decay.d.ts.map +0 -1
- package/dist/storage/decay.js +0 -276
- package/dist/storage/decay.js.map +0 -1
- package/dist/storage/pruner.d.ts +0 -111
- package/dist/storage/pruner.d.ts.map +0 -1
- package/dist/storage/pruner.js +0 -280
- package/dist/storage/pruner.js.map +0 -1
- package/dist/temporal/clock-compactor.d.ts +0 -65
- package/dist/temporal/clock-compactor.d.ts.map +0 -1
- package/dist/temporal/clock-compactor.js +0 -157
- package/dist/temporal/clock-compactor.js.map +0 -1
- package/dist/temporal/index.d.ts +0 -6
- package/dist/temporal/index.d.ts.map +0 -1
- package/dist/temporal/index.js +0 -6
- package/dist/temporal/index.js.map +0 -1
- package/dist/temporal/vector-clock.d.ts +0 -143
- package/dist/temporal/vector-clock.d.ts.map +0 -1
- package/dist/temporal/vector-clock.js +0 -231
- package/dist/temporal/vector-clock.js.map +0 -1
- package/dist/utils/keychain.d.ts +0 -43
- package/dist/utils/keychain.d.ts.map +0 -1
- package/dist/utils/keychain.js +0 -82
- package/dist/utils/keychain.js.map +0 -1
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chain assembler for episodic retrieval.
|
|
3
|
+
*
|
|
4
|
+
* Combines search (for seed finding) with chain walking (for narrative construction).
|
|
5
|
+
* Used by the `recall` and `predict` MCP tools.
|
|
6
|
+
*
|
|
7
|
+
* Pipeline:
|
|
8
|
+
* 1. Run searchContext() to get seeds and query embedding
|
|
9
|
+
* 2. Walk chains from seeds (backward for recall, forward for predict)
|
|
10
|
+
* 3. Select best chain by median per-node score
|
|
11
|
+
* 4. If no chain qualifies (all seeds orphaned), fall back to search results
|
|
12
|
+
*/
|
|
13
|
+
import { approximateTokens } from '../utils/token-counter.js';
|
|
14
|
+
import { searchContext } from './search-assembler.js';
|
|
15
|
+
import { walkChains, selectBestChain } from './chain-walker.js';
|
|
16
|
+
/**
|
|
17
|
+
* Recall: find seeds → walk backward → reverse for chronological narrative.
|
|
18
|
+
*/
|
|
19
|
+
export async function recallContext(request) {
|
|
20
|
+
return runEpisodicPipeline(request, 'backward');
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Predict: find seeds → walk forward → output in traversal order.
|
|
24
|
+
*/
|
|
25
|
+
export async function predictContext(request) {
|
|
26
|
+
return runEpisodicPipeline(request, 'forward');
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Core episodic pipeline shared by recall and predict.
|
|
30
|
+
*/
|
|
31
|
+
async function runEpisodicPipeline(request, direction) {
|
|
32
|
+
const startTime = Date.now();
|
|
33
|
+
const { query, currentSessionId, projectFilter, maxTokens = 20000, vectorSearchLimit } = request;
|
|
34
|
+
// 1. Search for seeds
|
|
35
|
+
const searchRequest = {
|
|
36
|
+
query,
|
|
37
|
+
currentSessionId,
|
|
38
|
+
projectFilter,
|
|
39
|
+
maxTokens,
|
|
40
|
+
vectorSearchLimit,
|
|
41
|
+
};
|
|
42
|
+
const searchResult = await searchContext(searchRequest);
|
|
43
|
+
if (searchResult.seedIds.length === 0) {
|
|
44
|
+
return {
|
|
45
|
+
text: searchResult.text,
|
|
46
|
+
tokenCount: searchResult.tokenCount,
|
|
47
|
+
chunks: searchResult.chunks.map((c) => ({
|
|
48
|
+
id: c.id,
|
|
49
|
+
sessionSlug: c.sessionSlug,
|
|
50
|
+
weight: c.weight,
|
|
51
|
+
preview: c.preview,
|
|
52
|
+
})),
|
|
53
|
+
mode: 'search-fallback',
|
|
54
|
+
chainLength: 0,
|
|
55
|
+
durationMs: Date.now() - startTime,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
// 2. Walk chains from seeds
|
|
59
|
+
const chains = await walkChains(searchResult.seedIds, {
|
|
60
|
+
direction,
|
|
61
|
+
tokenBudget: maxTokens,
|
|
62
|
+
queryEmbedding: searchResult.queryEmbedding,
|
|
63
|
+
});
|
|
64
|
+
// 3. Select best chain
|
|
65
|
+
const bestChain = selectBestChain(chains);
|
|
66
|
+
if (!bestChain) {
|
|
67
|
+
// Fallback to search results
|
|
68
|
+
return {
|
|
69
|
+
text: searchResult.text,
|
|
70
|
+
tokenCount: searchResult.tokenCount,
|
|
71
|
+
chunks: searchResult.chunks.map((c) => ({
|
|
72
|
+
id: c.id,
|
|
73
|
+
sessionSlug: c.sessionSlug,
|
|
74
|
+
weight: c.weight,
|
|
75
|
+
preview: c.preview,
|
|
76
|
+
})),
|
|
77
|
+
mode: 'search-fallback',
|
|
78
|
+
chainLength: 0,
|
|
79
|
+
durationMs: Date.now() - startTime,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
// 4. Format chain as narrative
|
|
83
|
+
const formatted = formatChain(bestChain, direction);
|
|
84
|
+
return {
|
|
85
|
+
text: formatted.text,
|
|
86
|
+
tokenCount: formatted.tokenCount,
|
|
87
|
+
chunks: formatted.chunks,
|
|
88
|
+
mode: 'chain',
|
|
89
|
+
chainLength: bestChain.chunkIds.length,
|
|
90
|
+
durationMs: Date.now() - startTime,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Format a chain as ordered narrative.
|
|
95
|
+
* Backward chains are reversed for chronological output (problem → solution).
|
|
96
|
+
*/
|
|
97
|
+
function formatChain(chain, direction) {
|
|
98
|
+
// Backward chains need reversal for chronological order
|
|
99
|
+
const orderedChunks = direction === 'backward' ? [...chain.chunks].reverse() : chain.chunks;
|
|
100
|
+
const orderedIds = direction === 'backward' ? [...chain.chunkIds].reverse() : chain.chunkIds;
|
|
101
|
+
const parts = [];
|
|
102
|
+
const resultChunks = [];
|
|
103
|
+
let totalTokens = 0;
|
|
104
|
+
for (let i = 0; i < orderedChunks.length; i++) {
|
|
105
|
+
const chunk = orderedChunks[i];
|
|
106
|
+
const chunkTokens = chunk.approxTokens || approximateTokens(chunk.content);
|
|
107
|
+
parts.push(formatChunkForOutput(chunk, chunk.content, i + 1, orderedChunks.length));
|
|
108
|
+
totalTokens += chunkTokens;
|
|
109
|
+
resultChunks.push({
|
|
110
|
+
id: orderedIds[i],
|
|
111
|
+
sessionSlug: chunk.sessionSlug,
|
|
112
|
+
weight: chain.medianScore,
|
|
113
|
+
preview: chunk.content.slice(0, 100) + (chunk.content.length > 100 ? '...' : ''),
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
117
|
+
text: parts.join('\n\n---\n\n'),
|
|
118
|
+
tokenCount: totalTokens,
|
|
119
|
+
chunks: resultChunks,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
function formatChunkForOutput(chunk, content, position, total) {
|
|
123
|
+
const date = new Date(chunk.startTime).toLocaleDateString();
|
|
124
|
+
return `[${position}/${total} | Session: ${chunk.sessionSlug} | Date: ${date}]\n${content}`;
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=chain-assembler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chain-assembler.js","sourceRoot":"","sources":["../../src/retrieval/chain-assembler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chain walker for episodic retrieval.
|
|
3
|
+
*
|
|
4
|
+
* Walks the causal graph from seed chunks, building ordered narrative chains.
|
|
5
|
+
* Each chain is scored by aggregate cosine similarity per token.
|
|
6
|
+
*/
|
|
7
|
+
import type { StoredChunk } from '../storage/types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Options for chain walking.
|
|
10
|
+
*/
|
|
11
|
+
export interface ChainWalkerOptions {
|
|
12
|
+
/** Walk direction: backward = recall, forward = predict */
|
|
13
|
+
direction: 'forward' | 'backward';
|
|
14
|
+
/** Maximum tokens across all chains */
|
|
15
|
+
tokenBudget: number;
|
|
16
|
+
/** Query embedding for scoring nodes */
|
|
17
|
+
queryEmbedding: number[];
|
|
18
|
+
/** Maximum depth (hops) per chain. Default: 50. */
|
|
19
|
+
maxDepth?: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* A chain of ordered chunks from graph traversal.
|
|
23
|
+
*/
|
|
24
|
+
export interface Chain {
|
|
25
|
+
/** Chunk IDs in traversal order */
|
|
26
|
+
chunkIds: string[];
|
|
27
|
+
/** Resolved chunks */
|
|
28
|
+
chunks: StoredChunk[];
|
|
29
|
+
/** Per-node cosine similarity scores (parallel to chunkIds) */
|
|
30
|
+
nodeScores: number[];
|
|
31
|
+
/** Sum of cosine similarity scores for all nodes */
|
|
32
|
+
score: number;
|
|
33
|
+
/** Total token count across all chunks */
|
|
34
|
+
tokenCount: number;
|
|
35
|
+
/** Median per-node similarity (robust to outliers on short chains) */
|
|
36
|
+
medianScore: number;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Walk causal chains from seed chunks.
|
|
40
|
+
*
|
|
41
|
+
* For each seed, traverses the graph following directed edges.
|
|
42
|
+
* Each branch path produces a separate chain.
|
|
43
|
+
* A global visited set prevents cycles.
|
|
44
|
+
* A running token tally stops traversal when the budget is hit.
|
|
45
|
+
*
|
|
46
|
+
* @param seedIds - Starting chunk IDs
|
|
47
|
+
* @param options - Walk options
|
|
48
|
+
* @returns Array of chains (one per seed that yielded results)
|
|
49
|
+
*/
|
|
50
|
+
export declare function walkChains(seedIds: string[], options: ChainWalkerOptions): Promise<Chain[]>;
|
|
51
|
+
/**
|
|
52
|
+
* Select the best chain from a set of candidates.
|
|
53
|
+
* Returns the chain with the highest median per-node score among chains with >= 2 chunks.
|
|
54
|
+
* Returns null if no qualifying chain exists.
|
|
55
|
+
*/
|
|
56
|
+
export declare function selectBestChain(chains: Chain[]): Chain | null;
|
|
57
|
+
//# sourceMappingURL=chain-walker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chain-walker.d.ts","sourceRoot":"","sources":["../../src/retrieval/chain-walker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,qBAAqB,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,2DAA2D;IAC3D,SAAS,EAAE,SAAS,GAAG,UAAU,CAAC;IAClC,uCAAuC;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,KAAK;IACpB,mCAAmC;IACnC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,sBAAsB;IACtB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,+DAA+D;IAC/D,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,oDAAoD;IACpD,KAAK,EAAE,MAAM,CAAC;IACd,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,KAAK,EAAE,CAAC,CA0BlB;AA+ED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,GAAG,IAAI,CAM7D"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chain walker for episodic retrieval.
|
|
3
|
+
*
|
|
4
|
+
* Walks the causal graph from seed chunks, building ordered narrative chains.
|
|
5
|
+
* Each chain is scored by aggregate cosine similarity per token.
|
|
6
|
+
*/
|
|
7
|
+
import { getForwardEdges, getBackwardEdges } from '../storage/edge-store.js';
|
|
8
|
+
import { getChunkById } from '../storage/chunk-store.js';
|
|
9
|
+
import { vectorStore } from '../storage/vector-store.js';
|
|
10
|
+
import { angularDistance } from '../utils/angular-distance.js';
|
|
11
|
+
/**
|
|
12
|
+
* Walk causal chains from seed chunks.
|
|
13
|
+
*
|
|
14
|
+
* For each seed, traverses the graph following directed edges.
|
|
15
|
+
* Each branch path produces a separate chain.
|
|
16
|
+
* A global visited set prevents cycles.
|
|
17
|
+
* A running token tally stops traversal when the budget is hit.
|
|
18
|
+
*
|
|
19
|
+
* @param seedIds - Starting chunk IDs
|
|
20
|
+
* @param options - Walk options
|
|
21
|
+
* @returns Array of chains (one per seed that yielded results)
|
|
22
|
+
*/
|
|
23
|
+
export async function walkChains(seedIds, options) {
|
|
24
|
+
const { direction, tokenBudget, queryEmbedding, maxDepth = 50 } = options;
|
|
25
|
+
const visited = new Set();
|
|
26
|
+
let globalTokens = 0;
|
|
27
|
+
const chains = [];
|
|
28
|
+
for (const seedId of seedIds) {
|
|
29
|
+
if (visited.has(seedId) || globalTokens >= tokenBudget)
|
|
30
|
+
break;
|
|
31
|
+
const chain = await walkSingleChain(seedId, direction, queryEmbedding, tokenBudget - globalTokens, maxDepth, visited);
|
|
32
|
+
if (chain && chain.chunkIds.length > 0) {
|
|
33
|
+
chains.push(chain);
|
|
34
|
+
globalTokens += chain.tokenCount;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return chains;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Walk a single chain from a seed, following edges in one direction.
|
|
41
|
+
*/
|
|
42
|
+
async function walkSingleChain(seedId, direction, queryEmbedding, remainingBudget, maxDepth, visited) {
|
|
43
|
+
const chunkIds = [];
|
|
44
|
+
const chunks = [];
|
|
45
|
+
const nodeScores = [];
|
|
46
|
+
let score = 0;
|
|
47
|
+
let tokenCount = 0;
|
|
48
|
+
let currentId = seedId;
|
|
49
|
+
let depth = 0;
|
|
50
|
+
while (currentId && depth < maxDepth && tokenCount < remainingBudget) {
|
|
51
|
+
if (visited.has(currentId))
|
|
52
|
+
break;
|
|
53
|
+
visited.add(currentId);
|
|
54
|
+
const chunk = getChunkById(currentId);
|
|
55
|
+
if (!chunk)
|
|
56
|
+
break;
|
|
57
|
+
// Score this node
|
|
58
|
+
const nodeScore = await scoreNode(currentId, queryEmbedding);
|
|
59
|
+
const chunkTokens = chunk.approxTokens || 100;
|
|
60
|
+
if (tokenCount + chunkTokens > remainingBudget && chunkIds.length > 0)
|
|
61
|
+
break;
|
|
62
|
+
chunkIds.push(currentId);
|
|
63
|
+
chunks.push(chunk);
|
|
64
|
+
nodeScores.push(nodeScore);
|
|
65
|
+
score += nodeScore;
|
|
66
|
+
tokenCount += chunkTokens;
|
|
67
|
+
depth++;
|
|
68
|
+
// Follow edges in the given direction
|
|
69
|
+
const edges = direction === 'forward' ? getForwardEdges(currentId) : getBackwardEdges(currentId);
|
|
70
|
+
// Pick the first unvisited neighbor
|
|
71
|
+
currentId = null;
|
|
72
|
+
for (const edge of edges) {
|
|
73
|
+
const nextId = direction === 'forward' ? edge.targetChunkId : edge.sourceChunkId;
|
|
74
|
+
if (!visited.has(nextId)) {
|
|
75
|
+
currentId = nextId;
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
if (chunkIds.length === 0)
|
|
81
|
+
return null;
|
|
82
|
+
return {
|
|
83
|
+
chunkIds,
|
|
84
|
+
chunks,
|
|
85
|
+
nodeScores,
|
|
86
|
+
score,
|
|
87
|
+
tokenCount,
|
|
88
|
+
medianScore: median(nodeScores),
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Score a node by cosine similarity to the query embedding.
|
|
93
|
+
* Returns 1 - angularDistance (so 1 = perfect match, 0 = orthogonal).
|
|
94
|
+
*/
|
|
95
|
+
async function scoreNode(chunkId, queryEmbedding) {
|
|
96
|
+
const chunkEmbedding = await vectorStore.get(chunkId);
|
|
97
|
+
if (!chunkEmbedding)
|
|
98
|
+
return 0;
|
|
99
|
+
return 1 - angularDistance(queryEmbedding, chunkEmbedding);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Select the best chain from a set of candidates.
|
|
103
|
+
* Returns the chain with the highest median per-node score among chains with >= 2 chunks.
|
|
104
|
+
* Returns null if no qualifying chain exists.
|
|
105
|
+
*/
|
|
106
|
+
export function selectBestChain(chains) {
|
|
107
|
+
const qualifying = chains.filter((c) => c.chunkIds.length >= 2);
|
|
108
|
+
if (qualifying.length === 0)
|
|
109
|
+
return null;
|
|
110
|
+
qualifying.sort((a, b) => b.medianScore - a.medianScore);
|
|
111
|
+
return qualifying[0];
|
|
112
|
+
}
|
|
113
|
+
/** Compute median of a sorted-copy of values. Returns 0 for empty arrays. */
|
|
114
|
+
function median(values) {
|
|
115
|
+
if (values.length === 0)
|
|
116
|
+
return 0;
|
|
117
|
+
const sorted = [...values].sort((a, b) => a - b);
|
|
118
|
+
const mid = Math.floor(sorted.length / 2);
|
|
119
|
+
return sorted.length % 2 === 0 ? (sorted[mid - 1] + sorted[mid]) / 2 : sorted[mid];
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=chain-walker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chain-walker.js","sourceRoot":"","sources":["../../src/retrieval/chain-walker.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cluster-expander.d.ts","sourceRoot":"","sources":["../../src/retrieval/cluster-expander.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"cluster-expander.d.ts","sourceRoot":"","sources":["../../src/retrieval/cluster-expander.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,MAAM,WAAW,sBAAsB;IACrC,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,WAAW,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,yBAAyB,EAAE,sBAIvC,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,UAAU,EAAE,EAClB,MAAM,GAAE,sBAAkD,EAC1D,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAChC,UAAU,EAAE,CAoEd"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Expands search results by finding sibling chunks within the same HDBSCAN clusters.
|
|
5
5
|
* This surfaces topically related chunks that neither vector nor keyword search found.
|
|
6
6
|
*/
|
|
7
|
-
import { getChunkClusterAssignments, getClusterChunkIds
|
|
7
|
+
import { getChunkClusterAssignments, getClusterChunkIds } from '../storage/cluster-store.js';
|
|
8
8
|
import { vectorStore } from '../storage/vector-store.js';
|
|
9
9
|
export const DEFAULT_CLUSTER_EXPANSION = {
|
|
10
10
|
maxClusters: 3,
|
|
@@ -26,7 +26,7 @@ export const DEFAULT_CLUSTER_EXPANSION = {
|
|
|
26
26
|
export function expandViaClusters(hits, config = DEFAULT_CLUSTER_EXPANSION, projectFilter) {
|
|
27
27
|
if (hits.length === 0)
|
|
28
28
|
return [];
|
|
29
|
-
const existingIds = new Set(hits.map(h => h.chunkId));
|
|
29
|
+
const existingIds = new Set(hits.map((h) => h.chunkId));
|
|
30
30
|
const siblingItems = [];
|
|
31
31
|
// Build project filter set
|
|
32
32
|
const projectSet = projectFilter
|
|
@@ -65,7 +65,7 @@ export function expandViaClusters(hits, config = DEFAULT_CLUSTER_EXPANSION, proj
|
|
|
65
65
|
}
|
|
66
66
|
// Look up this sibling's distance in the cluster for scoring
|
|
67
67
|
const siblingAssignments = getChunkClusterAssignments(siblingId);
|
|
68
|
-
const siblingAssignment = siblingAssignments.find(a => a.clusterId === assignment.clusterId);
|
|
68
|
+
const siblingAssignment = siblingAssignments.find((a) => a.clusterId === assignment.clusterId);
|
|
69
69
|
const distance = siblingAssignment?.distance ?? 0.5;
|
|
70
70
|
// Score: best hit score * boost * (1 - distance)
|
|
71
71
|
const score = hit.score * config.boostFactor * (1 - distance);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cluster-expander.js","sourceRoot":"","sources":["../../src/retrieval/cluster-expander.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"cluster-expander.js","sourceRoot":"","sources":["../../src/retrieval/cluster-expander.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,0BAA0B,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAC7F,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAYzD,MAAM,CAAC,MAAM,yBAAyB,GAA2B;IAC/D,WAAW,EAAE,CAAC;IACd,WAAW,EAAE,CAAC;IACd,WAAW,EAAE,GAAG;CACjB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAAkB,EAClB,SAAiC,yBAAyB,EAC1D,aAAiC;IAEjC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEjC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACxD,MAAM,YAAY,GAAiB,EAAE,CAAC;IAEtC,2BAA2B;IAC3B,MAAM,UAAU,GAAG,aAAa;QAC9B,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;QACzE,CAAC,CAAC,IAAI,CAAC;IAET,4DAA4D;IAC5D,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC3C,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,YAAY,IAAI,MAAM,CAAC,WAAW;YAAE,MAAM;QAE9C,8DAA8D;QAC9D,MAAM,WAAW,GAAG,0BAA0B,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5D,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAEvC,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACrC,IAAI,YAAY,IAAI,MAAM,CAAC,WAAW;gBAAE,MAAM;YAC9C,IAAI,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC;gBAAE,SAAS;YAEzD,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAC3C,YAAY,EAAE,CAAC;YAEf,oCAAoC;YACpC,MAAM,eAAe,GAAG,kBAAkB,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YACjE,IAAI,aAAa,GAAG,CAAC,CAAC;YAEtB,KAAK,MAAM,SAAS,IAAI,eAAe,EAAE,CAAC;gBACxC,IAAI,aAAa,IAAI,MAAM,CAAC,WAAW;oBAAE,MAAM;gBAC/C,IAAI,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC;oBAAE,SAAS;gBAEzC,8BAA8B;gBAC9B,IAAI,UAAU,EAAE,CAAC;oBACf,MAAM,OAAO,GAAG,WAAW,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;oBACvD,IAAI,CAAC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC;wBAAE,SAAS;gBACrD,CAAC;gBAED,6DAA6D;gBAC7D,MAAM,kBAAkB,GAAG,0BAA0B,CAAC,SAAS,CAAC,CAAC;gBACjE,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,IAAI,CAC/C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,UAAU,CAAC,SAAS,CAC5C,CAAC;gBACF,MAAM,QAAQ,GAAG,iBAAiB,EAAE,QAAQ,IAAI,GAAG,CAAC;gBAEpD,iDAAiD;gBACjD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;gBAE9D,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;oBACd,YAAY,CAAC,IAAI,CAAC;wBAChB,OAAO,EAAE,SAAS;wBAClB,KAAK;wBACL,MAAM,EAAE,SAAS;qBAClB,CAAC,CAAC;oBACH,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;oBAC3B,aAAa,EAAE,CAAC;gBAClB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,sCAAsC;IACtC,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,YAAY,CAAC,CAAC;AACpC,CAAC"}
|
|
@@ -1,44 +1,29 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Context assembly for memory retrieval.
|
|
3
|
-
*
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
*
|
|
7
|
-
|
|
8
|
-
export type RetrievalMode = 'recall' | 'explain' | 'predict';
|
|
9
|
-
/**
|
|
10
|
-
* Range hint for retrieval - lets Claude choose appropriate decay model.
|
|
11
|
-
* - 'short': Recent context (15min hold) - best for immediate follow-ups
|
|
12
|
-
* - 'long': Distant context (60min hold) - best for cross-session/historical
|
|
13
|
-
* - 'auto': System decides based on query characteristics
|
|
3
|
+
*
|
|
4
|
+
* Delegates to specialized modules:
|
|
5
|
+
* - searchContext() for pure semantic search (no graph)
|
|
6
|
+
* - recallContext() for episodic recall (backward chain walking)
|
|
7
|
+
* - predictContext() for episodic prediction (forward chain walking)
|
|
14
8
|
*/
|
|
15
|
-
export type
|
|
9
|
+
export type { SearchRequest, SearchResponse } from './search-assembler.js';
|
|
10
|
+
export type { EpisodicRequest, EpisodicResponse } from './chain-assembler.js';
|
|
16
11
|
/**
|
|
17
|
-
* Request for context retrieval.
|
|
12
|
+
* Request for context retrieval (backward compat).
|
|
18
13
|
*/
|
|
19
14
|
export interface RetrievalRequest {
|
|
20
15
|
/** Query text to find relevant context for */
|
|
21
16
|
query: string;
|
|
22
17
|
/** Current session ID (optional, for recency boost) */
|
|
23
18
|
currentSessionId?: string;
|
|
24
|
-
/** Project slug for clock lookup (optional, enables vector clock decay) */
|
|
25
|
-
projectSlug?: string;
|
|
26
19
|
/** Filter results to specific project(s). Omit to search all projects. */
|
|
27
20
|
projectFilter?: string | string[];
|
|
28
|
-
/** Query time for decay calculation (default: now) */
|
|
29
|
-
queryTime?: number;
|
|
30
21
|
/** Maximum tokens in response */
|
|
31
22
|
maxTokens?: number;
|
|
32
23
|
/** Retrieval mode */
|
|
33
|
-
mode:
|
|
34
|
-
/** Range hint: 'short' for recent, 'long' for historical, 'auto' to decide */
|
|
35
|
-
range?: RetrievalRange;
|
|
24
|
+
mode: 'recall' | 'predict' | 'search';
|
|
36
25
|
/** Number of vector search results to start from */
|
|
37
26
|
vectorSearchLimit?: number;
|
|
38
|
-
/** Skip graph traversal (for benchmarking vector-only retrieval) */
|
|
39
|
-
skipGraph?: boolean;
|
|
40
|
-
/** Skip cluster expansion (for benchmarking vector-only retrieval) */
|
|
41
|
-
skipClusters?: boolean;
|
|
42
27
|
}
|
|
43
28
|
/**
|
|
44
29
|
* Retrieval response with assembled context.
|
|
@@ -54,32 +39,24 @@ export interface RetrievalResponse {
|
|
|
54
39
|
sessionSlug: string;
|
|
55
40
|
weight: number;
|
|
56
41
|
preview: string;
|
|
57
|
-
source?: 'vector' | 'keyword' | 'cluster'
|
|
42
|
+
source?: 'vector' | 'keyword' | 'cluster';
|
|
58
43
|
}>;
|
|
59
44
|
/** Total chunks considered */
|
|
60
45
|
totalConsidered: number;
|
|
61
46
|
/** Time taken in milliseconds */
|
|
62
47
|
durationMs: number;
|
|
63
|
-
/** Number of chunks boosted by graph agreement (found by both vector and graph) */
|
|
64
|
-
graphBoosted: number;
|
|
65
48
|
}
|
|
66
49
|
/**
|
|
67
50
|
* Assemble context from memory based on a query.
|
|
68
|
-
*
|
|
69
|
-
* Pipeline: embed → [vector search, keyword search] → RRF fusion → cluster expansion
|
|
70
|
-
* → graph traverse → combine → dedupe → recency → budget
|
|
51
|
+
* Delegates to searchContext (pure search, no graph).
|
|
71
52
|
*/
|
|
72
53
|
export declare function assembleContext(request: RetrievalRequest): Promise<RetrievalResponse>;
|
|
73
54
|
/**
|
|
74
|
-
* Recall:
|
|
55
|
+
* Recall: episodic retrieval walking backward through causal chains.
|
|
75
56
|
*/
|
|
76
57
|
export declare function recall(query: string, options?: Partial<RetrievalRequest>): Promise<RetrievalResponse>;
|
|
77
58
|
/**
|
|
78
|
-
*
|
|
79
|
-
*/
|
|
80
|
-
export declare function explain(topic: string, options?: Partial<RetrievalRequest>): Promise<RetrievalResponse>;
|
|
81
|
-
/**
|
|
82
|
-
* Predict: retrieve context that might be relevant next.
|
|
59
|
+
* Predict: episodic retrieval walking forward through causal chains.
|
|
83
60
|
*/
|
|
84
61
|
export declare function predict(context: string, options?: Partial<RetrievalRequest>): Promise<RetrievalResponse>;
|
|
85
62
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-assembler.d.ts","sourceRoot":"","sources":["../../src/retrieval/context-assembler.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"context-assembler.d.ts","sourceRoot":"","sources":["../../src/retrieval/context-assembler.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC3E,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE9E;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,0EAA0E;IAC1E,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAClC,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qBAAqB;IACrB,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;IACtC,oDAAoD;IACpD,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,kCAAkC;IAClC,MAAM,EAAE,KAAK,CAAC;QACZ,EAAE,EAAE,MAAM,CAAC;QACX,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;KAC3C,CAAC,CAAC;IACH,8BAA8B;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,iCAAiC;IACjC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAU3F;AAED;;GAEG;AACH,wBAAsB,MAAM,CAC1B,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,OAAO,CAAC,gBAAgB,CAAM,GACtC,OAAO,CAAC,iBAAiB,CAAC,CAU5B;AAED;;GAEG;AACH,wBAAsB,OAAO,CAC3B,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,OAAO,CAAC,gBAAgB,CAAM,GACtC,OAAO,CAAC,iBAAiB,CAAC,CAU5B;AAED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAEtD"}
|