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.
Files changed (706) hide show
  1. package/LICENSE +19 -0
  2. package/README.md +332 -0
  3. package/config.schema.json +254 -0
  4. package/dist/cli/commands/archive.d.ts +4 -0
  5. package/dist/cli/commands/archive.d.ts.map +1 -0
  6. package/dist/cli/commands/archive.js +76 -0
  7. package/dist/cli/commands/archive.js.map +1 -0
  8. package/dist/cli/commands/benchmark-collection.d.ts +8 -0
  9. package/dist/cli/commands/benchmark-collection.d.ts.map +1 -0
  10. package/dist/cli/commands/benchmark-collection.js +146 -0
  11. package/dist/cli/commands/benchmark-collection.js.map +1 -0
  12. package/dist/cli/commands/config.d.ts +3 -0
  13. package/dist/cli/commands/config.d.ts.map +1 -0
  14. package/dist/cli/commands/config.js +69 -0
  15. package/dist/cli/commands/config.js.map +1 -0
  16. package/dist/cli/commands/dashboard.d.ts +3 -0
  17. package/dist/cli/commands/dashboard.d.ts.map +1 -0
  18. package/dist/cli/commands/dashboard.js +12 -0
  19. package/dist/cli/commands/dashboard.js.map +1 -0
  20. package/dist/cli/commands/encryption.d.ts +3 -0
  21. package/dist/cli/commands/encryption.d.ts.map +1 -0
  22. package/dist/cli/commands/encryption.js +207 -0
  23. package/dist/cli/commands/encryption.js.map +1 -0
  24. package/dist/cli/commands/hook.d.ts +3 -0
  25. package/dist/cli/commands/hook.d.ts.map +1 -0
  26. package/dist/cli/commands/hook.js +35 -0
  27. package/dist/cli/commands/hook.js.map +1 -0
  28. package/dist/cli/commands/ingest.d.ts +4 -0
  29. package/dist/cli/commands/ingest.d.ts.map +1 -0
  30. package/dist/cli/commands/ingest.js +31 -0
  31. package/dist/cli/commands/ingest.js.map +1 -0
  32. package/dist/cli/commands/init.d.ts +3 -0
  33. package/dist/cli/commands/init.d.ts.map +1 -0
  34. package/dist/cli/commands/init.js +680 -0
  35. package/dist/cli/commands/init.js.map +1 -0
  36. package/dist/cli/commands/maintenance.d.ts +3 -0
  37. package/dist/cli/commands/maintenance.d.ts.map +1 -0
  38. package/dist/cli/commands/maintenance.js +67 -0
  39. package/dist/cli/commands/maintenance.js.map +1 -0
  40. package/dist/cli/commands/search.d.ts +3 -0
  41. package/dist/cli/commands/search.d.ts.map +1 -0
  42. package/dist/cli/commands/search.js +16 -0
  43. package/dist/cli/commands/search.js.map +1 -0
  44. package/dist/cli/commands/serve.d.ts +3 -0
  45. package/dist/cli/commands/serve.d.ts.map +1 -0
  46. package/dist/cli/commands/serve.js +19 -0
  47. package/dist/cli/commands/serve.js.map +1 -0
  48. package/dist/cli/commands/stats.d.ts +4 -0
  49. package/dist/cli/commands/stats.d.ts.map +1 -0
  50. package/dist/cli/commands/stats.js +49 -0
  51. package/dist/cli/commands/stats.js.map +1 -0
  52. package/dist/cli/commands/uninstall.d.ts +3 -0
  53. package/dist/cli/commands/uninstall.d.ts.map +1 -0
  54. package/dist/cli/commands/uninstall.js +10 -0
  55. package/dist/cli/commands/uninstall.js.map +1 -0
  56. package/dist/cli/index.d.ts +8 -0
  57. package/dist/cli/index.d.ts.map +1 -0
  58. package/dist/cli/index.js +86 -0
  59. package/dist/cli/index.js.map +1 -0
  60. package/dist/cli/skill-templates.d.ts +19 -0
  61. package/dist/cli/skill-templates.d.ts.map +1 -0
  62. package/dist/cli/skill-templates.js +1128 -0
  63. package/dist/cli/skill-templates.js.map +1 -0
  64. package/dist/cli/types.d.ts +10 -0
  65. package/dist/cli/types.d.ts.map +1 -0
  66. package/dist/cli/types.js +5 -0
  67. package/dist/cli/types.js.map +1 -0
  68. package/dist/cli/uninstall.d.ts +66 -0
  69. package/dist/cli/uninstall.d.ts.map +1 -0
  70. package/dist/cli/uninstall.js +490 -0
  71. package/dist/cli/uninstall.js.map +1 -0
  72. package/dist/cli/utils.d.ts +26 -0
  73. package/dist/cli/utils.d.ts.map +1 -0
  74. package/dist/cli/utils.js +105 -0
  75. package/dist/cli/utils.js.map +1 -0
  76. package/dist/clusters/cluster-manager.d.ts +96 -0
  77. package/dist/clusters/cluster-manager.d.ts.map +1 -0
  78. package/dist/clusters/cluster-manager.js +321 -0
  79. package/dist/clusters/cluster-manager.js.map +1 -0
  80. package/dist/clusters/cluster-refresh.d.ts +56 -0
  81. package/dist/clusters/cluster-refresh.d.ts.map +1 -0
  82. package/dist/clusters/cluster-refresh.js +187 -0
  83. package/dist/clusters/cluster-refresh.js.map +1 -0
  84. package/dist/clusters/hdbscan/cluster-extraction.d.ts +26 -0
  85. package/dist/clusters/hdbscan/cluster-extraction.d.ts.map +1 -0
  86. package/dist/clusters/hdbscan/cluster-extraction.js +232 -0
  87. package/dist/clusters/hdbscan/cluster-extraction.js.map +1 -0
  88. package/dist/clusters/hdbscan/core-distance-worker.d.ts +6 -0
  89. package/dist/clusters/hdbscan/core-distance-worker.d.ts.map +1 -0
  90. package/dist/clusters/hdbscan/core-distance-worker.js +54 -0
  91. package/dist/clusters/hdbscan/core-distance-worker.js.map +1 -0
  92. package/dist/clusters/hdbscan/core-distance.d.ts +26 -0
  93. package/dist/clusters/hdbscan/core-distance.d.ts.map +1 -0
  94. package/dist/clusters/hdbscan/core-distance.js +94 -0
  95. package/dist/clusters/hdbscan/core-distance.js.map +1 -0
  96. package/dist/clusters/hdbscan/distance-cache.d.ts +46 -0
  97. package/dist/clusters/hdbscan/distance-cache.d.ts.map +1 -0
  98. package/dist/clusters/hdbscan/distance-cache.js +84 -0
  99. package/dist/clusters/hdbscan/distance-cache.js.map +1 -0
  100. package/dist/clusters/hdbscan/hierarchy.d.ts +34 -0
  101. package/dist/clusters/hdbscan/hierarchy.d.ts.map +1 -0
  102. package/dist/clusters/hdbscan/hierarchy.js +442 -0
  103. package/dist/clusters/hdbscan/hierarchy.js.map +1 -0
  104. package/dist/clusters/hdbscan/incremental.d.ts +30 -0
  105. package/dist/clusters/hdbscan/incremental.d.ts.map +1 -0
  106. package/dist/clusters/hdbscan/incremental.js +130 -0
  107. package/dist/clusters/hdbscan/incremental.js.map +1 -0
  108. package/dist/clusters/hdbscan/kd-tree.d.ts +51 -0
  109. package/dist/clusters/hdbscan/kd-tree.d.ts.map +1 -0
  110. package/dist/clusters/hdbscan/kd-tree.js +130 -0
  111. package/dist/clusters/hdbscan/kd-tree.js.map +1 -0
  112. package/dist/clusters/hdbscan/min-heap.d.ts +62 -0
  113. package/dist/clusters/hdbscan/min-heap.d.ts.map +1 -0
  114. package/dist/clusters/hdbscan/min-heap.js +139 -0
  115. package/dist/clusters/hdbscan/min-heap.js.map +1 -0
  116. package/dist/clusters/hdbscan/mst.d.ts +20 -0
  117. package/dist/clusters/hdbscan/mst.d.ts.map +1 -0
  118. package/dist/clusters/hdbscan/mst.js +77 -0
  119. package/dist/clusters/hdbscan/mst.js.map +1 -0
  120. package/dist/clusters/hdbscan/probabilities.d.ts +37 -0
  121. package/dist/clusters/hdbscan/probabilities.d.ts.map +1 -0
  122. package/dist/clusters/hdbscan/probabilities.js +149 -0
  123. package/dist/clusters/hdbscan/probabilities.js.map +1 -0
  124. package/dist/clusters/hdbscan/types.d.ts +123 -0
  125. package/dist/clusters/hdbscan/types.d.ts.map +1 -0
  126. package/dist/clusters/hdbscan/types.js +5 -0
  127. package/dist/clusters/hdbscan/types.js.map +1 -0
  128. package/dist/clusters/hdbscan/union-find.d.ts +51 -0
  129. package/dist/clusters/hdbscan/union-find.d.ts.map +1 -0
  130. package/dist/clusters/hdbscan/union-find.js +115 -0
  131. package/dist/clusters/hdbscan/union-find.js.map +1 -0
  132. package/dist/clusters/hdbscan.d.ts +71 -0
  133. package/dist/clusters/hdbscan.d.ts.map +1 -0
  134. package/dist/clusters/hdbscan.js +283 -0
  135. package/dist/clusters/hdbscan.js.map +1 -0
  136. package/dist/clusters/index.d.ts +8 -0
  137. package/dist/clusters/index.d.ts.map +1 -0
  138. package/dist/clusters/index.js +8 -0
  139. package/dist/clusters/index.js.map +1 -0
  140. package/dist/config/index.d.ts +6 -0
  141. package/dist/config/index.d.ts.map +1 -0
  142. package/dist/config/index.js +6 -0
  143. package/dist/config/index.js.map +1 -0
  144. package/dist/config/loader.d.ts +105 -0
  145. package/dist/config/loader.d.ts.map +1 -0
  146. package/dist/config/loader.js +339 -0
  147. package/dist/config/loader.js.map +1 -0
  148. package/dist/config/memory-config.d.ts +109 -0
  149. package/dist/config/memory-config.d.ts.map +1 -0
  150. package/dist/config/memory-config.js +182 -0
  151. package/dist/config/memory-config.js.map +1 -0
  152. package/dist/core/benchmark-types.d.ts +62 -0
  153. package/dist/core/benchmark-types.d.ts.map +1 -0
  154. package/dist/core/benchmark-types.js +11 -0
  155. package/dist/core/benchmark-types.js.map +1 -0
  156. package/dist/core/decay-types.d.ts +111 -0
  157. package/dist/core/decay-types.d.ts.map +1 -0
  158. package/dist/core/decay-types.js +30 -0
  159. package/dist/core/decay-types.js.map +1 -0
  160. package/dist/core/index.d.ts +11 -0
  161. package/dist/core/index.d.ts.map +1 -0
  162. package/dist/core/index.js +9 -0
  163. package/dist/core/index.js.map +1 -0
  164. package/dist/core/lexical-features.d.ts +34 -0
  165. package/dist/core/lexical-features.d.ts.map +1 -0
  166. package/dist/core/lexical-features.js +155 -0
  167. package/dist/core/lexical-features.js.map +1 -0
  168. package/dist/dashboard/client/assets/index-CMUKy4f9.css +1 -0
  169. package/dist/dashboard/client/assets/index-esv8TpCN.js +168 -0
  170. package/dist/dashboard/client/index.html +14 -0
  171. package/dist/dashboard/middleware/async-handler.d.ts +11 -0
  172. package/dist/dashboard/middleware/async-handler.d.ts.map +1 -0
  173. package/dist/dashboard/middleware/async-handler.js +12 -0
  174. package/dist/dashboard/middleware/async-handler.js.map +1 -0
  175. package/dist/dashboard/middleware/error-handler.d.ts +9 -0
  176. package/dist/dashboard/middleware/error-handler.d.ts.map +1 -0
  177. package/dist/dashboard/middleware/error-handler.js +14 -0
  178. package/dist/dashboard/middleware/error-handler.js.map +1 -0
  179. package/dist/dashboard/routes/benchmark-collection.d.ts +11 -0
  180. package/dist/dashboard/routes/benchmark-collection.d.ts.map +1 -0
  181. package/dist/dashboard/routes/benchmark-collection.js +49 -0
  182. package/dist/dashboard/routes/benchmark-collection.js.map +1 -0
  183. package/dist/dashboard/routes/chunks.d.ts +3 -0
  184. package/dist/dashboard/routes/chunks.d.ts.map +1 -0
  185. package/dist/dashboard/routes/chunks.js +25 -0
  186. package/dist/dashboard/routes/chunks.js.map +1 -0
  187. package/dist/dashboard/routes/clusters.d.ts +3 -0
  188. package/dist/dashboard/routes/clusters.d.ts.map +1 -0
  189. package/dist/dashboard/routes/clusters.js +28 -0
  190. package/dist/dashboard/routes/clusters.js.map +1 -0
  191. package/dist/dashboard/routes/edges.d.ts +3 -0
  192. package/dist/dashboard/routes/edges.d.ts.map +1 -0
  193. package/dist/dashboard/routes/edges.js +32 -0
  194. package/dist/dashboard/routes/edges.js.map +1 -0
  195. package/dist/dashboard/routes/graph.d.ts +3 -0
  196. package/dist/dashboard/routes/graph.d.ts.map +1 -0
  197. package/dist/dashboard/routes/graph.js +158 -0
  198. package/dist/dashboard/routes/graph.js.map +1 -0
  199. package/dist/dashboard/routes/projects.d.ts +3 -0
  200. package/dist/dashboard/routes/projects.d.ts.map +1 -0
  201. package/dist/dashboard/routes/projects.js +9 -0
  202. package/dist/dashboard/routes/projects.js.map +1 -0
  203. package/dist/dashboard/routes/search.d.ts +3 -0
  204. package/dist/dashboard/routes/search.d.ts.map +1 -0
  205. package/dist/dashboard/routes/search.js +105 -0
  206. package/dist/dashboard/routes/search.js.map +1 -0
  207. package/dist/dashboard/routes/sessions.d.ts +3 -0
  208. package/dist/dashboard/routes/sessions.d.ts.map +1 -0
  209. package/dist/dashboard/routes/sessions.js +16 -0
  210. package/dist/dashboard/routes/sessions.js.map +1 -0
  211. package/dist/dashboard/routes/stats.d.ts +3 -0
  212. package/dist/dashboard/routes/stats.d.ts.map +1 -0
  213. package/dist/dashboard/routes/stats.js +38 -0
  214. package/dist/dashboard/routes/stats.js.map +1 -0
  215. package/dist/dashboard/server.d.ts +3 -0
  216. package/dist/dashboard/server.d.ts.map +1 -0
  217. package/dist/dashboard/server.js +85 -0
  218. package/dist/dashboard/server.js.map +1 -0
  219. package/dist/eval/annotation-schema.d.ts +41 -0
  220. package/dist/eval/annotation-schema.d.ts.map +1 -0
  221. package/dist/eval/annotation-schema.js +171 -0
  222. package/dist/eval/annotation-schema.js.map +1 -0
  223. package/dist/eval/benchmark-runner.d.ts +15 -0
  224. package/dist/eval/benchmark-runner.d.ts.map +1 -0
  225. package/dist/eval/benchmark-runner.js +93 -0
  226. package/dist/eval/benchmark-runner.js.map +1 -0
  227. package/dist/eval/cluster-evaluator.d.ts +39 -0
  228. package/dist/eval/cluster-evaluator.d.ts.map +1 -0
  229. package/dist/eval/cluster-evaluator.js +51 -0
  230. package/dist/eval/cluster-evaluator.js.map +1 -0
  231. package/dist/eval/code-nl-alignment.d.ts +25 -0
  232. package/dist/eval/code-nl-alignment.d.ts.map +1 -0
  233. package/dist/eval/code-nl-alignment.js +49 -0
  234. package/dist/eval/code-nl-alignment.js.map +1 -0
  235. package/dist/eval/collection-benchmark/graph-value.d.ts +16 -0
  236. package/dist/eval/collection-benchmark/graph-value.d.ts.map +1 -0
  237. package/dist/eval/collection-benchmark/graph-value.js +162 -0
  238. package/dist/eval/collection-benchmark/graph-value.js.map +1 -0
  239. package/dist/eval/collection-benchmark/health.d.ts +12 -0
  240. package/dist/eval/collection-benchmark/health.d.ts.map +1 -0
  241. package/dist/eval/collection-benchmark/health.js +246 -0
  242. package/dist/eval/collection-benchmark/health.js.map +1 -0
  243. package/dist/eval/collection-benchmark/history.d.ts +27 -0
  244. package/dist/eval/collection-benchmark/history.d.ts.map +1 -0
  245. package/dist/eval/collection-benchmark/history.js +134 -0
  246. package/dist/eval/collection-benchmark/history.js.map +1 -0
  247. package/dist/eval/collection-benchmark/latency.d.ts +16 -0
  248. package/dist/eval/collection-benchmark/latency.d.ts.map +1 -0
  249. package/dist/eval/collection-benchmark/latency.js +115 -0
  250. package/dist/eval/collection-benchmark/latency.js.map +1 -0
  251. package/dist/eval/collection-benchmark/reporter.d.ts +18 -0
  252. package/dist/eval/collection-benchmark/reporter.d.ts.map +1 -0
  253. package/dist/eval/collection-benchmark/reporter.js +244 -0
  254. package/dist/eval/collection-benchmark/reporter.js.map +1 -0
  255. package/dist/eval/collection-benchmark/retrieval.d.ts +15 -0
  256. package/dist/eval/collection-benchmark/retrieval.d.ts.map +1 -0
  257. package/dist/eval/collection-benchmark/retrieval.js +203 -0
  258. package/dist/eval/collection-benchmark/retrieval.js.map +1 -0
  259. package/dist/eval/collection-benchmark/runner.d.ts +20 -0
  260. package/dist/eval/collection-benchmark/runner.d.ts.map +1 -0
  261. package/dist/eval/collection-benchmark/runner.js +189 -0
  262. package/dist/eval/collection-benchmark/runner.js.map +1 -0
  263. package/dist/eval/collection-benchmark/sampler.d.ts +18 -0
  264. package/dist/eval/collection-benchmark/sampler.d.ts.map +1 -0
  265. package/dist/eval/collection-benchmark/sampler.js +186 -0
  266. package/dist/eval/collection-benchmark/sampler.js.map +1 -0
  267. package/dist/eval/collection-benchmark/tuning.d.ts +12 -0
  268. package/dist/eval/collection-benchmark/tuning.d.ts.map +1 -0
  269. package/dist/eval/collection-benchmark/tuning.js +222 -0
  270. package/dist/eval/collection-benchmark/tuning.js.map +1 -0
  271. package/dist/eval/collection-benchmark/types.d.ts +183 -0
  272. package/dist/eval/collection-benchmark/types.d.ts.map +1 -0
  273. package/dist/eval/collection-benchmark/types.js +7 -0
  274. package/dist/eval/collection-benchmark/types.js.map +1 -0
  275. package/dist/eval/context-window-test.d.ts +34 -0
  276. package/dist/eval/context-window-test.d.ts.map +1 -0
  277. package/dist/eval/context-window-test.js +59 -0
  278. package/dist/eval/context-window-test.js.map +1 -0
  279. package/dist/eval/corpus-builder.d.ts +33 -0
  280. package/dist/eval/corpus-builder.d.ts.map +1 -0
  281. package/dist/eval/corpus-builder.js +88 -0
  282. package/dist/eval/corpus-builder.js.map +1 -0
  283. package/dist/eval/experiments/boilerplate-filter.d.ts +26 -0
  284. package/dist/eval/experiments/boilerplate-filter.d.ts.map +1 -0
  285. package/dist/eval/experiments/boilerplate-filter.js +95 -0
  286. package/dist/eval/experiments/boilerplate-filter.js.map +1 -0
  287. package/dist/eval/experiments/cluster-threshold/index.d.ts +6 -0
  288. package/dist/eval/experiments/cluster-threshold/index.d.ts.map +1 -0
  289. package/dist/eval/experiments/cluster-threshold/index.js +5 -0
  290. package/dist/eval/experiments/cluster-threshold/index.js.map +1 -0
  291. package/dist/eval/experiments/cluster-threshold/run-threshold-sweep.d.ts +58 -0
  292. package/dist/eval/experiments/cluster-threshold/run-threshold-sweep.d.ts.map +1 -0
  293. package/dist/eval/experiments/cluster-threshold/run-threshold-sweep.js +246 -0
  294. package/dist/eval/experiments/cluster-threshold/run-threshold-sweep.js.map +1 -0
  295. package/dist/eval/experiments/code-focused-mode.d.ts +20 -0
  296. package/dist/eval/experiments/code-focused-mode.d.ts.map +1 -0
  297. package/dist/eval/experiments/code-focused-mode.js +66 -0
  298. package/dist/eval/experiments/code-focused-mode.js.map +1 -0
  299. package/dist/eval/experiments/edge-decay/decay-curves.d.ts +59 -0
  300. package/dist/eval/experiments/edge-decay/decay-curves.d.ts.map +1 -0
  301. package/dist/eval/experiments/edge-decay/decay-curves.js +124 -0
  302. package/dist/eval/experiments/edge-decay/decay-curves.js.map +1 -0
  303. package/dist/eval/experiments/edge-decay/index.d.ts +13 -0
  304. package/dist/eval/experiments/edge-decay/index.d.ts.map +1 -0
  305. package/dist/eval/experiments/edge-decay/index.js +16 -0
  306. package/dist/eval/experiments/edge-decay/index.js.map +1 -0
  307. package/dist/eval/experiments/edge-decay/presets.d.ts +52 -0
  308. package/dist/eval/experiments/edge-decay/presets.d.ts.map +1 -0
  309. package/dist/eval/experiments/edge-decay/presets.js +234 -0
  310. package/dist/eval/experiments/edge-decay/presets.js.map +1 -0
  311. package/dist/eval/experiments/edge-decay/reference-extractor.d.ts +34 -0
  312. package/dist/eval/experiments/edge-decay/reference-extractor.d.ts.map +1 -0
  313. package/dist/eval/experiments/edge-decay/reference-extractor.js +353 -0
  314. package/dist/eval/experiments/edge-decay/reference-extractor.js.map +1 -0
  315. package/dist/eval/experiments/edge-decay/reference-types.d.ts +131 -0
  316. package/dist/eval/experiments/edge-decay/reference-types.d.ts.map +1 -0
  317. package/dist/eval/experiments/edge-decay/reference-types.js +5 -0
  318. package/dist/eval/experiments/edge-decay/reference-types.js.map +1 -0
  319. package/dist/eval/experiments/edge-decay/retrieval-ranking.d.ts +64 -0
  320. package/dist/eval/experiments/edge-decay/retrieval-ranking.d.ts.map +1 -0
  321. package/dist/eval/experiments/edge-decay/retrieval-ranking.js +565 -0
  322. package/dist/eval/experiments/edge-decay/retrieval-ranking.js.map +1 -0
  323. package/dist/eval/experiments/edge-decay/run-experiments.d.ts +25 -0
  324. package/dist/eval/experiments/edge-decay/run-experiments.d.ts.map +1 -0
  325. package/dist/eval/experiments/edge-decay/run-experiments.js +229 -0
  326. package/dist/eval/experiments/edge-decay/run-experiments.js.map +1 -0
  327. package/dist/eval/experiments/edge-decay/simulate.d.ts +42 -0
  328. package/dist/eval/experiments/edge-decay/simulate.d.ts.map +1 -0
  329. package/dist/eval/experiments/edge-decay/simulate.js +232 -0
  330. package/dist/eval/experiments/edge-decay/simulate.js.map +1 -0
  331. package/dist/eval/experiments/edge-decay/types.d.ts +10 -0
  332. package/dist/eval/experiments/edge-decay/types.d.ts.map +1 -0
  333. package/dist/eval/experiments/edge-decay/types.js +9 -0
  334. package/dist/eval/experiments/edge-decay/types.js.map +1 -0
  335. package/dist/eval/experiments/hdbscan-sweep.d.ts +19 -0
  336. package/dist/eval/experiments/hdbscan-sweep.d.ts.map +1 -0
  337. package/dist/eval/experiments/hdbscan-sweep.js +71 -0
  338. package/dist/eval/experiments/hdbscan-sweep.js.map +1 -0
  339. package/dist/eval/experiments/single-model-run.d.ts +54 -0
  340. package/dist/eval/experiments/single-model-run.d.ts.map +1 -0
  341. package/dist/eval/experiments/single-model-run.js +120 -0
  342. package/dist/eval/experiments/single-model-run.js.map +1 -0
  343. package/dist/eval/experiments/thinking-ablation.d.ts +21 -0
  344. package/dist/eval/experiments/thinking-ablation.d.ts.map +1 -0
  345. package/dist/eval/experiments/thinking-ablation.js +68 -0
  346. package/dist/eval/experiments/thinking-ablation.js.map +1 -0
  347. package/dist/eval/experiments/topic-continuity/embedding-classifier.d.ts +55 -0
  348. package/dist/eval/experiments/topic-continuity/embedding-classifier.d.ts.map +1 -0
  349. package/dist/eval/experiments/topic-continuity/embedding-classifier.js +126 -0
  350. package/dist/eval/experiments/topic-continuity/embedding-classifier.js.map +1 -0
  351. package/dist/eval/experiments/topic-continuity/hybrid-classifier.d.ts +68 -0
  352. package/dist/eval/experiments/topic-continuity/hybrid-classifier.d.ts.map +1 -0
  353. package/dist/eval/experiments/topic-continuity/hybrid-classifier.js +175 -0
  354. package/dist/eval/experiments/topic-continuity/hybrid-classifier.js.map +1 -0
  355. package/dist/eval/experiments/topic-continuity/index.d.ts +13 -0
  356. package/dist/eval/experiments/topic-continuity/index.d.ts.map +1 -0
  357. package/dist/eval/experiments/topic-continuity/index.js +17 -0
  358. package/dist/eval/experiments/topic-continuity/index.js.map +1 -0
  359. package/dist/eval/experiments/topic-continuity/labeler.d.ts +42 -0
  360. package/dist/eval/experiments/topic-continuity/labeler.d.ts.map +1 -0
  361. package/dist/eval/experiments/topic-continuity/labeler.js +253 -0
  362. package/dist/eval/experiments/topic-continuity/labeler.js.map +1 -0
  363. package/dist/eval/experiments/topic-continuity/lexical-features.d.ts +26 -0
  364. package/dist/eval/experiments/topic-continuity/lexical-features.d.ts.map +1 -0
  365. package/dist/eval/experiments/topic-continuity/lexical-features.js +58 -0
  366. package/dist/eval/experiments/topic-continuity/lexical-features.js.map +1 -0
  367. package/dist/eval/experiments/topic-continuity/run-experiment.d.ts +40 -0
  368. package/dist/eval/experiments/topic-continuity/run-experiment.d.ts.map +1 -0
  369. package/dist/eval/experiments/topic-continuity/run-experiment.js +379 -0
  370. package/dist/eval/experiments/topic-continuity/run-experiment.js.map +1 -0
  371. package/dist/eval/experiments/topic-continuity/types.d.ts +146 -0
  372. package/dist/eval/experiments/topic-continuity/types.d.ts.map +1 -0
  373. package/dist/eval/experiments/topic-continuity/types.js +9 -0
  374. package/dist/eval/experiments/topic-continuity/types.js.map +1 -0
  375. package/dist/eval/experiments/truncation.d.ts +21 -0
  376. package/dist/eval/experiments/truncation.d.ts.map +1 -0
  377. package/dist/eval/experiments/truncation.js +59 -0
  378. package/dist/eval/experiments/truncation.js.map +1 -0
  379. package/dist/eval/experiments/types.d.ts +37 -0
  380. package/dist/eval/experiments/types.d.ts.map +1 -0
  381. package/dist/eval/experiments/types.js +13 -0
  382. package/dist/eval/experiments/types.js.map +1 -0
  383. package/dist/eval/experiments/vector-decay-shapes/curve-shapes-experiment.d.ts +10 -0
  384. package/dist/eval/experiments/vector-decay-shapes/curve-shapes-experiment.d.ts.map +1 -0
  385. package/dist/eval/experiments/vector-decay-shapes/curve-shapes-experiment.js +229 -0
  386. package/dist/eval/experiments/vector-decay-shapes/curve-shapes-experiment.js.map +1 -0
  387. package/dist/eval/experiments/vector-decay-shapes/graph-range-experiment.d.ts +12 -0
  388. package/dist/eval/experiments/vector-decay-shapes/graph-range-experiment.d.ts.map +1 -0
  389. package/dist/eval/experiments/vector-decay-shapes/graph-range-experiment.js +316 -0
  390. package/dist/eval/experiments/vector-decay-shapes/graph-range-experiment.js.map +1 -0
  391. package/dist/eval/experiments/vector-decay-shapes/hop-decay.d.ts +19 -0
  392. package/dist/eval/experiments/vector-decay-shapes/hop-decay.d.ts.map +1 -0
  393. package/dist/eval/experiments/vector-decay-shapes/hop-decay.js +127 -0
  394. package/dist/eval/experiments/vector-decay-shapes/hop-decay.js.map +1 -0
  395. package/dist/eval/experiments/vector-decay-shapes/index.d.ts +11 -0
  396. package/dist/eval/experiments/vector-decay-shapes/index.d.ts.map +1 -0
  397. package/dist/eval/experiments/vector-decay-shapes/index.js +11 -0
  398. package/dist/eval/experiments/vector-decay-shapes/index.js.map +1 -0
  399. package/dist/eval/experiments/vector-decay-shapes/path-traversal-experiment.d.ts +14 -0
  400. package/dist/eval/experiments/vector-decay-shapes/path-traversal-experiment.d.ts.map +1 -0
  401. package/dist/eval/experiments/vector-decay-shapes/path-traversal-experiment.js +274 -0
  402. package/dist/eval/experiments/vector-decay-shapes/path-traversal-experiment.js.map +1 -0
  403. package/dist/eval/experiments/vector-decay-shapes/presets.d.ts +36 -0
  404. package/dist/eval/experiments/vector-decay-shapes/presets.d.ts.map +1 -0
  405. package/dist/eval/experiments/vector-decay-shapes/presets.js +157 -0
  406. package/dist/eval/experiments/vector-decay-shapes/presets.js.map +1 -0
  407. package/dist/eval/experiments/vector-decay-shapes/run-experiment.d.ts +20 -0
  408. package/dist/eval/experiments/vector-decay-shapes/run-experiment.d.ts.map +1 -0
  409. package/dist/eval/experiments/vector-decay-shapes/run-experiment.js +504 -0
  410. package/dist/eval/experiments/vector-decay-shapes/run-experiment.js.map +1 -0
  411. package/dist/eval/experiments/vector-decay-shapes/types.d.ts +111 -0
  412. package/dist/eval/experiments/vector-decay-shapes/types.d.ts.map +1 -0
  413. package/dist/eval/experiments/vector-decay-shapes/types.js +15 -0
  414. package/dist/eval/experiments/vector-decay-shapes/types.js.map +1 -0
  415. package/dist/eval/experiments/vector-decay-sweep/index.d.ts +7 -0
  416. package/dist/eval/experiments/vector-decay-sweep/index.d.ts.map +1 -0
  417. package/dist/eval/experiments/vector-decay-sweep/index.js +7 -0
  418. package/dist/eval/experiments/vector-decay-sweep/index.js.map +1 -0
  419. package/dist/eval/experiments/vector-decay-sweep/run-sweep.d.ts +30 -0
  420. package/dist/eval/experiments/vector-decay-sweep/run-sweep.d.ts.map +1 -0
  421. package/dist/eval/experiments/vector-decay-sweep/run-sweep.js +378 -0
  422. package/dist/eval/experiments/vector-decay-sweep/run-sweep.js.map +1 -0
  423. package/dist/eval/experiments/vector-decay-sweep/types.d.ts +109 -0
  424. package/dist/eval/experiments/vector-decay-sweep/types.d.ts.map +1 -0
  425. package/dist/eval/experiments/vector-decay-sweep/types.js +16 -0
  426. package/dist/eval/experiments/vector-decay-sweep/types.js.map +1 -0
  427. package/dist/eval/metrics.d.ts +45 -0
  428. package/dist/eval/metrics.d.ts.map +1 -0
  429. package/dist/eval/metrics.js +134 -0
  430. package/dist/eval/metrics.js.map +1 -0
  431. package/dist/hooks/claudemd-generator.d.ts +62 -0
  432. package/dist/hooks/claudemd-generator.d.ts.map +1 -0
  433. package/dist/hooks/claudemd-generator.js +220 -0
  434. package/dist/hooks/claudemd-generator.js.map +1 -0
  435. package/dist/hooks/hook-utils.d.ts +84 -0
  436. package/dist/hooks/hook-utils.d.ts.map +1 -0
  437. package/dist/hooks/hook-utils.js +187 -0
  438. package/dist/hooks/hook-utils.js.map +1 -0
  439. package/dist/hooks/index.d.ts +12 -0
  440. package/dist/hooks/index.d.ts.map +1 -0
  441. package/dist/hooks/index.js +12 -0
  442. package/dist/hooks/index.js.map +1 -0
  443. package/dist/hooks/pre-compact.d.ts +58 -0
  444. package/dist/hooks/pre-compact.d.ts.map +1 -0
  445. package/dist/hooks/pre-compact.js +127 -0
  446. package/dist/hooks/pre-compact.js.map +1 -0
  447. package/dist/hooks/session-start.d.ts +62 -0
  448. package/dist/hooks/session-start.d.ts.map +1 -0
  449. package/dist/hooks/session-start.js +249 -0
  450. package/dist/hooks/session-start.js.map +1 -0
  451. package/dist/index.d.ts +22 -0
  452. package/dist/index.d.ts.map +1 -0
  453. package/dist/index.js +29 -0
  454. package/dist/index.js.map +1 -0
  455. package/dist/ingest/batch-ingest.d.ts +94 -0
  456. package/dist/ingest/batch-ingest.d.ts.map +1 -0
  457. package/dist/ingest/batch-ingest.js +167 -0
  458. package/dist/ingest/batch-ingest.js.map +1 -0
  459. package/dist/ingest/brief-debrief-detector.d.ts +74 -0
  460. package/dist/ingest/brief-debrief-detector.d.ts.map +1 -0
  461. package/dist/ingest/brief-debrief-detector.js +253 -0
  462. package/dist/ingest/brief-debrief-detector.js.map +1 -0
  463. package/dist/ingest/cross-session-linker.d.ts +39 -0
  464. package/dist/ingest/cross-session-linker.d.ts.map +1 -0
  465. package/dist/ingest/cross-session-linker.js +103 -0
  466. package/dist/ingest/cross-session-linker.js.map +1 -0
  467. package/dist/ingest/edge-creator.d.ts +62 -0
  468. package/dist/ingest/edge-creator.d.ts.map +1 -0
  469. package/dist/ingest/edge-creator.js +186 -0
  470. package/dist/ingest/edge-creator.js.map +1 -0
  471. package/dist/ingest/edge-detector.d.ts +37 -0
  472. package/dist/ingest/edge-detector.d.ts.map +1 -0
  473. package/dist/ingest/edge-detector.js +234 -0
  474. package/dist/ingest/edge-detector.js.map +1 -0
  475. package/dist/ingest/index.d.ts +14 -0
  476. package/dist/ingest/index.d.ts.map +1 -0
  477. package/dist/ingest/index.js +14 -0
  478. package/dist/ingest/index.js.map +1 -0
  479. package/dist/ingest/ingest-session.d.ts +83 -0
  480. package/dist/ingest/ingest-session.d.ts.map +1 -0
  481. package/dist/ingest/ingest-session.js +415 -0
  482. package/dist/ingest/ingest-session.js.map +1 -0
  483. package/dist/maintenance/index.d.ts +5 -0
  484. package/dist/maintenance/index.d.ts.map +1 -0
  485. package/dist/maintenance/index.js +5 -0
  486. package/dist/maintenance/index.js.map +1 -0
  487. package/dist/maintenance/scheduler.d.ts +79 -0
  488. package/dist/maintenance/scheduler.d.ts.map +1 -0
  489. package/dist/maintenance/scheduler.js +362 -0
  490. package/dist/maintenance/scheduler.js.map +1 -0
  491. package/dist/maintenance/tasks/cleanup-vectors.d.ts +10 -0
  492. package/dist/maintenance/tasks/cleanup-vectors.d.ts.map +1 -0
  493. package/dist/maintenance/tasks/cleanup-vectors.js +23 -0
  494. package/dist/maintenance/tasks/cleanup-vectors.js.map +1 -0
  495. package/dist/maintenance/tasks/index.d.ts +9 -0
  496. package/dist/maintenance/tasks/index.d.ts.map +1 -0
  497. package/dist/maintenance/tasks/index.js +9 -0
  498. package/dist/maintenance/tasks/index.js.map +1 -0
  499. package/dist/maintenance/tasks/prune-graph.d.ts +12 -0
  500. package/dist/maintenance/tasks/prune-graph.d.ts.map +1 -0
  501. package/dist/maintenance/tasks/prune-graph.js +23 -0
  502. package/dist/maintenance/tasks/prune-graph.js.map +1 -0
  503. package/dist/maintenance/tasks/scan-projects.d.ts +12 -0
  504. package/dist/maintenance/tasks/scan-projects.d.ts.map +1 -0
  505. package/dist/maintenance/tasks/scan-projects.js +31 -0
  506. package/dist/maintenance/tasks/scan-projects.js.map +1 -0
  507. package/dist/maintenance/tasks/update-clusters.d.ts +12 -0
  508. package/dist/maintenance/tasks/update-clusters.d.ts.map +1 -0
  509. package/dist/maintenance/tasks/update-clusters.js +41 -0
  510. package/dist/maintenance/tasks/update-clusters.js.map +1 -0
  511. package/dist/maintenance/tasks/vacuum.d.ts +10 -0
  512. package/dist/maintenance/tasks/vacuum.d.ts.map +1 -0
  513. package/dist/maintenance/tasks/vacuum.js +23 -0
  514. package/dist/maintenance/tasks/vacuum.js.map +1 -0
  515. package/dist/mcp/index.d.ts +7 -0
  516. package/dist/mcp/index.d.ts.map +1 -0
  517. package/dist/mcp/index.js +8 -0
  518. package/dist/mcp/index.js.map +1 -0
  519. package/dist/mcp/server.d.ts +90 -0
  520. package/dist/mcp/server.d.ts.map +1 -0
  521. package/dist/mcp/server.js +395 -0
  522. package/dist/mcp/server.js.map +1 -0
  523. package/dist/mcp/tools.d.ts +52 -0
  524. package/dist/mcp/tools.d.ts.map +1 -0
  525. package/dist/mcp/tools.js +292 -0
  526. package/dist/mcp/tools.js.map +1 -0
  527. package/dist/models/device-detector.d.ts +32 -0
  528. package/dist/models/device-detector.d.ts.map +1 -0
  529. package/dist/models/device-detector.js +123 -0
  530. package/dist/models/device-detector.js.map +1 -0
  531. package/dist/models/embedder.d.ts +60 -0
  532. package/dist/models/embedder.d.ts.map +1 -0
  533. package/dist/models/embedder.js +171 -0
  534. package/dist/models/embedder.js.map +1 -0
  535. package/dist/models/model-registry.d.ts +25 -0
  536. package/dist/models/model-registry.d.ts.map +1 -0
  537. package/dist/models/model-registry.js +56 -0
  538. package/dist/models/model-registry.js.map +1 -0
  539. package/dist/parser/chunker.d.ts +74 -0
  540. package/dist/parser/chunker.d.ts.map +1 -0
  541. package/dist/parser/chunker.js +330 -0
  542. package/dist/parser/chunker.js.map +1 -0
  543. package/dist/parser/session-reader.d.ts +75 -0
  544. package/dist/parser/session-reader.d.ts.map +1 -0
  545. package/dist/parser/session-reader.js +198 -0
  546. package/dist/parser/session-reader.js.map +1 -0
  547. package/dist/parser/turn-assembler.d.ts +18 -0
  548. package/dist/parser/turn-assembler.d.ts.map +1 -0
  549. package/dist/parser/turn-assembler.js +150 -0
  550. package/dist/parser/turn-assembler.js.map +1 -0
  551. package/dist/parser/types.d.ts +124 -0
  552. package/dist/parser/types.d.ts.map +1 -0
  553. package/dist/parser/types.js +8 -0
  554. package/dist/parser/types.js.map +1 -0
  555. package/dist/report/reporter.d.ts +18 -0
  556. package/dist/report/reporter.d.ts.map +1 -0
  557. package/dist/report/reporter.js +121 -0
  558. package/dist/report/reporter.js.map +1 -0
  559. package/dist/retrieval/cluster-expander.d.ts +30 -0
  560. package/dist/retrieval/cluster-expander.d.ts.map +1 -0
  561. package/dist/retrieval/cluster-expander.js +87 -0
  562. package/dist/retrieval/cluster-expander.js.map +1 -0
  563. package/dist/retrieval/context-assembler.d.ts +89 -0
  564. package/dist/retrieval/context-assembler.d.ts.map +1 -0
  565. package/dist/retrieval/context-assembler.js +313 -0
  566. package/dist/retrieval/context-assembler.js.map +1 -0
  567. package/dist/retrieval/index.d.ts +12 -0
  568. package/dist/retrieval/index.d.ts.map +1 -0
  569. package/dist/retrieval/index.js +12 -0
  570. package/dist/retrieval/index.js.map +1 -0
  571. package/dist/retrieval/rrf.d.ts +25 -0
  572. package/dist/retrieval/rrf.d.ts.map +1 -0
  573. package/dist/retrieval/rrf.js +56 -0
  574. package/dist/retrieval/rrf.js.map +1 -0
  575. package/dist/retrieval/session-reconstructor.d.ts +79 -0
  576. package/dist/retrieval/session-reconstructor.d.ts.map +1 -0
  577. package/dist/retrieval/session-reconstructor.js +173 -0
  578. package/dist/retrieval/session-reconstructor.js.map +1 -0
  579. package/dist/retrieval/traverser.d.ts +66 -0
  580. package/dist/retrieval/traverser.d.ts.map +1 -0
  581. package/dist/retrieval/traverser.js +160 -0
  582. package/dist/retrieval/traverser.js.map +1 -0
  583. package/dist/storage/archive.d.ts +81 -0
  584. package/dist/storage/archive.d.ts.map +1 -0
  585. package/dist/storage/archive.js +204 -0
  586. package/dist/storage/archive.js.map +1 -0
  587. package/dist/storage/audit-log.d.ts +29 -0
  588. package/dist/storage/audit-log.d.ts.map +1 -0
  589. package/dist/storage/audit-log.js +69 -0
  590. package/dist/storage/audit-log.js.map +1 -0
  591. package/dist/storage/checkpoint-store.d.ts +38 -0
  592. package/dist/storage/checkpoint-store.d.ts.map +1 -0
  593. package/dist/storage/checkpoint-store.js +76 -0
  594. package/dist/storage/checkpoint-store.js.map +1 -0
  595. package/dist/storage/chunk-store.d.ts +111 -0
  596. package/dist/storage/chunk-store.d.ts.map +1 -0
  597. package/dist/storage/chunk-store.js +298 -0
  598. package/dist/storage/chunk-store.js.map +1 -0
  599. package/dist/storage/clock-store.d.ts +80 -0
  600. package/dist/storage/clock-store.d.ts.map +1 -0
  601. package/dist/storage/clock-store.js +155 -0
  602. package/dist/storage/clock-store.js.map +1 -0
  603. package/dist/storage/cluster-store.d.ts +63 -0
  604. package/dist/storage/cluster-store.d.ts.map +1 -0
  605. package/dist/storage/cluster-store.js +219 -0
  606. package/dist/storage/cluster-store.js.map +1 -0
  607. package/dist/storage/db.d.ts +57 -0
  608. package/dist/storage/db.d.ts.map +1 -0
  609. package/dist/storage/db.js +249 -0
  610. package/dist/storage/db.js.map +1 -0
  611. package/dist/storage/decay.d.ts +125 -0
  612. package/dist/storage/decay.d.ts.map +1 -0
  613. package/dist/storage/decay.js +276 -0
  614. package/dist/storage/decay.js.map +1 -0
  615. package/dist/storage/edge-store.d.ts +75 -0
  616. package/dist/storage/edge-store.d.ts.map +1 -0
  617. package/dist/storage/edge-store.js +259 -0
  618. package/dist/storage/edge-store.js.map +1 -0
  619. package/dist/storage/embedding-cache.d.ts +51 -0
  620. package/dist/storage/embedding-cache.d.ts.map +1 -0
  621. package/dist/storage/embedding-cache.js +155 -0
  622. package/dist/storage/embedding-cache.js.map +1 -0
  623. package/dist/storage/encryption.d.ts +55 -0
  624. package/dist/storage/encryption.d.ts.map +1 -0
  625. package/dist/storage/encryption.js +130 -0
  626. package/dist/storage/encryption.js.map +1 -0
  627. package/dist/storage/index.d.ts +15 -0
  628. package/dist/storage/index.d.ts.map +1 -0
  629. package/dist/storage/index.js +20 -0
  630. package/dist/storage/index.js.map +1 -0
  631. package/dist/storage/keyword-store.d.ts +25 -0
  632. package/dist/storage/keyword-store.d.ts.map +1 -0
  633. package/dist/storage/keyword-store.js +104 -0
  634. package/dist/storage/keyword-store.js.map +1 -0
  635. package/dist/storage/migrations.d.ts +12 -0
  636. package/dist/storage/migrations.d.ts.map +1 -0
  637. package/dist/storage/migrations.js +345 -0
  638. package/dist/storage/migrations.js.map +1 -0
  639. package/dist/storage/pruner.d.ts +111 -0
  640. package/dist/storage/pruner.d.ts.map +1 -0
  641. package/dist/storage/pruner.js +280 -0
  642. package/dist/storage/pruner.js.map +1 -0
  643. package/dist/storage/schema-loader.d.ts +18 -0
  644. package/dist/storage/schema-loader.d.ts.map +1 -0
  645. package/dist/storage/schema-loader.js +62 -0
  646. package/dist/storage/schema-loader.js.map +1 -0
  647. package/dist/storage/schema.sql +133 -0
  648. package/dist/storage/types.d.ts +278 -0
  649. package/dist/storage/types.d.ts.map +1 -0
  650. package/dist/storage/types.js +14 -0
  651. package/dist/storage/types.js.map +1 -0
  652. package/dist/storage/vector-store.d.ts +213 -0
  653. package/dist/storage/vector-store.d.ts.map +1 -0
  654. package/dist/storage/vector-store.js +440 -0
  655. package/dist/storage/vector-store.js.map +1 -0
  656. package/dist/temporal/clock-compactor.d.ts +65 -0
  657. package/dist/temporal/clock-compactor.d.ts.map +1 -0
  658. package/dist/temporal/clock-compactor.js +157 -0
  659. package/dist/temporal/clock-compactor.js.map +1 -0
  660. package/dist/temporal/index.d.ts +6 -0
  661. package/dist/temporal/index.d.ts.map +1 -0
  662. package/dist/temporal/index.js +6 -0
  663. package/dist/temporal/index.js.map +1 -0
  664. package/dist/temporal/vector-clock.d.ts +143 -0
  665. package/dist/temporal/vector-clock.d.ts.map +1 -0
  666. package/dist/temporal/vector-clock.js +231 -0
  667. package/dist/temporal/vector-clock.js.map +1 -0
  668. package/dist/utils/angular-distance.d.ts +31 -0
  669. package/dist/utils/angular-distance.d.ts.map +1 -0
  670. package/dist/utils/angular-distance.js +61 -0
  671. package/dist/utils/angular-distance.js.map +1 -0
  672. package/dist/utils/array-utils.d.ts +28 -0
  673. package/dist/utils/array-utils.d.ts.map +1 -0
  674. package/dist/utils/array-utils.js +67 -0
  675. package/dist/utils/array-utils.js.map +1 -0
  676. package/dist/utils/embedding-utils.d.ts +25 -0
  677. package/dist/utils/embedding-utils.d.ts.map +1 -0
  678. package/dist/utils/embedding-utils.js +30 -0
  679. package/dist/utils/embedding-utils.js.map +1 -0
  680. package/dist/utils/errors.d.ts +143 -0
  681. package/dist/utils/errors.d.ts.map +1 -0
  682. package/dist/utils/errors.js +220 -0
  683. package/dist/utils/errors.js.map +1 -0
  684. package/dist/utils/keychain.d.ts +43 -0
  685. package/dist/utils/keychain.d.ts.map +1 -0
  686. package/dist/utils/keychain.js +82 -0
  687. package/dist/utils/keychain.js.map +1 -0
  688. package/dist/utils/logger.d.ts +50 -0
  689. package/dist/utils/logger.d.ts.map +1 -0
  690. package/dist/utils/logger.js +104 -0
  691. package/dist/utils/logger.js.map +1 -0
  692. package/dist/utils/secret-store.d.ts +110 -0
  693. package/dist/utils/secret-store.d.ts.map +1 -0
  694. package/dist/utils/secret-store.js +340 -0
  695. package/dist/utils/secret-store.js.map +1 -0
  696. package/dist/utils/secure-buffer.d.ts +66 -0
  697. package/dist/utils/secure-buffer.d.ts.map +1 -0
  698. package/dist/utils/secure-buffer.js +104 -0
  699. package/dist/utils/secure-buffer.js.map +1 -0
  700. package/dist/utils/token-counter.d.ts +13 -0
  701. package/dist/utils/token-counter.d.ts.map +1 -0
  702. package/dist/utils/token-counter.js +18 -0
  703. package/dist/utils/token-counter.js.map +1 -0
  704. package/package.json +110 -0
  705. package/src/dashboard/client/package-lock.json +3045 -0
  706. package/src/dashboard/client/package.json +30 -0
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Console table + JSON output for benchmark results.
3
+ */
4
+ import { writeFile } from 'node:fs/promises';
5
+ /**
6
+ * Print a comparison table to the console.
7
+ */
8
+ export function printComparisonTable(result) {
9
+ console.log('\n' + '='.repeat(100));
10
+ console.log(' EMBEDDING MODEL BENCHMARK RESULTS');
11
+ console.log('='.repeat(100));
12
+ console.log(` Corpus: ${result.corpus.chunkCount} chunks, ${result.corpus.pairCount} labeled pairs`);
13
+ console.log('='.repeat(100));
14
+ // Header
15
+ const cols = [
16
+ pad('Model', 14),
17
+ pad('Dims', 5),
18
+ pad('Context', 8),
19
+ pad('ROC AUC', 8),
20
+ pad('Clusters', 9),
21
+ pad('Noise%', 7),
22
+ pad('Silh.', 7),
23
+ pad('CodeNL', 7),
24
+ pad('ms/chunk', 9),
25
+ pad('Load(s)', 8),
26
+ pad('Heap(MB)', 9),
27
+ ];
28
+ console.log(cols.join(' | '));
29
+ console.log('-'.repeat(100));
30
+ // Rows
31
+ for (const m of result.models) {
32
+ const row = [
33
+ pad(m.modelId, 14),
34
+ pad(String(m.modelConfig.dims), 5),
35
+ pad(String(m.modelConfig.contextTokens), 8),
36
+ pad(m.rocAuc.toFixed(3), 8),
37
+ pad(String(m.clusterCount), 9),
38
+ pad((m.noiseRatio * 100).toFixed(1) + '%', 7),
39
+ pad(m.silhouetteScore.toFixed(3), 7),
40
+ pad(m.codeNLAlignment.alignmentRatio.toFixed(3), 7),
41
+ pad(m.meanInferenceMs.toFixed(1), 9),
42
+ pad((m.loadStats.loadTimeMs / 1000).toFixed(1), 8),
43
+ pad(m.loadStats.heapUsedMB.toFixed(0), 9),
44
+ ];
45
+ console.log(row.join(' | '));
46
+ }
47
+ console.log('='.repeat(100));
48
+ // Context window comparison
49
+ if (result.contextWindowComparison) {
50
+ const cw = result.contextWindowComparison;
51
+ console.log('\nContext Window Impact:');
52
+ console.log(` Long chunks (>512 tokens): ${cw.longChunks} / ${cw.totalChunks}`);
53
+ console.log(` Mean drift (long chunks): ${cw.meanDriftLongChunks.toFixed(4)}`);
54
+ console.log(` Mean drift (short chunks): ${cw.meanDriftShortChunks.toFixed(4)}`);
55
+ if (cw.longChunkDrifts.length > 0) {
56
+ console.log(' Top 5 drifting chunks:');
57
+ for (const d of cw.longChunkDrifts.slice(0, 5)) {
58
+ console.log(` ${d.chunkId}: ${d.tokens} tokens, drift=${d.drift.toFixed(4)}`);
59
+ }
60
+ }
61
+ }
62
+ // Per-model cluster details
63
+ console.log('\nCluster Details:');
64
+ for (const m of result.models) {
65
+ console.log(` ${m.modelId}: ${m.clusterResult.clusterSizes.join(', ')} (${m.clusterResult.numClusters} clusters)`);
66
+ }
67
+ console.log('');
68
+ }
69
+ /**
70
+ * Print cluster membership with chunk text previews.
71
+ */
72
+ export function printClusterMembership(modelResult, chunks, maxPreviewChars = 80) {
73
+ console.log(`\n--- Cluster membership for ${modelResult.modelId} ---`);
74
+ for (const [label, indices] of modelResult.clusterMembership) {
75
+ const labelStr = label < 0 ? 'NOISE' : `Cluster ${label}`;
76
+ console.log(`\n ${labelStr} (${indices.length} chunks):`);
77
+ for (const idx of indices.slice(0, 10)) {
78
+ const chunk = chunks[idx];
79
+ const preview = chunk.text
80
+ .replace(/\n/g, ' ')
81
+ .slice(0, maxPreviewChars);
82
+ console.log(` [${chunk.metadata.sessionSlug}] ${preview}...`);
83
+ }
84
+ if (indices.length > 10) {
85
+ console.log(` ... and ${indices.length - 10} more`);
86
+ }
87
+ }
88
+ }
89
+ /**
90
+ * Write benchmark results as JSON.
91
+ */
92
+ export async function writeJsonReport(result, outputPath) {
93
+ // Strip non-serializable data (embeddings, Maps)
94
+ const serializable = {
95
+ ...result,
96
+ models: result.models.map((m) => ({
97
+ modelId: m.modelId,
98
+ modelConfig: m.modelConfig,
99
+ loadStats: m.loadStats,
100
+ rocAuc: m.rocAuc,
101
+ clusterCount: m.clusterCount,
102
+ noiseRatio: m.noiseRatio,
103
+ silhouetteScore: m.silhouetteScore,
104
+ codeNLAlignment: m.codeNLAlignment,
105
+ meanInferenceMs: m.meanInferenceMs,
106
+ totalInferenceMs: m.totalInferenceMs,
107
+ clusterResult: {
108
+ numClusters: m.clusterResult.numClusters,
109
+ noiseRatio: m.clusterResult.noiseRatio,
110
+ clusterSizes: m.clusterResult.clusterSizes,
111
+ },
112
+ clusterMembership: Object.fromEntries(m.clusterMembership),
113
+ })),
114
+ };
115
+ await writeFile(outputPath, JSON.stringify(serializable, null, 2));
116
+ console.log(`Report written to ${outputPath}`);
117
+ }
118
+ function pad(str, width) {
119
+ return str.padEnd(width).slice(0, width);
120
+ }
121
+ //# sourceMappingURL=reporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reporter.js","sourceRoot":"","sources":["../../src/report/reporter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Post-fusion cluster expansion.
3
+ *
4
+ * Expands search results by finding sibling chunks within the same HDBSCAN clusters.
5
+ * This surfaces topically related chunks that neither vector nor keyword search found.
6
+ */
7
+ import type { RankedItem } from './rrf.js';
8
+ export interface ClusterExpansionConfig {
9
+ /** Max clusters to expand from (default: 3) */
10
+ maxClusters: number;
11
+ /** Max sibling chunks per cluster (default: 5) */
12
+ maxSiblings: number;
13
+ /** Score multiplier for siblings (default: 0.3) */
14
+ boostFactor: number;
15
+ }
16
+ export declare const DEFAULT_CLUSTER_EXPANSION: ClusterExpansionConfig;
17
+ /**
18
+ * Expand hits with cluster siblings.
19
+ *
20
+ * For each hit, looks up its cluster assignments, then fetches sibling chunks
21
+ * from the top clusters. Siblings get scored based on the hit's score,
22
+ * the boost factor, and their distance to the cluster centroid.
23
+ *
24
+ * @param hits - Ranked items from RRF fusion
25
+ * @param config - Expansion parameters
26
+ * @param projectFilter - Optional project filter to restrict siblings
27
+ * @returns Original hits + cluster sibling items (deduplicated)
28
+ */
29
+ export declare function expandViaClusters(hits: RankedItem[], config?: ClusterExpansionConfig, projectFilter?: string | string[]): RankedItem[];
30
+ //# sourceMappingURL=cluster-expander.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Post-fusion cluster expansion.
3
+ *
4
+ * Expands search results by finding sibling chunks within the same HDBSCAN clusters.
5
+ * This surfaces topically related chunks that neither vector nor keyword search found.
6
+ */
7
+ import { getChunkClusterAssignments, getClusterChunkIds, } from '../storage/cluster-store.js';
8
+ import { vectorStore } from '../storage/vector-store.js';
9
+ export const DEFAULT_CLUSTER_EXPANSION = {
10
+ maxClusters: 3,
11
+ maxSiblings: 5,
12
+ boostFactor: 0.3,
13
+ };
14
+ /**
15
+ * Expand hits with cluster siblings.
16
+ *
17
+ * For each hit, looks up its cluster assignments, then fetches sibling chunks
18
+ * from the top clusters. Siblings get scored based on the hit's score,
19
+ * the boost factor, and their distance to the cluster centroid.
20
+ *
21
+ * @param hits - Ranked items from RRF fusion
22
+ * @param config - Expansion parameters
23
+ * @param projectFilter - Optional project filter to restrict siblings
24
+ * @returns Original hits + cluster sibling items (deduplicated)
25
+ */
26
+ export function expandViaClusters(hits, config = DEFAULT_CLUSTER_EXPANSION, projectFilter) {
27
+ if (hits.length === 0)
28
+ return [];
29
+ const existingIds = new Set(hits.map(h => h.chunkId));
30
+ const siblingItems = [];
31
+ // Build project filter set
32
+ const projectSet = projectFilter
33
+ ? new Set(Array.isArray(projectFilter) ? projectFilter : [projectFilter])
34
+ : null;
35
+ // Track clusters we've already expanded to avoid duplicates
36
+ const expandedClusters = new Set();
37
+ let clusterCount = 0;
38
+ for (const hit of hits) {
39
+ if (clusterCount >= config.maxClusters)
40
+ break;
41
+ // Get cluster assignments for this chunk (sorted by distance)
42
+ const assignments = getChunkClusterAssignments(hit.chunkId);
43
+ if (assignments.length === 0)
44
+ continue;
45
+ for (const assignment of assignments) {
46
+ if (clusterCount >= config.maxClusters)
47
+ break;
48
+ if (expandedClusters.has(assignment.clusterId))
49
+ continue;
50
+ expandedClusters.add(assignment.clusterId);
51
+ clusterCount++;
52
+ // Get all chunk IDs in this cluster
53
+ const clusterChunkIds = getClusterChunkIds(assignment.clusterId);
54
+ let addedSiblings = 0;
55
+ for (const siblingId of clusterChunkIds) {
56
+ if (addedSiblings >= config.maxSiblings)
57
+ break;
58
+ if (existingIds.has(siblingId))
59
+ continue;
60
+ // Filter by project if needed
61
+ if (projectSet) {
62
+ const project = vectorStore.getChunkProject(siblingId);
63
+ if (!project || !projectSet.has(project))
64
+ continue;
65
+ }
66
+ // Look up this sibling's distance in the cluster for scoring
67
+ const siblingAssignments = getChunkClusterAssignments(siblingId);
68
+ const siblingAssignment = siblingAssignments.find(a => a.clusterId === assignment.clusterId);
69
+ const distance = siblingAssignment?.distance ?? 0.5;
70
+ // Score: best hit score * boost * (1 - distance)
71
+ const score = hit.score * config.boostFactor * (1 - distance);
72
+ if (score > 0) {
73
+ siblingItems.push({
74
+ chunkId: siblingId,
75
+ score,
76
+ source: 'cluster',
77
+ });
78
+ existingIds.add(siblingId);
79
+ addedSiblings++;
80
+ }
81
+ }
82
+ }
83
+ }
84
+ // Combine original hits with siblings
85
+ return [...hits, ...siblingItems];
86
+ }
87
+ //# sourceMappingURL=cluster-expander.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cluster-expander.js","sourceRoot":"","sources":["../../src/retrieval/cluster-expander.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ /**
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
14
+ */
15
+ export type RetrievalRange = 'short' | 'long' | 'auto';
16
+ /**
17
+ * Request for context retrieval.
18
+ */
19
+ export interface RetrievalRequest {
20
+ /** Query text to find relevant context for */
21
+ query: string;
22
+ /** Current session ID (optional, for recency boost) */
23
+ currentSessionId?: string;
24
+ /** Project slug for clock lookup (optional, enables vector clock decay) */
25
+ projectSlug?: string;
26
+ /** Filter results to specific project(s). Omit to search all projects. */
27
+ projectFilter?: string | string[];
28
+ /** Query time for decay calculation (default: now) */
29
+ queryTime?: number;
30
+ /** Maximum tokens in response */
31
+ maxTokens?: number;
32
+ /** Retrieval mode */
33
+ mode: RetrievalMode;
34
+ /** Range hint: 'short' for recent, 'long' for historical, 'auto' to decide */
35
+ range?: RetrievalRange;
36
+ /** Number of vector search results to start from */
37
+ 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
+ }
43
+ /**
44
+ * Retrieval response with assembled context.
45
+ */
46
+ export interface RetrievalResponse {
47
+ /** Assembled context text */
48
+ text: string;
49
+ /** Approximate token count */
50
+ tokenCount: number;
51
+ /** Chunks included in response */
52
+ chunks: Array<{
53
+ id: string;
54
+ sessionSlug: string;
55
+ weight: number;
56
+ preview: string;
57
+ source?: 'vector' | 'keyword' | 'cluster' | 'graph';
58
+ }>;
59
+ /** Total chunks considered */
60
+ totalConsidered: number;
61
+ /** Time taken in milliseconds */
62
+ durationMs: number;
63
+ /** Number of chunks boosted by graph agreement (found by both vector and graph) */
64
+ graphBoosted: number;
65
+ }
66
+ /**
67
+ * 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
71
+ */
72
+ export declare function assembleContext(request: RetrievalRequest): Promise<RetrievalResponse>;
73
+ /**
74
+ * Recall: retrieve context relevant to a query.
75
+ */
76
+ export declare function recall(query: string, options?: Partial<RetrievalRequest>): Promise<RetrievalResponse>;
77
+ /**
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.
83
+ */
84
+ export declare function predict(context: string, options?: Partial<RetrievalRequest>): Promise<RetrievalResponse>;
85
+ /**
86
+ * Cleanup shared resources.
87
+ */
88
+ export declare function disposeRetrieval(): Promise<void>;
89
+ //# sourceMappingURL=context-assembler.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,313 @@
1
+ /**
2
+ * Context assembly for memory retrieval.
3
+ * Combines vector search with graph traversal to assemble relevant context.
4
+ */
5
+ import { vectorStore } from '../storage/vector-store.js';
6
+ import { getChunkById } from '../storage/chunk-store.js';
7
+ import { Embedder } from '../models/embedder.js';
8
+ import { getModel } from '../models/model-registry.js';
9
+ import { getConfig } from '../config/memory-config.js';
10
+ import { approximateTokens } from '../utils/token-counter.js';
11
+ import { traverseMultiple, dedupeAndRank } from './traverser.js';
12
+ import { getReferenceClock } from '../storage/clock-store.js';
13
+ import { KeywordStore } from '../storage/keyword-store.js';
14
+ import { fuseRRF } from './rrf.js';
15
+ import { expandViaClusters } from './cluster-expander.js';
16
+ import { createLogger } from '../utils/logger.js';
17
+ const log = createLogger('context-assembler');
18
+ /**
19
+ * Shared embedder instance for retrieval.
20
+ */
21
+ let sharedEmbedder = null;
22
+ /**
23
+ * Get or create shared embedder.
24
+ */
25
+ async function getEmbedder() {
26
+ if (!sharedEmbedder) {
27
+ sharedEmbedder = new Embedder();
28
+ await sharedEmbedder.load(getModel('jina-small'));
29
+ }
30
+ return sharedEmbedder;
31
+ }
32
+ /**
33
+ * Shared keyword store instance for retrieval.
34
+ */
35
+ let sharedKeywordStore = null;
36
+ /**
37
+ * Get or create shared keyword store.
38
+ */
39
+ function getKeywordStore() {
40
+ if (!sharedKeywordStore) {
41
+ sharedKeywordStore = new KeywordStore();
42
+ }
43
+ return sharedKeywordStore;
44
+ }
45
+ /**
46
+ * Assemble context from memory based on a query.
47
+ *
48
+ * Pipeline: embed → [vector search, keyword search] → RRF fusion → cluster expansion
49
+ * → graph traverse → combine → dedupe → recency → budget
50
+ */
51
+ export async function assembleContext(request) {
52
+ const startTime = Date.now();
53
+ const config = getConfig();
54
+ const { query, currentSessionId, projectSlug, projectFilter, queryTime = Date.now(), maxTokens = config.mcpMaxResponseTokens, mode, range = 'auto', vectorSearchLimit = 20, skipGraph = false, skipClusters = false, } = request;
55
+ const { hybridSearch, clusterExpansion } = config;
56
+ // If projectFilter is a single string, also use it for clock lookup
57
+ const effectiveProjectSlug = projectSlug ??
58
+ (typeof projectFilter === 'string' ? projectFilter : undefined);
59
+ // Get reference clock for vector clock-based decay (if project slug provided)
60
+ const referenceClock = effectiveProjectSlug ? getReferenceClock(effectiveProjectSlug) : undefined;
61
+ // 1. Embed query
62
+ const embedder = await getEmbedder();
63
+ const queryResult = await embedder.embed(query, true); // isQuery = true
64
+ // 2. Run vector search and keyword search in parallel
65
+ const vectorSearchPromise = projectFilter
66
+ ? vectorStore.searchByProject(queryResult.embedding, projectFilter, vectorSearchLimit)
67
+ : vectorStore.search(queryResult.embedding, vectorSearchLimit);
68
+ let keywordResults = [];
69
+ try {
70
+ const keywordStore = getKeywordStore();
71
+ keywordResults = projectFilter
72
+ ? keywordStore.searchByProject(query, projectFilter, hybridSearch.keywordSearchLimit)
73
+ : keywordStore.search(query, hybridSearch.keywordSearchLimit);
74
+ }
75
+ catch (error) {
76
+ // Graceful fallback: keyword search unavailable (FTS5 missing, table corrupted, etc.)
77
+ log.warn('Keyword search unavailable, falling back to vector-only', {
78
+ error: error.message,
79
+ });
80
+ }
81
+ const similar = await vectorSearchPromise;
82
+ if (similar.length === 0 && keywordResults.length === 0) {
83
+ return {
84
+ text: '',
85
+ tokenCount: 0,
86
+ chunks: [],
87
+ totalConsidered: 0,
88
+ durationMs: Date.now() - startTime,
89
+ graphBoosted: 0,
90
+ };
91
+ }
92
+ // 3. Convert to RankedItem format and fuse with RRF
93
+ const vectorItems = similar.map(s => ({
94
+ chunkId: s.id,
95
+ score: Math.max(0, 1 - s.distance),
96
+ source: 'vector',
97
+ }));
98
+ const keywordItems = keywordResults.map(r => ({
99
+ chunkId: r.id,
100
+ score: r.score,
101
+ source: 'keyword',
102
+ }));
103
+ const fusedResults = fuseRRF([
104
+ { items: vectorItems, weight: hybridSearch.vectorWeight },
105
+ ...(keywordItems.length > 0
106
+ ? [{ items: keywordItems, weight: hybridSearch.keywordWeight }]
107
+ : []),
108
+ ], hybridSearch.rrfK);
109
+ // 4. Cluster expansion (skip if requested for benchmarking)
110
+ const expandedResults = skipClusters
111
+ ? fusedResults
112
+ : expandViaClusters(fusedResults, clusterExpansion, projectFilter);
113
+ const sourceMap = new Map();
114
+ for (const item of expandedResults) {
115
+ if (item.source && !sourceMap.has(item.chunkId)) {
116
+ sourceMap.set(item.chunkId, item.source);
117
+ }
118
+ }
119
+ // 5. Determine traversal direction and decay model based on mode and range
120
+ const direction = mode === 'predict' ? 'forward' : 'backward';
121
+ let decayConfig;
122
+ if (direction === 'forward') {
123
+ decayConfig = config.forwardDecay;
124
+ }
125
+ else if (range === 'short') {
126
+ decayConfig = config.shortRangeDecay;
127
+ }
128
+ else if (range === 'long') {
129
+ decayConfig = config.longRangeDecay;
130
+ }
131
+ else {
132
+ decayConfig = mode === 'explain' ? config.longRangeDecay : config.shortRangeDecay;
133
+ }
134
+ // 6. Traverse graph from fused+expanded seeds (skip if requested for benchmarking)
135
+ let traversalResult;
136
+ if (skipGraph) {
137
+ traversalResult = { chunks: [], visited: 0 };
138
+ }
139
+ else {
140
+ const startIds = expandedResults.map(r => r.chunkId);
141
+ const startWeights = expandedResults.map(r => r.score);
142
+ traversalResult = await traverseMultiple(startIds, startWeights, queryTime, {
143
+ direction,
144
+ decayConfig,
145
+ referenceClock,
146
+ });
147
+ // Tag traversal results with 'graph' source
148
+ for (const tc of traversalResult.chunks) {
149
+ if (!sourceMap.has(tc.chunkId)) {
150
+ sourceMap.set(tc.chunkId, 'graph');
151
+ }
152
+ }
153
+ }
154
+ // 7. Combine direct hits with traversal, boosting intersection
155
+ const allChunks = [];
156
+ let graphBoostedCount = 0;
157
+ // Build graph traversal lookup
158
+ const graphChunkMap = new Map();
159
+ for (const tc of traversalResult.chunks) {
160
+ graphChunkMap.set(tc.chunkId, tc);
161
+ }
162
+ // Direct hits: boost if also found via graph traversal
163
+ const directChunkIds = new Set();
164
+ for (const item of expandedResults) {
165
+ directChunkIds.add(item.chunkId);
166
+ let weight = item.score * config.directHitBoost;
167
+ const graphEntry = graphChunkMap.get(item.chunkId);
168
+ if (graphEntry) {
169
+ weight += graphEntry.weight * config.graphAgreementBoost;
170
+ graphBoostedCount++;
171
+ }
172
+ allChunks.push({ chunkId: item.chunkId, weight, depth: 0 });
173
+ }
174
+ // Graph-only results: add unchanged
175
+ for (const tc of traversalResult.chunks) {
176
+ if (!directChunkIds.has(tc.chunkId)) {
177
+ allChunks.push(tc);
178
+ }
179
+ }
180
+ // 8. Dedupe and rank
181
+ const ranked = dedupeAndRank(allChunks);
182
+ // 9. Apply recency boost for current session
183
+ if (currentSessionId) {
184
+ for (const wc of ranked) {
185
+ const chunk = getChunkById(wc.chunkId);
186
+ if (chunk && chunk.sessionId === currentSessionId) {
187
+ wc.weight *= 1.2; // 20% boost for current session
188
+ }
189
+ }
190
+ ranked.sort((a, b) => b.weight - a.weight);
191
+ }
192
+ // 10. Assemble within token budget
193
+ const assembled = assembleWithinBudget(ranked, maxTokens, sourceMap);
194
+ return {
195
+ text: assembled.text,
196
+ tokenCount: assembled.tokenCount,
197
+ chunks: assembled.includedChunks,
198
+ totalConsidered: ranked.length,
199
+ durationMs: Date.now() - startTime,
200
+ graphBoosted: graphBoostedCount,
201
+ };
202
+ }
203
+ /**
204
+ * Assemble text within token budget.
205
+ */
206
+ function assembleWithinBudget(ranked, maxTokens, sourceMap) {
207
+ const parts = [];
208
+ const includedChunks = [];
209
+ let totalTokens = 0;
210
+ for (const wc of ranked) {
211
+ const chunk = getChunkById(wc.chunkId);
212
+ if (!chunk)
213
+ continue;
214
+ const chunkTokens = chunk.approxTokens || approximateTokens(chunk.content);
215
+ // Check if adding this chunk would exceed budget
216
+ if (totalTokens + chunkTokens > maxTokens) {
217
+ // Try to fit a truncated version
218
+ const remainingTokens = maxTokens - totalTokens;
219
+ if (remainingTokens > 100) {
220
+ const truncated = truncateChunk(chunk.content, remainingTokens);
221
+ parts.push(formatChunkForOutput(chunk, truncated, wc.weight));
222
+ totalTokens += approximateTokens(truncated);
223
+ includedChunks.push({
224
+ id: chunk.id,
225
+ sessionSlug: chunk.sessionSlug,
226
+ weight: wc.weight,
227
+ preview: truncated.slice(0, 100) + '...',
228
+ source: sourceMap?.get(chunk.id),
229
+ });
230
+ }
231
+ break;
232
+ }
233
+ parts.push(formatChunkForOutput(chunk, chunk.content, wc.weight));
234
+ totalTokens += chunkTokens;
235
+ includedChunks.push({
236
+ id: chunk.id,
237
+ sessionSlug: chunk.sessionSlug,
238
+ weight: wc.weight,
239
+ preview: chunk.content.slice(0, 100) + (chunk.content.length > 100 ? '...' : ''),
240
+ source: sourceMap?.get(chunk.id),
241
+ });
242
+ }
243
+ return {
244
+ text: parts.join('\n\n---\n\n'),
245
+ tokenCount: totalTokens,
246
+ includedChunks,
247
+ };
248
+ }
249
+ /**
250
+ * Format a chunk for output with metadata header.
251
+ */
252
+ function formatChunkForOutput(chunk, content, weight) {
253
+ const date = new Date(chunk.startTime).toLocaleDateString();
254
+ const relevance = (weight * 100).toFixed(0);
255
+ return `[Session: ${chunk.sessionSlug} | Date: ${date} | Relevance: ${relevance}%]\n${content}`;
256
+ }
257
+ /**
258
+ * Truncate chunk content to fit token budget.
259
+ */
260
+ function truncateChunk(content, maxTokens) {
261
+ // Rough estimate: 4 chars per token
262
+ const maxChars = maxTokens * 4;
263
+ if (content.length <= maxChars) {
264
+ return content;
265
+ }
266
+ // Try to cut at a paragraph boundary
267
+ const truncated = content.slice(0, maxChars);
268
+ const lastNewline = truncated.lastIndexOf('\n\n');
269
+ if (lastNewline > maxChars * 0.5) {
270
+ return truncated.slice(0, lastNewline) + '\n\n...[truncated]';
271
+ }
272
+ return truncated + '\n...[truncated]';
273
+ }
274
+ /**
275
+ * Recall: retrieve context relevant to a query.
276
+ */
277
+ export async function recall(query, options = {}) {
278
+ return assembleContext({
279
+ query,
280
+ mode: 'recall',
281
+ ...options,
282
+ });
283
+ }
284
+ /**
285
+ * Explain: retrieve context that explains how we got to current state.
286
+ */
287
+ export async function explain(topic, options = {}) {
288
+ return assembleContext({
289
+ query: topic,
290
+ mode: 'explain',
291
+ ...options,
292
+ });
293
+ }
294
+ /**
295
+ * Predict: retrieve context that might be relevant next.
296
+ */
297
+ export async function predict(context, options = {}) {
298
+ return assembleContext({
299
+ query: context,
300
+ mode: 'predict',
301
+ ...options,
302
+ });
303
+ }
304
+ /**
305
+ * Cleanup shared resources.
306
+ */
307
+ export async function disposeRetrieval() {
308
+ if (sharedEmbedder) {
309
+ await sharedEmbedder.dispose();
310
+ sharedEmbedder = null;
311
+ }
312
+ }
313
+ //# sourceMappingURL=context-assembler.js.map