causantic 0.2.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/LICENSE +19 -0
- package/README.md +332 -0
- package/config.schema.json +254 -0
- package/dist/cli/commands/archive.d.ts +4 -0
- package/dist/cli/commands/archive.d.ts.map +1 -0
- package/dist/cli/commands/archive.js +76 -0
- package/dist/cli/commands/archive.js.map +1 -0
- package/dist/cli/commands/benchmark-collection.d.ts +8 -0
- package/dist/cli/commands/benchmark-collection.d.ts.map +1 -0
- package/dist/cli/commands/benchmark-collection.js +146 -0
- package/dist/cli/commands/benchmark-collection.js.map +1 -0
- package/dist/cli/commands/config.d.ts +3 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +69 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/dashboard.d.ts +3 -0
- package/dist/cli/commands/dashboard.d.ts.map +1 -0
- package/dist/cli/commands/dashboard.js +12 -0
- package/dist/cli/commands/dashboard.js.map +1 -0
- package/dist/cli/commands/encryption.d.ts +3 -0
- package/dist/cli/commands/encryption.d.ts.map +1 -0
- package/dist/cli/commands/encryption.js +207 -0
- package/dist/cli/commands/encryption.js.map +1 -0
- package/dist/cli/commands/hook.d.ts +3 -0
- package/dist/cli/commands/hook.d.ts.map +1 -0
- package/dist/cli/commands/hook.js +35 -0
- package/dist/cli/commands/hook.js.map +1 -0
- package/dist/cli/commands/ingest.d.ts +4 -0
- package/dist/cli/commands/ingest.d.ts.map +1 -0
- package/dist/cli/commands/ingest.js +31 -0
- package/dist/cli/commands/ingest.js.map +1 -0
- package/dist/cli/commands/init.d.ts +3 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +680 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/maintenance.d.ts +3 -0
- package/dist/cli/commands/maintenance.d.ts.map +1 -0
- package/dist/cli/commands/maintenance.js +67 -0
- package/dist/cli/commands/maintenance.js.map +1 -0
- package/dist/cli/commands/search.d.ts +3 -0
- package/dist/cli/commands/search.d.ts.map +1 -0
- package/dist/cli/commands/search.js +16 -0
- package/dist/cli/commands/search.js.map +1 -0
- package/dist/cli/commands/serve.d.ts +3 -0
- package/dist/cli/commands/serve.d.ts.map +1 -0
- package/dist/cli/commands/serve.js +19 -0
- package/dist/cli/commands/serve.js.map +1 -0
- package/dist/cli/commands/stats.d.ts +4 -0
- package/dist/cli/commands/stats.d.ts.map +1 -0
- package/dist/cli/commands/stats.js +49 -0
- package/dist/cli/commands/stats.js.map +1 -0
- package/dist/cli/commands/uninstall.d.ts +3 -0
- package/dist/cli/commands/uninstall.d.ts.map +1 -0
- package/dist/cli/commands/uninstall.js +10 -0
- package/dist/cli/commands/uninstall.js.map +1 -0
- package/dist/cli/index.d.ts +8 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +86 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/skill-templates.d.ts +19 -0
- package/dist/cli/skill-templates.d.ts.map +1 -0
- package/dist/cli/skill-templates.js +1128 -0
- package/dist/cli/skill-templates.js.map +1 -0
- package/dist/cli/types.d.ts +10 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +5 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/cli/uninstall.d.ts +66 -0
- package/dist/cli/uninstall.d.ts.map +1 -0
- package/dist/cli/uninstall.js +490 -0
- package/dist/cli/uninstall.js.map +1 -0
- package/dist/cli/utils.d.ts +26 -0
- package/dist/cli/utils.d.ts.map +1 -0
- package/dist/cli/utils.js +105 -0
- package/dist/cli/utils.js.map +1 -0
- package/dist/clusters/cluster-manager.d.ts +96 -0
- package/dist/clusters/cluster-manager.d.ts.map +1 -0
- package/dist/clusters/cluster-manager.js +321 -0
- package/dist/clusters/cluster-manager.js.map +1 -0
- package/dist/clusters/cluster-refresh.d.ts +56 -0
- package/dist/clusters/cluster-refresh.d.ts.map +1 -0
- package/dist/clusters/cluster-refresh.js +187 -0
- package/dist/clusters/cluster-refresh.js.map +1 -0
- package/dist/clusters/hdbscan/cluster-extraction.d.ts +26 -0
- package/dist/clusters/hdbscan/cluster-extraction.d.ts.map +1 -0
- package/dist/clusters/hdbscan/cluster-extraction.js +232 -0
- package/dist/clusters/hdbscan/cluster-extraction.js.map +1 -0
- package/dist/clusters/hdbscan/core-distance-worker.d.ts +6 -0
- package/dist/clusters/hdbscan/core-distance-worker.d.ts.map +1 -0
- package/dist/clusters/hdbscan/core-distance-worker.js +54 -0
- package/dist/clusters/hdbscan/core-distance-worker.js.map +1 -0
- package/dist/clusters/hdbscan/core-distance.d.ts +26 -0
- package/dist/clusters/hdbscan/core-distance.d.ts.map +1 -0
- package/dist/clusters/hdbscan/core-distance.js +94 -0
- package/dist/clusters/hdbscan/core-distance.js.map +1 -0
- package/dist/clusters/hdbscan/distance-cache.d.ts +46 -0
- package/dist/clusters/hdbscan/distance-cache.d.ts.map +1 -0
- package/dist/clusters/hdbscan/distance-cache.js +84 -0
- package/dist/clusters/hdbscan/distance-cache.js.map +1 -0
- package/dist/clusters/hdbscan/hierarchy.d.ts +34 -0
- package/dist/clusters/hdbscan/hierarchy.d.ts.map +1 -0
- package/dist/clusters/hdbscan/hierarchy.js +442 -0
- package/dist/clusters/hdbscan/hierarchy.js.map +1 -0
- package/dist/clusters/hdbscan/incremental.d.ts +30 -0
- package/dist/clusters/hdbscan/incremental.d.ts.map +1 -0
- package/dist/clusters/hdbscan/incremental.js +130 -0
- package/dist/clusters/hdbscan/incremental.js.map +1 -0
- package/dist/clusters/hdbscan/kd-tree.d.ts +51 -0
- package/dist/clusters/hdbscan/kd-tree.d.ts.map +1 -0
- package/dist/clusters/hdbscan/kd-tree.js +130 -0
- package/dist/clusters/hdbscan/kd-tree.js.map +1 -0
- package/dist/clusters/hdbscan/min-heap.d.ts +62 -0
- package/dist/clusters/hdbscan/min-heap.d.ts.map +1 -0
- package/dist/clusters/hdbscan/min-heap.js +139 -0
- package/dist/clusters/hdbscan/min-heap.js.map +1 -0
- package/dist/clusters/hdbscan/mst.d.ts +20 -0
- package/dist/clusters/hdbscan/mst.d.ts.map +1 -0
- package/dist/clusters/hdbscan/mst.js +77 -0
- package/dist/clusters/hdbscan/mst.js.map +1 -0
- package/dist/clusters/hdbscan/probabilities.d.ts +37 -0
- package/dist/clusters/hdbscan/probabilities.d.ts.map +1 -0
- package/dist/clusters/hdbscan/probabilities.js +149 -0
- package/dist/clusters/hdbscan/probabilities.js.map +1 -0
- package/dist/clusters/hdbscan/types.d.ts +123 -0
- package/dist/clusters/hdbscan/types.d.ts.map +1 -0
- package/dist/clusters/hdbscan/types.js +5 -0
- package/dist/clusters/hdbscan/types.js.map +1 -0
- package/dist/clusters/hdbscan/union-find.d.ts +51 -0
- package/dist/clusters/hdbscan/union-find.d.ts.map +1 -0
- package/dist/clusters/hdbscan/union-find.js +115 -0
- package/dist/clusters/hdbscan/union-find.js.map +1 -0
- package/dist/clusters/hdbscan.d.ts +71 -0
- package/dist/clusters/hdbscan.d.ts.map +1 -0
- package/dist/clusters/hdbscan.js +283 -0
- package/dist/clusters/hdbscan.js.map +1 -0
- package/dist/clusters/index.d.ts +8 -0
- package/dist/clusters/index.d.ts.map +1 -0
- package/dist/clusters/index.js +8 -0
- package/dist/clusters/index.js.map +1 -0
- package/dist/config/index.d.ts +6 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +6 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +105 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +339 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/memory-config.d.ts +109 -0
- package/dist/config/memory-config.d.ts.map +1 -0
- package/dist/config/memory-config.js +182 -0
- package/dist/config/memory-config.js.map +1 -0
- package/dist/core/benchmark-types.d.ts +62 -0
- package/dist/core/benchmark-types.d.ts.map +1 -0
- package/dist/core/benchmark-types.js +11 -0
- package/dist/core/benchmark-types.js.map +1 -0
- package/dist/core/decay-types.d.ts +111 -0
- package/dist/core/decay-types.d.ts.map +1 -0
- package/dist/core/decay-types.js +30 -0
- package/dist/core/decay-types.js.map +1 -0
- package/dist/core/index.d.ts +11 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +9 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/lexical-features.d.ts +34 -0
- package/dist/core/lexical-features.d.ts.map +1 -0
- package/dist/core/lexical-features.js +155 -0
- package/dist/core/lexical-features.js.map +1 -0
- package/dist/dashboard/client/assets/index-CMUKy4f9.css +1 -0
- package/dist/dashboard/client/assets/index-esv8TpCN.js +168 -0
- package/dist/dashboard/client/index.html +14 -0
- package/dist/dashboard/middleware/async-handler.d.ts +11 -0
- package/dist/dashboard/middleware/async-handler.d.ts.map +1 -0
- package/dist/dashboard/middleware/async-handler.js +12 -0
- package/dist/dashboard/middleware/async-handler.js.map +1 -0
- package/dist/dashboard/middleware/error-handler.d.ts +9 -0
- package/dist/dashboard/middleware/error-handler.d.ts.map +1 -0
- package/dist/dashboard/middleware/error-handler.js +14 -0
- package/dist/dashboard/middleware/error-handler.js.map +1 -0
- package/dist/dashboard/routes/benchmark-collection.d.ts +11 -0
- package/dist/dashboard/routes/benchmark-collection.d.ts.map +1 -0
- package/dist/dashboard/routes/benchmark-collection.js +49 -0
- package/dist/dashboard/routes/benchmark-collection.js.map +1 -0
- package/dist/dashboard/routes/chunks.d.ts +3 -0
- package/dist/dashboard/routes/chunks.d.ts.map +1 -0
- package/dist/dashboard/routes/chunks.js +25 -0
- package/dist/dashboard/routes/chunks.js.map +1 -0
- package/dist/dashboard/routes/clusters.d.ts +3 -0
- package/dist/dashboard/routes/clusters.d.ts.map +1 -0
- package/dist/dashboard/routes/clusters.js +28 -0
- package/dist/dashboard/routes/clusters.js.map +1 -0
- package/dist/dashboard/routes/edges.d.ts +3 -0
- package/dist/dashboard/routes/edges.d.ts.map +1 -0
- package/dist/dashboard/routes/edges.js +32 -0
- package/dist/dashboard/routes/edges.js.map +1 -0
- package/dist/dashboard/routes/graph.d.ts +3 -0
- package/dist/dashboard/routes/graph.d.ts.map +1 -0
- package/dist/dashboard/routes/graph.js +158 -0
- package/dist/dashboard/routes/graph.js.map +1 -0
- package/dist/dashboard/routes/projects.d.ts +3 -0
- package/dist/dashboard/routes/projects.d.ts.map +1 -0
- package/dist/dashboard/routes/projects.js +9 -0
- package/dist/dashboard/routes/projects.js.map +1 -0
- package/dist/dashboard/routes/search.d.ts +3 -0
- package/dist/dashboard/routes/search.d.ts.map +1 -0
- package/dist/dashboard/routes/search.js +105 -0
- package/dist/dashboard/routes/search.js.map +1 -0
- package/dist/dashboard/routes/sessions.d.ts +3 -0
- package/dist/dashboard/routes/sessions.d.ts.map +1 -0
- package/dist/dashboard/routes/sessions.js +16 -0
- package/dist/dashboard/routes/sessions.js.map +1 -0
- package/dist/dashboard/routes/stats.d.ts +3 -0
- package/dist/dashboard/routes/stats.d.ts.map +1 -0
- package/dist/dashboard/routes/stats.js +38 -0
- package/dist/dashboard/routes/stats.js.map +1 -0
- package/dist/dashboard/server.d.ts +3 -0
- package/dist/dashboard/server.d.ts.map +1 -0
- package/dist/dashboard/server.js +85 -0
- package/dist/dashboard/server.js.map +1 -0
- package/dist/eval/annotation-schema.d.ts +41 -0
- package/dist/eval/annotation-schema.d.ts.map +1 -0
- package/dist/eval/annotation-schema.js +171 -0
- package/dist/eval/annotation-schema.js.map +1 -0
- package/dist/eval/benchmark-runner.d.ts +15 -0
- package/dist/eval/benchmark-runner.d.ts.map +1 -0
- package/dist/eval/benchmark-runner.js +93 -0
- package/dist/eval/benchmark-runner.js.map +1 -0
- package/dist/eval/cluster-evaluator.d.ts +39 -0
- package/dist/eval/cluster-evaluator.d.ts.map +1 -0
- package/dist/eval/cluster-evaluator.js +51 -0
- package/dist/eval/cluster-evaluator.js.map +1 -0
- package/dist/eval/code-nl-alignment.d.ts +25 -0
- package/dist/eval/code-nl-alignment.d.ts.map +1 -0
- package/dist/eval/code-nl-alignment.js +49 -0
- package/dist/eval/code-nl-alignment.js.map +1 -0
- package/dist/eval/collection-benchmark/graph-value.d.ts +16 -0
- package/dist/eval/collection-benchmark/graph-value.d.ts.map +1 -0
- package/dist/eval/collection-benchmark/graph-value.js +162 -0
- package/dist/eval/collection-benchmark/graph-value.js.map +1 -0
- package/dist/eval/collection-benchmark/health.d.ts +12 -0
- package/dist/eval/collection-benchmark/health.d.ts.map +1 -0
- package/dist/eval/collection-benchmark/health.js +246 -0
- package/dist/eval/collection-benchmark/health.js.map +1 -0
- package/dist/eval/collection-benchmark/history.d.ts +27 -0
- package/dist/eval/collection-benchmark/history.d.ts.map +1 -0
- package/dist/eval/collection-benchmark/history.js +134 -0
- package/dist/eval/collection-benchmark/history.js.map +1 -0
- package/dist/eval/collection-benchmark/latency.d.ts +16 -0
- package/dist/eval/collection-benchmark/latency.d.ts.map +1 -0
- package/dist/eval/collection-benchmark/latency.js +115 -0
- package/dist/eval/collection-benchmark/latency.js.map +1 -0
- package/dist/eval/collection-benchmark/reporter.d.ts +18 -0
- package/dist/eval/collection-benchmark/reporter.d.ts.map +1 -0
- package/dist/eval/collection-benchmark/reporter.js +244 -0
- package/dist/eval/collection-benchmark/reporter.js.map +1 -0
- package/dist/eval/collection-benchmark/retrieval.d.ts +15 -0
- package/dist/eval/collection-benchmark/retrieval.d.ts.map +1 -0
- package/dist/eval/collection-benchmark/retrieval.js +203 -0
- package/dist/eval/collection-benchmark/retrieval.js.map +1 -0
- package/dist/eval/collection-benchmark/runner.d.ts +20 -0
- package/dist/eval/collection-benchmark/runner.d.ts.map +1 -0
- package/dist/eval/collection-benchmark/runner.js +189 -0
- package/dist/eval/collection-benchmark/runner.js.map +1 -0
- package/dist/eval/collection-benchmark/sampler.d.ts +18 -0
- package/dist/eval/collection-benchmark/sampler.d.ts.map +1 -0
- package/dist/eval/collection-benchmark/sampler.js +186 -0
- package/dist/eval/collection-benchmark/sampler.js.map +1 -0
- package/dist/eval/collection-benchmark/tuning.d.ts +12 -0
- package/dist/eval/collection-benchmark/tuning.d.ts.map +1 -0
- package/dist/eval/collection-benchmark/tuning.js +222 -0
- package/dist/eval/collection-benchmark/tuning.js.map +1 -0
- package/dist/eval/collection-benchmark/types.d.ts +183 -0
- package/dist/eval/collection-benchmark/types.d.ts.map +1 -0
- package/dist/eval/collection-benchmark/types.js +7 -0
- package/dist/eval/collection-benchmark/types.js.map +1 -0
- package/dist/eval/context-window-test.d.ts +34 -0
- package/dist/eval/context-window-test.d.ts.map +1 -0
- package/dist/eval/context-window-test.js +59 -0
- package/dist/eval/context-window-test.js.map +1 -0
- package/dist/eval/corpus-builder.d.ts +33 -0
- package/dist/eval/corpus-builder.d.ts.map +1 -0
- package/dist/eval/corpus-builder.js +88 -0
- package/dist/eval/corpus-builder.js.map +1 -0
- package/dist/eval/experiments/boilerplate-filter.d.ts +26 -0
- package/dist/eval/experiments/boilerplate-filter.d.ts.map +1 -0
- package/dist/eval/experiments/boilerplate-filter.js +95 -0
- package/dist/eval/experiments/boilerplate-filter.js.map +1 -0
- package/dist/eval/experiments/cluster-threshold/index.d.ts +6 -0
- package/dist/eval/experiments/cluster-threshold/index.d.ts.map +1 -0
- package/dist/eval/experiments/cluster-threshold/index.js +5 -0
- package/dist/eval/experiments/cluster-threshold/index.js.map +1 -0
- package/dist/eval/experiments/cluster-threshold/run-threshold-sweep.d.ts +58 -0
- package/dist/eval/experiments/cluster-threshold/run-threshold-sweep.d.ts.map +1 -0
- package/dist/eval/experiments/cluster-threshold/run-threshold-sweep.js +246 -0
- package/dist/eval/experiments/cluster-threshold/run-threshold-sweep.js.map +1 -0
- package/dist/eval/experiments/code-focused-mode.d.ts +20 -0
- package/dist/eval/experiments/code-focused-mode.d.ts.map +1 -0
- package/dist/eval/experiments/code-focused-mode.js +66 -0
- package/dist/eval/experiments/code-focused-mode.js.map +1 -0
- package/dist/eval/experiments/edge-decay/decay-curves.d.ts +59 -0
- package/dist/eval/experiments/edge-decay/decay-curves.d.ts.map +1 -0
- package/dist/eval/experiments/edge-decay/decay-curves.js +124 -0
- package/dist/eval/experiments/edge-decay/decay-curves.js.map +1 -0
- package/dist/eval/experiments/edge-decay/index.d.ts +13 -0
- package/dist/eval/experiments/edge-decay/index.d.ts.map +1 -0
- package/dist/eval/experiments/edge-decay/index.js +16 -0
- package/dist/eval/experiments/edge-decay/index.js.map +1 -0
- package/dist/eval/experiments/edge-decay/presets.d.ts +52 -0
- package/dist/eval/experiments/edge-decay/presets.d.ts.map +1 -0
- package/dist/eval/experiments/edge-decay/presets.js +234 -0
- package/dist/eval/experiments/edge-decay/presets.js.map +1 -0
- package/dist/eval/experiments/edge-decay/reference-extractor.d.ts +34 -0
- package/dist/eval/experiments/edge-decay/reference-extractor.d.ts.map +1 -0
- package/dist/eval/experiments/edge-decay/reference-extractor.js +353 -0
- package/dist/eval/experiments/edge-decay/reference-extractor.js.map +1 -0
- package/dist/eval/experiments/edge-decay/reference-types.d.ts +131 -0
- package/dist/eval/experiments/edge-decay/reference-types.d.ts.map +1 -0
- package/dist/eval/experiments/edge-decay/reference-types.js +5 -0
- package/dist/eval/experiments/edge-decay/reference-types.js.map +1 -0
- package/dist/eval/experiments/edge-decay/retrieval-ranking.d.ts +64 -0
- package/dist/eval/experiments/edge-decay/retrieval-ranking.d.ts.map +1 -0
- package/dist/eval/experiments/edge-decay/retrieval-ranking.js +565 -0
- package/dist/eval/experiments/edge-decay/retrieval-ranking.js.map +1 -0
- package/dist/eval/experiments/edge-decay/run-experiments.d.ts +25 -0
- package/dist/eval/experiments/edge-decay/run-experiments.d.ts.map +1 -0
- package/dist/eval/experiments/edge-decay/run-experiments.js +229 -0
- package/dist/eval/experiments/edge-decay/run-experiments.js.map +1 -0
- package/dist/eval/experiments/edge-decay/simulate.d.ts +42 -0
- package/dist/eval/experiments/edge-decay/simulate.d.ts.map +1 -0
- package/dist/eval/experiments/edge-decay/simulate.js +232 -0
- package/dist/eval/experiments/edge-decay/simulate.js.map +1 -0
- package/dist/eval/experiments/edge-decay/types.d.ts +10 -0
- package/dist/eval/experiments/edge-decay/types.d.ts.map +1 -0
- package/dist/eval/experiments/edge-decay/types.js +9 -0
- package/dist/eval/experiments/edge-decay/types.js.map +1 -0
- package/dist/eval/experiments/hdbscan-sweep.d.ts +19 -0
- package/dist/eval/experiments/hdbscan-sweep.d.ts.map +1 -0
- package/dist/eval/experiments/hdbscan-sweep.js +71 -0
- package/dist/eval/experiments/hdbscan-sweep.js.map +1 -0
- package/dist/eval/experiments/single-model-run.d.ts +54 -0
- package/dist/eval/experiments/single-model-run.d.ts.map +1 -0
- package/dist/eval/experiments/single-model-run.js +120 -0
- package/dist/eval/experiments/single-model-run.js.map +1 -0
- package/dist/eval/experiments/thinking-ablation.d.ts +21 -0
- package/dist/eval/experiments/thinking-ablation.d.ts.map +1 -0
- package/dist/eval/experiments/thinking-ablation.js +68 -0
- package/dist/eval/experiments/thinking-ablation.js.map +1 -0
- package/dist/eval/experiments/topic-continuity/embedding-classifier.d.ts +55 -0
- package/dist/eval/experiments/topic-continuity/embedding-classifier.d.ts.map +1 -0
- package/dist/eval/experiments/topic-continuity/embedding-classifier.js +126 -0
- package/dist/eval/experiments/topic-continuity/embedding-classifier.js.map +1 -0
- package/dist/eval/experiments/topic-continuity/hybrid-classifier.d.ts +68 -0
- package/dist/eval/experiments/topic-continuity/hybrid-classifier.d.ts.map +1 -0
- package/dist/eval/experiments/topic-continuity/hybrid-classifier.js +175 -0
- package/dist/eval/experiments/topic-continuity/hybrid-classifier.js.map +1 -0
- package/dist/eval/experiments/topic-continuity/index.d.ts +13 -0
- package/dist/eval/experiments/topic-continuity/index.d.ts.map +1 -0
- package/dist/eval/experiments/topic-continuity/index.js +17 -0
- package/dist/eval/experiments/topic-continuity/index.js.map +1 -0
- package/dist/eval/experiments/topic-continuity/labeler.d.ts +42 -0
- package/dist/eval/experiments/topic-continuity/labeler.d.ts.map +1 -0
- package/dist/eval/experiments/topic-continuity/labeler.js +253 -0
- package/dist/eval/experiments/topic-continuity/labeler.js.map +1 -0
- package/dist/eval/experiments/topic-continuity/lexical-features.d.ts +26 -0
- package/dist/eval/experiments/topic-continuity/lexical-features.d.ts.map +1 -0
- package/dist/eval/experiments/topic-continuity/lexical-features.js +58 -0
- package/dist/eval/experiments/topic-continuity/lexical-features.js.map +1 -0
- package/dist/eval/experiments/topic-continuity/run-experiment.d.ts +40 -0
- package/dist/eval/experiments/topic-continuity/run-experiment.d.ts.map +1 -0
- package/dist/eval/experiments/topic-continuity/run-experiment.js +379 -0
- package/dist/eval/experiments/topic-continuity/run-experiment.js.map +1 -0
- package/dist/eval/experiments/topic-continuity/types.d.ts +146 -0
- package/dist/eval/experiments/topic-continuity/types.d.ts.map +1 -0
- package/dist/eval/experiments/topic-continuity/types.js +9 -0
- package/dist/eval/experiments/topic-continuity/types.js.map +1 -0
- package/dist/eval/experiments/truncation.d.ts +21 -0
- package/dist/eval/experiments/truncation.d.ts.map +1 -0
- package/dist/eval/experiments/truncation.js +59 -0
- package/dist/eval/experiments/truncation.js.map +1 -0
- package/dist/eval/experiments/types.d.ts +37 -0
- package/dist/eval/experiments/types.d.ts.map +1 -0
- package/dist/eval/experiments/types.js +13 -0
- package/dist/eval/experiments/types.js.map +1 -0
- package/dist/eval/experiments/vector-decay-shapes/curve-shapes-experiment.d.ts +10 -0
- package/dist/eval/experiments/vector-decay-shapes/curve-shapes-experiment.d.ts.map +1 -0
- package/dist/eval/experiments/vector-decay-shapes/curve-shapes-experiment.js +229 -0
- package/dist/eval/experiments/vector-decay-shapes/curve-shapes-experiment.js.map +1 -0
- package/dist/eval/experiments/vector-decay-shapes/graph-range-experiment.d.ts +12 -0
- package/dist/eval/experiments/vector-decay-shapes/graph-range-experiment.d.ts.map +1 -0
- package/dist/eval/experiments/vector-decay-shapes/graph-range-experiment.js +316 -0
- package/dist/eval/experiments/vector-decay-shapes/graph-range-experiment.js.map +1 -0
- package/dist/eval/experiments/vector-decay-shapes/hop-decay.d.ts +19 -0
- package/dist/eval/experiments/vector-decay-shapes/hop-decay.d.ts.map +1 -0
- package/dist/eval/experiments/vector-decay-shapes/hop-decay.js +127 -0
- package/dist/eval/experiments/vector-decay-shapes/hop-decay.js.map +1 -0
- package/dist/eval/experiments/vector-decay-shapes/index.d.ts +11 -0
- package/dist/eval/experiments/vector-decay-shapes/index.d.ts.map +1 -0
- package/dist/eval/experiments/vector-decay-shapes/index.js +11 -0
- package/dist/eval/experiments/vector-decay-shapes/index.js.map +1 -0
- package/dist/eval/experiments/vector-decay-shapes/path-traversal-experiment.d.ts +14 -0
- package/dist/eval/experiments/vector-decay-shapes/path-traversal-experiment.d.ts.map +1 -0
- package/dist/eval/experiments/vector-decay-shapes/path-traversal-experiment.js +274 -0
- package/dist/eval/experiments/vector-decay-shapes/path-traversal-experiment.js.map +1 -0
- package/dist/eval/experiments/vector-decay-shapes/presets.d.ts +36 -0
- package/dist/eval/experiments/vector-decay-shapes/presets.d.ts.map +1 -0
- package/dist/eval/experiments/vector-decay-shapes/presets.js +157 -0
- package/dist/eval/experiments/vector-decay-shapes/presets.js.map +1 -0
- package/dist/eval/experiments/vector-decay-shapes/run-experiment.d.ts +20 -0
- package/dist/eval/experiments/vector-decay-shapes/run-experiment.d.ts.map +1 -0
- package/dist/eval/experiments/vector-decay-shapes/run-experiment.js +504 -0
- package/dist/eval/experiments/vector-decay-shapes/run-experiment.js.map +1 -0
- package/dist/eval/experiments/vector-decay-shapes/types.d.ts +111 -0
- package/dist/eval/experiments/vector-decay-shapes/types.d.ts.map +1 -0
- package/dist/eval/experiments/vector-decay-shapes/types.js +15 -0
- package/dist/eval/experiments/vector-decay-shapes/types.js.map +1 -0
- package/dist/eval/experiments/vector-decay-sweep/index.d.ts +7 -0
- package/dist/eval/experiments/vector-decay-sweep/index.d.ts.map +1 -0
- package/dist/eval/experiments/vector-decay-sweep/index.js +7 -0
- package/dist/eval/experiments/vector-decay-sweep/index.js.map +1 -0
- package/dist/eval/experiments/vector-decay-sweep/run-sweep.d.ts +30 -0
- package/dist/eval/experiments/vector-decay-sweep/run-sweep.d.ts.map +1 -0
- package/dist/eval/experiments/vector-decay-sweep/run-sweep.js +378 -0
- package/dist/eval/experiments/vector-decay-sweep/run-sweep.js.map +1 -0
- package/dist/eval/experiments/vector-decay-sweep/types.d.ts +109 -0
- package/dist/eval/experiments/vector-decay-sweep/types.d.ts.map +1 -0
- package/dist/eval/experiments/vector-decay-sweep/types.js +16 -0
- package/dist/eval/experiments/vector-decay-sweep/types.js.map +1 -0
- package/dist/eval/metrics.d.ts +45 -0
- package/dist/eval/metrics.d.ts.map +1 -0
- package/dist/eval/metrics.js +134 -0
- package/dist/eval/metrics.js.map +1 -0
- package/dist/hooks/claudemd-generator.d.ts +62 -0
- package/dist/hooks/claudemd-generator.d.ts.map +1 -0
- package/dist/hooks/claudemd-generator.js +220 -0
- package/dist/hooks/claudemd-generator.js.map +1 -0
- package/dist/hooks/hook-utils.d.ts +84 -0
- package/dist/hooks/hook-utils.d.ts.map +1 -0
- package/dist/hooks/hook-utils.js +187 -0
- package/dist/hooks/hook-utils.js.map +1 -0
- package/dist/hooks/index.d.ts +12 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +12 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/pre-compact.d.ts +58 -0
- package/dist/hooks/pre-compact.d.ts.map +1 -0
- package/dist/hooks/pre-compact.js +127 -0
- package/dist/hooks/pre-compact.js.map +1 -0
- package/dist/hooks/session-start.d.ts +62 -0
- package/dist/hooks/session-start.d.ts.map +1 -0
- package/dist/hooks/session-start.js +249 -0
- package/dist/hooks/session-start.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/ingest/batch-ingest.d.ts +94 -0
- package/dist/ingest/batch-ingest.d.ts.map +1 -0
- package/dist/ingest/batch-ingest.js +167 -0
- package/dist/ingest/batch-ingest.js.map +1 -0
- package/dist/ingest/brief-debrief-detector.d.ts +74 -0
- package/dist/ingest/brief-debrief-detector.d.ts.map +1 -0
- package/dist/ingest/brief-debrief-detector.js +253 -0
- package/dist/ingest/brief-debrief-detector.js.map +1 -0
- package/dist/ingest/cross-session-linker.d.ts +39 -0
- package/dist/ingest/cross-session-linker.d.ts.map +1 -0
- package/dist/ingest/cross-session-linker.js +103 -0
- package/dist/ingest/cross-session-linker.js.map +1 -0
- package/dist/ingest/edge-creator.d.ts +62 -0
- package/dist/ingest/edge-creator.d.ts.map +1 -0
- package/dist/ingest/edge-creator.js +186 -0
- package/dist/ingest/edge-creator.js.map +1 -0
- package/dist/ingest/edge-detector.d.ts +37 -0
- package/dist/ingest/edge-detector.d.ts.map +1 -0
- package/dist/ingest/edge-detector.js +234 -0
- package/dist/ingest/edge-detector.js.map +1 -0
- package/dist/ingest/index.d.ts +14 -0
- package/dist/ingest/index.d.ts.map +1 -0
- package/dist/ingest/index.js +14 -0
- package/dist/ingest/index.js.map +1 -0
- package/dist/ingest/ingest-session.d.ts +83 -0
- package/dist/ingest/ingest-session.d.ts.map +1 -0
- package/dist/ingest/ingest-session.js +415 -0
- package/dist/ingest/ingest-session.js.map +1 -0
- package/dist/maintenance/index.d.ts +5 -0
- package/dist/maintenance/index.d.ts.map +1 -0
- package/dist/maintenance/index.js +5 -0
- package/dist/maintenance/index.js.map +1 -0
- package/dist/maintenance/scheduler.d.ts +79 -0
- package/dist/maintenance/scheduler.d.ts.map +1 -0
- package/dist/maintenance/scheduler.js +362 -0
- package/dist/maintenance/scheduler.js.map +1 -0
- package/dist/maintenance/tasks/cleanup-vectors.d.ts +10 -0
- package/dist/maintenance/tasks/cleanup-vectors.d.ts.map +1 -0
- package/dist/maintenance/tasks/cleanup-vectors.js +23 -0
- package/dist/maintenance/tasks/cleanup-vectors.js.map +1 -0
- package/dist/maintenance/tasks/index.d.ts +9 -0
- package/dist/maintenance/tasks/index.d.ts.map +1 -0
- package/dist/maintenance/tasks/index.js +9 -0
- package/dist/maintenance/tasks/index.js.map +1 -0
- package/dist/maintenance/tasks/prune-graph.d.ts +12 -0
- package/dist/maintenance/tasks/prune-graph.d.ts.map +1 -0
- package/dist/maintenance/tasks/prune-graph.js +23 -0
- package/dist/maintenance/tasks/prune-graph.js.map +1 -0
- package/dist/maintenance/tasks/scan-projects.d.ts +12 -0
- package/dist/maintenance/tasks/scan-projects.d.ts.map +1 -0
- package/dist/maintenance/tasks/scan-projects.js +31 -0
- package/dist/maintenance/tasks/scan-projects.js.map +1 -0
- package/dist/maintenance/tasks/update-clusters.d.ts +12 -0
- package/dist/maintenance/tasks/update-clusters.d.ts.map +1 -0
- package/dist/maintenance/tasks/update-clusters.js +41 -0
- package/dist/maintenance/tasks/update-clusters.js.map +1 -0
- package/dist/maintenance/tasks/vacuum.d.ts +10 -0
- package/dist/maintenance/tasks/vacuum.d.ts.map +1 -0
- package/dist/maintenance/tasks/vacuum.js +23 -0
- package/dist/maintenance/tasks/vacuum.js.map +1 -0
- package/dist/mcp/index.d.ts +7 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +8 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +90 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +395 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools.d.ts +52 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +292 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/models/device-detector.d.ts +32 -0
- package/dist/models/device-detector.d.ts.map +1 -0
- package/dist/models/device-detector.js +123 -0
- package/dist/models/device-detector.js.map +1 -0
- package/dist/models/embedder.d.ts +60 -0
- package/dist/models/embedder.d.ts.map +1 -0
- package/dist/models/embedder.js +171 -0
- package/dist/models/embedder.js.map +1 -0
- package/dist/models/model-registry.d.ts +25 -0
- package/dist/models/model-registry.d.ts.map +1 -0
- package/dist/models/model-registry.js +56 -0
- package/dist/models/model-registry.js.map +1 -0
- package/dist/parser/chunker.d.ts +74 -0
- package/dist/parser/chunker.d.ts.map +1 -0
- package/dist/parser/chunker.js +330 -0
- package/dist/parser/chunker.js.map +1 -0
- package/dist/parser/session-reader.d.ts +75 -0
- package/dist/parser/session-reader.d.ts.map +1 -0
- package/dist/parser/session-reader.js +198 -0
- package/dist/parser/session-reader.js.map +1 -0
- package/dist/parser/turn-assembler.d.ts +18 -0
- package/dist/parser/turn-assembler.d.ts.map +1 -0
- package/dist/parser/turn-assembler.js +150 -0
- package/dist/parser/turn-assembler.js.map +1 -0
- package/dist/parser/types.d.ts +124 -0
- package/dist/parser/types.d.ts.map +1 -0
- package/dist/parser/types.js +8 -0
- package/dist/parser/types.js.map +1 -0
- package/dist/report/reporter.d.ts +18 -0
- package/dist/report/reporter.d.ts.map +1 -0
- package/dist/report/reporter.js +121 -0
- package/dist/report/reporter.js.map +1 -0
- package/dist/retrieval/cluster-expander.d.ts +30 -0
- package/dist/retrieval/cluster-expander.d.ts.map +1 -0
- package/dist/retrieval/cluster-expander.js +87 -0
- package/dist/retrieval/cluster-expander.js.map +1 -0
- package/dist/retrieval/context-assembler.d.ts +89 -0
- package/dist/retrieval/context-assembler.d.ts.map +1 -0
- package/dist/retrieval/context-assembler.js +313 -0
- package/dist/retrieval/context-assembler.js.map +1 -0
- package/dist/retrieval/index.d.ts +12 -0
- package/dist/retrieval/index.d.ts.map +1 -0
- package/dist/retrieval/index.js +12 -0
- package/dist/retrieval/index.js.map +1 -0
- package/dist/retrieval/rrf.d.ts +25 -0
- package/dist/retrieval/rrf.d.ts.map +1 -0
- package/dist/retrieval/rrf.js +56 -0
- package/dist/retrieval/rrf.js.map +1 -0
- package/dist/retrieval/session-reconstructor.d.ts +79 -0
- package/dist/retrieval/session-reconstructor.d.ts.map +1 -0
- package/dist/retrieval/session-reconstructor.js +173 -0
- package/dist/retrieval/session-reconstructor.js.map +1 -0
- package/dist/retrieval/traverser.d.ts +66 -0
- package/dist/retrieval/traverser.d.ts.map +1 -0
- package/dist/retrieval/traverser.js +160 -0
- package/dist/retrieval/traverser.js.map +1 -0
- package/dist/storage/archive.d.ts +81 -0
- package/dist/storage/archive.d.ts.map +1 -0
- package/dist/storage/archive.js +204 -0
- package/dist/storage/archive.js.map +1 -0
- package/dist/storage/audit-log.d.ts +29 -0
- package/dist/storage/audit-log.d.ts.map +1 -0
- package/dist/storage/audit-log.js +69 -0
- package/dist/storage/audit-log.js.map +1 -0
- package/dist/storage/checkpoint-store.d.ts +38 -0
- package/dist/storage/checkpoint-store.d.ts.map +1 -0
- package/dist/storage/checkpoint-store.js +76 -0
- package/dist/storage/checkpoint-store.js.map +1 -0
- package/dist/storage/chunk-store.d.ts +111 -0
- package/dist/storage/chunk-store.d.ts.map +1 -0
- package/dist/storage/chunk-store.js +298 -0
- package/dist/storage/chunk-store.js.map +1 -0
- package/dist/storage/clock-store.d.ts +80 -0
- package/dist/storage/clock-store.d.ts.map +1 -0
- package/dist/storage/clock-store.js +155 -0
- package/dist/storage/clock-store.js.map +1 -0
- package/dist/storage/cluster-store.d.ts +63 -0
- package/dist/storage/cluster-store.d.ts.map +1 -0
- package/dist/storage/cluster-store.js +219 -0
- package/dist/storage/cluster-store.js.map +1 -0
- package/dist/storage/db.d.ts +57 -0
- package/dist/storage/db.d.ts.map +1 -0
- package/dist/storage/db.js +249 -0
- package/dist/storage/db.js.map +1 -0
- package/dist/storage/decay.d.ts +125 -0
- package/dist/storage/decay.d.ts.map +1 -0
- package/dist/storage/decay.js +276 -0
- package/dist/storage/decay.js.map +1 -0
- package/dist/storage/edge-store.d.ts +75 -0
- package/dist/storage/edge-store.d.ts.map +1 -0
- package/dist/storage/edge-store.js +259 -0
- package/dist/storage/edge-store.js.map +1 -0
- package/dist/storage/embedding-cache.d.ts +51 -0
- package/dist/storage/embedding-cache.d.ts.map +1 -0
- package/dist/storage/embedding-cache.js +155 -0
- package/dist/storage/embedding-cache.js.map +1 -0
- package/dist/storage/encryption.d.ts +55 -0
- package/dist/storage/encryption.d.ts.map +1 -0
- package/dist/storage/encryption.js +130 -0
- package/dist/storage/encryption.js.map +1 -0
- package/dist/storage/index.d.ts +15 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +20 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/keyword-store.d.ts +25 -0
- package/dist/storage/keyword-store.d.ts.map +1 -0
- package/dist/storage/keyword-store.js +104 -0
- package/dist/storage/keyword-store.js.map +1 -0
- package/dist/storage/migrations.d.ts +12 -0
- package/dist/storage/migrations.d.ts.map +1 -0
- package/dist/storage/migrations.js +345 -0
- package/dist/storage/migrations.js.map +1 -0
- package/dist/storage/pruner.d.ts +111 -0
- package/dist/storage/pruner.d.ts.map +1 -0
- package/dist/storage/pruner.js +280 -0
- package/dist/storage/pruner.js.map +1 -0
- package/dist/storage/schema-loader.d.ts +18 -0
- package/dist/storage/schema-loader.d.ts.map +1 -0
- package/dist/storage/schema-loader.js +62 -0
- package/dist/storage/schema-loader.js.map +1 -0
- package/dist/storage/schema.sql +133 -0
- package/dist/storage/types.d.ts +278 -0
- package/dist/storage/types.d.ts.map +1 -0
- package/dist/storage/types.js +14 -0
- package/dist/storage/types.js.map +1 -0
- package/dist/storage/vector-store.d.ts +213 -0
- package/dist/storage/vector-store.d.ts.map +1 -0
- package/dist/storage/vector-store.js +440 -0
- package/dist/storage/vector-store.js.map +1 -0
- package/dist/temporal/clock-compactor.d.ts +65 -0
- package/dist/temporal/clock-compactor.d.ts.map +1 -0
- package/dist/temporal/clock-compactor.js +157 -0
- package/dist/temporal/clock-compactor.js.map +1 -0
- package/dist/temporal/index.d.ts +6 -0
- package/dist/temporal/index.d.ts.map +1 -0
- package/dist/temporal/index.js +6 -0
- package/dist/temporal/index.js.map +1 -0
- package/dist/temporal/vector-clock.d.ts +143 -0
- package/dist/temporal/vector-clock.d.ts.map +1 -0
- package/dist/temporal/vector-clock.js +231 -0
- package/dist/temporal/vector-clock.js.map +1 -0
- package/dist/utils/angular-distance.d.ts +31 -0
- package/dist/utils/angular-distance.d.ts.map +1 -0
- package/dist/utils/angular-distance.js +61 -0
- package/dist/utils/angular-distance.js.map +1 -0
- package/dist/utils/array-utils.d.ts +28 -0
- package/dist/utils/array-utils.d.ts.map +1 -0
- package/dist/utils/array-utils.js +67 -0
- package/dist/utils/array-utils.js.map +1 -0
- package/dist/utils/embedding-utils.d.ts +25 -0
- package/dist/utils/embedding-utils.d.ts.map +1 -0
- package/dist/utils/embedding-utils.js +30 -0
- package/dist/utils/embedding-utils.js.map +1 -0
- package/dist/utils/errors.d.ts +143 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +220 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/keychain.d.ts +43 -0
- package/dist/utils/keychain.d.ts.map +1 -0
- package/dist/utils/keychain.js +82 -0
- package/dist/utils/keychain.js.map +1 -0
- package/dist/utils/logger.d.ts +50 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +104 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/secret-store.d.ts +110 -0
- package/dist/utils/secret-store.d.ts.map +1 -0
- package/dist/utils/secret-store.js +340 -0
- package/dist/utils/secret-store.js.map +1 -0
- package/dist/utils/secure-buffer.d.ts +66 -0
- package/dist/utils/secure-buffer.d.ts.map +1 -0
- package/dist/utils/secure-buffer.js +104 -0
- package/dist/utils/secure-buffer.js.map +1 -0
- package/dist/utils/token-counter.d.ts +13 -0
- package/dist/utils/token-counter.d.ts.map +1 -0
- package/dist/utils/token-counter.js +18 -0
- package/dist/utils/token-counter.js.map +1 -0
- package/package.json +110 -0
- package/src/dashboard/client/package-lock.json +3045 -0
- package/src/dashboard/client/package.json +30 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Embedding cache for content-hash based caching.
|
|
3
|
+
* Skips re-embedding unchanged content by caching embeddings keyed by content hash.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Compute a SHA-256 hash of content for cache lookup.
|
|
7
|
+
*/
|
|
8
|
+
export declare function computeContentHash(content: string): string;
|
|
9
|
+
/**
|
|
10
|
+
* Get a cached embedding for a single content hash.
|
|
11
|
+
* Returns null if not found. Updates hit count on cache hit.
|
|
12
|
+
*/
|
|
13
|
+
export declare function getCachedEmbedding(contentHash: string, modelId: string): number[] | null;
|
|
14
|
+
/**
|
|
15
|
+
* Get cached embeddings for multiple content hashes in a single query.
|
|
16
|
+
* Returns a Map of contentHash -> embedding for found entries.
|
|
17
|
+
*/
|
|
18
|
+
export declare function getCachedEmbeddingsBatch(contentHashes: string[], modelId: string): Map<string, number[]>;
|
|
19
|
+
/**
|
|
20
|
+
* Cache a single embedding.
|
|
21
|
+
*/
|
|
22
|
+
export declare function cacheEmbedding(contentHash: string, modelId: string, embedding: number[]): void;
|
|
23
|
+
/**
|
|
24
|
+
* Cache multiple embeddings in a single transaction.
|
|
25
|
+
*/
|
|
26
|
+
export declare function cacheEmbeddingsBatch(items: Array<{
|
|
27
|
+
contentHash: string;
|
|
28
|
+
embedding: number[];
|
|
29
|
+
}>, modelId: string): void;
|
|
30
|
+
/**
|
|
31
|
+
* Evict oldest cache entries if cache exceeds maximum size.
|
|
32
|
+
* Uses LRU-like eviction based on created_at timestamp.
|
|
33
|
+
*/
|
|
34
|
+
export declare function evictOldestIfNeeded(): void;
|
|
35
|
+
/**
|
|
36
|
+
* Get cache statistics.
|
|
37
|
+
*/
|
|
38
|
+
export declare function getCacheStats(): {
|
|
39
|
+
entryCount: number;
|
|
40
|
+
totalHits: number;
|
|
41
|
+
avgHitCount: number;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Clear the entire cache.
|
|
45
|
+
*/
|
|
46
|
+
export declare function clearCache(): void;
|
|
47
|
+
/**
|
|
48
|
+
* Clear cache entries for a specific model.
|
|
49
|
+
*/
|
|
50
|
+
export declare function clearCacheForModel(modelId: string): void;
|
|
51
|
+
//# sourceMappingURL=embedding-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedding-cache.d.ts","sourceRoot":"","sources":["../../src/storage/embedding-cache.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAYH;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,GACd,MAAM,EAAE,GAAG,IAAI,CAuBjB;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,aAAa,EAAE,MAAM,EAAE,EACvB,OAAO,EAAE,MAAM,GACd,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAoCvB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EAAE,GAClB,IAAI,CAWN;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,KAAK,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,EAC1D,OAAO,EAAE,MAAM,GACd,IAAI,CAuBN;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAkB1C;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB,CAgBA;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,IAAI,CAGjC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAGxD"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Embedding cache for content-hash based caching.
|
|
3
|
+
* Skips re-embedding unchanged content by caching embeddings keyed by content hash.
|
|
4
|
+
*/
|
|
5
|
+
import { createHash } from 'crypto';
|
|
6
|
+
import { getDb } from './db.js';
|
|
7
|
+
import { serializeEmbedding, deserializeEmbedding } from '../utils/embedding-utils.js';
|
|
8
|
+
/** Maximum cache entries before LRU eviction (~400MB for 1024-dim embeddings) */
|
|
9
|
+
const MAX_CACHE_ENTRIES = 100_000;
|
|
10
|
+
/** Extra entries to evict to avoid frequent evictions */
|
|
11
|
+
const EVICTION_BUFFER = 1_000;
|
|
12
|
+
/**
|
|
13
|
+
* Compute a SHA-256 hash of content for cache lookup.
|
|
14
|
+
*/
|
|
15
|
+
export function computeContentHash(content) {
|
|
16
|
+
return createHash('sha256').update(content).digest('hex');
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Get a cached embedding for a single content hash.
|
|
20
|
+
* Returns null if not found. Updates hit count on cache hit.
|
|
21
|
+
*/
|
|
22
|
+
export function getCachedEmbedding(contentHash, modelId) {
|
|
23
|
+
const db = getDb();
|
|
24
|
+
const row = db
|
|
25
|
+
.prepare(`
|
|
26
|
+
SELECT embedding FROM embedding_cache
|
|
27
|
+
WHERE content_hash = ? AND model_id = ?
|
|
28
|
+
`)
|
|
29
|
+
.get(contentHash, modelId);
|
|
30
|
+
if (!row)
|
|
31
|
+
return null;
|
|
32
|
+
// Update hit count (fire and forget)
|
|
33
|
+
db.prepare(`
|
|
34
|
+
UPDATE embedding_cache SET hit_count = hit_count + 1
|
|
35
|
+
WHERE content_hash = ? AND model_id = ?
|
|
36
|
+
`).run(contentHash, modelId);
|
|
37
|
+
// Deserialize from Buffer to number[]
|
|
38
|
+
return deserializeEmbedding(row.embedding);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Get cached embeddings for multiple content hashes in a single query.
|
|
42
|
+
* Returns a Map of contentHash -> embedding for found entries.
|
|
43
|
+
*/
|
|
44
|
+
export function getCachedEmbeddingsBatch(contentHashes, modelId) {
|
|
45
|
+
const cache = new Map();
|
|
46
|
+
if (contentHashes.length === 0)
|
|
47
|
+
return cache;
|
|
48
|
+
const db = getDb();
|
|
49
|
+
const placeholders = contentHashes.map(() => '?').join(',');
|
|
50
|
+
const rows = db
|
|
51
|
+
.prepare(`
|
|
52
|
+
SELECT content_hash, embedding FROM embedding_cache
|
|
53
|
+
WHERE content_hash IN (${placeholders}) AND model_id = ?
|
|
54
|
+
`)
|
|
55
|
+
.all(...contentHashes, modelId);
|
|
56
|
+
for (const row of rows) {
|
|
57
|
+
cache.set(row.content_hash, deserializeEmbedding(row.embedding));
|
|
58
|
+
}
|
|
59
|
+
// Update hit counts for found entries
|
|
60
|
+
if (rows.length > 0) {
|
|
61
|
+
const foundHashes = rows.map((r) => r.content_hash);
|
|
62
|
+
const updatePlaceholders = foundHashes.map(() => '?').join(',');
|
|
63
|
+
db.prepare(`
|
|
64
|
+
UPDATE embedding_cache SET hit_count = hit_count + 1
|
|
65
|
+
WHERE content_hash IN (${updatePlaceholders}) AND model_id = ?
|
|
66
|
+
`).run(...foundHashes, modelId);
|
|
67
|
+
}
|
|
68
|
+
return cache;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Cache a single embedding.
|
|
72
|
+
*/
|
|
73
|
+
export function cacheEmbedding(contentHash, modelId, embedding) {
|
|
74
|
+
const db = getDb();
|
|
75
|
+
const blob = serializeEmbedding(embedding);
|
|
76
|
+
db.prepare(`
|
|
77
|
+
INSERT OR REPLACE INTO embedding_cache
|
|
78
|
+
(content_hash, model_id, embedding, created_at, hit_count)
|
|
79
|
+
VALUES (?, ?, ?, CURRENT_TIMESTAMP, 0)
|
|
80
|
+
`).run(contentHash, modelId, blob);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Cache multiple embeddings in a single transaction.
|
|
84
|
+
*/
|
|
85
|
+
export function cacheEmbeddingsBatch(items, modelId) {
|
|
86
|
+
if (items.length === 0)
|
|
87
|
+
return;
|
|
88
|
+
const db = getDb();
|
|
89
|
+
const stmt = db.prepare(`
|
|
90
|
+
INSERT OR REPLACE INTO embedding_cache
|
|
91
|
+
(content_hash, model_id, embedding, created_at, hit_count)
|
|
92
|
+
VALUES (?, ?, ?, CURRENT_TIMESTAMP, 0)
|
|
93
|
+
`);
|
|
94
|
+
const insertMany = db.transaction((items) => {
|
|
95
|
+
for (const item of items) {
|
|
96
|
+
const blob = serializeEmbedding(item.embedding);
|
|
97
|
+
stmt.run(item.contentHash, modelId, blob);
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
insertMany(items);
|
|
101
|
+
// Check if eviction is needed after batch insert
|
|
102
|
+
evictOldestIfNeeded();
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Evict oldest cache entries if cache exceeds maximum size.
|
|
106
|
+
* Uses LRU-like eviction based on created_at timestamp.
|
|
107
|
+
*/
|
|
108
|
+
export function evictOldestIfNeeded() {
|
|
109
|
+
const db = getDb();
|
|
110
|
+
const countResult = db
|
|
111
|
+
.prepare('SELECT COUNT(*) as count FROM embedding_cache')
|
|
112
|
+
.get();
|
|
113
|
+
if (countResult.count > MAX_CACHE_ENTRIES) {
|
|
114
|
+
const toEvict = countResult.count - MAX_CACHE_ENTRIES + EVICTION_BUFFER;
|
|
115
|
+
db.prepare(`
|
|
116
|
+
DELETE FROM embedding_cache WHERE rowid IN (
|
|
117
|
+
SELECT rowid FROM embedding_cache
|
|
118
|
+
ORDER BY created_at ASC
|
|
119
|
+
LIMIT ?
|
|
120
|
+
)
|
|
121
|
+
`).run(toEvict);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Get cache statistics.
|
|
126
|
+
*/
|
|
127
|
+
export function getCacheStats() {
|
|
128
|
+
const db = getDb();
|
|
129
|
+
const result = db
|
|
130
|
+
.prepare(`
|
|
131
|
+
SELECT COUNT(*) as count, COALESCE(SUM(hit_count), 0) as total_hits, COALESCE(AVG(hit_count), 0) as avg_hits
|
|
132
|
+
FROM embedding_cache
|
|
133
|
+
`)
|
|
134
|
+
.get();
|
|
135
|
+
return {
|
|
136
|
+
entryCount: result.count,
|
|
137
|
+
totalHits: result.total_hits,
|
|
138
|
+
avgHitCount: result.avg_hits,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Clear the entire cache.
|
|
143
|
+
*/
|
|
144
|
+
export function clearCache() {
|
|
145
|
+
const db = getDb();
|
|
146
|
+
db.prepare('DELETE FROM embedding_cache').run();
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Clear cache entries for a specific model.
|
|
150
|
+
*/
|
|
151
|
+
export function clearCacheForModel(modelId) {
|
|
152
|
+
const db = getDb();
|
|
153
|
+
db.prepare('DELETE FROM embedding_cache WHERE model_id = ?').run(modelId);
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=embedding-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedding-cache.js","sourceRoot":"","sources":["../../src/storage/embedding-cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Encryption utilities for Causantic.
|
|
3
|
+
*
|
|
4
|
+
* Uses AES-256-GCM for authenticated encryption with Argon2id for key derivation.
|
|
5
|
+
*/
|
|
6
|
+
/** Encrypted data format */
|
|
7
|
+
export interface EncryptedData {
|
|
8
|
+
/** Salt for key derivation */
|
|
9
|
+
salt: Buffer;
|
|
10
|
+
/** Nonce for AES-GCM */
|
|
11
|
+
nonce: Buffer;
|
|
12
|
+
/** Authentication tag */
|
|
13
|
+
authTag: Buffer;
|
|
14
|
+
/** Encrypted content */
|
|
15
|
+
ciphertext: Buffer;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Derive an encryption key from a password using scrypt.
|
|
19
|
+
* Using scrypt as it's available in Node.js crypto module.
|
|
20
|
+
* For production, consider Argon2id.
|
|
21
|
+
*/
|
|
22
|
+
export declare function deriveKey(password: string, salt: Buffer): Buffer;
|
|
23
|
+
/**
|
|
24
|
+
* Encrypt data with AES-256-GCM.
|
|
25
|
+
*/
|
|
26
|
+
export declare function encrypt(plaintext: Buffer, password: string): EncryptedData;
|
|
27
|
+
/**
|
|
28
|
+
* Decrypt data with AES-256-GCM.
|
|
29
|
+
*/
|
|
30
|
+
export declare function decrypt(encrypted: EncryptedData, password: string): Buffer;
|
|
31
|
+
/**
|
|
32
|
+
* Encrypt a string and return base64-encoded result.
|
|
33
|
+
*/
|
|
34
|
+
export declare function encryptString(plaintext: string, password: string): string;
|
|
35
|
+
/**
|
|
36
|
+
* Decrypt a base64-encoded string.
|
|
37
|
+
*/
|
|
38
|
+
export declare function decryptString(encryptedBase64: string, password: string): string;
|
|
39
|
+
/**
|
|
40
|
+
* Serialize encrypted data to a buffer.
|
|
41
|
+
*/
|
|
42
|
+
export declare function serializeEncrypted(encrypted: EncryptedData): Buffer;
|
|
43
|
+
/**
|
|
44
|
+
* Deserialize encrypted data from a buffer.
|
|
45
|
+
*/
|
|
46
|
+
export declare function deserializeEncrypted(buffer: Buffer): EncryptedData;
|
|
47
|
+
/**
|
|
48
|
+
* Generate a random encryption key (for testing or key management).
|
|
49
|
+
*/
|
|
50
|
+
export declare function generateKey(): Buffer;
|
|
51
|
+
/**
|
|
52
|
+
* Generate a random password-like string.
|
|
53
|
+
*/
|
|
54
|
+
export declare function generatePassword(length?: number): string;
|
|
55
|
+
//# sourceMappingURL=encryption.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encryption.d.ts","sourceRoot":"","sources":["../../src/storage/encryption.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAwBH,4BAA4B;AAC5B,MAAM,WAAW,aAAa;IAC5B,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,yBAAyB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,wBAAwB;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAMhE;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,aAAa,CAa1E;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAU1E;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAYzE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAe/E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,aAAa,GAAG,MAAM,CAOnE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAWlE;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,SAAK,GAAG,MAAM,CAQpD"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Encryption utilities for Causantic.
|
|
3
|
+
*
|
|
4
|
+
* Uses AES-256-GCM for authenticated encryption with Argon2id for key derivation.
|
|
5
|
+
*/
|
|
6
|
+
import { createCipheriv, createDecipheriv, randomBytes, scryptSync, } from 'node:crypto';
|
|
7
|
+
/** Encryption algorithm */
|
|
8
|
+
const ALGORITHM = 'aes-256-gcm';
|
|
9
|
+
/** Key length for AES-256 */
|
|
10
|
+
const KEY_LENGTH = 32;
|
|
11
|
+
/** Salt length for key derivation */
|
|
12
|
+
const SALT_LENGTH = 16;
|
|
13
|
+
/** Nonce length for AES-GCM */
|
|
14
|
+
const NONCE_LENGTH = 12;
|
|
15
|
+
/** Auth tag length for AES-GCM */
|
|
16
|
+
const AUTH_TAG_LENGTH = 16;
|
|
17
|
+
/**
|
|
18
|
+
* Derive an encryption key from a password using scrypt.
|
|
19
|
+
* Using scrypt as it's available in Node.js crypto module.
|
|
20
|
+
* For production, consider Argon2id.
|
|
21
|
+
*/
|
|
22
|
+
export function deriveKey(password, salt) {
|
|
23
|
+
return scryptSync(password, salt, KEY_LENGTH, {
|
|
24
|
+
N: 16384, // CPU/memory cost
|
|
25
|
+
r: 8, // Block size
|
|
26
|
+
p: 1, // Parallelization
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Encrypt data with AES-256-GCM.
|
|
31
|
+
*/
|
|
32
|
+
export function encrypt(plaintext, password) {
|
|
33
|
+
const salt = randomBytes(SALT_LENGTH);
|
|
34
|
+
const nonce = randomBytes(NONCE_LENGTH);
|
|
35
|
+
const key = deriveKey(password, salt);
|
|
36
|
+
const cipher = createCipheriv(ALGORITHM, key, nonce);
|
|
37
|
+
const ciphertext = Buffer.concat([
|
|
38
|
+
cipher.update(plaintext),
|
|
39
|
+
cipher.final(),
|
|
40
|
+
]);
|
|
41
|
+
const authTag = cipher.getAuthTag();
|
|
42
|
+
return { salt, nonce, authTag, ciphertext };
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Decrypt data with AES-256-GCM.
|
|
46
|
+
*/
|
|
47
|
+
export function decrypt(encrypted, password) {
|
|
48
|
+
const key = deriveKey(password, encrypted.salt);
|
|
49
|
+
const decipher = createDecipheriv(ALGORITHM, key, encrypted.nonce);
|
|
50
|
+
decipher.setAuthTag(encrypted.authTag);
|
|
51
|
+
return Buffer.concat([
|
|
52
|
+
decipher.update(encrypted.ciphertext),
|
|
53
|
+
decipher.final(),
|
|
54
|
+
]);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Encrypt a string and return base64-encoded result.
|
|
58
|
+
*/
|
|
59
|
+
export function encryptString(plaintext, password) {
|
|
60
|
+
const encrypted = encrypt(Buffer.from(plaintext, 'utf-8'), password);
|
|
61
|
+
// Combine all parts into a single buffer
|
|
62
|
+
const combined = Buffer.concat([
|
|
63
|
+
encrypted.salt,
|
|
64
|
+
encrypted.nonce,
|
|
65
|
+
encrypted.authTag,
|
|
66
|
+
encrypted.ciphertext,
|
|
67
|
+
]);
|
|
68
|
+
return combined.toString('base64');
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Decrypt a base64-encoded string.
|
|
72
|
+
*/
|
|
73
|
+
export function decryptString(encryptedBase64, password) {
|
|
74
|
+
const combined = Buffer.from(encryptedBase64, 'base64');
|
|
75
|
+
// Extract parts
|
|
76
|
+
let offset = 0;
|
|
77
|
+
const salt = combined.subarray(offset, offset + SALT_LENGTH);
|
|
78
|
+
offset += SALT_LENGTH;
|
|
79
|
+
const nonce = combined.subarray(offset, offset + NONCE_LENGTH);
|
|
80
|
+
offset += NONCE_LENGTH;
|
|
81
|
+
const authTag = combined.subarray(offset, offset + AUTH_TAG_LENGTH);
|
|
82
|
+
offset += AUTH_TAG_LENGTH;
|
|
83
|
+
const ciphertext = combined.subarray(offset);
|
|
84
|
+
const decrypted = decrypt({ salt, nonce, authTag, ciphertext }, password);
|
|
85
|
+
return decrypted.toString('utf-8');
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Serialize encrypted data to a buffer.
|
|
89
|
+
*/
|
|
90
|
+
export function serializeEncrypted(encrypted) {
|
|
91
|
+
return Buffer.concat([
|
|
92
|
+
encrypted.salt,
|
|
93
|
+
encrypted.nonce,
|
|
94
|
+
encrypted.authTag,
|
|
95
|
+
encrypted.ciphertext,
|
|
96
|
+
]);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Deserialize encrypted data from a buffer.
|
|
100
|
+
*/
|
|
101
|
+
export function deserializeEncrypted(buffer) {
|
|
102
|
+
let offset = 0;
|
|
103
|
+
const salt = buffer.subarray(offset, offset + SALT_LENGTH);
|
|
104
|
+
offset += SALT_LENGTH;
|
|
105
|
+
const nonce = buffer.subarray(offset, offset + NONCE_LENGTH);
|
|
106
|
+
offset += NONCE_LENGTH;
|
|
107
|
+
const authTag = buffer.subarray(offset, offset + AUTH_TAG_LENGTH);
|
|
108
|
+
offset += AUTH_TAG_LENGTH;
|
|
109
|
+
const ciphertext = buffer.subarray(offset);
|
|
110
|
+
return { salt, nonce, authTag, ciphertext };
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Generate a random encryption key (for testing or key management).
|
|
114
|
+
*/
|
|
115
|
+
export function generateKey() {
|
|
116
|
+
return randomBytes(KEY_LENGTH);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Generate a random password-like string.
|
|
120
|
+
*/
|
|
121
|
+
export function generatePassword(length = 32) {
|
|
122
|
+
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*';
|
|
123
|
+
const bytes = randomBytes(length);
|
|
124
|
+
let password = '';
|
|
125
|
+
for (let i = 0; i < length; i++) {
|
|
126
|
+
password += chars[bytes[i] % chars.length];
|
|
127
|
+
}
|
|
128
|
+
return password;
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=encryption.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encryption.js","sourceRoot":"","sources":["../../src/storage/encryption.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Storage layer exports.
|
|
3
|
+
*/
|
|
4
|
+
export { getDb, closeDb, clearAllData, getDbStats, generateId, getSchemaVersion } from './db.js';
|
|
5
|
+
export type { EdgeType, ReferenceType, StoredChunk, ChunkInput, StoredEdge, EdgeInput, WeightedEdge, StoredCluster, ClusterInput, ChunkClusterAssignment, WeightedChunk, TraversalResult, VectorSearchResult, } from './types.js';
|
|
6
|
+
export { insertChunk, insertChunks, getChunkById, getChunksByIds, getChunksBySession, getChunksBySessionSlug, getAllChunks, getChunksByCluster, isSessionIngested, deleteChunk, deleteChunks, getSessionIds, getChunkCount, } from './chunk-store.js';
|
|
7
|
+
export { createEdge, createEdges, getEdgeById, getOutgoingEdges, getIncomingEdges, getWeightedEdges, hasAnyEdges, deleteEdge, deleteEdges, deleteEdgesForChunk, getEdgeCount, getAllEdges, } from './edge-store.js';
|
|
8
|
+
export { upsertCluster, getClusterById, getAllClusters, getStaleClusters, assignChunkToCluster, assignChunksToClusters, getChunkClusterAssignments, getClusterChunkIds, removeChunkAssignments, clearClusterAssignments, deleteCluster, clearAllClusters, getClusterCount, computeMembershipHash, } from './cluster-store.js';
|
|
9
|
+
export { vectorStore } from './vector-store.js';
|
|
10
|
+
export { KeywordStore } from './keyword-store.js';
|
|
11
|
+
export type { KeywordSearchResult } from './keyword-store.js';
|
|
12
|
+
export { calculateDecayWeight, getDeathTime } from './decay.js';
|
|
13
|
+
export { pruner, initStartupPrune } from './pruner.js';
|
|
14
|
+
export type { PruneResult, FullPruneProgress } from './pruner.js';
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAGjG,YAAY,EACV,QAAQ,EACR,aAAa,EACb,WAAW,EACX,UAAU,EACV,UAAU,EACV,SAAS,EACT,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,sBAAsB,EACtB,aAAa,EACb,eAAe,EACf,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,sBAAsB,EACtB,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,aAAa,EACb,aAAa,GACd,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,UAAU,EACV,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,UAAU,EACV,WAAW,EACX,mBAAmB,EACnB,YAAY,EACZ,WAAW,GACZ,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,aAAa,EACb,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,sBAAsB,EACtB,0BAA0B,EAC1B,kBAAkB,EAClB,sBAAsB,EACtB,uBAAuB,EACvB,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAG9D,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGhE,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACvD,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Storage layer exports.
|
|
3
|
+
*/
|
|
4
|
+
// Database
|
|
5
|
+
export { getDb, closeDb, clearAllData, getDbStats, generateId, getSchemaVersion } from './db.js';
|
|
6
|
+
// Chunk store
|
|
7
|
+
export { insertChunk, insertChunks, getChunkById, getChunksByIds, getChunksBySession, getChunksBySessionSlug, getAllChunks, getChunksByCluster, isSessionIngested, deleteChunk, deleteChunks, getSessionIds, getChunkCount, } from './chunk-store.js';
|
|
8
|
+
// Edge store
|
|
9
|
+
export { createEdge, createEdges, getEdgeById, getOutgoingEdges, getIncomingEdges, getWeightedEdges, hasAnyEdges, deleteEdge, deleteEdges, deleteEdgesForChunk, getEdgeCount, getAllEdges, } from './edge-store.js';
|
|
10
|
+
// Cluster store
|
|
11
|
+
export { upsertCluster, getClusterById, getAllClusters, getStaleClusters, assignChunkToCluster, assignChunksToClusters, getChunkClusterAssignments, getClusterChunkIds, removeChunkAssignments, clearClusterAssignments, deleteCluster, clearAllClusters, getClusterCount, computeMembershipHash, } from './cluster-store.js';
|
|
12
|
+
// Vector store
|
|
13
|
+
export { vectorStore } from './vector-store.js';
|
|
14
|
+
// Keyword store
|
|
15
|
+
export { KeywordStore } from './keyword-store.js';
|
|
16
|
+
// Decay calculation
|
|
17
|
+
export { calculateDecayWeight, getDeathTime } from './decay.js';
|
|
18
|
+
// Pruner
|
|
19
|
+
export { pruner, initStartupPrune } from './pruner.js';
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,WAAW;AACX,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAmBjG,cAAc;AACd,OAAO,EACL,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,sBAAsB,EACtB,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,aAAa,EACb,aAAa,GACd,MAAM,kBAAkB,CAAC;AAE1B,aAAa;AACb,OAAO,EACL,UAAU,EACV,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,UAAU,EACV,WAAW,EACX,mBAAmB,EACnB,YAAY,EACZ,WAAW,GACZ,MAAM,iBAAiB,CAAC;AAEzB,gBAAgB;AAChB,OAAO,EACL,aAAa,EACb,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,sBAAsB,EACtB,0BAA0B,EAC1B,kBAAkB,EAClB,sBAAsB,EACtB,uBAAuB,EACvB,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAE5B,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,gBAAgB;AAChB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,oBAAoB;AACpB,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEhE,SAAS;AACT,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FTS5-backed keyword search for chunks.
|
|
3
|
+
*
|
|
4
|
+
* Provides BM25-ranked full-text search using SQLite FTS5 with porter stemming.
|
|
5
|
+
* Mirrors VectorStore's project-filtering pattern.
|
|
6
|
+
*/
|
|
7
|
+
import { getDb } from './db.js';
|
|
8
|
+
export interface KeywordSearchResult {
|
|
9
|
+
id: string;
|
|
10
|
+
score: number;
|
|
11
|
+
}
|
|
12
|
+
export declare class KeywordStore {
|
|
13
|
+
private db?;
|
|
14
|
+
constructor(db?: ReturnType<typeof getDb> | undefined);
|
|
15
|
+
private getDatabase;
|
|
16
|
+
/**
|
|
17
|
+
* Full-text search with BM25 ranking.
|
|
18
|
+
*/
|
|
19
|
+
search(query: string, limit: number): KeywordSearchResult[];
|
|
20
|
+
/**
|
|
21
|
+
* Full-text search filtered by project(s).
|
|
22
|
+
*/
|
|
23
|
+
searchByProject(query: string, projects: string | string[], limit: number): KeywordSearchResult[];
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=keyword-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keyword-store.d.ts","sourceRoot":"","sources":["../../src/storage/keyword-store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAKhC,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf;AA6BD,qBAAa,YAAY;IACX,OAAO,CAAC,EAAE,CAAC;gBAAH,EAAE,CAAC,EAAE,UAAU,CAAC,OAAO,KAAK,CAAC,YAAA;IAEjD,OAAO,CAAC,WAAW;IAInB;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,mBAAmB,EAAE;IA2B3D;;OAEG;IACH,eAAe,CACb,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,EAC3B,KAAK,EAAE,MAAM,GACZ,mBAAmB,EAAE;CA8BzB"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FTS5-backed keyword search for chunks.
|
|
3
|
+
*
|
|
4
|
+
* Provides BM25-ranked full-text search using SQLite FTS5 with porter stemming.
|
|
5
|
+
* Mirrors VectorStore's project-filtering pattern.
|
|
6
|
+
*/
|
|
7
|
+
import { getDb } from './db.js';
|
|
8
|
+
import { createLogger } from '../utils/logger.js';
|
|
9
|
+
const log = createLogger('keyword-store');
|
|
10
|
+
/**
|
|
11
|
+
* Sanitize a query string for FTS5 MATCH syntax.
|
|
12
|
+
* Escapes special characters and strips FTS5 operators.
|
|
13
|
+
*/
|
|
14
|
+
function sanitizeQuery(query) {
|
|
15
|
+
if (!query || !query.trim())
|
|
16
|
+
return '';
|
|
17
|
+
// Remove FTS5 special operators and characters
|
|
18
|
+
const sanitized = query
|
|
19
|
+
// Remove boolean operators (AND, OR, NOT as full words)
|
|
20
|
+
.replace(/\b(AND|OR|NOT)\b/g, '')
|
|
21
|
+
// Escape special FTS5 characters by wrapping terms in double quotes
|
|
22
|
+
// Remove characters that can't be in FTS5 queries
|
|
23
|
+
.replace(/[*"(){}\^~\-]/g, ' ')
|
|
24
|
+
// Collapse whitespace
|
|
25
|
+
.replace(/\s+/g, ' ')
|
|
26
|
+
.trim();
|
|
27
|
+
if (!sanitized)
|
|
28
|
+
return '';
|
|
29
|
+
// Wrap each word in double quotes for exact matching (bypasses FTS5 operators)
|
|
30
|
+
const terms = sanitized.split(/\s+/).filter(Boolean);
|
|
31
|
+
if (terms.length === 0)
|
|
32
|
+
return '';
|
|
33
|
+
return terms.map(t => `"${t}"`).join(' ');
|
|
34
|
+
}
|
|
35
|
+
export class KeywordStore {
|
|
36
|
+
db;
|
|
37
|
+
constructor(db) {
|
|
38
|
+
this.db = db;
|
|
39
|
+
}
|
|
40
|
+
getDatabase() {
|
|
41
|
+
return this.db ?? getDb();
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Full-text search with BM25 ranking.
|
|
45
|
+
*/
|
|
46
|
+
search(query, limit) {
|
|
47
|
+
const sanitized = sanitizeQuery(query);
|
|
48
|
+
if (!sanitized)
|
|
49
|
+
return [];
|
|
50
|
+
const db = this.getDatabase();
|
|
51
|
+
try {
|
|
52
|
+
const rows = db.prepare(`
|
|
53
|
+
SELECT chunks.id, bm25(chunks_fts) as score
|
|
54
|
+
FROM chunks_fts
|
|
55
|
+
JOIN chunks ON chunks.rowid = chunks_fts.rowid
|
|
56
|
+
WHERE chunks_fts MATCH ?
|
|
57
|
+
ORDER BY bm25(chunks_fts)
|
|
58
|
+
LIMIT ?
|
|
59
|
+
`).all(sanitized, limit);
|
|
60
|
+
// bm25() returns negative scores (lower = better match), negate for conventional scoring
|
|
61
|
+
return rows.map(r => ({
|
|
62
|
+
id: r.id,
|
|
63
|
+
score: -r.score,
|
|
64
|
+
}));
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
log.warn('Keyword search failed', { error: error.message });
|
|
68
|
+
return [];
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Full-text search filtered by project(s).
|
|
73
|
+
*/
|
|
74
|
+
searchByProject(query, projects, limit) {
|
|
75
|
+
const sanitized = sanitizeQuery(query);
|
|
76
|
+
if (!sanitized)
|
|
77
|
+
return [];
|
|
78
|
+
const db = this.getDatabase();
|
|
79
|
+
const projectList = Array.isArray(projects) ? projects : [projects];
|
|
80
|
+
if (projectList.length === 0)
|
|
81
|
+
return [];
|
|
82
|
+
const placeholders = projectList.map(() => '?').join(',');
|
|
83
|
+
try {
|
|
84
|
+
const rows = db.prepare(`
|
|
85
|
+
SELECT chunks.id, bm25(chunks_fts) as score
|
|
86
|
+
FROM chunks_fts
|
|
87
|
+
JOIN chunks ON chunks.rowid = chunks_fts.rowid
|
|
88
|
+
WHERE chunks_fts MATCH ?
|
|
89
|
+
AND chunks.session_slug IN (${placeholders})
|
|
90
|
+
ORDER BY bm25(chunks_fts)
|
|
91
|
+
LIMIT ?
|
|
92
|
+
`).all(sanitized, ...projectList, limit);
|
|
93
|
+
return rows.map(r => ({
|
|
94
|
+
id: r.id,
|
|
95
|
+
score: -r.score,
|
|
96
|
+
}));
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
log.warn('Keyword search by project failed', { error: error.message });
|
|
100
|
+
return [];
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=keyword-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keyword-store.js","sourceRoot":"","sources":["../../src/storage/keyword-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Database migrations for schema evolution.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from db.ts for clarity. Each migration function handles
|
|
5
|
+
* upgrading from one schema version to the next.
|
|
6
|
+
*/
|
|
7
|
+
import type Database from 'better-sqlite3-multiple-ciphers';
|
|
8
|
+
/**
|
|
9
|
+
* Run all pending migrations on the database.
|
|
10
|
+
*/
|
|
11
|
+
export declare function runMigrations(database: Database.Database): void;
|
|
12
|
+
//# sourceMappingURL=migrations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../src/storage/migrations.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,QAAQ,MAAM,iCAAiC,CAAC;AAM5D;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CA2C/D"}
|