@vinaes/succ 1.3.19

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 (781) hide show
  1. package/LICENSE +87 -0
  2. package/README.md +588 -0
  3. package/agents/succ-checkpoint-manager.md +51 -0
  4. package/agents/succ-code-reviewer.md +181 -0
  5. package/agents/succ-context-optimizer.md +83 -0
  6. package/agents/succ-debug.md +224 -0
  7. package/agents/succ-decision-auditor.md +74 -0
  8. package/agents/succ-deep-search.md +41 -0
  9. package/agents/succ-diff-reviewer.md +123 -0
  10. package/agents/succ-explore.md +83 -0
  11. package/agents/succ-general.md +109 -0
  12. package/agents/succ-knowledge-indexer.md +45 -0
  13. package/agents/succ-knowledge-mapper.md +61 -0
  14. package/agents/succ-memory-curator.md +43 -0
  15. package/agents/succ-memory-health-monitor.md +55 -0
  16. package/agents/succ-pattern-detective.md +62 -0
  17. package/agents/succ-plan.md +172 -0
  18. package/agents/succ-quality-improvement-coach.md +63 -0
  19. package/agents/succ-readiness-improver.md +62 -0
  20. package/agents/succ-session-handoff-orchestrator.md +54 -0
  21. package/agents/succ-session-reviewer.md +46 -0
  22. package/agents/succ-style-tracker.md +73 -0
  23. package/dist/cli.d.ts +3 -0
  24. package/dist/cli.d.ts.map +1 -0
  25. package/dist/cli.js +749 -0
  26. package/dist/cli.js.map +1 -0
  27. package/dist/commands/agents-md.d.ts +16 -0
  28. package/dist/commands/agents-md.d.ts.map +1 -0
  29. package/dist/commands/agents-md.js +33 -0
  30. package/dist/commands/agents-md.js.map +1 -0
  31. package/dist/commands/analyze-agents.d.ts +20 -0
  32. package/dist/commands/analyze-agents.d.ts.map +1 -0
  33. package/dist/commands/analyze-agents.js +305 -0
  34. package/dist/commands/analyze-agents.js.map +1 -0
  35. package/dist/commands/analyze-helpers.d.ts +22 -0
  36. package/dist/commands/analyze-helpers.d.ts.map +1 -0
  37. package/dist/commands/analyze-helpers.js +38 -0
  38. package/dist/commands/analyze-helpers.js.map +1 -0
  39. package/dist/commands/analyze-profile.d.ts +53 -0
  40. package/dist/commands/analyze-profile.d.ts.map +1 -0
  41. package/dist/commands/analyze-profile.js +638 -0
  42. package/dist/commands/analyze-profile.js.map +1 -0
  43. package/dist/commands/analyze-recursive.d.ts +20 -0
  44. package/dist/commands/analyze-recursive.d.ts.map +1 -0
  45. package/dist/commands/analyze-recursive.js +326 -0
  46. package/dist/commands/analyze-recursive.js.map +1 -0
  47. package/dist/commands/analyze-utils.d.ts +83 -0
  48. package/dist/commands/analyze-utils.d.ts.map +1 -0
  49. package/dist/commands/analyze-utils.js +541 -0
  50. package/dist/commands/analyze-utils.js.map +1 -0
  51. package/dist/commands/analyze.d.ts +15 -0
  52. package/dist/commands/analyze.d.ts.map +1 -0
  53. package/dist/commands/analyze.js +265 -0
  54. package/dist/commands/analyze.js.map +1 -0
  55. package/dist/commands/backfill.d.ts +22 -0
  56. package/dist/commands/backfill.d.ts.map +1 -0
  57. package/dist/commands/backfill.js +62 -0
  58. package/dist/commands/backfill.js.map +1 -0
  59. package/dist/commands/benchmark-quality.d.ts +18 -0
  60. package/dist/commands/benchmark-quality.d.ts.map +1 -0
  61. package/dist/commands/benchmark-quality.js +316 -0
  62. package/dist/commands/benchmark-quality.js.map +1 -0
  63. package/dist/commands/benchmark-sqlite-vec.d.ts +12 -0
  64. package/dist/commands/benchmark-sqlite-vec.d.ts.map +1 -0
  65. package/dist/commands/benchmark-sqlite-vec.js +281 -0
  66. package/dist/commands/benchmark-sqlite-vec.js.map +1 -0
  67. package/dist/commands/benchmark.d.ts +57 -0
  68. package/dist/commands/benchmark.d.ts.map +1 -0
  69. package/dist/commands/benchmark.js +682 -0
  70. package/dist/commands/benchmark.js.map +1 -0
  71. package/dist/commands/chat.d.ts +14 -0
  72. package/dist/commands/chat.d.ts.map +1 -0
  73. package/dist/commands/chat.js +84 -0
  74. package/dist/commands/chat.js.map +1 -0
  75. package/dist/commands/checkpoint.d.ts +27 -0
  76. package/dist/commands/checkpoint.d.ts.map +1 -0
  77. package/dist/commands/checkpoint.js +181 -0
  78. package/dist/commands/checkpoint.js.map +1 -0
  79. package/dist/commands/clear.d.ts +9 -0
  80. package/dist/commands/clear.d.ts.map +1 -0
  81. package/dist/commands/clear.js +31 -0
  82. package/dist/commands/clear.js.map +1 -0
  83. package/dist/commands/config.d.ts +26 -0
  84. package/dist/commands/config.d.ts.map +1 -0
  85. package/dist/commands/config.js +247 -0
  86. package/dist/commands/config.js.map +1 -0
  87. package/dist/commands/consolidate.d.ts +21 -0
  88. package/dist/commands/consolidate.d.ts.map +1 -0
  89. package/dist/commands/consolidate.js +117 -0
  90. package/dist/commands/consolidate.js.map +1 -0
  91. package/dist/commands/daemon.d.ts +48 -0
  92. package/dist/commands/daemon.d.ts.map +1 -0
  93. package/dist/commands/daemon.js +218 -0
  94. package/dist/commands/daemon.js.map +1 -0
  95. package/dist/commands/embedding.d.ts +26 -0
  96. package/dist/commands/embedding.d.ts.map +1 -0
  97. package/dist/commands/embedding.js +168 -0
  98. package/dist/commands/embedding.js.map +1 -0
  99. package/dist/commands/graph.d.ts +20 -0
  100. package/dist/commands/graph.d.ts.map +1 -0
  101. package/dist/commands/graph.js +128 -0
  102. package/dist/commands/graph.js.map +1 -0
  103. package/dist/commands/index-code.d.ts +23 -0
  104. package/dist/commands/index-code.d.ts.map +1 -0
  105. package/dist/commands/index-code.js +218 -0
  106. package/dist/commands/index-code.js.map +1 -0
  107. package/dist/commands/index.d.ts +23 -0
  108. package/dist/commands/index.d.ts.map +1 -0
  109. package/dist/commands/index.js +217 -0
  110. package/dist/commands/index.js.map +1 -0
  111. package/dist/commands/init-templates.d.ts +21 -0
  112. package/dist/commands/init-templates.d.ts.map +1 -0
  113. package/dist/commands/init-templates.js +487 -0
  114. package/dist/commands/init-templates.js.map +1 -0
  115. package/dist/commands/init.d.ts +10 -0
  116. package/dist/commands/init.d.ts.map +1 -0
  117. package/dist/commands/init.js +865 -0
  118. package/dist/commands/init.js.map +1 -0
  119. package/dist/commands/memories.d.ts +47 -0
  120. package/dist/commands/memories.d.ts.map +1 -0
  121. package/dist/commands/memories.js +597 -0
  122. package/dist/commands/memories.js.map +1 -0
  123. package/dist/commands/migrate.d.ts +19 -0
  124. package/dist/commands/migrate.d.ts.map +1 -0
  125. package/dist/commands/migrate.js +154 -0
  126. package/dist/commands/migrate.js.map +1 -0
  127. package/dist/commands/prd.d.ts +46 -0
  128. package/dist/commands/prd.d.ts.map +1 -0
  129. package/dist/commands/prd.js +378 -0
  130. package/dist/commands/prd.js.map +1 -0
  131. package/dist/commands/precompute-context.d.ts +11 -0
  132. package/dist/commands/precompute-context.d.ts.map +1 -0
  133. package/dist/commands/precompute-context.js +12 -0
  134. package/dist/commands/precompute-context.js.map +1 -0
  135. package/dist/commands/progress.d.ts +16 -0
  136. package/dist/commands/progress.d.ts.map +1 -0
  137. package/dist/commands/progress.js +38 -0
  138. package/dist/commands/progress.js.map +1 -0
  139. package/dist/commands/reindex.d.ts +17 -0
  140. package/dist/commands/reindex.d.ts.map +1 -0
  141. package/dist/commands/reindex.js +83 -0
  142. package/dist/commands/reindex.js.map +1 -0
  143. package/dist/commands/retention.d.ts +19 -0
  144. package/dist/commands/retention.d.ts.map +1 -0
  145. package/dist/commands/retention.js +162 -0
  146. package/dist/commands/retention.js.map +1 -0
  147. package/dist/commands/score.d.ts +10 -0
  148. package/dist/commands/score.d.ts.map +1 -0
  149. package/dist/commands/score.js +28 -0
  150. package/dist/commands/score.js.map +1 -0
  151. package/dist/commands/search.d.ts +7 -0
  152. package/dist/commands/search.d.ts.map +1 -0
  153. package/dist/commands/search.js +89 -0
  154. package/dist/commands/search.js.map +1 -0
  155. package/dist/commands/session-summary.d.ts +15 -0
  156. package/dist/commands/session-summary.d.ts.map +1 -0
  157. package/dist/commands/session-summary.js +16 -0
  158. package/dist/commands/session-summary.js.map +1 -0
  159. package/dist/commands/setup.d.ts +6 -0
  160. package/dist/commands/setup.d.ts.map +1 -0
  161. package/dist/commands/setup.js +222 -0
  162. package/dist/commands/setup.js.map +1 -0
  163. package/dist/commands/soul.d.ts +9 -0
  164. package/dist/commands/soul.d.ts.map +1 -0
  165. package/dist/commands/soul.js +256 -0
  166. package/dist/commands/soul.js.map +1 -0
  167. package/dist/commands/stats.d.ts +18 -0
  168. package/dist/commands/stats.d.ts.map +1 -0
  169. package/dist/commands/stats.js +138 -0
  170. package/dist/commands/stats.js.map +1 -0
  171. package/dist/commands/status.d.ts +2 -0
  172. package/dist/commands/status.d.ts.map +1 -0
  173. package/dist/commands/status.js +145 -0
  174. package/dist/commands/status.js.map +1 -0
  175. package/dist/commands/train-bpe.d.ts +8 -0
  176. package/dist/commands/train-bpe.d.ts.map +1 -0
  177. package/dist/commands/train-bpe.js +35 -0
  178. package/dist/commands/train-bpe.js.map +1 -0
  179. package/dist/commands/watch.d.ts +22 -0
  180. package/dist/commands/watch.d.ts.map +1 -0
  181. package/dist/commands/watch.js +171 -0
  182. package/dist/commands/watch.js.map +1 -0
  183. package/dist/daemon/analyzer.d.ts +54 -0
  184. package/dist/daemon/analyzer.d.ts.map +1 -0
  185. package/dist/daemon/analyzer.js +362 -0
  186. package/dist/daemon/analyzer.js.map +1 -0
  187. package/dist/daemon/client.d.ts +87 -0
  188. package/dist/daemon/client.d.ts.map +1 -0
  189. package/dist/daemon/client.js +356 -0
  190. package/dist/daemon/client.js.map +1 -0
  191. package/dist/daemon/index.d.ts +12 -0
  192. package/dist/daemon/index.d.ts.map +1 -0
  193. package/dist/daemon/index.js +12 -0
  194. package/dist/daemon/index.js.map +1 -0
  195. package/dist/daemon/service.d.ts +51 -0
  196. package/dist/daemon/service.d.ts.map +1 -0
  197. package/dist/daemon/service.js +1203 -0
  198. package/dist/daemon/service.js.map +1 -0
  199. package/dist/daemon/session-processor.d.ts +85 -0
  200. package/dist/daemon/session-processor.d.ts.map +1 -0
  201. package/dist/daemon/session-processor.js +571 -0
  202. package/dist/daemon/session-processor.js.map +1 -0
  203. package/dist/daemon/sessions.d.ts +62 -0
  204. package/dist/daemon/sessions.d.ts.map +1 -0
  205. package/dist/daemon/sessions.js +192 -0
  206. package/dist/daemon/sessions.js.map +1 -0
  207. package/dist/daemon/watcher.d.ts +52 -0
  208. package/dist/daemon/watcher.d.ts.map +1 -0
  209. package/dist/daemon/watcher.js +363 -0
  210. package/dist/daemon/watcher.js.map +1 -0
  211. package/dist/lib/agents-md-generator.d.ts +33 -0
  212. package/dist/lib/agents-md-generator.d.ts.map +1 -0
  213. package/dist/lib/agents-md-generator.js +156 -0
  214. package/dist/lib/agents-md-generator.js.map +1 -0
  215. package/dist/lib/ai-readiness.d.ts +132 -0
  216. package/dist/lib/ai-readiness.d.ts.map +1 -0
  217. package/dist/lib/ai-readiness.js +702 -0
  218. package/dist/lib/ai-readiness.js.map +1 -0
  219. package/dist/lib/analyze-state.d.ts +34 -0
  220. package/dist/lib/analyze-state.d.ts.map +1 -0
  221. package/dist/lib/analyze-state.js +106 -0
  222. package/dist/lib/analyze-state.js.map +1 -0
  223. package/dist/lib/benchmark.d.ts +250 -0
  224. package/dist/lib/benchmark.d.ts.map +1 -0
  225. package/dist/lib/benchmark.js +778 -0
  226. package/dist/lib/benchmark.js.map +1 -0
  227. package/dist/lib/bm25.d.ts +114 -0
  228. package/dist/lib/bm25.d.ts.map +1 -0
  229. package/dist/lib/bm25.js +727 -0
  230. package/dist/lib/bm25.js.map +1 -0
  231. package/dist/lib/bpe.d.ts +70 -0
  232. package/dist/lib/bpe.d.ts.map +1 -0
  233. package/dist/lib/bpe.js +270 -0
  234. package/dist/lib/bpe.js.map +1 -0
  235. package/dist/lib/checkpoint.d.ts +124 -0
  236. package/dist/lib/checkpoint.d.ts.map +1 -0
  237. package/dist/lib/checkpoint.js +321 -0
  238. package/dist/lib/checkpoint.js.map +1 -0
  239. package/dist/lib/chunker.d.ts +47 -0
  240. package/dist/lib/chunker.d.ts.map +1 -0
  241. package/dist/lib/chunker.js +358 -0
  242. package/dist/lib/chunker.js.map +1 -0
  243. package/dist/lib/claude-ws-transport.d.ts +76 -0
  244. package/dist/lib/claude-ws-transport.d.ts.map +1 -0
  245. package/dist/lib/claude-ws-transport.js +487 -0
  246. package/dist/lib/claude-ws-transport.js.map +1 -0
  247. package/dist/lib/compact-briefing.d.ts +22 -0
  248. package/dist/lib/compact-briefing.d.ts.map +1 -0
  249. package/dist/lib/compact-briefing.js +180 -0
  250. package/dist/lib/compact-briefing.js.map +1 -0
  251. package/dist/lib/config-defaults.d.ts +41 -0
  252. package/dist/lib/config-defaults.d.ts.map +1 -0
  253. package/dist/lib/config-defaults.js +99 -0
  254. package/dist/lib/config-defaults.js.map +1 -0
  255. package/dist/lib/config-display.d.ts +16 -0
  256. package/dist/lib/config-display.d.ts.map +1 -0
  257. package/dist/lib/config-display.js +408 -0
  258. package/dist/lib/config-display.js.map +1 -0
  259. package/dist/lib/config-types.d.ts +601 -0
  260. package/dist/lib/config-types.d.ts.map +1 -0
  261. package/dist/lib/config-types.js +7 -0
  262. package/dist/lib/config-types.js.map +1 -0
  263. package/dist/lib/config-validation.d.ts +19 -0
  264. package/dist/lib/config-validation.d.ts.map +1 -0
  265. package/dist/lib/config-validation.js +136 -0
  266. package/dist/lib/config-validation.js.map +1 -0
  267. package/dist/lib/config.d.ts +143 -0
  268. package/dist/lib/config.d.ts.map +1 -0
  269. package/dist/lib/config.js +689 -0
  270. package/dist/lib/config.js.map +1 -0
  271. package/dist/lib/consolidate.d.ts +115 -0
  272. package/dist/lib/consolidate.d.ts.map +1 -0
  273. package/dist/lib/consolidate.js +600 -0
  274. package/dist/lib/consolidate.js.map +1 -0
  275. package/dist/lib/db/bm25-indexes.d.ts +58 -0
  276. package/dist/lib/db/bm25-indexes.d.ts.map +1 -0
  277. package/dist/lib/db/bm25-indexes.js +333 -0
  278. package/dist/lib/db/bm25-indexes.js.map +1 -0
  279. package/dist/lib/db/bpe.d.ts +18 -0
  280. package/dist/lib/db/bpe.d.ts.map +1 -0
  281. package/dist/lib/db/bpe.js +44 -0
  282. package/dist/lib/db/bpe.js.map +1 -0
  283. package/dist/lib/db/connection.d.ts +47 -0
  284. package/dist/lib/db/connection.d.ts.map +1 -0
  285. package/dist/lib/db/connection.js +114 -0
  286. package/dist/lib/db/connection.js.map +1 -0
  287. package/dist/lib/db/documents.d.ts +58 -0
  288. package/dist/lib/db/documents.d.ts.map +1 -0
  289. package/dist/lib/db/documents.js +374 -0
  290. package/dist/lib/db/documents.js.map +1 -0
  291. package/dist/lib/db/file-hash.d.ts +26 -0
  292. package/dist/lib/db/file-hash.d.ts.map +1 -0
  293. package/dist/lib/db/file-hash.js +56 -0
  294. package/dist/lib/db/file-hash.js.map +1 -0
  295. package/dist/lib/db/global-memories.d.ts +62 -0
  296. package/dist/lib/db/global-memories.d.ts.map +1 -0
  297. package/dist/lib/db/global-memories.js +173 -0
  298. package/dist/lib/db/global-memories.js.map +1 -0
  299. package/dist/lib/db/graph.d.ts +163 -0
  300. package/dist/lib/db/graph.d.ts.map +1 -0
  301. package/dist/lib/db/graph.js +488 -0
  302. package/dist/lib/db/graph.js.map +1 -0
  303. package/dist/lib/db/helpers.d.ts +13 -0
  304. package/dist/lib/db/helpers.d.ts.map +1 -0
  305. package/dist/lib/db/helpers.js +21 -0
  306. package/dist/lib/db/helpers.js.map +1 -0
  307. package/dist/lib/db/hybrid-search.d.ts +64 -0
  308. package/dist/lib/db/hybrid-search.d.ts.map +1 -0
  309. package/dist/lib/db/hybrid-search.js +549 -0
  310. package/dist/lib/db/hybrid-search.js.map +1 -0
  311. package/dist/lib/db/index.d.ts +23 -0
  312. package/dist/lib/db/index.d.ts.map +1 -0
  313. package/dist/lib/db/index.js +23 -0
  314. package/dist/lib/db/index.js.map +1 -0
  315. package/dist/lib/db/memories.d.ts +174 -0
  316. package/dist/lib/db/memories.d.ts.map +1 -0
  317. package/dist/lib/db/memories.js +866 -0
  318. package/dist/lib/db/memories.js.map +1 -0
  319. package/dist/lib/db/retention.d.ts +64 -0
  320. package/dist/lib/db/retention.d.ts.map +1 -0
  321. package/dist/lib/db/retention.js +115 -0
  322. package/dist/lib/db/retention.js.map +1 -0
  323. package/dist/lib/db/schema.d.ts +29 -0
  324. package/dist/lib/db/schema.d.ts.map +1 -0
  325. package/dist/lib/db/schema.js +832 -0
  326. package/dist/lib/db/schema.js.map +1 -0
  327. package/dist/lib/db/skills.d.ts +65 -0
  328. package/dist/lib/db/skills.d.ts.map +1 -0
  329. package/dist/lib/db/skills.js +119 -0
  330. package/dist/lib/db/skills.js.map +1 -0
  331. package/dist/lib/db/token-frequency.d.ts +34 -0
  332. package/dist/lib/db/token-frequency.d.ts.map +1 -0
  333. package/dist/lib/db/token-frequency.js +92 -0
  334. package/dist/lib/db/token-frequency.js.map +1 -0
  335. package/dist/lib/db/token-stats.d.ts +43 -0
  336. package/dist/lib/db/token-stats.d.ts.map +1 -0
  337. package/dist/lib/db/token-stats.js +59 -0
  338. package/dist/lib/db/token-stats.js.map +1 -0
  339. package/dist/lib/db/types.d.ts +57 -0
  340. package/dist/lib/db/types.d.ts.map +1 -0
  341. package/dist/lib/db/types.js +5 -0
  342. package/dist/lib/db/types.js.map +1 -0
  343. package/dist/lib/db/web-search-history.d.ts +22 -0
  344. package/dist/lib/db/web-search-history.d.ts.map +1 -0
  345. package/dist/lib/db/web-search-history.js +107 -0
  346. package/dist/lib/db/web-search-history.js.map +1 -0
  347. package/dist/lib/debug/state.d.ts +17 -0
  348. package/dist/lib/debug/state.d.ts.map +1 -0
  349. package/dist/lib/debug/state.js +131 -0
  350. package/dist/lib/debug/state.js.map +1 -0
  351. package/dist/lib/debug/types.d.ts +74 -0
  352. package/dist/lib/debug/types.d.ts.map +1 -0
  353. package/dist/lib/debug/types.js +85 -0
  354. package/dist/lib/debug/types.js.map +1 -0
  355. package/dist/lib/embedding-pool.d.ts +37 -0
  356. package/dist/lib/embedding-pool.d.ts.map +1 -0
  357. package/dist/lib/embedding-pool.js +159 -0
  358. package/dist/lib/embedding-pool.js.map +1 -0
  359. package/dist/lib/embedding-worker.d.ts +7 -0
  360. package/dist/lib/embedding-worker.d.ts.map +1 -0
  361. package/dist/lib/embedding-worker.js +49 -0
  362. package/dist/lib/embedding-worker.js.map +1 -0
  363. package/dist/lib/embeddings.d.ts +54 -0
  364. package/dist/lib/embeddings.d.ts.map +1 -0
  365. package/dist/lib/embeddings.js +437 -0
  366. package/dist/lib/embeddings.js.map +1 -0
  367. package/dist/lib/errors.d.ts +40 -0
  368. package/dist/lib/errors.d.ts.map +1 -0
  369. package/dist/lib/errors.js +66 -0
  370. package/dist/lib/errors.js.map +1 -0
  371. package/dist/lib/fault-logger.d.ts +35 -0
  372. package/dist/lib/fault-logger.d.ts.map +1 -0
  373. package/dist/lib/fault-logger.js +182 -0
  374. package/dist/lib/fault-logger.js.map +1 -0
  375. package/dist/lib/graph/centrality.d.ts +34 -0
  376. package/dist/lib/graph/centrality.d.ts.map +1 -0
  377. package/dist/lib/graph/centrality.js +76 -0
  378. package/dist/lib/graph/centrality.js.map +1 -0
  379. package/dist/lib/graph/cleanup.d.ts +36 -0
  380. package/dist/lib/graph/cleanup.d.ts.map +1 -0
  381. package/dist/lib/graph/cleanup.js +96 -0
  382. package/dist/lib/graph/cleanup.js.map +1 -0
  383. package/dist/lib/graph/community-detection.d.ts +61 -0
  384. package/dist/lib/graph/community-detection.d.ts.map +1 -0
  385. package/dist/lib/graph/community-detection.js +218 -0
  386. package/dist/lib/graph/community-detection.js.map +1 -0
  387. package/dist/lib/graph/contextual-proximity.d.ts +41 -0
  388. package/dist/lib/graph/contextual-proximity.d.ts.map +1 -0
  389. package/dist/lib/graph/contextual-proximity.js +125 -0
  390. package/dist/lib/graph/contextual-proximity.js.map +1 -0
  391. package/dist/lib/graph/llm-relations.d.ts +54 -0
  392. package/dist/lib/graph/llm-relations.d.ts.map +1 -0
  393. package/dist/lib/graph/llm-relations.js +265 -0
  394. package/dist/lib/graph/llm-relations.js.map +1 -0
  395. package/dist/lib/graph-export.d.ts +13 -0
  396. package/dist/lib/graph-export.d.ts.map +1 -0
  397. package/dist/lib/graph-export.js +637 -0
  398. package/dist/lib/graph-export.js.map +1 -0
  399. package/dist/lib/graph-scheduler.d.ts +7 -0
  400. package/dist/lib/graph-scheduler.d.ts.map +1 -0
  401. package/dist/lib/graph-scheduler.js +21 -0
  402. package/dist/lib/graph-scheduler.js.map +1 -0
  403. package/dist/lib/indexer.d.ts +36 -0
  404. package/dist/lib/indexer.d.ts.map +1 -0
  405. package/dist/lib/indexer.js +226 -0
  406. package/dist/lib/indexer.js.map +1 -0
  407. package/dist/lib/learning-delta.d.ts +35 -0
  408. package/dist/lib/learning-delta.d.ts.map +1 -0
  409. package/dist/lib/learning-delta.js +53 -0
  410. package/dist/lib/learning-delta.js.map +1 -0
  411. package/dist/lib/llm.d.ts +118 -0
  412. package/dist/lib/llm.d.ts.map +1 -0
  413. package/dist/lib/llm.js +439 -0
  414. package/dist/lib/llm.js.map +1 -0
  415. package/dist/lib/lock.d.ts +27 -0
  416. package/dist/lib/lock.d.ts.map +1 -0
  417. package/dist/lib/lock.js +143 -0
  418. package/dist/lib/lock.js.map +1 -0
  419. package/dist/lib/md-fetch.d.ts +61 -0
  420. package/dist/lib/md-fetch.d.ts.map +1 -0
  421. package/dist/lib/md-fetch.js +141 -0
  422. package/dist/lib/md-fetch.js.map +1 -0
  423. package/dist/lib/mmr.d.ts +29 -0
  424. package/dist/lib/mmr.d.ts.map +1 -0
  425. package/dist/lib/mmr.js +89 -0
  426. package/dist/lib/mmr.js.map +1 -0
  427. package/dist/lib/onboarding/ai-chat.d.ts +11 -0
  428. package/dist/lib/onboarding/ai-chat.d.ts.map +1 -0
  429. package/dist/lib/onboarding/ai-chat.js +85 -0
  430. package/dist/lib/onboarding/ai-chat.js.map +1 -0
  431. package/dist/lib/onboarding/index.d.ts +7 -0
  432. package/dist/lib/onboarding/index.d.ts.map +1 -0
  433. package/dist/lib/onboarding/index.js +7 -0
  434. package/dist/lib/onboarding/index.js.map +1 -0
  435. package/dist/lib/onboarding/wizard.d.ts +11 -0
  436. package/dist/lib/onboarding/wizard.d.ts.map +1 -0
  437. package/dist/lib/onboarding/wizard.js +104 -0
  438. package/dist/lib/onboarding/wizard.js.map +1 -0
  439. package/dist/lib/ort-provider.d.ts +27 -0
  440. package/dist/lib/ort-provider.d.ts.map +1 -0
  441. package/dist/lib/ort-provider.js +83 -0
  442. package/dist/lib/ort-provider.js.map +1 -0
  443. package/dist/lib/ort-session.d.ts +32 -0
  444. package/dist/lib/ort-session.d.ts.map +1 -0
  445. package/dist/lib/ort-session.js +227 -0
  446. package/dist/lib/ort-session.js.map +1 -0
  447. package/dist/lib/patterns.d.ts +43 -0
  448. package/dist/lib/patterns.d.ts.map +1 -0
  449. package/dist/lib/patterns.js +395 -0
  450. package/dist/lib/patterns.js.map +1 -0
  451. package/dist/lib/prd/codebase-context.d.ts +27 -0
  452. package/dist/lib/prd/codebase-context.d.ts.map +1 -0
  453. package/dist/lib/prd/codebase-context.js +420 -0
  454. package/dist/lib/prd/codebase-context.js.map +1 -0
  455. package/dist/lib/prd/context.d.ts +24 -0
  456. package/dist/lib/prd/context.d.ts.map +1 -0
  457. package/dist/lib/prd/context.js +68 -0
  458. package/dist/lib/prd/context.js.map +1 -0
  459. package/dist/lib/prd/executor.d.ts +52 -0
  460. package/dist/lib/prd/executor.d.ts.map +1 -0
  461. package/dist/lib/prd/executor.js +154 -0
  462. package/dist/lib/prd/executor.js.map +1 -0
  463. package/dist/lib/prd/export.d.ts +40 -0
  464. package/dist/lib/prd/export.d.ts.map +1 -0
  465. package/dist/lib/prd/export.js +511 -0
  466. package/dist/lib/prd/export.js.map +1 -0
  467. package/dist/lib/prd/gates.d.ts +30 -0
  468. package/dist/lib/prd/gates.d.ts.map +1 -0
  469. package/dist/lib/prd/gates.js +100 -0
  470. package/dist/lib/prd/gates.js.map +1 -0
  471. package/dist/lib/prd/generate.d.ts +56 -0
  472. package/dist/lib/prd/generate.d.ts.map +1 -0
  473. package/dist/lib/prd/generate.js +357 -0
  474. package/dist/lib/prd/generate.js.map +1 -0
  475. package/dist/lib/prd/parse.d.ts +21 -0
  476. package/dist/lib/prd/parse.d.ts.map +1 -0
  477. package/dist/lib/prd/parse.js +270 -0
  478. package/dist/lib/prd/parse.js.map +1 -0
  479. package/dist/lib/prd/prompt-builder.d.ts +18 -0
  480. package/dist/lib/prd/prompt-builder.d.ts.map +1 -0
  481. package/dist/lib/prd/prompt-builder.js +61 -0
  482. package/dist/lib/prd/prompt-builder.js.map +1 -0
  483. package/dist/lib/prd/runner.d.ts +54 -0
  484. package/dist/lib/prd/runner.d.ts.map +1 -0
  485. package/dist/lib/prd/runner.js +563 -0
  486. package/dist/lib/prd/runner.js.map +1 -0
  487. package/dist/lib/prd/scheduler.d.ts +27 -0
  488. package/dist/lib/prd/scheduler.d.ts.map +1 -0
  489. package/dist/lib/prd/scheduler.js +113 -0
  490. package/dist/lib/prd/scheduler.js.map +1 -0
  491. package/dist/lib/prd/state.d.ts +77 -0
  492. package/dist/lib/prd/state.d.ts.map +1 -0
  493. package/dist/lib/prd/state.js +253 -0
  494. package/dist/lib/prd/state.js.map +1 -0
  495. package/dist/lib/prd/team-runner.d.ts +48 -0
  496. package/dist/lib/prd/team-runner.d.ts.map +1 -0
  497. package/dist/lib/prd/team-runner.js +261 -0
  498. package/dist/lib/prd/team-runner.js.map +1 -0
  499. package/dist/lib/prd/types.d.ts +169 -0
  500. package/dist/lib/prd/types.d.ts.map +1 -0
  501. package/dist/lib/prd/types.js +143 -0
  502. package/dist/lib/prd/types.js.map +1 -0
  503. package/dist/lib/prd/worktree.d.ts +54 -0
  504. package/dist/lib/prd/worktree.d.ts.map +1 -0
  505. package/dist/lib/prd/worktree.js +255 -0
  506. package/dist/lib/prd/worktree.js.map +1 -0
  507. package/dist/lib/precompute-context.d.ts +48 -0
  508. package/dist/lib/precompute-context.d.ts.map +1 -0
  509. package/dist/lib/precompute-context.js +265 -0
  510. package/dist/lib/precompute-context.js.map +1 -0
  511. package/dist/lib/pricing.d.ts +60 -0
  512. package/dist/lib/pricing.d.ts.map +1 -0
  513. package/dist/lib/pricing.js +258 -0
  514. package/dist/lib/pricing.js.map +1 -0
  515. package/dist/lib/process-registry.d.ts +30 -0
  516. package/dist/lib/process-registry.d.ts.map +1 -0
  517. package/dist/lib/process-registry.js +92 -0
  518. package/dist/lib/process-registry.js.map +1 -0
  519. package/dist/lib/progress-log.d.ts +44 -0
  520. package/dist/lib/progress-log.d.ts.map +1 -0
  521. package/dist/lib/progress-log.js +58 -0
  522. package/dist/lib/progress-log.js.map +1 -0
  523. package/dist/lib/public-api.d.ts +56 -0
  524. package/dist/lib/public-api.d.ts.map +1 -0
  525. package/dist/lib/public-api.js +63 -0
  526. package/dist/lib/public-api.js.map +1 -0
  527. package/dist/lib/quality.d.ts +66 -0
  528. package/dist/lib/quality.d.ts.map +1 -0
  529. package/dist/lib/quality.js +486 -0
  530. package/dist/lib/quality.js.map +1 -0
  531. package/dist/lib/query-expansion.d.ts +16 -0
  532. package/dist/lib/query-expansion.d.ts.map +1 -0
  533. package/dist/lib/query-expansion.js +53 -0
  534. package/dist/lib/query-expansion.js.map +1 -0
  535. package/dist/lib/readiness.d.ts +35 -0
  536. package/dist/lib/readiness.d.ts.map +1 -0
  537. package/dist/lib/readiness.js +142 -0
  538. package/dist/lib/readiness.js.map +1 -0
  539. package/dist/lib/reference-embeddings.d.ts +39 -0
  540. package/dist/lib/reference-embeddings.d.ts.map +1 -0
  541. package/dist/lib/reference-embeddings.js +95 -0
  542. package/dist/lib/reference-embeddings.js.map +1 -0
  543. package/dist/lib/reflection-synthesizer.d.ts +27 -0
  544. package/dist/lib/reflection-synthesizer.d.ts.map +1 -0
  545. package/dist/lib/reflection-synthesizer.js +149 -0
  546. package/dist/lib/reflection-synthesizer.js.map +1 -0
  547. package/dist/lib/retention.d.ts +105 -0
  548. package/dist/lib/retention.d.ts.map +1 -0
  549. package/dist/lib/retention.js +246 -0
  550. package/dist/lib/retention.js.map +1 -0
  551. package/dist/lib/sensitive-filter.d.ts +34 -0
  552. package/dist/lib/sensitive-filter.d.ts.map +1 -0
  553. package/dist/lib/sensitive-filter.js +344 -0
  554. package/dist/lib/sensitive-filter.js.map +1 -0
  555. package/dist/lib/session-observations.d.ts +59 -0
  556. package/dist/lib/session-observations.d.ts.map +1 -0
  557. package/dist/lib/session-observations.js +128 -0
  558. package/dist/lib/session-observations.js.map +1 -0
  559. package/dist/lib/session-summary.d.ts +65 -0
  560. package/dist/lib/session-summary.d.ts.map +1 -0
  561. package/dist/lib/session-summary.js +344 -0
  562. package/dist/lib/session-summary.js.map +1 -0
  563. package/dist/lib/similarity-worker.d.ts +7 -0
  564. package/dist/lib/similarity-worker.d.ts.map +1 -0
  565. package/dist/lib/similarity-worker.js +36 -0
  566. package/dist/lib/similarity-worker.js.map +1 -0
  567. package/dist/lib/skills.d.ts +78 -0
  568. package/dist/lib/skills.d.ts.map +1 -0
  569. package/dist/lib/skills.js +439 -0
  570. package/dist/lib/skills.js.map +1 -0
  571. package/dist/lib/skyll-client.d.ts +59 -0
  572. package/dist/lib/skyll-client.d.ts.map +1 -0
  573. package/dist/lib/skyll-client.js +257 -0
  574. package/dist/lib/skyll-client.js.map +1 -0
  575. package/dist/lib/storage/backends/interface.d.ts +383 -0
  576. package/dist/lib/storage/backends/interface.d.ts.map +1 -0
  577. package/dist/lib/storage/backends/interface.js +12 -0
  578. package/dist/lib/storage/backends/interface.js.map +1 -0
  579. package/dist/lib/storage/backends/postgresql.d.ts +454 -0
  580. package/dist/lib/storage/backends/postgresql.d.ts.map +1 -0
  581. package/dist/lib/storage/backends/postgresql.js +2528 -0
  582. package/dist/lib/storage/backends/postgresql.js.map +1 -0
  583. package/dist/lib/storage/benchmark.d.ts +16 -0
  584. package/dist/lib/storage/benchmark.d.ts.map +1 -0
  585. package/dist/lib/storage/benchmark.js +219 -0
  586. package/dist/lib/storage/benchmark.js.map +1 -0
  587. package/dist/lib/storage/dispatcher-export.d.ts +108 -0
  588. package/dist/lib/storage/dispatcher-export.d.ts.map +1 -0
  589. package/dist/lib/storage/dispatcher-export.js +593 -0
  590. package/dist/lib/storage/dispatcher-export.js.map +1 -0
  591. package/dist/lib/storage/dispatcher.d.ts +468 -0
  592. package/dist/lib/storage/dispatcher.d.ts.map +1 -0
  593. package/dist/lib/storage/dispatcher.js +1926 -0
  594. package/dist/lib/storage/dispatcher.js.map +1 -0
  595. package/dist/lib/storage/index.d.ts +481 -0
  596. package/dist/lib/storage/index.d.ts.map +1 -0
  597. package/dist/lib/storage/index.js +727 -0
  598. package/dist/lib/storage/index.js.map +1 -0
  599. package/dist/lib/storage/migration/export-import.d.ts +133 -0
  600. package/dist/lib/storage/migration/export-import.d.ts.map +1 -0
  601. package/dist/lib/storage/migration/export-import.js +264 -0
  602. package/dist/lib/storage/migration/export-import.js.map +1 -0
  603. package/dist/lib/storage/types.d.ts +313 -0
  604. package/dist/lib/storage/types.d.ts.map +1 -0
  605. package/dist/lib/storage/types.js +30 -0
  606. package/dist/lib/storage/types.js.map +1 -0
  607. package/dist/lib/storage/vector/interface.d.ts +89 -0
  608. package/dist/lib/storage/vector/interface.d.ts.map +1 -0
  609. package/dist/lib/storage/vector/interface.js +10 -0
  610. package/dist/lib/storage/vector/interface.js.map +1 -0
  611. package/dist/lib/storage/vector/qdrant.d.ts +221 -0
  612. package/dist/lib/storage/vector/qdrant.d.ts.map +1 -0
  613. package/dist/lib/storage/vector/qdrant.js +880 -0
  614. package/dist/lib/storage/vector/qdrant.js.map +1 -0
  615. package/dist/lib/supersession.d.ts +26 -0
  616. package/dist/lib/supersession.d.ts.map +1 -0
  617. package/dist/lib/supersession.js +97 -0
  618. package/dist/lib/supersession.js.map +1 -0
  619. package/dist/lib/temporal.d.ts +140 -0
  620. package/dist/lib/temporal.d.ts.map +1 -0
  621. package/dist/lib/temporal.js +303 -0
  622. package/dist/lib/temporal.js.map +1 -0
  623. package/dist/lib/token-budget.d.ts +79 -0
  624. package/dist/lib/token-budget.d.ts.map +1 -0
  625. package/dist/lib/token-budget.js +146 -0
  626. package/dist/lib/token-budget.js.map +1 -0
  627. package/dist/lib/token-counter.d.ts +27 -0
  628. package/dist/lib/token-counter.d.ts.map +1 -0
  629. package/dist/lib/token-counter.js +52 -0
  630. package/dist/lib/token-counter.js.map +1 -0
  631. package/dist/lib/tree-sitter/chunker-ts.d.ts +24 -0
  632. package/dist/lib/tree-sitter/chunker-ts.d.ts.map +1 -0
  633. package/dist/lib/tree-sitter/chunker-ts.js +206 -0
  634. package/dist/lib/tree-sitter/chunker-ts.js.map +1 -0
  635. package/dist/lib/tree-sitter/extractor.d.ts +43 -0
  636. package/dist/lib/tree-sitter/extractor.d.ts.map +1 -0
  637. package/dist/lib/tree-sitter/extractor.js +297 -0
  638. package/dist/lib/tree-sitter/extractor.js.map +1 -0
  639. package/dist/lib/tree-sitter/index.d.ts +13 -0
  640. package/dist/lib/tree-sitter/index.d.ts.map +1 -0
  641. package/dist/lib/tree-sitter/index.js +14 -0
  642. package/dist/lib/tree-sitter/index.js.map +1 -0
  643. package/dist/lib/tree-sitter/parser.d.ts +70 -0
  644. package/dist/lib/tree-sitter/parser.d.ts.map +1 -0
  645. package/dist/lib/tree-sitter/parser.js +354 -0
  646. package/dist/lib/tree-sitter/parser.js.map +1 -0
  647. package/dist/lib/tree-sitter/public.d.ts +28 -0
  648. package/dist/lib/tree-sitter/public.d.ts.map +1 -0
  649. package/dist/lib/tree-sitter/public.js +50 -0
  650. package/dist/lib/tree-sitter/public.js.map +1 -0
  651. package/dist/lib/tree-sitter/queries.d.ts +28 -0
  652. package/dist/lib/tree-sitter/queries.d.ts.map +1 -0
  653. package/dist/lib/tree-sitter/queries.js +383 -0
  654. package/dist/lib/tree-sitter/queries.js.map +1 -0
  655. package/dist/lib/tree-sitter/types.d.ts +69 -0
  656. package/dist/lib/tree-sitter/types.d.ts.map +1 -0
  657. package/dist/lib/tree-sitter/types.js +131 -0
  658. package/dist/lib/tree-sitter/types.js.map +1 -0
  659. package/dist/lib/working-memory-pipeline.d.ts +118 -0
  660. package/dist/lib/working-memory-pipeline.d.ts.map +1 -0
  661. package/dist/lib/working-memory-pipeline.js +344 -0
  662. package/dist/lib/working-memory-pipeline.js.map +1 -0
  663. package/dist/mcp/helpers.d.ts +44 -0
  664. package/dist/mcp/helpers.d.ts.map +1 -0
  665. package/dist/mcp/helpers.js +244 -0
  666. package/dist/mcp/helpers.js.map +1 -0
  667. package/dist/mcp/index.d.ts +10 -0
  668. package/dist/mcp/index.d.ts.map +1 -0
  669. package/dist/mcp/index.js +15 -0
  670. package/dist/mcp/index.js.map +1 -0
  671. package/dist/mcp/resources.d.ts +12 -0
  672. package/dist/mcp/resources.d.ts.map +1 -0
  673. package/dist/mcp/resources.js +136 -0
  674. package/dist/mcp/resources.js.map +1 -0
  675. package/dist/mcp/server.d.ts +22 -0
  676. package/dist/mcp/server.d.ts.map +1 -0
  677. package/dist/mcp/server.js +131 -0
  678. package/dist/mcp/server.js.map +1 -0
  679. package/dist/mcp/tools/config.d.ts +10 -0
  680. package/dist/mcp/tools/config.d.ts.map +1 -0
  681. package/dist/mcp/tools/config.js +236 -0
  682. package/dist/mcp/tools/config.js.map +1 -0
  683. package/dist/mcp/tools/dead-end.d.ts +9 -0
  684. package/dist/mcp/tools/dead-end.d.ts.map +1 -0
  685. package/dist/mcp/tools/dead-end.js +137 -0
  686. package/dist/mcp/tools/dead-end.js.map +1 -0
  687. package/dist/mcp/tools/debug.d.ts +9 -0
  688. package/dist/mcp/tools/debug.d.ts.map +1 -0
  689. package/dist/mcp/tools/debug.js +387 -0
  690. package/dist/mcp/tools/debug.js.map +1 -0
  691. package/dist/mcp/tools/graph.d.ts +9 -0
  692. package/dist/mcp/tools/graph.d.ts.map +1 -0
  693. package/dist/mcp/tools/graph.js +337 -0
  694. package/dist/mcp/tools/graph.js.map +1 -0
  695. package/dist/mcp/tools/indexing.d.ts +12 -0
  696. package/dist/mcp/tools/indexing.d.ts.map +1 -0
  697. package/dist/mcp/tools/indexing.js +289 -0
  698. package/dist/mcp/tools/indexing.js.map +1 -0
  699. package/dist/mcp/tools/memory.d.ts +14 -0
  700. package/dist/mcp/tools/memory.d.ts.map +1 -0
  701. package/dist/mcp/tools/memory.js +1170 -0
  702. package/dist/mcp/tools/memory.js.map +1 -0
  703. package/dist/mcp/tools/prd.d.ts +12 -0
  704. package/dist/mcp/tools/prd.d.ts.map +1 -0
  705. package/dist/mcp/tools/prd.js +276 -0
  706. package/dist/mcp/tools/prd.js.map +1 -0
  707. package/dist/mcp/tools/search.d.ts +9 -0
  708. package/dist/mcp/tools/search.d.ts.map +1 -0
  709. package/dist/mcp/tools/search.js +279 -0
  710. package/dist/mcp/tools/search.js.map +1 -0
  711. package/dist/mcp/tools/status.d.ts +10 -0
  712. package/dist/mcp/tools/status.d.ts.map +1 -0
  713. package/dist/mcp/tools/status.js +296 -0
  714. package/dist/mcp/tools/status.js.map +1 -0
  715. package/dist/mcp/tools/web-fetch.d.ts +10 -0
  716. package/dist/mcp/tools/web-fetch.d.ts.map +1 -0
  717. package/dist/mcp/tools/web-fetch.js +107 -0
  718. package/dist/mcp/tools/web-fetch.js.map +1 -0
  719. package/dist/mcp/tools/web-search.d.ts +14 -0
  720. package/dist/mcp/tools/web-search.d.ts.map +1 -0
  721. package/dist/mcp/tools/web-search.js +427 -0
  722. package/dist/mcp/tools/web-search.js.map +1 -0
  723. package/dist/mcp/types.d.ts +16 -0
  724. package/dist/mcp/types.d.ts.map +1 -0
  725. package/dist/mcp/types.js +5 -0
  726. package/dist/mcp/types.js.map +1 -0
  727. package/dist/mcp-server.d.ts +9 -0
  728. package/dist/mcp-server.d.ts.map +1 -0
  729. package/dist/mcp-server.js +9 -0
  730. package/dist/mcp-server.js.map +1 -0
  731. package/dist/prompts/analyze.d.ts +21 -0
  732. package/dist/prompts/analyze.d.ts.map +1 -0
  733. package/dist/prompts/analyze.js +27 -0
  734. package/dist/prompts/analyze.js.map +1 -0
  735. package/dist/prompts/briefing.d.ts +27 -0
  736. package/dist/prompts/briefing.d.ts.map +1 -0
  737. package/dist/prompts/briefing.js +123 -0
  738. package/dist/prompts/briefing.js.map +1 -0
  739. package/dist/prompts/chat.d.ts +8 -0
  740. package/dist/prompts/chat.d.ts.map +1 -0
  741. package/dist/prompts/chat.js +39 -0
  742. package/dist/prompts/chat.js.map +1 -0
  743. package/dist/prompts/daemon.d.ts +16 -0
  744. package/dist/prompts/daemon.d.ts.map +1 -0
  745. package/dist/prompts/daemon.js +46 -0
  746. package/dist/prompts/daemon.js.map +1 -0
  747. package/dist/prompts/extraction.d.ts +13 -0
  748. package/dist/prompts/extraction.d.ts.map +1 -0
  749. package/dist/prompts/extraction.js +93 -0
  750. package/dist/prompts/extraction.js.map +1 -0
  751. package/dist/prompts/index.d.ts +17 -0
  752. package/dist/prompts/index.d.ts.map +1 -0
  753. package/dist/prompts/index.js +27 -0
  754. package/dist/prompts/index.js.map +1 -0
  755. package/dist/prompts/memory.d.ts +11 -0
  756. package/dist/prompts/memory.d.ts.map +1 -0
  757. package/dist/prompts/memory.js +23 -0
  758. package/dist/prompts/memory.js.map +1 -0
  759. package/dist/prompts/onboarding.d.ts +16 -0
  760. package/dist/prompts/onboarding.d.ts.map +1 -0
  761. package/dist/prompts/onboarding.js +183 -0
  762. package/dist/prompts/onboarding.js.map +1 -0
  763. package/dist/prompts/prd.d.ts +12 -0
  764. package/dist/prompts/prd.d.ts.map +1 -0
  765. package/dist/prompts/prd.js +211 -0
  766. package/dist/prompts/prd.js.map +1 -0
  767. package/dist/prompts/quality.d.ts +11 -0
  768. package/dist/prompts/quality.d.ts.map +1 -0
  769. package/dist/prompts/quality.js +11 -0
  770. package/dist/prompts/quality.js.map +1 -0
  771. package/dist/prompts/skills.d.ts +16 -0
  772. package/dist/prompts/skills.d.ts.map +1 -0
  773. package/dist/prompts/skills.js +30 -0
  774. package/dist/prompts/skills.js.map +1 -0
  775. package/hooks/succ-post-tool.cjs +227 -0
  776. package/hooks/succ-pre-tool.cjs +312 -0
  777. package/hooks/succ-session-end.cjs +85 -0
  778. package/hooks/succ-session-start.cjs +618 -0
  779. package/hooks/succ-stop-reflection.cjs +87 -0
  780. package/hooks/succ-user-prompt.cjs +220 -0
  781. package/package.json +128 -0
