causantic 0.2.1 → 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.
Files changed (457) hide show
  1. package/README.md +53 -66
  2. package/config.schema.json +12 -87
  3. package/dist/cli/commands/archive.d.ts.map +1 -1
  4. package/dist/cli/commands/archive.js.map +1 -1
  5. package/dist/cli/commands/benchmark-collection.d.ts.map +1 -1
  6. package/dist/cli/commands/benchmark-collection.js.map +1 -1
  7. package/dist/cli/commands/encryption.d.ts.map +1 -1
  8. package/dist/cli/commands/encryption.js.map +1 -1
  9. package/dist/cli/commands/hook.d.ts.map +1 -1
  10. package/dist/cli/commands/hook.js.map +1 -1
  11. package/dist/cli/commands/init.d.ts.map +1 -1
  12. package/dist/cli/commands/init.js +29 -32
  13. package/dist/cli/commands/init.js.map +1 -1
  14. package/dist/cli/commands/maintenance.d.ts.map +1 -1
  15. package/dist/cli/commands/maintenance.js +10 -3
  16. package/dist/cli/commands/maintenance.js.map +1 -1
  17. package/dist/cli/commands/serve.d.ts.map +1 -1
  18. package/dist/cli/commands/serve.js +3 -3
  19. package/dist/cli/commands/serve.js.map +1 -1
  20. package/dist/cli/skill-templates.d.ts.map +1 -1
  21. package/dist/cli/skill-templates.js +223 -153
  22. package/dist/cli/skill-templates.js.map +1 -1
  23. package/dist/cli/uninstall.d.ts.map +1 -1
  24. package/dist/cli/uninstall.js +4 -1
  25. package/dist/cli/uninstall.js.map +1 -1
  26. package/dist/clusters/cluster-manager.d.ts +23 -0
  27. package/dist/clusters/cluster-manager.d.ts.map +1 -1
  28. package/dist/clusters/cluster-manager.js +69 -2
  29. package/dist/clusters/cluster-manager.js.map +1 -1
  30. package/dist/clusters/cluster-refresh.d.ts.map +1 -1
  31. package/dist/clusters/cluster-refresh.js +5 -1
  32. package/dist/clusters/cluster-refresh.js.map +1 -1
  33. package/dist/clusters/hdbscan/cluster-extraction.d.ts.map +1 -1
  34. package/dist/clusters/hdbscan/cluster-extraction.js +1 -2
  35. package/dist/clusters/hdbscan/cluster-extraction.js.map +1 -1
  36. package/dist/clusters/hdbscan/hierarchy.d.ts.map +1 -1
  37. package/dist/clusters/hdbscan/hierarchy.js +1 -3
  38. package/dist/clusters/hdbscan/hierarchy.js.map +1 -1
  39. package/dist/clusters/hdbscan/incremental.d.ts.map +1 -1
  40. package/dist/clusters/hdbscan/incremental.js.map +1 -1
  41. package/dist/clusters/hdbscan/probabilities.d.ts +1 -1
  42. package/dist/clusters/hdbscan/probabilities.d.ts.map +1 -1
  43. package/dist/clusters/hdbscan/probabilities.js +1 -1
  44. package/dist/clusters/hdbscan/probabilities.js.map +1 -1
  45. package/dist/clusters/hdbscan.d.ts.map +1 -1
  46. package/dist/clusters/hdbscan.js +3 -5
  47. package/dist/clusters/hdbscan.js.map +1 -1
  48. package/dist/config/loader.d.ts +10 -15
  49. package/dist/config/loader.d.ts.map +1 -1
  50. package/dist/config/loader.js +40 -71
  51. package/dist/config/loader.js.map +1 -1
  52. package/dist/config/memory-config.d.ts +2 -45
  53. package/dist/config/memory-config.d.ts.map +1 -1
  54. package/dist/config/memory-config.js +6 -109
  55. package/dist/config/memory-config.js.map +1 -1
  56. package/dist/core/index.d.ts +1 -1
  57. package/dist/core/index.d.ts.map +1 -1
  58. package/dist/core/lexical-features.d.ts.map +1 -1
  59. package/dist/core/lexical-features.js +141 -20
  60. package/dist/core/lexical-features.js.map +1 -1
  61. package/dist/dashboard/client/assets/index-DdImwNQ0.css +1 -0
  62. package/dist/dashboard/client/assets/index-Ofx8zngH.js +166 -0
  63. package/dist/dashboard/client/index.html +2 -2
  64. package/dist/dashboard/routes/benchmark-collection.d.ts.map +1 -1
  65. package/dist/dashboard/routes/benchmark-collection.js +2 -6
  66. package/dist/dashboard/routes/benchmark-collection.js.map +1 -1
  67. package/dist/dashboard/routes/chain.d.ts +3 -0
  68. package/dist/dashboard/routes/chain.d.ts.map +1 -0
  69. package/dist/dashboard/routes/chain.js +74 -0
  70. package/dist/dashboard/routes/chain.js.map +1 -0
  71. package/dist/dashboard/routes/chunks.d.ts.map +1 -1
  72. package/dist/dashboard/routes/chunks.js +16 -1
  73. package/dist/dashboard/routes/chunks.js.map +1 -1
  74. package/dist/dashboard/routes/graph.d.ts.map +1 -1
  75. package/dist/dashboard/routes/graph.js.map +1 -1
  76. package/dist/dashboard/routes/search.d.ts.map +1 -1
  77. package/dist/dashboard/routes/search.js.map +1 -1
  78. package/dist/dashboard/routes/stats.d.ts.map +1 -1
  79. package/dist/dashboard/routes/stats.js +8 -6
  80. package/dist/dashboard/routes/stats.js.map +1 -1
  81. package/dist/dashboard/routes/timeline.d.ts +3 -0
  82. package/dist/dashboard/routes/timeline.d.ts.map +1 -0
  83. package/dist/dashboard/routes/timeline.js +90 -0
  84. package/dist/dashboard/routes/timeline.js.map +1 -0
  85. package/dist/dashboard/server.d.ts.map +1 -1
  86. package/dist/dashboard/server.js +4 -0
  87. package/dist/dashboard/server.js.map +1 -1
  88. package/dist/eval/annotation-schema.d.ts.map +1 -1
  89. package/dist/eval/annotation-schema.js +2 -5
  90. package/dist/eval/annotation-schema.js.map +1 -1
  91. package/dist/eval/benchmark-runner.d.ts.map +1 -1
  92. package/dist/eval/benchmark-runner.js +2 -2
  93. package/dist/eval/benchmark-runner.js.map +1 -1
  94. package/dist/eval/cluster-evaluator.d.ts.map +1 -1
  95. package/dist/eval/cluster-evaluator.js.map +1 -1
  96. package/dist/eval/collection-benchmark/chain-quality.d.ts +15 -0
  97. package/dist/eval/collection-benchmark/chain-quality.d.ts.map +1 -0
  98. package/dist/eval/collection-benchmark/chain-quality.js +60 -0
  99. package/dist/eval/collection-benchmark/chain-quality.js.map +1 -0
  100. package/dist/eval/collection-benchmark/health.d.ts.map +1 -1
  101. package/dist/eval/collection-benchmark/health.js +2 -2
  102. package/dist/eval/collection-benchmark/health.js.map +1 -1
  103. package/dist/eval/collection-benchmark/history.d.ts.map +1 -1
  104. package/dist/eval/collection-benchmark/history.js +14 -11
  105. package/dist/eval/collection-benchmark/history.js.map +1 -1
  106. package/dist/eval/collection-benchmark/latency.d.ts.map +1 -1
  107. package/dist/eval/collection-benchmark/latency.js +14 -11
  108. package/dist/eval/collection-benchmark/latency.js.map +1 -1
  109. package/dist/eval/collection-benchmark/reporter.d.ts.map +1 -1
  110. package/dist/eval/collection-benchmark/reporter.js +18 -28
  111. package/dist/eval/collection-benchmark/reporter.js.map +1 -1
  112. package/dist/eval/collection-benchmark/retrieval.d.ts.map +1 -1
  113. package/dist/eval/collection-benchmark/retrieval.js +14 -8
  114. package/dist/eval/collection-benchmark/retrieval.js.map +1 -1
  115. package/dist/eval/collection-benchmark/runner.d.ts +3 -3
  116. package/dist/eval/collection-benchmark/runner.d.ts.map +1 -1
  117. package/dist/eval/collection-benchmark/runner.js +46 -37
  118. package/dist/eval/collection-benchmark/runner.js.map +1 -1
  119. package/dist/eval/collection-benchmark/sampler.d.ts.map +1 -1
  120. package/dist/eval/collection-benchmark/sampler.js +14 -12
  121. package/dist/eval/collection-benchmark/sampler.js.map +1 -1
  122. package/dist/eval/collection-benchmark/tuning.d.ts.map +1 -1
  123. package/dist/eval/collection-benchmark/tuning.js +56 -71
  124. package/dist/eval/collection-benchmark/tuning.js.map +1 -1
  125. package/dist/eval/collection-benchmark/types.d.ts +12 -24
  126. package/dist/eval/collection-benchmark/types.d.ts.map +1 -1
  127. package/dist/eval/corpus-builder.d.ts.map +1 -1
  128. package/dist/eval/corpus-builder.js.map +1 -1
  129. package/dist/eval/experiments/boilerplate-filter.d.ts.map +1 -1
  130. package/dist/eval/experiments/boilerplate-filter.js.map +1 -1
  131. package/dist/eval/experiments/cluster-threshold/run-threshold-sweep.d.ts.map +1 -1
  132. package/dist/eval/experiments/cluster-threshold/run-threshold-sweep.js +3 -5
  133. package/dist/eval/experiments/cluster-threshold/run-threshold-sweep.js.map +1 -1
  134. package/dist/eval/experiments/code-focused-mode.d.ts.map +1 -1
  135. package/dist/eval/experiments/code-focused-mode.js +1 -1
  136. package/dist/eval/experiments/code-focused-mode.js.map +1 -1
  137. package/dist/eval/experiments/edge-decay/decay-curves.d.ts +25 -19
  138. package/dist/eval/experiments/edge-decay/decay-curves.d.ts.map +1 -1
  139. package/dist/eval/experiments/edge-decay/decay-curves.js +47 -40
  140. package/dist/eval/experiments/edge-decay/decay-curves.js.map +1 -1
  141. package/dist/eval/experiments/edge-decay/index.d.ts +6 -4
  142. package/dist/eval/experiments/edge-decay/index.d.ts.map +1 -1
  143. package/dist/eval/experiments/edge-decay/index.js +5 -3
  144. package/dist/eval/experiments/edge-decay/index.js.map +1 -1
  145. package/dist/eval/experiments/edge-decay/presets.d.ts +14 -4
  146. package/dist/eval/experiments/edge-decay/presets.d.ts.map +1 -1
  147. package/dist/eval/experiments/edge-decay/presets.js +73 -68
  148. package/dist/eval/experiments/edge-decay/presets.js.map +1 -1
  149. package/dist/eval/experiments/edge-decay/reference-extractor.d.ts +2 -1
  150. package/dist/eval/experiments/edge-decay/reference-extractor.d.ts.map +1 -1
  151. package/dist/eval/experiments/edge-decay/reference-extractor.js +26 -40
  152. package/dist/eval/experiments/edge-decay/reference-extractor.js.map +1 -1
  153. package/dist/eval/experiments/edge-decay/reference-types.d.ts +24 -17
  154. package/dist/eval/experiments/edge-decay/reference-types.d.ts.map +1 -1
  155. package/dist/eval/experiments/edge-decay/reference-types.js +3 -0
  156. package/dist/eval/experiments/edge-decay/reference-types.js.map +1 -1
  157. package/dist/eval/experiments/edge-decay/retrieval-ranking.d.ts +8 -8
  158. package/dist/eval/experiments/edge-decay/retrieval-ranking.d.ts.map +1 -1
  159. package/dist/eval/experiments/edge-decay/retrieval-ranking.js +77 -133
  160. package/dist/eval/experiments/edge-decay/retrieval-ranking.js.map +1 -1
  161. package/dist/eval/experiments/edge-decay/run-experiments.d.ts +7 -3
  162. package/dist/eval/experiments/edge-decay/run-experiments.d.ts.map +1 -1
  163. package/dist/eval/experiments/edge-decay/run-experiments.js +71 -52
  164. package/dist/eval/experiments/edge-decay/run-experiments.js.map +1 -1
  165. package/dist/eval/experiments/edge-decay/simulate.d.ts +1 -1
  166. package/dist/eval/experiments/edge-decay/simulate.d.ts.map +1 -1
  167. package/dist/eval/experiments/edge-decay/simulate.js +7 -19
  168. package/dist/eval/experiments/edge-decay/simulate.js.map +1 -1
  169. package/dist/eval/experiments/hdbscan-sweep.d.ts.map +1 -1
  170. package/dist/eval/experiments/hdbscan-sweep.js +2 -6
  171. package/dist/eval/experiments/hdbscan-sweep.js.map +1 -1
  172. package/dist/eval/experiments/single-model-run.d.ts.map +1 -1
  173. package/dist/eval/experiments/single-model-run.js +2 -2
  174. package/dist/eval/experiments/single-model-run.js.map +1 -1
  175. package/dist/eval/experiments/thinking-ablation.d.ts.map +1 -1
  176. package/dist/eval/experiments/thinking-ablation.js +1 -1
  177. package/dist/eval/experiments/thinking-ablation.js.map +1 -1
  178. package/dist/eval/experiments/topic-continuity/hybrid-classifier.d.ts.map +1 -1
  179. package/dist/eval/experiments/topic-continuity/hybrid-classifier.js +54 -6
  180. package/dist/eval/experiments/topic-continuity/hybrid-classifier.js.map +1 -1
  181. package/dist/eval/experiments/topic-continuity/labeler.d.ts.map +1 -1
  182. package/dist/eval/experiments/topic-continuity/labeler.js +1 -4
  183. package/dist/eval/experiments/topic-continuity/labeler.js.map +1 -1
  184. package/dist/eval/experiments/topic-continuity/run-experiment.d.ts.map +1 -1
  185. package/dist/eval/experiments/topic-continuity/run-experiment.js +5 -13
  186. package/dist/eval/experiments/topic-continuity/run-experiment.js.map +1 -1
  187. package/dist/eval/experiments/truncation.d.ts.map +1 -1
  188. package/dist/eval/experiments/truncation.js.map +1 -1
  189. package/dist/eval/experiments/types.d.ts.map +1 -1
  190. package/dist/eval/experiments/types.js.map +1 -1
  191. package/dist/eval/metrics.d.ts.map +1 -1
  192. package/dist/eval/metrics.js.map +1 -1
  193. package/dist/hooks/claudemd-generator.d.ts.map +1 -1
  194. package/dist/hooks/claudemd-generator.js +3 -4
  195. package/dist/hooks/claudemd-generator.js.map +1 -1
  196. package/dist/hooks/hook-utils.d.ts.map +1 -1
  197. package/dist/hooks/hook-utils.js +0 -2
  198. package/dist/hooks/hook-utils.js.map +1 -1
  199. package/dist/hooks/pre-compact.d.ts.map +1 -1
  200. package/dist/hooks/pre-compact.js +4 -2
  201. package/dist/hooks/pre-compact.js.map +1 -1
  202. package/dist/hooks/session-end.d.ts.map +1 -1
  203. package/dist/hooks/session-end.js +4 -2
  204. package/dist/hooks/session-end.js.map +1 -1
  205. package/dist/hooks/session-start.d.ts.map +1 -1
  206. package/dist/hooks/session-start.js +3 -5
  207. package/dist/hooks/session-start.js.map +1 -1
  208. package/dist/index.d.ts +0 -1
  209. package/dist/index.d.ts.map +1 -1
  210. package/dist/index.js +0 -2
  211. package/dist/index.js.map +1 -1
  212. package/dist/ingest/batch-ingest.d.ts.map +1 -1
  213. package/dist/ingest/batch-ingest.js.map +1 -1
  214. package/dist/ingest/brief-debrief-detector.d.ts +6 -13
  215. package/dist/ingest/brief-debrief-detector.d.ts.map +1 -1
  216. package/dist/ingest/brief-debrief-detector.js +9 -16
  217. package/dist/ingest/brief-debrief-detector.js.map +1 -1
  218. package/dist/ingest/cross-session-linker.d.ts +2 -1
  219. package/dist/ingest/cross-session-linker.d.ts.map +1 -1
  220. package/dist/ingest/cross-session-linker.js +17 -7
  221. package/dist/ingest/cross-session-linker.js.map +1 -1
  222. package/dist/ingest/edge-creator.d.ts +14 -40
  223. package/dist/ingest/edge-creator.d.ts.map +1 -1
  224. package/dist/ingest/edge-creator.js +34 -132
  225. package/dist/ingest/edge-creator.js.map +1 -1
  226. package/dist/ingest/edge-detector.d.ts +27 -12
  227. package/dist/ingest/edge-detector.d.ts.map +1 -1
  228. package/dist/ingest/edge-detector.js +68 -200
  229. package/dist/ingest/edge-detector.js.map +1 -1
  230. package/dist/ingest/index.d.ts +3 -3
  231. package/dist/ingest/index.d.ts.map +1 -1
  232. package/dist/ingest/index.js +3 -3
  233. package/dist/ingest/index.js.map +1 -1
  234. package/dist/ingest/ingest-session.d.ts +1 -8
  235. package/dist/ingest/ingest-session.d.ts.map +1 -1
  236. package/dist/ingest/ingest-session.js +54 -107
  237. package/dist/ingest/ingest-session.js.map +1 -1
  238. package/dist/ingest/rebuild-edges.d.ts +17 -0
  239. package/dist/ingest/rebuild-edges.d.ts.map +1 -0
  240. package/dist/ingest/rebuild-edges.js +97 -0
  241. package/dist/ingest/rebuild-edges.js.map +1 -0
  242. package/dist/maintenance/scheduler.d.ts +2 -3
  243. package/dist/maintenance/scheduler.d.ts.map +1 -1
  244. package/dist/maintenance/scheduler.js +14 -23
  245. package/dist/maintenance/scheduler.js.map +1 -1
  246. package/dist/maintenance/tasks/cleanup-vectors.d.ts +3 -1
  247. package/dist/maintenance/tasks/cleanup-vectors.d.ts.map +1 -1
  248. package/dist/maintenance/tasks/cleanup-vectors.js +6 -4
  249. package/dist/maintenance/tasks/cleanup-vectors.js.map +1 -1
  250. package/dist/maintenance/tasks/index.d.ts +0 -1
  251. package/dist/maintenance/tasks/index.d.ts.map +1 -1
  252. package/dist/maintenance/tasks/index.js +0 -1
  253. package/dist/maintenance/tasks/index.js.map +1 -1
  254. package/dist/mcp/index.d.ts +1 -1
  255. package/dist/mcp/index.d.ts.map +1 -1
  256. package/dist/mcp/index.js +1 -1
  257. package/dist/mcp/index.js.map +1 -1
  258. package/dist/mcp/server.d.ts.map +1 -1
  259. package/dist/mcp/server.js +7 -6
  260. package/dist/mcp/server.js.map +1 -1
  261. package/dist/mcp/tools.d.ts +5 -5
  262. package/dist/mcp/tools.d.ts.map +1 -1
  263. package/dist/mcp/tools.js +42 -36
  264. package/dist/mcp/tools.js.map +1 -1
  265. package/dist/models/device-detector.d.ts.map +1 -1
  266. package/dist/models/device-detector.js +20 -10
  267. package/dist/models/device-detector.js.map +1 -1
  268. package/dist/models/embedder.d.ts.map +1 -1
  269. package/dist/models/embedder.js +5 -2
  270. package/dist/models/embedder.js.map +1 -1
  271. package/dist/models/model-registry.d.ts.map +1 -1
  272. package/dist/models/model-registry.js.map +1 -1
  273. package/dist/parser/chunker.d.ts +5 -40
  274. package/dist/parser/chunker.d.ts.map +1 -1
  275. package/dist/parser/chunker.js +5 -111
  276. package/dist/parser/chunker.js.map +1 -1
  277. package/dist/parser/session-reader.d.ts.map +1 -1
  278. package/dist/parser/session-reader.js +3 -6
  279. package/dist/parser/session-reader.js.map +1 -1
  280. package/dist/parser/turn-assembler.d.ts.map +1 -1
  281. package/dist/parser/turn-assembler.js +0 -1
  282. package/dist/parser/turn-assembler.js.map +1 -1
  283. package/dist/parser/types.d.ts.map +1 -1
  284. package/dist/report/reporter.d.ts.map +1 -1
  285. package/dist/report/reporter.js +1 -3
  286. package/dist/report/reporter.js.map +1 -1
  287. package/dist/retrieval/chain-assembler.d.ts +58 -0
  288. package/dist/retrieval/chain-assembler.d.ts.map +1 -0
  289. package/dist/retrieval/chain-assembler.js +126 -0
  290. package/dist/retrieval/chain-assembler.js.map +1 -0
  291. package/dist/retrieval/chain-walker.d.ts +57 -0
  292. package/dist/retrieval/chain-walker.d.ts.map +1 -0
  293. package/dist/retrieval/chain-walker.js +121 -0
  294. package/dist/retrieval/chain-walker.js.map +1 -0
  295. package/dist/retrieval/cluster-expander.d.ts.map +1 -1
  296. package/dist/retrieval/cluster-expander.js +3 -3
  297. package/dist/retrieval/cluster-expander.js.map +1 -1
  298. package/dist/retrieval/context-assembler.d.ts +13 -36
  299. package/dist/retrieval/context-assembler.d.ts.map +1 -1
  300. package/dist/retrieval/context-assembler.js +50 -287
  301. package/dist/retrieval/context-assembler.js.map +1 -1
  302. package/dist/retrieval/index.d.ts +8 -4
  303. package/dist/retrieval/index.d.ts.map +1 -1
  304. package/dist/retrieval/index.js +7 -3
  305. package/dist/retrieval/index.js.map +1 -1
  306. package/dist/retrieval/rrf.d.ts.map +1 -1
  307. package/dist/retrieval/rrf.js +4 -2
  308. package/dist/retrieval/rrf.js.map +1 -1
  309. package/dist/retrieval/search-assembler.d.ts +59 -0
  310. package/dist/retrieval/search-assembler.d.ts.map +1 -0
  311. package/dist/retrieval/search-assembler.js +209 -0
  312. package/dist/retrieval/search-assembler.js.map +1 -0
  313. package/dist/retrieval/session-reconstructor.d.ts.map +1 -1
  314. package/dist/retrieval/session-reconstructor.js +9 -7
  315. package/dist/retrieval/session-reconstructor.js.map +1 -1
  316. package/dist/storage/archive.d.ts +0 -2
  317. package/dist/storage/archive.d.ts.map +1 -1
  318. package/dist/storage/archive.js +18 -12
  319. package/dist/storage/archive.js.map +1 -1
  320. package/dist/storage/checkpoint-store.d.ts +0 -1
  321. package/dist/storage/checkpoint-store.d.ts.map +1 -1
  322. package/dist/storage/checkpoint-store.js +5 -7
  323. package/dist/storage/checkpoint-store.js.map +1 -1
  324. package/dist/storage/chunk-store.d.ts.map +1 -1
  325. package/dist/storage/chunk-store.js +15 -17
  326. package/dist/storage/chunk-store.js.map +1 -1
  327. package/dist/storage/cluster-store.d.ts.map +1 -1
  328. package/dist/storage/cluster-store.js.map +1 -1
  329. package/dist/storage/db.d.ts.map +1 -1
  330. package/dist/storage/db.js.map +1 -1
  331. package/dist/storage/edge-store.d.ts +17 -30
  332. package/dist/storage/edge-store.d.ts.map +1 -1
  333. package/dist/storage/edge-store.js +43 -123
  334. package/dist/storage/edge-store.js.map +1 -1
  335. package/dist/storage/embedding-cache.d.ts.map +1 -1
  336. package/dist/storage/embedding-cache.js +1 -3
  337. package/dist/storage/embedding-cache.js.map +1 -1
  338. package/dist/storage/encryption.d.ts.map +1 -1
  339. package/dist/storage/encryption.js +4 -15
  340. package/dist/storage/encryption.js.map +1 -1
  341. package/dist/storage/index.d.ts +1 -4
  342. package/dist/storage/index.d.ts.map +1 -1
  343. package/dist/storage/index.js +1 -5
  344. package/dist/storage/index.js.map +1 -1
  345. package/dist/storage/keyword-store.d.ts.map +1 -1
  346. package/dist/storage/keyword-store.js +11 -7
  347. package/dist/storage/keyword-store.js.map +1 -1
  348. package/dist/storage/migrations.d.ts.map +1 -1
  349. package/dist/storage/migrations.js +56 -4
  350. package/dist/storage/migrations.js.map +1 -1
  351. package/dist/storage/schema.sql +8 -20
  352. package/dist/storage/types.d.ts +12 -26
  353. package/dist/storage/types.d.ts.map +1 -1
  354. package/dist/storage/types.js +1 -2
  355. package/dist/storage/types.js.map +1 -1
  356. package/dist/storage/vector-store.d.ts +9 -15
  357. package/dist/storage/vector-store.d.ts.map +1 -1
  358. package/dist/storage/vector-store.js +64 -43
  359. package/dist/storage/vector-store.js.map +1 -1
  360. package/dist/utils/angular-distance.d.ts.map +1 -1
  361. package/dist/utils/angular-distance.js.map +1 -1
  362. package/dist/utils/logger.d.ts.map +1 -1
  363. package/dist/utils/logger.js.map +1 -1
  364. package/dist/utils/secret-store.d.ts.map +1 -1
  365. package/dist/utils/secret-store.js +17 -13
  366. package/dist/utils/secret-store.js.map +1 -1
  367. package/dist/utils/secure-buffer.d.ts.map +1 -1
  368. package/dist/utils/secure-buffer.js.map +1 -1
  369. package/package.json +6 -5
  370. package/src/dashboard/client/package-lock.json +3 -3
  371. package/src/dashboard/client/package.json +3 -3
  372. package/dist/dashboard/client/assets/index-CMUKy4f9.css +0 -1
  373. package/dist/dashboard/client/assets/index-esv8TpCN.js +0 -168
  374. package/dist/eval/collection-benchmark/graph-value.d.ts +0 -16
  375. package/dist/eval/collection-benchmark/graph-value.d.ts.map +0 -1
  376. package/dist/eval/collection-benchmark/graph-value.js +0 -162
  377. package/dist/eval/collection-benchmark/graph-value.js.map +0 -1
  378. package/dist/eval/experiments/vector-decay-shapes/curve-shapes-experiment.d.ts +0 -10
  379. package/dist/eval/experiments/vector-decay-shapes/curve-shapes-experiment.d.ts.map +0 -1
  380. package/dist/eval/experiments/vector-decay-shapes/curve-shapes-experiment.js +0 -229
  381. package/dist/eval/experiments/vector-decay-shapes/curve-shapes-experiment.js.map +0 -1
  382. package/dist/eval/experiments/vector-decay-shapes/graph-range-experiment.d.ts +0 -12
  383. package/dist/eval/experiments/vector-decay-shapes/graph-range-experiment.d.ts.map +0 -1
  384. package/dist/eval/experiments/vector-decay-shapes/graph-range-experiment.js +0 -316
  385. package/dist/eval/experiments/vector-decay-shapes/graph-range-experiment.js.map +0 -1
  386. package/dist/eval/experiments/vector-decay-shapes/hop-decay.d.ts +0 -19
  387. package/dist/eval/experiments/vector-decay-shapes/hop-decay.d.ts.map +0 -1
  388. package/dist/eval/experiments/vector-decay-shapes/hop-decay.js +0 -127
  389. package/dist/eval/experiments/vector-decay-shapes/hop-decay.js.map +0 -1
  390. package/dist/eval/experiments/vector-decay-shapes/index.d.ts +0 -11
  391. package/dist/eval/experiments/vector-decay-shapes/index.d.ts.map +0 -1
  392. package/dist/eval/experiments/vector-decay-shapes/index.js +0 -11
  393. package/dist/eval/experiments/vector-decay-shapes/index.js.map +0 -1
  394. package/dist/eval/experiments/vector-decay-shapes/path-traversal-experiment.d.ts +0 -14
  395. package/dist/eval/experiments/vector-decay-shapes/path-traversal-experiment.d.ts.map +0 -1
  396. package/dist/eval/experiments/vector-decay-shapes/path-traversal-experiment.js +0 -274
  397. package/dist/eval/experiments/vector-decay-shapes/path-traversal-experiment.js.map +0 -1
  398. package/dist/eval/experiments/vector-decay-shapes/presets.d.ts +0 -36
  399. package/dist/eval/experiments/vector-decay-shapes/presets.d.ts.map +0 -1
  400. package/dist/eval/experiments/vector-decay-shapes/presets.js +0 -157
  401. package/dist/eval/experiments/vector-decay-shapes/presets.js.map +0 -1
  402. package/dist/eval/experiments/vector-decay-shapes/run-experiment.d.ts +0 -20
  403. package/dist/eval/experiments/vector-decay-shapes/run-experiment.d.ts.map +0 -1
  404. package/dist/eval/experiments/vector-decay-shapes/run-experiment.js +0 -504
  405. package/dist/eval/experiments/vector-decay-shapes/run-experiment.js.map +0 -1
  406. package/dist/eval/experiments/vector-decay-shapes/types.d.ts +0 -111
  407. package/dist/eval/experiments/vector-decay-shapes/types.d.ts.map +0 -1
  408. package/dist/eval/experiments/vector-decay-shapes/types.js +0 -15
  409. package/dist/eval/experiments/vector-decay-shapes/types.js.map +0 -1
  410. package/dist/eval/experiments/vector-decay-sweep/index.d.ts +0 -7
  411. package/dist/eval/experiments/vector-decay-sweep/index.d.ts.map +0 -1
  412. package/dist/eval/experiments/vector-decay-sweep/index.js +0 -7
  413. package/dist/eval/experiments/vector-decay-sweep/index.js.map +0 -1
  414. package/dist/eval/experiments/vector-decay-sweep/run-sweep.d.ts +0 -30
  415. package/dist/eval/experiments/vector-decay-sweep/run-sweep.d.ts.map +0 -1
  416. package/dist/eval/experiments/vector-decay-sweep/run-sweep.js +0 -378
  417. package/dist/eval/experiments/vector-decay-sweep/run-sweep.js.map +0 -1
  418. package/dist/eval/experiments/vector-decay-sweep/types.d.ts +0 -109
  419. package/dist/eval/experiments/vector-decay-sweep/types.d.ts.map +0 -1
  420. package/dist/eval/experiments/vector-decay-sweep/types.js +0 -16
  421. package/dist/eval/experiments/vector-decay-sweep/types.js.map +0 -1
  422. package/dist/maintenance/tasks/prune-graph.d.ts +0 -12
  423. package/dist/maintenance/tasks/prune-graph.d.ts.map +0 -1
  424. package/dist/maintenance/tasks/prune-graph.js +0 -23
  425. package/dist/maintenance/tasks/prune-graph.js.map +0 -1
  426. package/dist/retrieval/traverser.d.ts +0 -66
  427. package/dist/retrieval/traverser.d.ts.map +0 -1
  428. package/dist/retrieval/traverser.js +0 -160
  429. package/dist/retrieval/traverser.js.map +0 -1
  430. package/dist/storage/clock-store.d.ts +0 -80
  431. package/dist/storage/clock-store.d.ts.map +0 -1
  432. package/dist/storage/clock-store.js +0 -155
  433. package/dist/storage/clock-store.js.map +0 -1
  434. package/dist/storage/decay.d.ts +0 -125
  435. package/dist/storage/decay.d.ts.map +0 -1
  436. package/dist/storage/decay.js +0 -276
  437. package/dist/storage/decay.js.map +0 -1
  438. package/dist/storage/pruner.d.ts +0 -111
  439. package/dist/storage/pruner.d.ts.map +0 -1
  440. package/dist/storage/pruner.js +0 -280
  441. package/dist/storage/pruner.js.map +0 -1
  442. package/dist/temporal/clock-compactor.d.ts +0 -65
  443. package/dist/temporal/clock-compactor.d.ts.map +0 -1
  444. package/dist/temporal/clock-compactor.js +0 -157
  445. package/dist/temporal/clock-compactor.js.map +0 -1
  446. package/dist/temporal/index.d.ts +0 -6
  447. package/dist/temporal/index.d.ts.map +0 -1
  448. package/dist/temporal/index.js +0 -6
  449. package/dist/temporal/index.js.map +0 -1
  450. package/dist/temporal/vector-clock.d.ts +0 -143
  451. package/dist/temporal/vector-clock.d.ts.map +0 -1
  452. package/dist/temporal/vector-clock.js +0 -231
  453. package/dist/temporal/vector-clock.js.map +0 -1
  454. package/dist/utils/keychain.d.ts +0 -43
  455. package/dist/utils/keychain.d.ts.map +0 -1
  456. package/dist/utils/keychain.js +0 -82
  457. 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":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAsB,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,eAAe,EAAc,MAAM,mBAAmB,CAAC;AA0C5E;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAwB;IAC1D,OAAO,mBAAmB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAwB;IAC3D,OAAO,mBAAmB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,mBAAmB,CAChC,OAAwB,EACxB,SAAiC;IAEjC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,MAAM,EAAE,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,SAAS,GAAG,KAAK,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC;IAEjG,sBAAsB;IACtB,MAAM,aAAa,GAAkB;QACnC,KAAK;QACL,gBAAgB;QAChB,aAAa;QACb,SAAS;QACT,iBAAiB;KAClB,CAAC;IAEF,MAAM,YAAY,GAAG,MAAM,aAAa,CAAC,aAAa,CAAC,CAAC;IAExD,IAAI,YAAY,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtC,OAAO;YACL,IAAI,EAAE,YAAY,CAAC,IAAI;YACvB,UAAU,EAAE,YAAY,CAAC,UAAU;YACnC,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACtC,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,WAAW,EAAE,CAAC,CAAC,WAAW;gBAC1B,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,OAAO,EAAE,CAAC,CAAC,OAAO;aACnB,CAAC,CAAC;YACH,IAAI,EAAE,iBAAiB;YACvB,WAAW,EAAE,CAAC;YACd,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;SACnC,CAAC;IACJ,CAAC;IAED,4BAA4B;IAC5B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC,OAAO,EAAE;QACpD,SAAS;QACT,WAAW,EAAE,SAAS;QACtB,cAAc,EAAE,YAAY,CAAC,cAAc;KAC5C,CAAC,CAAC;IAEH,uBAAuB;IACvB,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAE1C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,6BAA6B;QAC7B,OAAO;YACL,IAAI,EAAE,YAAY,CAAC,IAAI;YACvB,UAAU,EAAE,YAAY,CAAC,UAAU;YACnC,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACtC,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,WAAW,EAAE,CAAC,CAAC,WAAW;gBAC1B,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,OAAO,EAAE,CAAC,CAAC,OAAO;aACnB,CAAC,CAAC;YACH,IAAI,EAAE,iBAAiB;YACvB,WAAW,EAAE,CAAC;YACd,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;SACnC,CAAC;IACJ,CAAC;IAED,+BAA+B;IAC/B,MAAM,SAAS,GAAG,WAAW,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAEpD,OAAO;QACL,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,UAAU,EAAE,SAAS,CAAC,UAAU;QAChC,MAAM,EAAE,SAAS,CAAC,MAAM;QACxB,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,SAAS,CAAC,QAAQ,CAAC,MAAM;QACtC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;KACnC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAClB,KAAY,EACZ,SAAiC;IAWjC,wDAAwD;IACxD,MAAM,aAAa,GAAG,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;IAC5F,MAAM,UAAU,GAAG,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;IAE7F,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,YAAY,GAKb,EAAE,CAAC;IACR,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,WAAW,GAAG,KAAK,CAAC,YAAY,IAAI,iBAAiB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAE3E,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;QACpF,WAAW,IAAI,WAAW,CAAC;QAC3B,YAAY,CAAC,IAAI,CAAC;YAChB,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC;YACjB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,MAAM,EAAE,KAAK,CAAC,WAAW;YACzB,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;SACjF,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC;QAC/B,UAAU,EAAE,WAAW;QACvB,MAAM,EAAE,YAAY;KACrB,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAC3B,KAAkB,EAClB,OAAe,EACf,QAAgB,EAChB,KAAa;IAEb,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,kBAAkB,EAAE,CAAC;IAC5D,OAAO,IAAI,QAAQ,IAAI,KAAK,eAAe,KAAK,CAAC,WAAW,YAAY,IAAI,MAAM,OAAO,EAAE,CAAC;AAC9F,CAAC"}
