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,680 @@
1
+ import * as fs from 'node:fs';
2
+ import * as path from 'node:path';
3
+ import * as os from 'node:os';
4
+ import { fileURLToPath } from 'node:url';
5
+ import { runTask } from '../../maintenance/scheduler.js';
6
+ import { getDb, storeDbKey } from '../../storage/db.js';
7
+ import { getChunkCount } from '../../storage/chunk-store.js';
8
+ import { createSecretStore } from '../../utils/secret-store.js';
9
+ import { promptPassword, promptYesNo, promptUser } from '../utils.js';
10
+ /** Resolve the CLI entry point path for MCP/hook configuration. */
11
+ function getCliEntryPath() {
12
+ return path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..', 'index.js');
13
+ }
14
+ function checkNodeVersion() {
15
+ const nodeVersion = process.versions.node;
16
+ const majorVersion = parseInt(nodeVersion.split('.')[0], 10);
17
+ if (majorVersion >= 20) {
18
+ console.log(`\u2713 Node.js ${nodeVersion}`);
19
+ }
20
+ else {
21
+ console.log(`\u2717 Node.js ${nodeVersion} (requires 20+)`);
22
+ process.exit(1);
23
+ }
24
+ }
25
+ function createDirectoryStructure(causanticDir) {
26
+ const vectorsDir = path.join(causanticDir, 'vectors');
27
+ for (const dir of [causanticDir, vectorsDir]) {
28
+ if (!fs.existsSync(dir)) {
29
+ fs.mkdirSync(dir, { recursive: true });
30
+ console.log(`\u2713 Created ${dir}`);
31
+ }
32
+ else {
33
+ console.log(`\u2713 Directory exists: ${dir}`);
34
+ }
35
+ }
36
+ }
37
+ async function setupEncryption(causanticDir) {
38
+ const dbPath = path.join(causanticDir, 'memory.db');
39
+ const existingDbExists = fs.existsSync(dbPath) && fs.statSync(dbPath).size > 0;
40
+ let existingDbIsUnencrypted = false;
41
+ if (existingDbExists) {
42
+ try {
43
+ const Database = (await import('better-sqlite3-multiple-ciphers')).default;
44
+ const testDb = new Database(dbPath);
45
+ testDb.prepare('SELECT 1').get();
46
+ testDb.close();
47
+ existingDbIsUnencrypted = true;
48
+ }
49
+ catch {
50
+ // DB exists but can't be opened without key — may already be encrypted
51
+ }
52
+ }
53
+ console.log('');
54
+ console.log('Enable database encryption?');
55
+ console.log('Protects conversation data, embeddings, and work patterns.');
56
+ if (existingDbIsUnencrypted) {
57
+ console.log('');
58
+ console.log('\u26a0 Existing unencrypted database detected.');
59
+ console.log(' Enabling encryption will back up the existing database and create a new encrypted one.');
60
+ console.log(' Your data will be migrated automatically.');
61
+ }
62
+ if (!(await promptYesNo('Enable encryption?')))
63
+ return false;
64
+ const { generatePassword } = await import('../../storage/encryption.js');
65
+ if (existingDbIsUnencrypted) {
66
+ const backupPath = dbPath + '.unencrypted.bak';
67
+ fs.copyFileSync(dbPath, backupPath);
68
+ console.log(`\u2713 Backed up existing database to ${path.basename(backupPath)}`);
69
+ fs.unlinkSync(dbPath);
70
+ for (const suffix of ['-wal', '-shm']) {
71
+ const walPath = dbPath + suffix;
72
+ if (fs.existsSync(walPath))
73
+ fs.unlinkSync(walPath);
74
+ }
75
+ }
76
+ console.log('');
77
+ console.log('Generating encryption key...');
78
+ const key = generatePassword(32);
79
+ await storeDbKey(key);
80
+ const configPath = path.join(causanticDir, 'config.json');
81
+ const existingConfig = fs.existsSync(configPath)
82
+ ? JSON.parse(fs.readFileSync(configPath, 'utf-8'))
83
+ : {};
84
+ fs.writeFileSync(configPath, JSON.stringify({
85
+ ...existingConfig,
86
+ encryption: { enabled: true, cipher: 'chacha20', keySource: 'keychain' },
87
+ }, null, 2));
88
+ console.log('\u2713 Key stored in system keychain');
89
+ console.log('\u2713 Encryption enabled with ChaCha20-Poly1305');
90
+ if (existingDbIsUnencrypted) {
91
+ await migrateToEncryptedDb(dbPath);
92
+ }
93
+ return true;
94
+ }
95
+ async function migrateToEncryptedDb(dbPath) {
96
+ const backupPath = dbPath + '.unencrypted.bak';
97
+ try {
98
+ const newDb = getDb();
99
+ const Database = (await import('better-sqlite3-multiple-ciphers')).default;
100
+ const oldDb = new Database(backupPath);
101
+ const tables = oldDb
102
+ .prepare("SELECT name FROM sqlite_master WHERE type='table' AND name != 'schema_version'")
103
+ .all();
104
+ let migratedRows = 0;
105
+ for (const { name } of tables) {
106
+ const exists = newDb
107
+ .prepare("SELECT 1 FROM sqlite_master WHERE type='table' AND name=?")
108
+ .get(name);
109
+ if (!exists)
110
+ continue;
111
+ const rows = oldDb.prepare(`SELECT * FROM "${name}"`).all();
112
+ if (rows.length === 0)
113
+ continue;
114
+ const columns = Object.keys(rows[0]);
115
+ const placeholders = columns.map(() => '?').join(', ');
116
+ const insert = newDb.prepare(`INSERT OR IGNORE INTO "${name}" (${columns.map((c) => `"${c}"`).join(', ')}) VALUES (${placeholders})`);
117
+ const batchInsert = newDb.transaction((rowBatch) => {
118
+ for (const row of rowBatch) {
119
+ insert.run(...columns.map((c) => row[c]));
120
+ }
121
+ });
122
+ batchInsert(rows);
123
+ migratedRows += rows.length;
124
+ }
125
+ oldDb.close();
126
+ console.log(`\u2713 Migrated ${migratedRows} rows to encrypted database`);
127
+ }
128
+ catch (err) {
129
+ console.log(`\u26a0 Migration error: ${err.message}`);
130
+ console.log(` Backup preserved at: ${backupPath}`);
131
+ console.log(' You can manually re-import with: causantic import');
132
+ }
133
+ }
134
+ function initializeDatabase(encryptionEnabled) {
135
+ try {
136
+ const db = getDb();
137
+ db.prepare('SELECT 1').get();
138
+ console.log('\u2713 Database initialized' + (encryptionEnabled ? ' (encrypted)' : ''));
139
+ }
140
+ catch (error) {
141
+ console.log(`\u2717 Database error: ${error.message}`);
142
+ process.exit(1);
143
+ }
144
+ }
145
+ async function configureMcp(claudeConfigPath) {
146
+ if (!fs.existsSync(claudeConfigPath)) {
147
+ console.log('\u26a0 Claude Code config not found');
148
+ console.log(' Create it manually or install Claude Code first');
149
+ return;
150
+ }
151
+ console.log('\u2713 Claude Code config found');
152
+ try {
153
+ const configContent = fs.readFileSync(claudeConfigPath, 'utf-8');
154
+ const config = JSON.parse(configContent);
155
+ const CAUSANTIC_SERVER_KEY = 'causantic';
156
+ // Migrate old 'memory' key -> 'causantic'
157
+ if (config.mcpServers?.memory && !config.mcpServers[CAUSANTIC_SERVER_KEY]) {
158
+ config.mcpServers[CAUSANTIC_SERVER_KEY] = config.mcpServers.memory;
159
+ delete config.mcpServers.memory;
160
+ fs.writeFileSync(claudeConfigPath, JSON.stringify(config, null, 2));
161
+ console.log('\u2713 Migrated config: memory \u2192 causantic');
162
+ }
163
+ if (config.mcpServers?.[CAUSANTIC_SERVER_KEY]) {
164
+ if (config.mcpServers[CAUSANTIC_SERVER_KEY].command === 'npx') {
165
+ config.mcpServers[CAUSANTIC_SERVER_KEY] = {
166
+ command: process.execPath,
167
+ args: [getCliEntryPath(), 'serve'],
168
+ };
169
+ fs.writeFileSync(claudeConfigPath, JSON.stringify(config, null, 2));
170
+ console.log('\u2713 Updated Causantic config to use absolute paths');
171
+ }
172
+ else {
173
+ console.log('\u2713 Causantic already configured in Claude Code');
174
+ }
175
+ }
176
+ else {
177
+ if (await promptYesNo('Add Causantic to Claude Code MCP config?', true)) {
178
+ config.mcpServers = config.mcpServers || {};
179
+ config.mcpServers[CAUSANTIC_SERVER_KEY] = {
180
+ command: process.execPath,
181
+ args: [getCliEntryPath(), 'serve'],
182
+ };
183
+ fs.writeFileSync(claudeConfigPath, JSON.stringify(config, null, 2));
184
+ console.log('\u2713 Added Causantic to Claude Code config');
185
+ console.log(` Node: ${process.execPath}`);
186
+ console.log(' Restart Claude Code to activate');
187
+ }
188
+ }
189
+ }
190
+ catch {
191
+ console.log('\u26a0 Could not parse Claude Code config');
192
+ }
193
+ }
194
+ async function patchProjectMcpFiles() {
195
+ const claudeProjectsDir = path.join(os.homedir(), '.claude', 'projects');
196
+ if (!fs.existsSync(claudeProjectsDir))
197
+ return;
198
+ const serverConfig = {
199
+ command: process.execPath,
200
+ args: [getCliEntryPath(), 'serve'],
201
+ };
202
+ const CAUSANTIC_KEY = 'causantic';
203
+ const projectsToFix = [];
204
+ try {
205
+ const entries = fs.readdirSync(claudeProjectsDir, { withFileTypes: true });
206
+ for (const entry of entries) {
207
+ if (!entry.isDirectory() || entry.name.startsWith('.'))
208
+ continue;
209
+ const projectPath = '/' + entry.name.replace(/^-/, '').replace(/-/g, '/');
210
+ const mcpPath = path.join(projectPath, '.mcp.json');
211
+ if (!fs.existsSync(mcpPath))
212
+ continue;
213
+ try {
214
+ const mcpContent = JSON.parse(fs.readFileSync(mcpPath, 'utf-8'));
215
+ if (!mcpContent.mcpServers)
216
+ continue;
217
+ const readableName = projectPath.replace(new RegExp(`^/Users/${os.userInfo().username}/`), '~/');
218
+ if (mcpContent.mcpServers.memory && !mcpContent.mcpServers[CAUSANTIC_KEY]) {
219
+ projectsToFix.push({ name: readableName, mcpPath, needsMigrate: true });
220
+ }
221
+ else if (!mcpContent.mcpServers[CAUSANTIC_KEY]) {
222
+ projectsToFix.push({ name: readableName, mcpPath, needsMigrate: false });
223
+ }
224
+ }
225
+ catch {
226
+ // Skip unparseable files
227
+ }
228
+ }
229
+ }
230
+ catch {
231
+ return;
232
+ }
233
+ if (projectsToFix.length === 0)
234
+ return;
235
+ const migrateCount = projectsToFix.filter((p) => p.needsMigrate).length;
236
+ const addCount = projectsToFix.length - migrateCount;
237
+ console.log('');
238
+ if (migrateCount > 0 && addCount > 0) {
239
+ console.log(`Found ${addCount} project(s) missing Causantic and ${migrateCount} to migrate:`);
240
+ }
241
+ else if (migrateCount > 0) {
242
+ console.log(`Found ${migrateCount} project(s) with old 'memory' key to migrate:`);
243
+ }
244
+ else {
245
+ console.log(`Found ${addCount} project(s) with .mcp.json missing Causantic:`);
246
+ }
247
+ for (const p of projectsToFix) {
248
+ console.log(` ${p.name}${p.needsMigrate ? ' (migrate)' : ''}`);
249
+ }
250
+ if (!(await promptYesNo('Add/migrate Causantic server in these projects?', true)))
251
+ return;
252
+ let patched = 0;
253
+ for (const p of projectsToFix) {
254
+ try {
255
+ const mcpContent = JSON.parse(fs.readFileSync(p.mcpPath, 'utf-8'));
256
+ if (p.needsMigrate) {
257
+ mcpContent.mcpServers[CAUSANTIC_KEY] = mcpContent.mcpServers.memory;
258
+ delete mcpContent.mcpServers.memory;
259
+ }
260
+ else {
261
+ mcpContent.mcpServers[CAUSANTIC_KEY] = serverConfig;
262
+ }
263
+ fs.writeFileSync(p.mcpPath, JSON.stringify(mcpContent, null, 2) + '\n');
264
+ patched++;
265
+ }
266
+ catch {
267
+ console.log(` \u26a0 Could not patch ${p.name}`);
268
+ }
269
+ }
270
+ if (patched > 0) {
271
+ console.log(`\u2713 Updated Causantic in ${patched} project .mcp.json file(s)`);
272
+ }
273
+ }
274
+ async function installSkillsAndClaudeMd() {
275
+ const { CAUSANTIC_SKILLS, getMinimalClaudeMdBlock } = await import('../skill-templates.js');
276
+ const skillsDir = path.join(os.homedir(), '.claude', 'skills');
277
+ let skillsInstalled = 0;
278
+ for (const skill of CAUSANTIC_SKILLS) {
279
+ try {
280
+ const skillDir = path.join(skillsDir, skill.dirName);
281
+ if (!fs.existsSync(skillDir)) {
282
+ fs.mkdirSync(skillDir, { recursive: true });
283
+ }
284
+ fs.writeFileSync(path.join(skillDir, 'SKILL.md'), skill.content);
285
+ skillsInstalled++;
286
+ }
287
+ catch {
288
+ console.log(`\u26a0 Could not install skill: ${skill.dirName}`);
289
+ }
290
+ }
291
+ if (skillsInstalled > 0) {
292
+ console.log(`\u2713 Installed ${skillsInstalled} Causantic skills to ~/.claude/skills/`);
293
+ }
294
+ const claudeMdPath = path.join(os.homedir(), '.claude', 'CLAUDE.md');
295
+ const CAUSANTIC_START = '<!-- CAUSANTIC_MEMORY_START -->';
296
+ const CAUSANTIC_END = '<!-- CAUSANTIC_MEMORY_END -->';
297
+ const memoryInstructions = getMinimalClaudeMdBlock();
298
+ try {
299
+ let claudeMd = '';
300
+ if (fs.existsSync(claudeMdPath)) {
301
+ claudeMd = fs.readFileSync(claudeMdPath, 'utf-8');
302
+ }
303
+ if (claudeMd.includes(CAUSANTIC_START)) {
304
+ const startIdx = claudeMd.indexOf(CAUSANTIC_START);
305
+ const endIdx = claudeMd.indexOf(CAUSANTIC_END);
306
+ if (endIdx > startIdx) {
307
+ claudeMd = claudeMd.slice(0, startIdx) + memoryInstructions + claudeMd.slice(endIdx + CAUSANTIC_END.length);
308
+ fs.writeFileSync(claudeMdPath, claudeMd);
309
+ console.log('\u2713 Updated CLAUDE.md with skill references');
310
+ }
311
+ }
312
+ else {
313
+ const separator = claudeMd.length > 0 && !claudeMd.endsWith('\n\n') ? '\n' : '';
314
+ fs.writeFileSync(claudeMdPath, claudeMd + separator + memoryInstructions + '\n');
315
+ console.log('\u2713 Added Causantic reference to CLAUDE.md');
316
+ }
317
+ }
318
+ catch {
319
+ console.log('\u26a0 Could not update CLAUDE.md');
320
+ }
321
+ }
322
+ async function configureHooks(claudeConfigPath) {
323
+ try {
324
+ const settingsContent = fs.readFileSync(claudeConfigPath, 'utf-8');
325
+ const config = JSON.parse(settingsContent);
326
+ const cliEntry = getCliEntryPath();
327
+ const nodeBin = process.execPath;
328
+ const causanticHooks = [
329
+ {
330
+ event: 'PreCompact',
331
+ matcher: '',
332
+ hook: {
333
+ type: 'command',
334
+ command: `${nodeBin} ${cliEntry} hook pre-compact`,
335
+ timeout: 300,
336
+ },
337
+ },
338
+ {
339
+ event: 'SessionStart',
340
+ matcher: '',
341
+ hook: {
342
+ type: 'command',
343
+ command: `${nodeBin} ${cliEntry} hook session-start`,
344
+ timeout: 60,
345
+ },
346
+ },
347
+ ];
348
+ if (!config.hooks) {
349
+ config.hooks = {};
350
+ }
351
+ let hooksAdded = 0;
352
+ for (const { event, matcher, hook } of causanticHooks) {
353
+ if (!config.hooks[event]) {
354
+ config.hooks[event] = [];
355
+ }
356
+ const alreadyConfigured = config.hooks[event].some((entry) => entry.hooks?.some((h) => h.command?.includes('causantic')));
357
+ if (!alreadyConfigured) {
358
+ config.hooks[event].push({
359
+ matcher,
360
+ hooks: [hook],
361
+ });
362
+ hooksAdded++;
363
+ }
364
+ }
365
+ if (hooksAdded > 0) {
366
+ fs.writeFileSync(claudeConfigPath, JSON.stringify(config, null, 2));
367
+ console.log(`\u2713 Configured ${hooksAdded} Claude Code hooks (PreCompact, SessionStart)`);
368
+ }
369
+ else {
370
+ console.log('\u2713 Claude Code hooks already configured');
371
+ }
372
+ }
373
+ catch {
374
+ console.log('\u26a0 Could not configure Claude Code hooks');
375
+ }
376
+ }
377
+ async function runHealthCheck() {
378
+ console.log('');
379
+ console.log('Running health check...');
380
+ try {
381
+ const { vectorStore } = await import('../../storage/vector-store.js');
382
+ if (vectorStore && typeof vectorStore.count === 'function') {
383
+ await vectorStore.count();
384
+ }
385
+ console.log('\u2713 Vector store OK');
386
+ }
387
+ catch (error) {
388
+ console.log(`\u26a0 Vector store: ${error.message}`);
389
+ }
390
+ }
391
+ /** Create a terminal spinner for progress display. */
392
+ function createSpinner() {
393
+ const frames = ['\u280b', '\u2819', '\u2839', '\u2838', '\u283c', '\u2834', '\u2826', '\u2827', '\u2807', '\u280f'];
394
+ let idx = 0;
395
+ let timer = null;
396
+ let text = '';
397
+ const writeLine = (line) => {
398
+ if (process.stdout.isTTY) {
399
+ process.stdout.write('\r\x1b[K' + line);
400
+ }
401
+ };
402
+ return {
403
+ start(label) {
404
+ if (!process.stdout.isTTY)
405
+ return;
406
+ text = label;
407
+ idx = 0;
408
+ writeLine(`${frames[0]} ${text}`);
409
+ timer = setInterval(() => {
410
+ idx = (idx + 1) % frames.length;
411
+ writeLine(`${frames[idx]} ${text}`);
412
+ }, 80);
413
+ },
414
+ update(label) {
415
+ text = label;
416
+ },
417
+ stop(doneText) {
418
+ if (timer) {
419
+ clearInterval(timer);
420
+ timer = null;
421
+ }
422
+ if (process.stdout.isTTY) {
423
+ process.stdout.write('\r\x1b[K');
424
+ }
425
+ if (doneText) {
426
+ console.log(doneText);
427
+ }
428
+ },
429
+ };
430
+ }
431
+ async function offerBatchIngest() {
432
+ const claudeProjectsDir = path.join(os.homedir(), '.claude', 'projects');
433
+ if (!fs.existsSync(claudeProjectsDir))
434
+ return;
435
+ console.log('');
436
+ console.log('Existing Claude Code sessions found.');
437
+ const projectDirs = [];
438
+ try {
439
+ const entries = fs.readdirSync(claudeProjectsDir, { withFileTypes: true });
440
+ for (const entry of entries) {
441
+ if (entry.isDirectory() && !entry.name.startsWith('.')) {
442
+ const projectPath = path.join(claudeProjectsDir, entry.name);
443
+ const files = fs.readdirSync(projectPath);
444
+ const sessionCount = files.filter((f) => f.endsWith('.jsonl') &&
445
+ /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\.jsonl$/i.test(f)).length;
446
+ if (sessionCount > 0) {
447
+ const readableName = entry.name
448
+ .replace(/^-/, '')
449
+ .replace(/-/g, '/')
450
+ .replace(/^Users\/[^/]+\//, '~/');
451
+ projectDirs.push({ name: readableName, path: projectPath, sessionCount });
452
+ }
453
+ }
454
+ }
455
+ }
456
+ catch {
457
+ // Ignore errors reading projects
458
+ }
459
+ if (projectDirs.length === 0)
460
+ return;
461
+ projectDirs.sort((a, b) => b.sessionCount - a.sessionCount);
462
+ const totalSessions = projectDirs.reduce((sum, p) => sum + p.sessionCount, 0);
463
+ console.log(`Found ${projectDirs.length} projects with ${totalSessions} total sessions.`);
464
+ console.log('');
465
+ console.log('Import existing sessions?');
466
+ console.log(' [A] All projects');
467
+ console.log(' [S] Select specific projects');
468
+ console.log(' [N] Skip (can run "causantic batch-ingest" later)');
469
+ console.log('');
470
+ const importChoice = (await promptUser('Choice [A/s/n]: ')).toLowerCase() || 'a';
471
+ let projectsToIngest = [];
472
+ if (importChoice === 'a' || importChoice === 'all') {
473
+ projectsToIngest = projectDirs.map((p) => p.path);
474
+ }
475
+ else if (importChoice === 's' || importChoice === 'select') {
476
+ console.log('');
477
+ console.log('Select projects to import (comma-separated numbers, or "all"):');
478
+ console.log('');
479
+ projectDirs.forEach((p, i) => {
480
+ console.log(` [${i + 1}] ${p.name} (${p.sessionCount} sessions)`);
481
+ });
482
+ console.log('');
483
+ const selection = (await promptUser('Projects: ')).trim();
484
+ if (selection.toLowerCase() === 'all') {
485
+ projectsToIngest = projectDirs.map((p) => p.path);
486
+ }
487
+ else {
488
+ const indices = selection.split(',').map((s) => parseInt(s.trim(), 10) - 1);
489
+ for (const idx of indices) {
490
+ if (idx >= 0 && idx < projectDirs.length) {
491
+ projectsToIngest.push(projectDirs[idx].path);
492
+ }
493
+ }
494
+ }
495
+ }
496
+ else {
497
+ console.log('Skipping session import.');
498
+ }
499
+ if (projectsToIngest.length === 0)
500
+ return;
501
+ const spinner = createSpinner();
502
+ const { detectDevice } = await import('../../models/device-detector.js');
503
+ const { setLogLevel } = await import('../../utils/logger.js');
504
+ const detectedDevice = detectDevice();
505
+ console.log('');
506
+ const availableHint = detectedDevice.available?.length
507
+ ? ` (${detectedDevice.available.join(', ')} available)`
508
+ : '';
509
+ console.log(`\u2713 Inference: ${detectedDevice.label}${availableHint}`);
510
+ console.log(`Importing ${projectsToIngest.length} project(s)...`);
511
+ console.log('');
512
+ setLogLevel('warn');
513
+ const { discoverSessions, batchIngest } = await import('../../ingest/batch-ingest.js');
514
+ const { Embedder } = await import('../../models/embedder.js');
515
+ const { getModel } = await import('../../models/model-registry.js');
516
+ const sharedEmbedder = new Embedder();
517
+ await sharedEmbedder.load(getModel('jina-small'), { device: detectedDevice.device });
518
+ let totalIngested = 0;
519
+ let totalSkipped = 0;
520
+ let totalChunks = 0;
521
+ let totalEdges = 0;
522
+ for (const projectPath of projectsToIngest) {
523
+ const projectName = path.basename(projectPath)
524
+ .replace(/^-/, '')
525
+ .replace(/-/g, '/')
526
+ .replace(/^Users\/[^/]+\//, '~/');
527
+ const shortName = projectName.split('/').pop() || projectName;
528
+ const sessions = await discoverSessions(projectPath);
529
+ if (sessions.length === 0) {
530
+ continue;
531
+ }
532
+ spinner.start(`${shortName}: 0/${sessions.length} sessions`);
533
+ const result = await batchIngest(sessions, {
534
+ embeddingDevice: detectedDevice.device,
535
+ embedder: sharedEmbedder,
536
+ progressCallback: (progress) => {
537
+ spinner.update(`${shortName}: ${progress.done}/${progress.total} sessions, ${progress.totalChunks} chunks`);
538
+ },
539
+ });
540
+ spinner.stop();
541
+ if (result.successCount > 0) {
542
+ console.log(` \u2713 ${shortName}: ${result.successCount} sessions, ${result.totalChunks} chunks, ${result.totalEdges} edges`);
543
+ }
544
+ else if (result.skippedCount > 0) {
545
+ console.log(` \u2713 ${shortName}: ${result.skippedCount} sessions (already ingested)`);
546
+ }
547
+ totalIngested += result.successCount;
548
+ totalSkipped += result.skippedCount;
549
+ totalChunks += result.totalChunks;
550
+ totalEdges += result.totalEdges;
551
+ }
552
+ await sharedEmbedder.dispose();
553
+ setLogLevel('info');
554
+ if (totalIngested === 0 && totalSkipped === 0) {
555
+ console.log(' No sessions found to import.');
556
+ }
557
+ else if (totalIngested === 0) {
558
+ console.log('');
559
+ console.log(`\u2713 All ${totalSkipped} sessions already ingested`);
560
+ }
561
+ else {
562
+ console.log('');
563
+ const skippedSuffix = totalSkipped > 0 ? `, ${totalSkipped} skipped` : '';
564
+ console.log(`\u2713 Total: ${totalIngested} sessions, ${totalChunks} chunks, ${totalEdges} edges${skippedSuffix}`);
565
+ }
566
+ // Run post-ingestion maintenance tasks
567
+ const existingChunks = getChunkCount();
568
+ if (existingChunks > 0) {
569
+ console.log('');
570
+ console.log('Running post-ingestion processing...');
571
+ const { setLogLevel: setPostLogLevel } = await import('../../utils/logger.js');
572
+ setPostLogLevel('warn');
573
+ spinner.start('Pruning graph...');
574
+ try {
575
+ const pruneResult = await runTask('prune-graph');
576
+ spinner.stop(pruneResult.success
577
+ ? ' \u2713 Graph pruned'
578
+ : ` \u26a0 Pruning: ${pruneResult.message}`);
579
+ }
580
+ catch (err) {
581
+ spinner.stop(` \u2717 Pruning error: ${err.message}`);
582
+ }
583
+ spinner.start('Building clusters...');
584
+ try {
585
+ const clusterResult = await runTask('update-clusters');
586
+ spinner.stop(clusterResult.success
587
+ ? ' \u2713 Clusters built'
588
+ : ` \u26a0 Clustering: ${clusterResult.message}`);
589
+ }
590
+ catch (err) {
591
+ spinner.stop(` \u2717 Clustering error: ${err.message}`);
592
+ }
593
+ await offerApiKeySetup(spinner);
594
+ setPostLogLevel('info');
595
+ }
596
+ }
597
+ async function offerApiKeySetup(spinner) {
598
+ console.log('');
599
+ console.log('Cluster labeling uses Claude Haiku to generate human-readable');
600
+ console.log('descriptions for topic clusters.');
601
+ if (!(await promptYesNo('Add Anthropic API key for cluster labeling?')))
602
+ return;
603
+ const apiKey = await promptPassword('Enter Anthropic API key: ');
604
+ if (apiKey && apiKey.startsWith('sk-ant-')) {
605
+ const store = createSecretStore();
606
+ await store.set('anthropic-api-key', apiKey);
607
+ console.log('\u2713 API key stored in system keychain');
608
+ process.env.ANTHROPIC_API_KEY = apiKey;
609
+ spinner.start('Labeling clusters (0/?)...');
610
+ try {
611
+ const { clusterRefresher } = await import('../../clusters/cluster-refresh.js');
612
+ const results = await clusterRefresher.refreshAllClusters({
613
+ onProgress: (current, total) => {
614
+ spinner.update(`Labeling clusters (${current}/${total})...`);
615
+ },
616
+ });
617
+ spinner.stop(` \u2713 ${results.length} clusters labeled`);
618
+ }
619
+ catch (err) {
620
+ spinner.stop(` \u2717 Labeling error: ${err.message}`);
621
+ }
622
+ }
623
+ else if (apiKey) {
624
+ console.log('\u26a0 Invalid API key format (should start with sk-ant-)');
625
+ console.log(' You can add it later with: causantic config set-key anthropic-api-key');
626
+ }
627
+ else {
628
+ console.log(' Skipping cluster labeling.');
629
+ }
630
+ }
631
+ export const initCommand = {
632
+ name: 'init',
633
+ description: 'Initialize Causantic (setup wizard)',
634
+ usage: 'causantic init [--skip-mcp] [--skip-encryption] [--skip-ingest]',
635
+ handler: async (args) => {
636
+ const skipMcp = args.includes('--skip-mcp');
637
+ const skipEncryption = args.includes('--skip-encryption');
638
+ const skipIngest = args.includes('--skip-ingest');
639
+ console.log('Causantic - Setup');
640
+ console.log('=================');
641
+ console.log('');
642
+ checkNodeVersion();
643
+ const causanticDir = path.join(os.homedir(), '.causantic');
644
+ createDirectoryStructure(causanticDir);
645
+ let encryptionEnabled = false;
646
+ if (!skipEncryption && process.stdin.isTTY) {
647
+ encryptionEnabled = await setupEncryption(causanticDir);
648
+ }
649
+ initializeDatabase(encryptionEnabled);
650
+ const claudeConfigPath = path.join(os.homedir(), '.claude', 'settings.json');
651
+ console.log('');
652
+ console.log(`Claude Code config: ${claudeConfigPath}`);
653
+ if (!skipMcp) {
654
+ await configureMcp(claudeConfigPath);
655
+ if (process.stdin.isTTY) {
656
+ await patchProjectMcpFiles();
657
+ }
658
+ await installSkillsAndClaudeMd();
659
+ await configureHooks(claudeConfigPath);
660
+ }
661
+ await runHealthCheck();
662
+ if (!skipIngest && process.stdin.isTTY) {
663
+ await offerBatchIngest();
664
+ }
665
+ console.log('');
666
+ console.log('Setup complete!');
667
+ console.log('');
668
+ console.log('Next steps:');
669
+ if (!skipIngest && process.stdin.isTTY) {
670
+ console.log(' 1. Restart Claude Code');
671
+ console.log(' 2. Ask Claude: "What did we work on recently?"');
672
+ }
673
+ else {
674
+ console.log(' 1. npx causantic batch-ingest ~/.claude/projects');
675
+ console.log(' 2. Restart Claude Code');
676
+ console.log(' 3. Ask Claude: "What did we work on recently?"');
677
+ }
678
+ },
679
+ };
680
+ //# sourceMappingURL=init.js.map