@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,682 @@
1
+ import { getEmbedding, getEmbeddingInfo, cleanupEmbeddings } from '../lib/embeddings.js';
2
+ import { saveMemory, searchMemories, hybridSearchMemories, deleteMemory, closeDb, getMemoryStats, } from '../lib/storage/index.js';
3
+ import { setConfigOverride, hasApiKey, LOCAL_MODEL, getSuccDir, getLLMTaskConfig, } from '../lib/config.js';
4
+ import { calculateAccuracyMetrics, calculateLatencyStats, formatAccuracyMetrics, formatLatencyMetrics, generateTestDataset, generateBenchmarkId, formatBenchmarkComparison, compareHybridModes, formatHybridComparison, } from '../lib/benchmark.js';
5
+ import * as fs from 'fs';
6
+ import * as path from 'path';
7
+ // Test data for quick benchmark
8
+ const testMemories = [
9
+ {
10
+ content: 'TypeScript is a strongly typed programming language that builds on JavaScript',
11
+ tags: ['typescript', 'programming'],
12
+ },
13
+ {
14
+ content: 'React is a JavaScript library for building user interfaces',
15
+ tags: ['react', 'frontend'],
16
+ },
17
+ {
18
+ content: 'PostgreSQL is a powerful open source relational database',
19
+ tags: ['database', 'sql'],
20
+ },
21
+ {
22
+ content: 'Docker containers package software into standardized units',
23
+ tags: ['docker', 'devops'],
24
+ },
25
+ { content: 'Git is a distributed version control system', tags: ['git', 'versioning'] },
26
+ {
27
+ content: 'Node.js is a JavaScript runtime built on Chrome V8 engine',
28
+ tags: ['nodejs', 'backend'],
29
+ },
30
+ { content: 'GraphQL is a query language for APIs', tags: ['graphql', 'api'] },
31
+ { content: 'Redis is an in-memory data structure store', tags: ['redis', 'cache'] },
32
+ {
33
+ content: 'Kubernetes orchestrates containerized applications',
34
+ tags: ['k8s', 'orchestration'],
35
+ },
36
+ { content: 'Webpack is a static module bundler for JavaScript', tags: ['webpack', 'build'] },
37
+ ];
38
+ const queries = [
39
+ 'typed language javascript',
40
+ 'frontend UI components',
41
+ 'relational database SQL',
42
+ 'container deployment',
43
+ 'version control history',
44
+ ];
45
+ const accuracyTests = [
46
+ { query: 'strongly typed javascript superset', expected: 'typescript' },
47
+ { query: 'UI component library facebook', expected: 'react' },
48
+ { query: 'SQL database open source', expected: 'database' },
49
+ { query: 'container packaging software', expected: 'docker' },
50
+ { query: 'source code versioning', expected: 'git' },
51
+ { query: 'server-side javascript runtime', expected: 'nodejs' },
52
+ { query: 'API query language alternative to REST', expected: 'graphql' },
53
+ { query: 'in-memory cache key-value', expected: 'redis' },
54
+ { query: 'container orchestration platform', expected: 'k8s' },
55
+ { query: 'javascript bundler module', expected: 'webpack' },
56
+ ];
57
+ /**
58
+ * Run benchmark for a single embedding mode
59
+ */
60
+ async function runModeBenchmark(iterations, modeName) {
61
+ const results = [];
62
+ // Warm up
63
+ console.log(`\n Warming up ${modeName} model...`);
64
+ const warmupStart = Date.now();
65
+ await getEmbedding('warmup query');
66
+ console.log(` Model ready in ${Date.now() - warmupStart}ms`);
67
+ const embeddingInfo = getEmbeddingInfo();
68
+ // ============ EMBEDDING BENCHMARK ============
69
+ console.log(`\n [1/5] Embedding generation...`);
70
+ const embedTimes = [];
71
+ for (let i = 0; i < iterations; i++) {
72
+ const text = testMemories[i % testMemories.length].content + ` unique${i}`;
73
+ const start = Date.now();
74
+ await getEmbedding(text);
75
+ embedTimes.push(Date.now() - start);
76
+ }
77
+ results.push(formatResult('Embedding generation', embedTimes));
78
+ // ============ SAVE BENCHMARK ============
79
+ console.log(` [2/5] Memory save...`);
80
+ const saveTimes = [];
81
+ const savedIds = [];
82
+ for (let i = 0; i < iterations; i++) {
83
+ const mem = testMemories[i % testMemories.length];
84
+ const uniqueContent = mem.content + ` (${modeName} test ${i})`;
85
+ const start = Date.now();
86
+ const embedding = await getEmbedding(uniqueContent);
87
+ const result = await saveMemory(uniqueContent, embedding, mem.tags, `benchmark-${modeName}`, {
88
+ deduplicate: false,
89
+ autoLink: false,
90
+ });
91
+ saveTimes.push(Date.now() - start);
92
+ savedIds.push(result.id);
93
+ }
94
+ results.push(formatResult('Memory save (full)', saveTimes));
95
+ // ============ RECALL BENCHMARK ============
96
+ console.log(` [3/5] Memory recall...`);
97
+ const recallTimes = [];
98
+ for (let i = 0; i < iterations; i++) {
99
+ const query = queries[i % queries.length] + ` unique${i}`;
100
+ const start = Date.now();
101
+ const queryEmbedding = await getEmbedding(query);
102
+ await searchMemories(queryEmbedding, 5, 0.3);
103
+ recallTimes.push(Date.now() - start);
104
+ }
105
+ results.push(formatResult('Memory recall (full)', recallTimes));
106
+ // ============ SEARCH-ONLY BENCHMARK ============
107
+ console.log(` [4/5] DB search...`);
108
+ const precomputedEmbeddings = await Promise.all(queries.map((q) => getEmbedding(q)));
109
+ const searchTimes = [];
110
+ for (let i = 0; i < iterations * 10; i++) {
111
+ const embedding = precomputedEmbeddings[i % precomputedEmbeddings.length];
112
+ const start = Date.now();
113
+ await searchMemories(embedding, 5, 0.3);
114
+ searchTimes.push(Date.now() - start);
115
+ }
116
+ results.push(formatResult('DB search only', searchTimes));
117
+ // ============ ACCURACY BENCHMARK ============
118
+ console.log(` [5/5] Accuracy test...`);
119
+ let correct = 0;
120
+ for (const test of accuracyTests) {
121
+ const queryEmbedding = await getEmbedding(test.query);
122
+ const searchResults = await searchMemories(queryEmbedding, 1, 0.0);
123
+ if (searchResults.length > 0) {
124
+ const topResult = searchResults[0];
125
+ const hasExpectedTag = topResult.tags.some((t) => t.toLowerCase().includes(test.expected.toLowerCase()));
126
+ if (hasExpectedTag)
127
+ correct++;
128
+ }
129
+ }
130
+ const accuracy = {
131
+ name: 'Semantic accuracy',
132
+ total: accuracyTests.length,
133
+ correct,
134
+ accuracy: (correct / accuracyTests.length) * 100,
135
+ };
136
+ // Cleanup benchmark data
137
+ for (const id of savedIds) {
138
+ await deleteMemory(id);
139
+ }
140
+ return {
141
+ mode: embeddingInfo.mode,
142
+ model: embeddingInfo.model,
143
+ dimensions: embeddingInfo.dimensions,
144
+ results,
145
+ accuracy,
146
+ };
147
+ }
148
+ /**
149
+ * Run advanced benchmark with IR metrics (Recall@K, MRR, NDCG)
150
+ */
151
+ async function runAdvancedBenchmark(k = 5, size = 'small') {
152
+ console.log(`\n Running advanced accuracy benchmark (${size} dataset)...`);
153
+ const dataset = generateTestDataset(size);
154
+ const savedIds = [];
155
+ // Insert test memories
156
+ console.log(` Inserting ${dataset.memories.length} test memories...`);
157
+ for (const mem of dataset.memories) {
158
+ const embedding = await getEmbedding(mem.content);
159
+ const result = await saveMemory(mem.content, embedding, mem.tags, 'benchmark-advanced', {
160
+ deduplicate: false,
161
+ autoLink: false,
162
+ });
163
+ savedIds.push(result.id);
164
+ }
165
+ // Map original indices to saved IDs
166
+ const idMapping = new Map();
167
+ for (let i = 0; i < savedIds.length; i++) {
168
+ idMapping.set(i + 1, savedIds[i]); // Original IDs were 1-indexed
169
+ }
170
+ // Run queries and collect results
171
+ const embeddingTimes = [];
172
+ const searchTimes = [];
173
+ const pipelineTimes = [];
174
+ const queryResults = [];
175
+ console.log(` Running ${dataset.queries.length} benchmark queries...`);
176
+ for (const q of dataset.queries) {
177
+ // Map original relevant IDs to saved IDs
178
+ const mappedRelevantIds = new Set(q.relevantIds.map((id) => idMapping.get(id)).filter((id) => id !== undefined));
179
+ const pipelineStart = Date.now();
180
+ // Embedding timing
181
+ const embedStart = Date.now();
182
+ const queryEmbedding = await getEmbedding(q.query);
183
+ embeddingTimes.push(Date.now() - embedStart);
184
+ // Search timing
185
+ const searchStart = Date.now();
186
+ const searchResults = await searchMemories(queryEmbedding, k * 2, 0.0);
187
+ searchTimes.push(Date.now() - searchStart);
188
+ pipelineTimes.push(Date.now() - pipelineStart);
189
+ // Convert to benchmark format
190
+ const benchmarkResults = searchResults.map((r) => ({
191
+ id: r.id,
192
+ score: r.similarity,
193
+ }));
194
+ queryResults.push({
195
+ results: benchmarkResults,
196
+ relevantIds: mappedRelevantIds,
197
+ });
198
+ }
199
+ // Calculate metrics
200
+ const accuracy = calculateAccuracyMetrics(queryResults, k);
201
+ const latency = {
202
+ embedding: calculateLatencyStats(embeddingTimes),
203
+ search: calculateLatencyStats(searchTimes),
204
+ pipeline: calculateLatencyStats(pipelineTimes),
205
+ };
206
+ // Cleanup
207
+ for (const id of savedIds) {
208
+ await deleteMemory(id);
209
+ }
210
+ return { accuracy, latency };
211
+ }
212
+ // Available local models for benchmarking
213
+ export const LOCAL_MODELS = [
214
+ 'Xenova/all-MiniLM-L6-v2', // 384d, fast, default
215
+ 'Xenova/bge-small-en-v1.5', // 384d, better accuracy
216
+ 'Xenova/bge-base-en-v1.5', // 768d, best local accuracy
217
+ 'Xenova/bge-large-en-v1.5', // 1024d, highest quality
218
+ ];
219
+ /**
220
+ * Run succ benchmarks (local + optionally OpenRouter)
221
+ */
222
+ export async function benchmark(options = {}) {
223
+ const iterations = options.iterations || 10;
224
+ const k = options.k || 5;
225
+ const localModel = options.model || LOCAL_MODEL;
226
+ const datasetSize = options.size || 'small';
227
+ console.log('═══════════════════════════════════════════════════════════');
228
+ console.log(' SUCC BENCHMARK ');
229
+ console.log('═══════════════════════════════════════════════════════════');
230
+ const allModeResults = [];
231
+ // ============ LOCAL BENCHMARK ============
232
+ const modelShort = localModel.split('/').pop() || localModel;
233
+ console.log(`\n┌─────────────────────────────────────────────────────────────┐`);
234
+ console.log(`│ LOCAL EMBEDDINGS (${modelShort.padEnd(39)}) │`);
235
+ console.log(`└─────────────────────────────────────────────────────────────┘`);
236
+ setConfigOverride({
237
+ llm: { embeddings: { mode: 'local', model: localModel } },
238
+ });
239
+ cleanupEmbeddings(); // Reset pipeline
240
+ const localResults = await runModeBenchmark(iterations, 'local');
241
+ // Run advanced benchmark if requested
242
+ if (options.advanced) {
243
+ const { accuracy, latency } = await runAdvancedBenchmark(k, datasetSize);
244
+ localResults.advancedAccuracy = accuracy;
245
+ localResults.latency = latency;
246
+ }
247
+ allModeResults.push(localResults);
248
+ // ============ API BENCHMARK ============
249
+ if (hasApiKey()) {
250
+ console.log('\n┌─────────────────────────────────────────────────────────────┐');
251
+ console.log('│ API EMBEDDINGS (openai/text-embedding-3-small) │');
252
+ console.log('└─────────────────────────────────────────────────────────────┘');
253
+ const embCfg = getLLMTaskConfig('embeddings');
254
+ setConfigOverride({
255
+ llm: {
256
+ embeddings: { mode: 'api', model: 'openai/text-embedding-3-small' },
257
+ api_key: embCfg.api_key,
258
+ },
259
+ });
260
+ cleanupEmbeddings(); // Reset cache
261
+ const openrouterResults = await runModeBenchmark(iterations, 'api');
262
+ if (options.advanced) {
263
+ const { accuracy, latency } = await runAdvancedBenchmark(k, datasetSize);
264
+ openrouterResults.advancedAccuracy = accuracy;
265
+ openrouterResults.latency = latency;
266
+ }
267
+ allModeResults.push(openrouterResults);
268
+ }
269
+ else {
270
+ console.log('\n ⓘ OpenRouter benchmark skipped (no API key)');
271
+ console.log(' Set OPENROUTER_API_KEY env var or add llm.api_key to ~/.succ/config.json');
272
+ }
273
+ // Reset config override
274
+ setConfigOverride(null);
275
+ closeDb();
276
+ // ============ JSON OUTPUT ============
277
+ if (options.json) {
278
+ const jsonResults = allModeResults.map((mr) => ({
279
+ mode: mr.mode,
280
+ model: mr.model,
281
+ dimensions: mr.dimensions,
282
+ latency: mr.results.map((r) => ({
283
+ operation: r.name,
284
+ avgMs: r.avgMs,
285
+ minMs: r.minMs,
286
+ maxMs: r.maxMs,
287
+ opsPerSecond: r.opsPerSecond,
288
+ })),
289
+ accuracy: {
290
+ basic: {
291
+ correct: mr.accuracy.correct,
292
+ total: mr.accuracy.total,
293
+ percentage: mr.accuracy.accuracy,
294
+ },
295
+ advanced: mr.advancedAccuracy
296
+ ? {
297
+ recallAtK: mr.advancedAccuracy.recallAtK,
298
+ precisionAtK: mr.advancedAccuracy.precisionAtK,
299
+ f1AtK: mr.advancedAccuracy.f1AtK,
300
+ k: mr.advancedAccuracy.k,
301
+ mrr: mr.advancedAccuracy.mrr,
302
+ ndcg: mr.advancedAccuracy.ndcg,
303
+ queryCount: mr.advancedAccuracy.queryCount,
304
+ queriesWithHits: mr.advancedAccuracy.queriesWithHits,
305
+ }
306
+ : null,
307
+ },
308
+ latencyStats: mr.latency
309
+ ? {
310
+ embedding: mr.latency.embedding,
311
+ search: mr.latency.search,
312
+ pipeline: mr.latency.pipeline,
313
+ }
314
+ : null,
315
+ }));
316
+ console.log(JSON.stringify(jsonResults, null, 2));
317
+ return;
318
+ }
319
+ // ============ SUMMARY ============
320
+ console.log('\n═══════════════════════════════════════════════════════════');
321
+ console.log(' SUMMARY ');
322
+ console.log('═══════════════════════════════════════════════════════════');
323
+ for (const modeResult of allModeResults) {
324
+ const dimStr = modeResult.dimensions ? `${modeResult.dimensions}d` : '?d';
325
+ console.log(`\n${modeResult.mode.toUpperCase()} (${modeResult.model}, ${dimStr}):`);
326
+ console.log('┌─────────────────────────┬──────────┬──────────┬──────────┐');
327
+ console.log('│ Operation │ Avg (ms) │ Min (ms) │ Max (ms) │');
328
+ console.log('├─────────────────────────┼──────────┼──────────┼──────────┤');
329
+ for (const r of modeResult.results) {
330
+ const name = r.name.padEnd(23);
331
+ const avg = r.avgMs.toFixed(1).padStart(8);
332
+ const min = r.minMs.toFixed(1).padStart(8);
333
+ const max = r.maxMs.toFixed(1).padStart(8);
334
+ console.log(`│ ${name} │ ${avg} │ ${min} │ ${max} │`);
335
+ }
336
+ console.log('└─────────────────────────┴──────────┴──────────┴──────────┘');
337
+ console.log(` Throughput: ${modeResult.results[0].opsPerSecond.toFixed(1)} embed/sec`);
338
+ console.log(` Basic Accuracy: ${modeResult.accuracy.accuracy.toFixed(0)}% (${modeResult.accuracy.correct}/${modeResult.accuracy.total})`);
339
+ // Show advanced metrics if available
340
+ if (modeResult.advancedAccuracy) {
341
+ console.log('\n Advanced IR Metrics:');
342
+ console.log(formatAccuracyMetrics(modeResult.advancedAccuracy));
343
+ }
344
+ if (modeResult.latency) {
345
+ console.log('\n Latency Statistics:');
346
+ console.log(formatLatencyMetrics(modeResult.latency));
347
+ }
348
+ }
349
+ // ============ COMPARISON ============
350
+ if (allModeResults.length > 1) {
351
+ console.log('\n─────────────────────────────────────────────────────────────');
352
+ console.log('COMPARISON:');
353
+ const local = allModeResults[0];
354
+ const openrouter = allModeResults[1];
355
+ const localEmbed = local.results[0].avgMs;
356
+ const orEmbed = openrouter.results[0].avgMs;
357
+ const speedup = orEmbed / Math.max(localEmbed, 0.1);
358
+ console.log(` Local embedding: ${localEmbed.toFixed(1)}ms avg`);
359
+ console.log(` OpenRouter embedding: ${orEmbed.toFixed(1)}ms avg`);
360
+ console.log(` → Local is ${speedup.toFixed(1)}x faster (no network latency)`);
361
+ console.log(` → Both achieve ${local.accuracy.accuracy.toFixed(0)}% semantic accuracy`);
362
+ if (local.advancedAccuracy && openrouter.advancedAccuracy) {
363
+ console.log('\n Advanced Metrics Comparison:');
364
+ console.log(` Local MRR: ${(local.advancedAccuracy.mrr * 100).toFixed(1)}%`);
365
+ console.log(` OpenRouter MRR: ${(openrouter.advancedAccuracy.mrr * 100).toFixed(1)}%`);
366
+ console.log(` Local NDCG: ${(local.advancedAccuracy.ndcg * 100).toFixed(1)}%`);
367
+ console.log(` OpenRouter NDCG: ${(openrouter.advancedAccuracy.ndcg * 100).toFixed(1)}%`);
368
+ }
369
+ }
370
+ console.log('\nDatabase: SQLite (better-sqlite3)');
371
+ console.log();
372
+ }
373
+ function formatResult(name, times) {
374
+ const total = times.reduce((a, b) => a + b, 0);
375
+ return {
376
+ name,
377
+ operations: times.length,
378
+ totalMs: total,
379
+ avgMs: total / times.length,
380
+ minMs: Math.min(...times),
381
+ maxMs: Math.max(...times),
382
+ opsPerSecond: times.length > 0 && total > 0 ? (times.length / total) * 1000 : 0,
383
+ };
384
+ }
385
+ /**
386
+ * Run quick benchmark on existing memories (no test data insertion)
387
+ * Uses the actual project's memories for realistic performance measurement
388
+ */
389
+ export async function benchmarkExisting(options = {}) {
390
+ const k = options.k || 5;
391
+ console.log('═══════════════════════════════════════════════════════════');
392
+ console.log(' SUCC BENCHMARK (Existing Data) ');
393
+ console.log('═══════════════════════════════════════════════════════════');
394
+ const stats = await getMemoryStats();
395
+ console.log(`\nMemories in database: ${stats.total_memories}`);
396
+ if (stats.total_memories === 0) {
397
+ console.log('\n No memories found. Use `succ remember` to add some first.');
398
+ return;
399
+ }
400
+ // Sample queries for latency testing
401
+ const sampleQueries = [
402
+ 'important decision about architecture',
403
+ 'error handling implementation',
404
+ 'configuration settings',
405
+ 'authentication flow',
406
+ 'database optimization',
407
+ ];
408
+ const embeddingTimes = [];
409
+ const searchTimes = [];
410
+ const pipelineTimes = [];
411
+ console.log('\nRunning latency benchmark...');
412
+ for (const query of sampleQueries) {
413
+ for (let i = 0; i < 10; i++) {
414
+ const pipelineStart = Date.now();
415
+ const embedStart = Date.now();
416
+ const embedding = await getEmbedding(query + ` variation ${i}`);
417
+ embeddingTimes.push(Date.now() - embedStart);
418
+ const searchStart = Date.now();
419
+ await searchMemories(embedding, k, 0.3);
420
+ searchTimes.push(Date.now() - searchStart);
421
+ pipelineTimes.push(Date.now() - pipelineStart);
422
+ }
423
+ }
424
+ const latency = {
425
+ embedding: calculateLatencyStats(embeddingTimes),
426
+ search: calculateLatencyStats(searchTimes),
427
+ pipeline: calculateLatencyStats(pipelineTimes),
428
+ };
429
+ if (options.json) {
430
+ console.log(JSON.stringify({
431
+ totalMemories: stats.total_memories,
432
+ latency: {
433
+ embedding: latency.embedding,
434
+ search: latency.search,
435
+ pipeline: latency.pipeline,
436
+ },
437
+ }, null, 2));
438
+ return;
439
+ }
440
+ console.log('\n' + formatLatencyMetrics(latency));
441
+ const embeddingInfo = getEmbeddingInfo();
442
+ console.log(`\nModel: ${embeddingInfo.model} (${embeddingInfo.mode})`);
443
+ console.log(`Dimensions: ${embeddingInfo.dimensions || 'unknown'}`);
444
+ console.log(`Search limit: top ${k} results`);
445
+ console.log();
446
+ closeDb();
447
+ }
448
+ // ============================================================================
449
+ // Benchmark History Management
450
+ // ============================================================================
451
+ const BENCHMARK_HISTORY_VERSION = 1;
452
+ /**
453
+ * Get the path to the benchmark history file
454
+ */
455
+ function getBenchmarkHistoryPath() {
456
+ const succDir = getSuccDir();
457
+ return path.join(succDir, 'benchmarks', 'history.json');
458
+ }
459
+ /**
460
+ * Load benchmark history from disk
461
+ */
462
+ export function loadBenchmarkHistory() {
463
+ const historyPath = getBenchmarkHistoryPath();
464
+ if (!fs.existsSync(historyPath)) {
465
+ return { version: BENCHMARK_HISTORY_VERSION, entries: [] };
466
+ }
467
+ try {
468
+ const content = fs.readFileSync(historyPath, 'utf-8');
469
+ const history = JSON.parse(content);
470
+ return history;
471
+ }
472
+ catch {
473
+ console.warn(' Warning: Could not load benchmark history, starting fresh');
474
+ return { version: BENCHMARK_HISTORY_VERSION, entries: [] };
475
+ }
476
+ }
477
+ /**
478
+ * Save benchmark history to disk
479
+ */
480
+ export function saveBenchmarkHistory(history) {
481
+ const historyPath = getBenchmarkHistoryPath();
482
+ const dir = path.dirname(historyPath);
483
+ if (!fs.existsSync(dir)) {
484
+ fs.mkdirSync(dir, { recursive: true });
485
+ }
486
+ fs.writeFileSync(historyPath, JSON.stringify(history, null, 2));
487
+ }
488
+ /**
489
+ * Add a benchmark entry to history
490
+ */
491
+ export function addBenchmarkToHistory(history, entry) {
492
+ const newEntry = {
493
+ ...entry,
494
+ id: generateBenchmarkId(),
495
+ timestamp: new Date().toISOString(),
496
+ };
497
+ history.entries.push(newEntry);
498
+ // Keep only last 100 entries
499
+ if (history.entries.length > 100) {
500
+ history.entries = history.entries.slice(-100);
501
+ }
502
+ return newEntry;
503
+ }
504
+ /**
505
+ * Get the most recent benchmark entry matching criteria
506
+ */
507
+ export function getLatestBenchmark(history, mode, model) {
508
+ const filtered = history.entries.filter((e) => {
509
+ if (mode && e.mode !== mode)
510
+ return false;
511
+ if (model && e.model !== model)
512
+ return false;
513
+ return true;
514
+ });
515
+ return filtered.length > 0 ? filtered[filtered.length - 1] : undefined;
516
+ }
517
+ // ============================================================================
518
+ // Hybrid Search Benchmark
519
+ // ============================================================================
520
+ /**
521
+ * Run hybrid search benchmark comparing semantic, BM25, and hybrid modes
522
+ */
523
+ export async function runHybridBenchmark(k = 5, size = 'small') {
524
+ console.log(`\n Running hybrid search benchmark (${size} dataset)...`);
525
+ const dataset = generateTestDataset(size);
526
+ const savedIds = [];
527
+ // Insert test memories
528
+ console.log(` Inserting ${dataset.memories.length} test memories...`);
529
+ for (const mem of dataset.memories) {
530
+ const embedding = await getEmbedding(mem.content);
531
+ const result = await saveMemory(mem.content, embedding, mem.tags, 'benchmark-hybrid', {
532
+ deduplicate: false,
533
+ autoLink: false,
534
+ });
535
+ savedIds.push(result.id);
536
+ }
537
+ // Map original indices to saved IDs
538
+ const idMapping = new Map();
539
+ for (let i = 0; i < savedIds.length; i++) {
540
+ idMapping.set(i + 1, savedIds[i]);
541
+ }
542
+ // Collect results for all three modes
543
+ const semanticResults = [];
544
+ const bm25Results = [];
545
+ const hybridResults = [];
546
+ console.log(` Running ${dataset.queries.length} queries in 3 modes...`);
547
+ for (const q of dataset.queries) {
548
+ const mappedRelevantIds = new Set(q.relevantIds.map((id) => idMapping.get(id)).filter((id) => id !== undefined));
549
+ const queryEmbedding = await getEmbedding(q.query);
550
+ // Semantic-only search
551
+ const semanticSearch = await searchMemories(queryEmbedding, k * 2, 0.0);
552
+ semanticResults.push({
553
+ results: semanticSearch.map((r) => ({ id: r.id, score: r.similarity })),
554
+ relevantIds: mappedRelevantIds,
555
+ });
556
+ // Hybrid search (RRF fusion) - alpha=0.5 for balanced fusion
557
+ const hybridSearch = await hybridSearchMemories(q.query, queryEmbedding, k * 2, 0.0, 0.5);
558
+ hybridResults.push({
559
+ results: hybridSearch.map((r) => ({ id: r.id, score: r.similarity })),
560
+ relevantIds: mappedRelevantIds,
561
+ });
562
+ // BM25-only search (use hybrid with alpha=0.0 for pure BM25)
563
+ const bm25Search = await hybridSearchMemories(q.query, queryEmbedding, k * 2, 0.0, 0.0);
564
+ bm25Results.push({
565
+ results: bm25Search.map((r) => ({ id: r.id, score: r.similarity })),
566
+ relevantIds: mappedRelevantIds,
567
+ });
568
+ }
569
+ // Calculate metrics for each mode
570
+ const semanticMetrics = calculateAccuracyMetrics(semanticResults, k);
571
+ const bm25Metrics = calculateAccuracyMetrics(bm25Results, k);
572
+ const hybridMetrics = calculateAccuracyMetrics(hybridResults, k);
573
+ // Cleanup
574
+ for (const id of savedIds) {
575
+ await deleteMemory(id);
576
+ }
577
+ return compareHybridModes(semanticMetrics, bm25Metrics, hybridMetrics);
578
+ }
579
+ /**
580
+ * Run benchmark with save and compare options
581
+ */
582
+ export async function benchmarkWithHistory(options = {}) {
583
+ const k = options.k || 5;
584
+ const datasetSize = options.size || 'small';
585
+ const localModel = options.model || LOCAL_MODEL;
586
+ // Run the standard benchmark first
587
+ await benchmark(options);
588
+ // If hybrid mode requested, run hybrid comparison
589
+ if (options.hybrid && options.advanced) {
590
+ console.log('\n┌─────────────────────────────────────────────────────────────┐');
591
+ console.log('│ HYBRID SEARCH COMPARISON │');
592
+ console.log('└─────────────────────────────────────────────────────────────┘');
593
+ setConfigOverride({
594
+ llm: { embeddings: { mode: 'local', model: localModel } },
595
+ });
596
+ cleanupEmbeddings();
597
+ const hybridMetrics = await runHybridBenchmark(k, datasetSize);
598
+ console.log('\n' + formatHybridComparison(hybridMetrics));
599
+ setConfigOverride(null);
600
+ }
601
+ // Handle save/compare
602
+ if (options.save || options.compare) {
603
+ const history = loadBenchmarkHistory();
604
+ if (options.advanced) {
605
+ // We need to re-run to get metrics for saving
606
+ // For simplicity, assume the last run was with local embeddings
607
+ setConfigOverride({
608
+ llm: { embeddings: { mode: 'local', model: localModel } },
609
+ });
610
+ cleanupEmbeddings();
611
+ const { accuracy, latency } = await runAdvancedBenchmark(k, datasetSize);
612
+ if (options.compare) {
613
+ const latest = getLatestBenchmark(history, 'local', localModel);
614
+ if (latest) {
615
+ console.log('\n' + formatBenchmarkComparison(accuracy, latest.accuracy, latest.timestamp));
616
+ }
617
+ else {
618
+ console.log('\n No previous benchmark found for comparison.');
619
+ console.log(' Run with --save first to establish a baseline.');
620
+ }
621
+ }
622
+ if (options.save) {
623
+ const embeddingInfo = getEmbeddingInfo();
624
+ addBenchmarkToHistory(history, {
625
+ mode: embeddingInfo.mode,
626
+ model: embeddingInfo.model,
627
+ datasetSize,
628
+ searchMode: options.hybrid ? 'hybrid' : 'semantic',
629
+ accuracy,
630
+ latency,
631
+ config: {
632
+ embeddingModel: embeddingInfo.model,
633
+ embeddingMode: embeddingInfo.mode,
634
+ totalMemories: generateTestDataset(datasetSize).memories.length,
635
+ testQueries: generateTestDataset(datasetSize).queries.length,
636
+ },
637
+ });
638
+ saveBenchmarkHistory(history);
639
+ console.log(`\n ✓ Benchmark saved to history (${history.entries.length} total entries)`);
640
+ }
641
+ setConfigOverride(null);
642
+ }
643
+ else {
644
+ console.log('\n Note: --save and --compare require --advanced mode');
645
+ }
646
+ }
647
+ closeDb();
648
+ }
649
+ /**
650
+ * List benchmark history entries
651
+ */
652
+ export async function listBenchmarkHistory(options = {}) {
653
+ const limit = options.limit || 10;
654
+ const history = loadBenchmarkHistory();
655
+ if (history.entries.length === 0) {
656
+ console.log('No benchmark history found.');
657
+ console.log('Run `succ benchmark --advanced --save` to start tracking.');
658
+ return;
659
+ }
660
+ const entries = history.entries.slice(-limit).reverse();
661
+ if (options.json) {
662
+ console.log(JSON.stringify(entries, null, 2));
663
+ return;
664
+ }
665
+ console.log('═══════════════════════════════════════════════════════════');
666
+ console.log(' BENCHMARK HISTORY ');
667
+ console.log('═══════════════════════════════════════════════════════════\n');
668
+ console.log('┌────────────────────┬──────────┬──────────┬──────────┬──────────┐');
669
+ console.log('│ Timestamp │ Recall@K │ Prec@K │ F1@K │ MRR │');
670
+ console.log('├────────────────────┼──────────┼──────────┼──────────┼──────────┤');
671
+ for (const entry of entries) {
672
+ const ts = entry.timestamp.slice(0, 16).replace('T', ' ');
673
+ const recall = `${(entry.accuracy.recallAtK * 100).toFixed(1)}%`.padStart(8);
674
+ const precision = `${(entry.accuracy.precisionAtK * 100).toFixed(1)}%`.padStart(8);
675
+ const f1 = `${(entry.accuracy.f1AtK * 100).toFixed(1)}%`.padStart(8);
676
+ const mrr = `${(entry.accuracy.mrr * 100).toFixed(1)}%`.padStart(8);
677
+ console.log(`│ ${ts} │ ${recall} │ ${precision} │ ${f1} │ ${mrr} │`);
678
+ }
679
+ console.log('└────────────────────┴──────────┴──────────┴──────────┴──────────┘');
680
+ console.log(`\nShowing last ${entries.length} of ${history.entries.length} entries`);
681
+ }
682
+ //# sourceMappingURL=benchmark.js.map