@@ -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;AAOH,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,CAkEd"}
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, } from '../storage/cluster-store.js';
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":"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"}
1
+ {"version":3,"file":"cluster-expander.js","sourceRoot":"","sources":["../../src/retrieval/cluster-expander.ts"],"names":[],"mappings":"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"}
@@ -1,44 +1,29 @@
1
1
  /**
2
2
  * Context assembly for memory retrieval.
3
- * Combines vector search with graph traversal to assemble relevant context.
4
- */
5
- /**
6
- * Retrieval mode determines traversal direction and ranking.
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 RetrievalRange = 'short' | 'long' | 'auto';
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: RetrievalMode;
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' | 'graph';
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: retrieve context relevant to a query.
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
- * Explain: retrieve context that explains how we got to current state.
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;;;GAGG;AAkBH;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;AAE7D;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0EAA0E;IAC1E,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAClC,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qBAAqB;IACrB,IAAI,EAAE,aAAa,CAAC;IACpB,8EAA8E;IAC9E,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,oDAAoD;IACpD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,oEAAoE;IACpE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,sEAAsE;IACtE,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;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,GAAG,OAAO,CAAC;KACrD,CAAC,CAAC;IACH,8BAA8B;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,iCAAiC;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,mFAAmF;IACnF,YAAY,EAAE,MAAM,CAAC;CACtB;AAiCD;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAgM3F;AAyGD;;GAEG;AACH,wBAAsB,MAAM,CAC1B,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,OAAO,CAAC,gBAAgB,CAAM,GACtC,OAAO,CAAC,iBAAiB,CAAC,CAM5B;AAED;;GAEG;AACH,wBAAsB,OAAO,CAC3B,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,OAAO,CAAC,gBAAgB,CAAM,GACtC,OAAO,CAAC,iBAAiB,CAAC,CAM5B;AAED;;GAEG;AACH,wBAAsB,OAAO,CAC3B,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,OAAO,CAAC,gBAAgB,CAAM,GACtC,OAAO,CAAC,iBAAiB,CAAC,CAM5B;AAED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAKtD"}
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"}