@@ -0,0 +1,832 @@
1
+ import * as sqliteVec from 'sqlite-vec';
2
+ import { getConfig, getLLMTaskConfig } from '../config.js';
3
+ import { logWarn } from '../fault-logger.js';
4
+ import { getModelDimension } from '../embeddings.js';
5
+ // Flag to track if sqlite-vec is available
6
+ export let sqliteVecAvailable = true;
7
+ /**
8
+ * Load sqlite-vec extension into database
9
+ */
10
+ export function loadSqliteVec(database) {
11
+ if (!sqliteVecAvailable)
12
+ return false;
13
+ try {
14
+ sqliteVec.load(database);
15
+ return true;
16
+ }
17
+ catch {
18
+ sqliteVecAvailable = false;
19
+ return false;
20
+ }
21
+ }
22
+ // Valid memory types
23
+ export const MEMORY_TYPES = [
24
+ 'observation',
25
+ 'decision',
26
+ 'learning',
27
+ 'error',
28
+ 'pattern',
29
+ 'dead_end',
30
+ ];
31
+ /**
32
+ * Initialize local database schema
33
+ */
34
+ export function initDb(database) {
35
+ database.exec(`
36
+ CREATE TABLE IF NOT EXISTS documents (
37
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
38
+ file_path TEXT NOT NULL,
39
+ chunk_index INTEGER NOT NULL,
40
+ content TEXT NOT NULL,
41
+ start_line INTEGER NOT NULL,
42
+ end_line INTEGER NOT NULL,
43
+ embedding BLOB NOT NULL,
44
+ created_at TEXT DEFAULT CURRENT_TIMESTAMP,
45
+ updated_at TEXT DEFAULT CURRENT_TIMESTAMP,
46
+ UNIQUE(file_path, chunk_index)
47
+ );
48
+
49
+ CREATE INDEX IF NOT EXISTS idx_documents_file_path ON documents(file_path);
50
+
51
+ CREATE TABLE IF NOT EXISTS metadata (
52
+ key TEXT PRIMARY KEY,
53
+ value TEXT NOT NULL
54
+ );
55
+
56
+ CREATE TABLE IF NOT EXISTS file_hashes (
57
+ file_path TEXT PRIMARY KEY,
58
+ content_hash TEXT NOT NULL,
59
+ indexed_at TEXT DEFAULT CURRENT_TIMESTAMP
60
+ );
61
+
62
+ CREATE TABLE IF NOT EXISTS memories (
63
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
64
+ content TEXT NOT NULL,
65
+ tags TEXT,
66
+ source TEXT,
67
+ type TEXT DEFAULT 'observation',
68
+ quality_score REAL,
69
+ quality_factors TEXT,
70
+ embedding BLOB NOT NULL,
71
+ created_at TEXT DEFAULT CURRENT_TIMESTAMP
72
+ );
73
+
74
+ CREATE INDEX IF NOT EXISTS idx_memories_created_at ON memories(created_at);
75
+ CREATE INDEX IF NOT EXISTS idx_memories_quality ON memories(quality_score);
76
+
77
+ CREATE TABLE IF NOT EXISTS memory_links (
78
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
79
+ source_id INTEGER NOT NULL,
80
+ target_id INTEGER NOT NULL,
81
+ relation TEXT NOT NULL DEFAULT 'related',
82
+ weight REAL DEFAULT 1.0,
83
+ created_at TEXT DEFAULT CURRENT_TIMESTAMP,
84
+ FOREIGN KEY (source_id) REFERENCES memories(id) ON DELETE CASCADE,
85
+ FOREIGN KEY (target_id) REFERENCES memories(id) ON DELETE CASCADE,
86
+ UNIQUE(source_id, target_id, relation)
87
+ );
88
+
89
+ CREATE INDEX IF NOT EXISTS idx_memory_links_source ON memory_links(source_id);
90
+ CREATE INDEX IF NOT EXISTS idx_memory_links_target ON memory_links(target_id);
91
+
92
+ CREATE TABLE IF NOT EXISTS token_frequencies (
93
+ token TEXT PRIMARY KEY,
94
+ frequency INTEGER NOT NULL DEFAULT 1,
95
+ updated_at TEXT DEFAULT CURRENT_TIMESTAMP
96
+ );
97
+
98
+ CREATE INDEX IF NOT EXISTS idx_token_freq ON token_frequencies(frequency DESC);
99
+
100
+ CREATE TABLE IF NOT EXISTS token_stats (
101
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
102
+ event_type TEXT NOT NULL,
103
+ query TEXT,
104
+ returned_tokens INTEGER NOT NULL DEFAULT 0,
105
+ full_source_tokens INTEGER NOT NULL DEFAULT 0,
106
+ savings_tokens INTEGER NOT NULL DEFAULT 0,
107
+ files_count INTEGER,
108
+ chunks_count INTEGER,
109
+ created_at TEXT DEFAULT CURRENT_TIMESTAMP
110
+ );
111
+
112
+ CREATE INDEX IF NOT EXISTS idx_token_stats_type ON token_stats(event_type);
113
+ CREATE INDEX IF NOT EXISTS idx_token_stats_created ON token_stats(created_at);
114
+
115
+ CREATE TABLE IF NOT EXISTS skills (
116
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
117
+ name TEXT UNIQUE NOT NULL,
118
+ description TEXT NOT NULL,
119
+ source TEXT NOT NULL,
120
+ path TEXT,
121
+ content TEXT,
122
+ embedding BLOB,
123
+ skyll_id TEXT,
124
+ usage_count INTEGER DEFAULT 0,
125
+ last_used TEXT,
126
+ cached_at TEXT,
127
+ cache_expires TEXT,
128
+ created_at TEXT DEFAULT CURRENT_TIMESTAMP,
129
+ updated_at TEXT DEFAULT CURRENT_TIMESTAMP
130
+ );
131
+
132
+ CREATE INDEX IF NOT EXISTS idx_skills_name ON skills(name);
133
+ CREATE INDEX IF NOT EXISTS idx_skills_source ON skills(source);
134
+ `);
135
+ // Migration: add type column if missing (for existing databases)
136
+ try {
137
+ database.prepare(`ALTER TABLE memories ADD COLUMN type TEXT DEFAULT 'observation'`).run();
138
+ }
139
+ catch {
140
+ // Column already exists, ignore
141
+ }
142
+ // Create index on type after migration
143
+ try {
144
+ database.prepare(`CREATE INDEX IF NOT EXISTS idx_memories_type ON memories(type)`).run();
145
+ }
146
+ catch {
147
+ // Index may already exist
148
+ }
149
+ // Migration: add quality_score and quality_factors columns
150
+ try {
151
+ database.prepare(`ALTER TABLE memories ADD COLUMN quality_score REAL`).run();
152
+ }
153
+ catch {
154
+ // Column already exists, ignore
155
+ }
156
+ try {
157
+ database.prepare(`ALTER TABLE memories ADD COLUMN quality_factors TEXT`).run();
158
+ }
159
+ catch {
160
+ // Column already exists, ignore
161
+ }
162
+ try {
163
+ database
164
+ .prepare(`CREATE INDEX IF NOT EXISTS idx_memories_quality ON memories(quality_score)`)
165
+ .run();
166
+ }
167
+ catch {
168
+ // Index may already exist
169
+ }
170
+ // Migration: add access_count and last_accessed columns for retention decay
171
+ try {
172
+ database.prepare(`ALTER TABLE memories ADD COLUMN access_count REAL DEFAULT 0`).run();
173
+ }
174
+ catch {
175
+ // Column already exists, ignore
176
+ }
177
+ try {
178
+ database.prepare(`ALTER TABLE memories ADD COLUMN last_accessed TEXT`).run();
179
+ }
180
+ catch {
181
+ // Column already exists, ignore
182
+ }
183
+ // Migration: add valid_from and valid_until columns for temporal awareness
184
+ try {
185
+ database.prepare(`ALTER TABLE memories ADD COLUMN valid_from TEXT`).run();
186
+ }
187
+ catch {
188
+ // Column already exists, ignore
189
+ }
190
+ try {
191
+ database.prepare(`ALTER TABLE memories ADD COLUMN valid_until TEXT`).run();
192
+ }
193
+ catch {
194
+ // Column already exists, ignore
195
+ }
196
+ // Migration: add temporal fields to memory_links
197
+ try {
198
+ database.prepare(`ALTER TABLE memory_links ADD COLUMN valid_from TEXT`).run();
199
+ }
200
+ catch {
201
+ // Column already exists, ignore
202
+ }
203
+ try {
204
+ database.prepare(`ALTER TABLE memory_links ADD COLUMN valid_until TEXT`).run();
205
+ }
206
+ catch {
207
+ // Column already exists, ignore
208
+ }
209
+ // Migration: add model and estimated_cost columns to token_stats
210
+ try {
211
+ database.prepare(`ALTER TABLE token_stats ADD COLUMN model TEXT`).run();
212
+ }
213
+ catch {
214
+ // Column already exists, ignore
215
+ }
216
+ try {
217
+ database.prepare(`ALTER TABLE token_stats ADD COLUMN estimated_cost REAL DEFAULT 0`).run();
218
+ }
219
+ catch {
220
+ // Column already exists, ignore
221
+ }
222
+ // Migration: add project_id column to skills table for project scoping
223
+ try {
224
+ database.prepare(`ALTER TABLE skills ADD COLUMN project_id TEXT`).run();
225
+ // Note: SQLite doesn't support dropping and recreating unique constraints easily.
226
+ // For existing databases, the old UNIQUE(name) constraint remains.
227
+ // The code handles this by using ON CONFLICT with name only for SQLite.
228
+ }
229
+ catch {
230
+ // Column already exists, ignore
231
+ }
232
+ try {
233
+ database
234
+ .prepare(`CREATE INDEX IF NOT EXISTS idx_skills_project_id ON skills(project_id)`)
235
+ .run();
236
+ }
237
+ catch {
238
+ // Index already exists, ignore
239
+ }
240
+ // Migration: add invalidated_by column for soft-delete during consolidation
241
+ try {
242
+ database.prepare(`ALTER TABLE memories ADD COLUMN invalidated_by INTEGER`).run();
243
+ }
244
+ catch {
245
+ // Column already exists, ignore
246
+ }
247
+ try {
248
+ database
249
+ .prepare(`CREATE INDEX IF NOT EXISTS idx_memories_invalidated_by ON memories(invalidated_by)`)
250
+ .run();
251
+ }
252
+ catch {
253
+ // Index already exists, ignore
254
+ }
255
+ // Migration: add correction_count and is_invariant columns for working memory pins
256
+ try {
257
+ database.prepare(`ALTER TABLE memories ADD COLUMN correction_count INTEGER DEFAULT 0`).run();
258
+ }
259
+ catch {
260
+ // Column already exists, ignore
261
+ }
262
+ try {
263
+ database.prepare(`ALTER TABLE memories ADD COLUMN is_invariant INTEGER DEFAULT 0`).run();
264
+ }
265
+ catch {
266
+ // Column already exists, ignore
267
+ }
268
+ try {
269
+ database
270
+ .prepare(`CREATE INDEX IF NOT EXISTS idx_memories_pinned ON memories(correction_count, is_invariant)`)
271
+ .run();
272
+ }
273
+ catch {
274
+ // Index already exists, ignore
275
+ }
276
+ // Migration: add priority_score column for working memory ranking
277
+ try {
278
+ database.prepare(`ALTER TABLE memories ADD COLUMN priority_score REAL DEFAULT NULL`).run();
279
+ }
280
+ catch {
281
+ // Column already exists, ignore
282
+ }
283
+ try {
284
+ database
285
+ .prepare(`CREATE INDEX IF NOT EXISTS idx_memories_priority ON memories(priority_score DESC)`)
286
+ .run();
287
+ }
288
+ catch {
289
+ // Index already exists, ignore
290
+ }
291
+ // Migration: add AST metadata columns to documents table (tree-sitter integration)
292
+ for (const col of ['symbol_name TEXT', 'symbol_type TEXT', 'signature TEXT']) {
293
+ try {
294
+ database.prepare(`ALTER TABLE documents ADD COLUMN ${col}`).run();
295
+ }
296
+ catch {
297
+ // Column already exists, ignore
298
+ }
299
+ }
300
+ try {
301
+ database
302
+ .prepare(`CREATE INDEX IF NOT EXISTS idx_documents_symbol_type ON documents(symbol_type)`)
303
+ .run();
304
+ }
305
+ catch {
306
+ // Index already exists, ignore
307
+ }
308
+ try {
309
+ database
310
+ .prepare(`CREATE INDEX IF NOT EXISTS idx_documents_symbol_name ON documents(symbol_name)`)
311
+ .run();
312
+ }
313
+ catch {
314
+ // Index already exists, ignore
315
+ }
316
+ // Migration: add performance indexes for common query patterns
317
+ try {
318
+ database.prepare(`CREATE INDEX IF NOT EXISTS idx_memories_source ON memories(source)`).run();
319
+ }
320
+ catch {
321
+ // Index already exists, ignore
322
+ }
323
+ try {
324
+ database
325
+ .prepare(`CREATE INDEX IF NOT EXISTS idx_memories_valid_from ON memories(valid_from)`)
326
+ .run();
327
+ }
328
+ catch {
329
+ // Index already exists, ignore
330
+ }
331
+ try {
332
+ database
333
+ .prepare(`CREATE INDEX IF NOT EXISTS idx_memories_valid_until ON memories(valid_until)`)
334
+ .run();
335
+ }
336
+ catch {
337
+ // Index already exists, ignore
338
+ }
339
+ try {
340
+ database
341
+ .prepare(`CREATE INDEX IF NOT EXISTS idx_documents_updated_at ON documents(updated_at)`)
342
+ .run();
343
+ }
344
+ catch {
345
+ // Index already exists, ignore
346
+ }
347
+ // Migration: create learning_deltas table for session progress tracking
348
+ database.exec(`
349
+ CREATE TABLE IF NOT EXISTS learning_deltas (
350
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
351
+ timestamp TEXT NOT NULL,
352
+ source TEXT NOT NULL,
353
+ memories_before INTEGER NOT NULL DEFAULT 0,
354
+ memories_after INTEGER NOT NULL DEFAULT 0,
355
+ new_memories INTEGER NOT NULL DEFAULT 0,
356
+ types_added TEXT,
357
+ avg_quality REAL,
358
+ created_at TEXT DEFAULT CURRENT_TIMESTAMP
359
+ );
360
+
361
+ CREATE INDEX IF NOT EXISTS idx_learning_deltas_timestamp ON learning_deltas(timestamp);
362
+ CREATE INDEX IF NOT EXISTS idx_learning_deltas_source ON learning_deltas(source);
363
+ `);
364
+ // Migration: add llm_enriched column to memory_links (for LLM relation extraction)
365
+ try {
366
+ database.prepare(`ALTER TABLE memory_links ADD COLUMN llm_enriched INTEGER DEFAULT 0`).run();
367
+ }
368
+ catch {
369
+ // Column already exists, ignore
370
+ }
371
+ // Migration: create memory_centrality cache table
372
+ database.exec(`
373
+ CREATE TABLE IF NOT EXISTS memory_centrality (
374
+ memory_id INTEGER PRIMARY KEY,
375
+ degree REAL DEFAULT 0,
376
+ normalized_degree REAL DEFAULT 0,
377
+ updated_at TEXT DEFAULT CURRENT_TIMESTAMP
378
+ );
379
+ `);
380
+ // Web search history table
381
+ database.exec(`
382
+ CREATE TABLE IF NOT EXISTS web_search_history (
383
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
384
+ tool_name TEXT NOT NULL,
385
+ model TEXT NOT NULL,
386
+ query TEXT NOT NULL,
387
+ prompt_tokens INTEGER NOT NULL DEFAULT 0,
388
+ completion_tokens INTEGER NOT NULL DEFAULT 0,
389
+ estimated_cost_usd REAL NOT NULL DEFAULT 0,
390
+ citations_count INTEGER NOT NULL DEFAULT 0,
391
+ has_reasoning INTEGER NOT NULL DEFAULT 0,
392
+ response_length_chars INTEGER NOT NULL DEFAULT 0,
393
+ created_at TEXT DEFAULT CURRENT_TIMESTAMP
394
+ );
395
+
396
+ CREATE INDEX IF NOT EXISTS idx_wsh_created ON web_search_history(created_at);
397
+ CREATE INDEX IF NOT EXISTS idx_wsh_tool ON web_search_history(tool_name);
398
+ `);
399
+ // Check if embedding model changed - warn user if reindex needed
400
+ checkModelCompatibility(database);
401
+ // Migration: create sqlite-vec virtual tables for fast vector search
402
+ initVecTables(database);
403
+ }
404
+ /**
405
+ * Check if the embedding model has changed since last index.
406
+ * If so, warn the user that they need to reindex.
407
+ */
408
+ function checkModelCompatibility(database) {
409
+ getConfig();
410
+ const currentModel = getLLMTaskConfig('embeddings').model;
411
+ // Get stored model
412
+ const stored = database
413
+ .prepare('SELECT value FROM metadata WHERE key = ?')
414
+ .get('embedding_model');
415
+ if (stored && stored.value !== currentModel) {
416
+ const currentDim = getModelDimension(currentModel);
417
+ const storedDim = getModelDimension(stored.value);
418
+ // Different dimensions = incompatible, must reindex
419
+ if (currentDim && storedDim && currentDim !== storedDim) {
420
+ logWarn('db-schema', `Embedding model changed: ${stored.value} (dim=${storedDim}) -> ${currentModel} (dim=${currentDim})`);
421
+ logWarn('db-schema', 'Dimensions are incompatible — existing embeddings will not work correctly');
422
+ logWarn('db-schema', 'Run "succ reindex" to regenerate all embeddings with the new model');
423
+ }
424
+ else if (stored.value !== currentModel) {
425
+ // Same dimension but different model - still should reindex for accuracy
426
+ logWarn('db-schema', `Embedding model changed: ${stored.value} -> ${currentModel} (same dimension=${currentDim})`);
427
+ logWarn('db-schema', 'Run "succ reindex" to regenerate embeddings for best accuracy');
428
+ }
429
+ }
430
+ // Store current model
431
+ database
432
+ .prepare('INSERT OR REPLACE INTO metadata (key, value) VALUES (?, ?)')
433
+ .run('embedding_model', currentModel);
434
+ }
435
+ /**
436
+ * Initialize sqlite-vec virtual tables for fast KNN search.
437
+ * Creates vec_memories and vec_documents tables, migrates existing data.
438
+ *
439
+ * Note: sqlite-vec doesn't support custom primary keys well, so we use a mapping table
440
+ * that maps vec rowid -> memory/document id.
441
+ */
442
+ export function initVecTables(database) {
443
+ if (!sqliteVecAvailable)
444
+ return;
445
+ const configDims = getConfig().llm?.embeddings?.dimensions;
446
+ const dims = configDims ?? getModelDimension(getLLMTaskConfig('embeddings').model) ?? 384;
447
+ // Check if vec tables already exist
448
+ const vecMemoriesExists = database
449
+ .prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='vec_memories'")
450
+ .get();
451
+ // Check persistent migration flag to avoid re-running migrations
452
+ const vecMemoriesMigrated = database
453
+ .prepare("SELECT value FROM metadata WHERE key = 'vec_memories_migrated_dims'")
454
+ .get();
455
+ // Check if migration is needed:
456
+ // 1. Table empty but memories exist (initial migration)
457
+ // 2. Dimensions changed since last migration
458
+ let needsMemoriesMigration = false;
459
+ let memoriesDimChange = false; // true = old embeddings are wrong dims, skip re-insertion
460
+ if (vecMemoriesExists) {
461
+ if (vecMemoriesMigrated && Number(vecMemoriesMigrated.value) !== dims) {
462
+ // Dimensions changed — recreate vec table (old embeddings are incompatible)
463
+ logWarn('sqlite-vec', `vec_memories dimension change: ${vecMemoriesMigrated.value} -> ${dims}. Recreating. Re-indexing required.`);
464
+ needsMemoriesMigration = true;
465
+ memoriesDimChange = true;
466
+ }
467
+ else if (!vecMemoriesMigrated) {
468
+ try {
469
+ const vecCount = database.prepare('SELECT COUNT(*) as cnt FROM vec_memories').get();
470
+ const memCount = database
471
+ .prepare('SELECT COUNT(*) as cnt FROM memories WHERE embedding IS NOT NULL')
472
+ .get();
473
+ needsMemoriesMigration = vecCount.cnt === 0 && memCount.cnt > 0;
474
+ }
475
+ catch {
476
+ needsMemoriesMigration = false;
477
+ }
478
+ }
479
+ }
480
+ if (!vecMemoriesExists || needsMemoriesMigration) {
481
+ try {
482
+ if (needsMemoriesMigration) {
483
+ // Drop old table with wrong schema
484
+ database.prepare('DROP TABLE IF EXISTS vec_memories').run();
485
+ database.prepare('DROP TABLE IF EXISTS vec_memories_map').run();
486
+ }
487
+ // Create vec0 virtual table for memories (simple schema, rowid auto-assigned)
488
+ database
489
+ .prepare(`
490
+ CREATE VIRTUAL TABLE IF NOT EXISTS vec_memories USING vec0(
491
+ embedding float[${dims}] distance_metric=cosine
492
+ )
493
+ `)
494
+ .run();
495
+ // Create mapping table: vec rowid -> memory id
496
+ database
497
+ .prepare(`
498
+ CREATE TABLE IF NOT EXISTS vec_memories_map (
499
+ vec_rowid INTEGER PRIMARY KEY,
500
+ memory_id INTEGER NOT NULL UNIQUE
501
+ )
502
+ `)
503
+ .run();
504
+ // Migrate existing embeddings (only if same dimensions — skip on dim change)
505
+ if (!memoriesDimChange) {
506
+ const memories = database
507
+ .prepare('SELECT id, embedding FROM memories WHERE embedding IS NOT NULL ORDER BY id')
508
+ .all();
509
+ if (memories.length > 0) {
510
+ const insertVec = database.prepare('INSERT INTO vec_memories(embedding) VALUES (?)');
511
+ const insertMap = database.prepare('INSERT INTO vec_memories_map(vec_rowid, memory_id) VALUES (?, ?)');
512
+ const migrate = database.transaction(() => {
513
+ for (const mem of memories) {
514
+ const result = insertVec.run(mem.embedding);
515
+ insertMap.run(result.lastInsertRowid, mem.id);
516
+ }
517
+ });
518
+ migrate();
519
+ }
520
+ }
521
+ // Store persistent migration flag to prevent re-running
522
+ database
523
+ .prepare("INSERT OR REPLACE INTO metadata (key, value) VALUES ('vec_memories_migrated_dims', ?)")
524
+ .run(String(dims));
525
+ }
526
+ catch {
527
+ // sqlite-vec may not support this syntax or other error
528
+ sqliteVecAvailable = false;
529
+ }
530
+ }
531
+ const vecDocumentsExists = database
532
+ .prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='vec_documents'")
533
+ .get();
534
+ // Check persistent migration flag for documents
535
+ const vecDocumentsMigrated = database
536
+ .prepare("SELECT value FROM metadata WHERE key = 'vec_documents_migrated_dims'")
537
+ .get();
538
+ // Check if migration is needed for documents:
539
+ // 1. Table empty but documents exist (initial migration)
540
+ // 2. Dimensions changed since last migration
541
+ let needsDocumentsMigration = false;
542
+ let documentsDimChange = false;
543
+ if (vecDocumentsExists && sqliteVecAvailable) {
544
+ if (vecDocumentsMigrated && Number(vecDocumentsMigrated.value) !== dims) {
545
+ logWarn('sqlite-vec', `vec_documents dimension change: ${vecDocumentsMigrated.value} -> ${dims}. Recreating. Re-indexing required.`);
546
+ needsDocumentsMigration = true;
547
+ documentsDimChange = true;
548
+ }
549
+ else if (!vecDocumentsMigrated) {
550
+ try {
551
+ const vecCount = database.prepare('SELECT COUNT(*) as cnt FROM vec_documents').get();
552
+ const docCount = database
553
+ .prepare('SELECT COUNT(*) as cnt FROM documents WHERE embedding IS NOT NULL')
554
+ .get();
555
+ needsDocumentsMigration = vecCount.cnt === 0 && docCount.cnt > 0;
556
+ }
557
+ catch {
558
+ needsDocumentsMigration = false;
559
+ }
560
+ }
561
+ }
562
+ if ((!vecDocumentsExists || needsDocumentsMigration) && sqliteVecAvailable) {
563
+ try {
564
+ if (needsDocumentsMigration) {
565
+ database.prepare('DROP TABLE IF EXISTS vec_documents').run();
566
+ database.prepare('DROP TABLE IF EXISTS vec_documents_map').run();
567
+ }
568
+ // Create vec0 virtual table for documents
569
+ database
570
+ .prepare(`
571
+ CREATE VIRTUAL TABLE IF NOT EXISTS vec_documents USING vec0(
572
+ embedding float[${dims}] distance_metric=cosine
573
+ )
574
+ `)
575
+ .run();
576
+ // Create mapping table: vec rowid -> document id
577
+ database
578
+ .prepare(`
579
+ CREATE TABLE IF NOT EXISTS vec_documents_map (
580
+ vec_rowid INTEGER PRIMARY KEY,
581
+ doc_id INTEGER NOT NULL UNIQUE
582
+ )
583
+ `)
584
+ .run();
585
+ // Migrate existing embeddings (only if same dimensions — skip on dim change)
586
+ if (!documentsDimChange) {
587
+ const docs = database
588
+ .prepare('SELECT id, embedding FROM documents WHERE embedding IS NOT NULL ORDER BY id')
589
+ .all();
590
+ if (docs.length > 0) {
591
+ const insertVec = database.prepare('INSERT INTO vec_documents(embedding) VALUES (?)');
592
+ const insertMap = database.prepare('INSERT INTO vec_documents_map(vec_rowid, doc_id) VALUES (?, ?)');
593
+ const migrate = database.transaction(() => {
594
+ for (const doc of docs) {
595
+ const result = insertVec.run(doc.embedding);
596
+ insertMap.run(result.lastInsertRowid, doc.id);
597
+ }
598
+ });
599
+ migrate();
600
+ }
601
+ }
602
+ // Store persistent migration flag to prevent re-running
603
+ database
604
+ .prepare("INSERT OR REPLACE INTO metadata (key, value) VALUES ('vec_documents_migrated_dims', ?)")
605
+ .run(String(dims));
606
+ }
607
+ catch {
608
+ // Ignore errors for documents table
609
+ }
610
+ }
611
+ }
612
+ /**
613
+ * Initialize global database schema
614
+ */
615
+ export function initGlobalDb(database) {
616
+ // Global DB has memories table (shared across projects) and metadata for BM25 index
617
+ database.exec(`
618
+ CREATE TABLE IF NOT EXISTS memories (
619
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
620
+ content TEXT NOT NULL,
621
+ tags TEXT,
622
+ source TEXT,
623
+ project TEXT,
624
+ type TEXT DEFAULT 'observation',
625
+ quality_score REAL,
626
+ quality_factors TEXT,
627
+ embedding BLOB NOT NULL,
628
+ created_at TEXT DEFAULT CURRENT_TIMESTAMP
629
+ );
630
+
631
+ CREATE TABLE IF NOT EXISTS metadata (
632
+ key TEXT PRIMARY KEY,
633
+ value TEXT NOT NULL
634
+ );
635
+
636
+ CREATE INDEX IF NOT EXISTS idx_global_memories_created_at ON memories(created_at);
637
+ CREATE INDEX IF NOT EXISTS idx_global_memories_project ON memories(project);
638
+ CREATE INDEX IF NOT EXISTS idx_global_memories_quality ON memories(quality_score);
639
+ `);
640
+ // Migration: add type column if missing
641
+ try {
642
+ database.prepare(`ALTER TABLE memories ADD COLUMN type TEXT DEFAULT 'observation'`).run();
643
+ }
644
+ catch {
645
+ // Column already exists, ignore
646
+ }
647
+ // Create index on type after migration
648
+ try {
649
+ database.prepare(`CREATE INDEX IF NOT EXISTS idx_global_memories_type ON memories(type)`).run();
650
+ }
651
+ catch {
652
+ // Index may already exist
653
+ }
654
+ // Migration: add quality_score and quality_factors columns
655
+ try {
656
+ database.prepare(`ALTER TABLE memories ADD COLUMN quality_score REAL`).run();
657
+ }
658
+ catch {
659
+ // Column already exists, ignore
660
+ }
661
+ try {
662
+ database.prepare(`ALTER TABLE memories ADD COLUMN quality_factors TEXT`).run();
663
+ }
664
+ catch {
665
+ // Column already exists, ignore
666
+ }
667
+ try {
668
+ database
669
+ .prepare(`CREATE INDEX IF NOT EXISTS idx_global_memories_quality ON memories(quality_score)`)
670
+ .run();
671
+ }
672
+ catch {
673
+ // Index may already exist
674
+ }
675
+ // Migration: add access_count and last_accessed columns for retention decay
676
+ try {
677
+ database.prepare(`ALTER TABLE memories ADD COLUMN access_count REAL DEFAULT 0`).run();
678
+ }
679
+ catch {
680
+ // Column already exists, ignore
681
+ }
682
+ try {
683
+ database.prepare(`ALTER TABLE memories ADD COLUMN last_accessed TEXT`).run();
684
+ }
685
+ catch {
686
+ // Column already exists, ignore
687
+ }
688
+ // Migration: add valid_from and valid_until columns for temporal awareness
689
+ try {
690
+ database.prepare(`ALTER TABLE memories ADD COLUMN valid_from TEXT`).run();
691
+ }
692
+ catch {
693
+ // Column already exists, ignore
694
+ }
695
+ try {
696
+ database.prepare(`ALTER TABLE memories ADD COLUMN valid_until TEXT`).run();
697
+ }
698
+ catch {
699
+ // Column already exists, ignore
700
+ }
701
+ // Migration: add invalidated_by column for soft-delete during consolidation
702
+ try {
703
+ database.prepare(`ALTER TABLE memories ADD COLUMN invalidated_by INTEGER`).run();
704
+ }
705
+ catch {
706
+ // Column already exists, ignore
707
+ }
708
+ try {
709
+ database
710
+ .prepare(`CREATE INDEX IF NOT EXISTS idx_global_memories_invalidated_by ON memories(invalidated_by)`)
711
+ .run();
712
+ }
713
+ catch {
714
+ // Index already exists, ignore
715
+ }
716
+ // Migration: add correction_count and is_invariant columns for working memory pins
717
+ try {
718
+ database.prepare(`ALTER TABLE memories ADD COLUMN correction_count INTEGER DEFAULT 0`).run();
719
+ }
720
+ catch {
721
+ // Column already exists, ignore
722
+ }
723
+ try {
724
+ database.prepare(`ALTER TABLE memories ADD COLUMN is_invariant INTEGER DEFAULT 0`).run();
725
+ }
726
+ catch {
727
+ // Column already exists, ignore
728
+ }
729
+ try {
730
+ database
731
+ .prepare(`CREATE INDEX IF NOT EXISTS idx_memories_pinned ON memories(correction_count, is_invariant)`)
732
+ .run();
733
+ }
734
+ catch {
735
+ // Index already exists, ignore
736
+ }
737
+ // Migration: add priority_score column for working memory ranking
738
+ try {
739
+ database.prepare(`ALTER TABLE memories ADD COLUMN priority_score REAL DEFAULT NULL`).run();
740
+ }
741
+ catch {
742
+ // Column already exists, ignore
743
+ }
744
+ try {
745
+ database
746
+ .prepare(`CREATE INDEX IF NOT EXISTS idx_memories_priority ON memories(priority_score DESC)`)
747
+ .run();
748
+ }
749
+ catch {
750
+ // Index already exists, ignore
751
+ }
752
+ // Migration: create sqlite-vec virtual table for global memories
753
+ initGlobalVecTable(database);
754
+ }
755
+ /**
756
+ * Initialize sqlite-vec virtual table for global memories
757
+ */
758
+ export function initGlobalVecTable(database) {
759
+ if (!sqliteVecAvailable)
760
+ return;
761
+ const configDims = getConfig().llm?.embeddings?.dimensions;
762
+ const dims = configDims ?? getModelDimension(getLLMTaskConfig('embeddings').model) ?? 384;
763
+ const vecMemoriesExists = database
764
+ .prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='vec_memories'")
765
+ .get();
766
+ // Check persistent migration flag
767
+ const vecMigrated = database
768
+ .prepare("SELECT value FROM metadata WHERE key = 'vec_memories_migrated_dims'")
769
+ .get();
770
+ // Check if migration is needed — skip if persistent flag exists
771
+ let needsMigration = false;
772
+ if (vecMemoriesExists && !vecMigrated) {
773
+ try {
774
+ const vecCount = database.prepare('SELECT COUNT(*) as cnt FROM vec_memories').get();
775
+ const memCount = database
776
+ .prepare('SELECT COUNT(*) as cnt FROM memories WHERE embedding IS NOT NULL')
777
+ .get();
778
+ needsMigration = vecCount.cnt === 0 && memCount.cnt > 0;
779
+ }
780
+ catch {
781
+ needsMigration = false;
782
+ }
783
+ }
784
+ if (!vecMemoriesExists || needsMigration) {
785
+ try {
786
+ if (needsMigration) {
787
+ database.prepare('DROP TABLE IF EXISTS vec_memories').run();
788
+ database.prepare('DROP TABLE IF EXISTS vec_memories_map').run();
789
+ }
790
+ // Create vec0 virtual table (simple schema)
791
+ database
792
+ .prepare(`
793
+ CREATE VIRTUAL TABLE IF NOT EXISTS vec_memories USING vec0(
794
+ embedding float[${dims}] distance_metric=cosine
795
+ )
796
+ `)
797
+ .run();
798
+ // Create mapping table
799
+ database
800
+ .prepare(`
801
+ CREATE TABLE IF NOT EXISTS vec_memories_map (
802
+ vec_rowid INTEGER PRIMARY KEY,
803
+ memory_id INTEGER NOT NULL UNIQUE
804
+ )
805
+ `)
806
+ .run();
807
+ // Migrate existing embeddings
808
+ const memories = database
809
+ .prepare('SELECT id, embedding FROM memories WHERE embedding IS NOT NULL ORDER BY id')
810
+ .all();
811
+ if (memories.length > 0) {
812
+ const insertVec = database.prepare('INSERT INTO vec_memories(embedding) VALUES (?)');
813
+ const insertMap = database.prepare('INSERT INTO vec_memories_map(vec_rowid, memory_id) VALUES (?, ?)');
814
+ const migrate = database.transaction(() => {
815
+ for (const mem of memories) {
816
+ const result = insertVec.run(mem.embedding);
817
+ insertMap.run(result.lastInsertRowid, mem.id);
818
+ }
819
+ });
820
+ migrate();
821
+ }
822
+ // Store persistent migration flag
823
+ database
824
+ .prepare("INSERT OR REPLACE INTO metadata (key, value) VALUES ('vec_memories_migrated_dims', ?)")
825
+ .run(String(dims));
826
+ }
827
+ catch {
828
+ // sqlite-vec may not be available for global db
829
+ }
830
+ }
831
+ }
832
+ //# sourceMappingURL=schema.js.map