@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 @@
1
+ {"version":3,"file":"public-api.js","sourceRoot":"","sources":["../../src/lib/public-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Quality Scoring for Memories
3
+ *
4
+ * Modes:
5
+ * - local: ONNX-based zero-shot classification (no external API needed)
6
+ * - custom: Ollama, LM Studio, llama.cpp (local LLM API)
7
+ * - openrouter: OpenRouter API
8
+ */
9
+ import { type SuccConfig } from './config.js';
10
+ export interface QualityScore {
11
+ score: number;
12
+ confidence: number;
13
+ factors: {
14
+ specificity: number;
15
+ clarity: number;
16
+ relevance: number;
17
+ uniqueness: number;
18
+ };
19
+ mode: 'local' | 'api' | 'heuristic';
20
+ }
21
+ /**
22
+ * Heuristic-based quality scoring (no LLM needed)
23
+ * Fast and works offline, but less accurate than LLM-based scoring
24
+ */
25
+ export declare function scoreWithHeuristics(content: string, existingSimilarity?: number): QualityScore;
26
+ /**
27
+ * Estimate content specificity using embedding similarity to reference phrases.
28
+ * Returns 0-1 where higher = more specific/technical content.
29
+ * Language-agnostic — works for any language the embedding model supports.
30
+ */
31
+ export declare function estimateSpecificityByEmbedding(content: string): Promise<number>;
32
+ /**
33
+ * Clear cached specificity reference embeddings (for tests).
34
+ */
35
+ export declare function clearSpecificityEmbeddingCache(): void;
36
+ /**
37
+ * Cleanup classifier pipeline to free memory
38
+ */
39
+ export declare function cleanupQualityScoring(): void;
40
+ /**
41
+ * Score memory using local ONNX model (zero-shot classification)
42
+ * Uses Xenova/nli-deberta-v3-xsmall for efficient classification
43
+ *
44
+ * Hybrid approach: combines ONNX classification with heuristic checks
45
+ * - ONNX is good at detecting technical content with code references
46
+ * - Heuristics act as a "gate" - if content fails basic quality checks, cap the score
47
+ */
48
+ export declare function scoreWithLocal(content: string, existingSimilarity?: number): Promise<QualityScore>;
49
+ /**
50
+ * Score memory using any OpenAI-compatible API (Ollama, OpenRouter, LM Studio, etc.)
51
+ * Auto-adds OpenRouter-specific headers when api_url contains 'openrouter.ai'.
52
+ */
53
+ export declare function scoreWithApi(content: string, apiUrl: string, model: string, apiKey?: string): Promise<QualityScore>;
54
+ /**
55
+ * Main scoring function - uses configured mode from llm.quality.*
56
+ */
57
+ export declare function scoreMemory(content: string, existingSimilarity?: number, configOverride?: Partial<SuccConfig>): Promise<QualityScore>;
58
+ /**
59
+ * Check if memory passes quality threshold
60
+ */
61
+ export declare function passesQualityThreshold(score: QualityScore, threshold?: number): boolean;
62
+ /**
63
+ * Format quality score for display
64
+ */
65
+ export declare function formatQualityScore(score: QualityScore): string;
66
+ //# sourceMappingURL=quality.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quality.d.ts","sourceRoot":"","sources":["../../src/lib/quality.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAA+B,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAqB3E,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE;QACP,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,IAAI,EAAE,OAAO,GAAG,KAAK,GAAG,WAAW,CAAC;CACrC;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,kBAAkB,CAAC,EAAE,MAAM,GAAG,YAAY,CAqB9F;AA+JD;;;;GAIG;AACH,wBAAsB,8BAA8B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA2BrF;AAED;;GAEG;AACH,wBAAgB,8BAA8B,IAAI,IAAI,CAErD;AAkDD;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAO5C;AAED;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,MAAM,EACf,kBAAkB,CAAC,EAAE,MAAM,GAC1B,OAAO,CAAC,YAAY,CAAC,CA8EvB;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,YAAY,CAAC,CAwCvB;AA0ED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,MAAM,EACf,kBAAkB,CAAC,EAAE,MAAM,EAC3B,cAAc,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,GACnC,OAAO,CAAC,YAAY,CAAC,CA6BvB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,YAAY,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAIvF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAM9D"}
@@ -0,0 +1,486 @@
1
+ /**
2
+ * Quality Scoring for Memories
3
+ *
4
+ * Modes:
5
+ * - local: ONNX-based zero-shot classification (no external API needed)
6
+ * - custom: Ollama, LM Studio, llama.cpp (local LLM API)
7
+ * - openrouter: OpenRouter API
8
+ */
9
+ import { getConfig, getLLMTaskConfig } from './config.js';
10
+ import { QUALITY_SCORER_SYSTEM } from '../prompts/index.js';
11
+ import { logWarn } from './fault-logger.js';
12
+ import { NetworkError, ValidationError } from './errors.js';
13
+ // Lazy-loaded zero-shot classification pipeline for local scoring
14
+ let classifierPipeline = null;
15
+ const CLASSIFIER_MODEL = 'Xenova/nli-deberta-v3-xsmall';
16
+ // Labels for zero-shot classification
17
+ // Using single classification with optimized labels (31pp separation in benchmark)
18
+ const QUALITY_LABELS = {
19
+ // Primary quality indicator - best performing labels from benchmark
20
+ quality: [
21
+ 'specific technical detail with code or file references',
22
+ 'vague statement without concrete details',
23
+ ],
24
+ // Secondary checks for additional signal
25
+ relevance: ['relevant to software development', 'not related to programming'],
26
+ };
27
+ /**
28
+ * Heuristic-based quality scoring (no LLM needed)
29
+ * Fast and works offline, but less accurate than LLM-based scoring
30
+ */
31
+ export function scoreWithHeuristics(content, existingSimilarity) {
32
+ const factors = {
33
+ specificity: calculateSpecificity(content),
34
+ clarity: calculateClarity(content),
35
+ relevance: 0.5, // Can't determine without context, default to neutral
36
+ uniqueness: existingSimilarity !== undefined ? 1 - existingSimilarity : 0.5,
37
+ };
38
+ // Weighted average
39
+ const score = factors.specificity * 0.3 +
40
+ factors.clarity * 0.3 +
41
+ factors.relevance * 0.2 +
42
+ factors.uniqueness * 0.2;
43
+ return {
44
+ score,
45
+ confidence: 0.6, // Heuristics are less confident than LLM
46
+ factors,
47
+ mode: 'heuristic',
48
+ };
49
+ }
50
+ /**
51
+ * Calculate specificity score
52
+ * Higher for content with specific details, lower for vague statements
53
+ * Supports multiple languages: English, Russian, and code-agnostic patterns
54
+ */
55
+ function calculateSpecificity(content) {
56
+ let score = 0.5; // Base score
57
+ // Content length checks (more nuanced)
58
+ const wordCount = content.trim().split(/\s+/).length;
59
+ const charCount = content.length;
60
+ // === POSITIVE SIGNALS (language-agnostic and multilingual) ===
61
+ // Code patterns (universal)
62
+ const hasNumbers = /\d+/.test(content);
63
+ const hasCodeReference = /`[^`]+`|```[\s\S]*?```/.test(content);
64
+ const hasFilePath = /\.(ts|js|tsx|jsx|py|go|rs|java|cpp|c|h|md|json|yaml|yml|sql|sh|bash|css|scss|html)\b/.test(content);
65
+ const hasLineReference = /:\d+/.test(content); // file:line references
66
+ const hasProperNouns = /[A-Z][a-z]+(?:[A-Z][a-z]+)+/.test(content); // CamelCase
67
+ const hasSnakeCase = /[a-z]+_[a-z]+/.test(content); // snake_case identifiers
68
+ // Technical terms - English
69
+ const hasEnglishTechnicalTerms = /\b(function|class|method|variable|parameter|return|error|bug|fix|feature|api|endpoint|database|table|column|component|module|service|handler|controller|config|deploy|server|client|request|response|query|mutation|schema|model|view|route|middleware|hook|callback|promise|async|await)\b/i.test(content);
70
+ // Technical terms - Russian
71
+ const hasRussianTechnicalTerms = /\b(функция|класс|метод|переменная|параметр|ошибка|баг|фикс|исправлен|фича|апи|эндпоинт|база данных|таблица|колонка|компонент|модуль|сервис|хендлер|контроллер|конфиг|деплой|сервер|клиент|запрос|ответ|схема|модель|роут|миддлвар|хук|коллбэк|промис)\b/i.test(content);
72
+ // Actionable verbs - English
73
+ const hasEnglishActionableVerbs = /\b(implement|create|add|remove|fix|update|refactor|migrate|configure|deploy|test|resolve|optimize|integrate|delete|modify|change|setup|install|build|run|execute|debug|trace|log|handle|process|validate|parse|serialize|fetch|send|receive|connect|disconnect)\b/i.test(content);
74
+ // Actionable verbs - Russian
75
+ const hasRussianActionableVerbs = /\b(реализовать|создать|добавить|удалить|исправить|обновить|рефакторить|мигрировать|настроить|задеплоить|тестировать|решить|оптимизировать|интегрировать|изменить|установить|собрать|запустить|выполнить|дебажить|отладить|логировать|обработать|валидировать|парсить|сериализовать|отправить|получить|подключить)\b/i.test(content);
76
+ // Preference/personal facts — short but high-value for recall
77
+ const isPreferenceFact = /\b(user|i|he|she|they|we)\s+(use[sd]?|like[sd]?|prefer[sd]?|has|have|had|want[sd]?|chose|always|never|switch)/i.test(content) ||
78
+ /\b(пользователь|юзер|я|он|она|мы)\s+(использу[еюёт]|предпочита[еюёт]|любит|хоч[еу]т|выбрал|всегда|никогда)/i.test(content);
79
+ if (hasNumbers)
80
+ score += 0.1;
81
+ if (hasCodeReference)
82
+ score += 0.2;
83
+ if (hasFilePath)
84
+ score += 0.15;
85
+ if (hasLineReference)
86
+ score += 0.1;
87
+ if (hasEnglishTechnicalTerms || hasRussianTechnicalTerms)
88
+ score += 0.1;
89
+ if (hasProperNouns || hasSnakeCase)
90
+ score += 0.05;
91
+ if (hasEnglishActionableVerbs || hasRussianActionableVerbs)
92
+ score += 0.1;
93
+ if (isPreferenceFact)
94
+ score += 0.2;
95
+ // === NEGATIVE SIGNALS (multilingual) ===
96
+ // Vague words - English
97
+ const isVagueEnglish = /\b(maybe|perhaps|somehow|something|stuff|things|whatever|somewhere|anyone|anything|some|kinda|sorta)\b/i.test(content);
98
+ // Vague words - Russian
99
+ const isVagueRussian = /\b(может быть|возможно|как-то|что-то|где-то|кто-то|как-нибудь|где-нибудь|что-нибудь|какой-то|некий|вроде|типа|наверное)\b/i.test(content);
100
+ // Length checks
101
+ const isTooShort = charCount < 30 || wordCount < 5;
102
+ const isVeryShort = charCount < 15 || wordCount < 3;
103
+ // Generic praise - English
104
+ const isGenericEnglish = /\b(good|bad|nice|cool|great|interesting|awesome|works|fine|ok|okay|perfect|excellent)\b/i.test(content) &&
105
+ !/\b(good practice|bad pattern|nice feature|works well because|works by|good for)\b/i.test(content);
106
+ // Generic praise - Russian (include adjective forms: хороший/хорошая/хорошее, плохой/плохая/плохое, etc.)
107
+ const isGenericRussian = /\b(хорош[иоеая]{1,2}|плох[оиеая]{1,2}|отлично|отличн[ыоеая]{1,2}|круто|крут[оыеая]{1,2}|класс|классн[оыеая]{1,2}|супер|норм|нормальн[оыеая]{1,2}|работает|ок|окей|идеальн[оыеая]{1,2}|прекрасн[оыеая]{1,2})\b/i.test(content) &&
108
+ !/\b(хорошая практика|плохой паттерн|работает потому что|работает за счёт)\b/i.test(content);
109
+ // Only generic praise patterns
110
+ const isOnlyGenericPraiseEnglish = /^(the )?(code|it|this|that)?\s*(is|are|was|were)?\s*(good|nice|great|fine|ok|cool|awesome|works|working)/i.test(content.trim());
111
+ const isOnlyGenericPraiseRussian = /^(код|это|оно|всё)?\s*(хорош[иоеая]{0,2}|отлично|работает|норм|класс|супер)/i.test(content.trim());
112
+ const lacksSubstance = wordCount < 8 && !hasCodeReference && !hasFilePath && !hasNumbers;
113
+ if (isVagueEnglish || isVagueRussian)
114
+ score -= 0.2;
115
+ // Reduce short-content penalties for preference facts (short but high-value)
116
+ if (isPreferenceFact) {
117
+ if (isVeryShort)
118
+ score -= 0.15;
119
+ else if (isTooShort)
120
+ score -= 0.05;
121
+ }
122
+ else {
123
+ if (isVeryShort)
124
+ score -= 0.35;
125
+ else if (isTooShort)
126
+ score -= 0.2;
127
+ }
128
+ if (isGenericEnglish || isGenericRussian)
129
+ score -= 0.15;
130
+ if (isOnlyGenericPraiseEnglish || isOnlyGenericPraiseRussian)
131
+ score -= 0.25;
132
+ if (lacksSubstance && !isPreferenceFact)
133
+ score -= 0.15;
134
+ return Math.max(0, Math.min(1, score));
135
+ }
136
+ // ============================================================================
137
+ // Embedding-based specificity (language-agnostic fallback)
138
+ // ============================================================================
139
+ /**
140
+ * Reference phrases for embedding-based specificity estimation.
141
+ * High-specificity: technical, actionable, detailed.
142
+ * Low-specificity: vague, generic, meaningless.
143
+ */
144
+ const HIGH_SPECIFICITY_REFS = [
145
+ 'Implement JWT authentication middleware for the REST API endpoints',
146
+ 'Fix SQL injection vulnerability in the user registration handler',
147
+ 'Configure nginx reverse proxy with SSL termination on port 443',
148
+ 'Refactor the database schema to support multi-tenant isolation',
149
+ 'Add retry logic with exponential backoff for failed API requests',
150
+ ];
151
+ const LOW_SPECIFICITY_REFS = [
152
+ 'This is good',
153
+ 'Something happened with the code',
154
+ 'Maybe we should change stuff',
155
+ 'It works fine I think',
156
+ ];
157
+ const SPECIFICITY_HIGH_SET = 'specificity-high';
158
+ const SPECIFICITY_LOW_SET = 'specificity-low';
159
+ let _specificityRefsRegistered = false;
160
+ /**
161
+ * Estimate content specificity using embedding similarity to reference phrases.
162
+ * Returns 0-1 where higher = more specific/technical content.
163
+ * Language-agnostic — works for any language the embedding model supports.
164
+ */
165
+ export async function estimateSpecificityByEmbedding(content) {
166
+ try {
167
+ const { registerReferenceSet, avgSimilarityToReference } = await import('./reference-embeddings.js');
168
+ const { getEmbedding } = await import('./embeddings.js');
169
+ if (!_specificityRefsRegistered) {
170
+ registerReferenceSet(SPECIFICITY_HIGH_SET, HIGH_SPECIFICITY_REFS);
171
+ registerReferenceSet(SPECIFICITY_LOW_SET, LOW_SPECIFICITY_REFS);
172
+ _specificityRefsRegistered = true;
173
+ }
174
+ const contentEmb = await getEmbedding(content);
175
+ const [highSim, lowSim] = await Promise.all([
176
+ avgSimilarityToReference(contentEmb, SPECIFICITY_HIGH_SET),
177
+ avgSimilarityToReference(contentEmb, SPECIFICITY_LOW_SET),
178
+ ]);
179
+ // Clamp negatives (cosine range is -1..1), then normalize
180
+ const clampedHigh = Math.max(0, highSim);
181
+ const clampedLow = Math.max(0, lowSim);
182
+ const total = clampedHigh + clampedLow;
183
+ if (total === 0)
184
+ return 0.5;
185
+ return clampedHigh / total;
186
+ }
187
+ catch {
188
+ return 0.5; // neutral fallback
189
+ }
190
+ }
191
+ /**
192
+ * Clear cached specificity reference embeddings (for tests).
193
+ */
194
+ export function clearSpecificityEmbeddingCache() {
195
+ _specificityRefsRegistered = false;
196
+ }
197
+ /**
198
+ * Calculate clarity score
199
+ * Higher for well-structured, readable content
200
+ */
201
+ function calculateClarity(content) {
202
+ let score = 0.5;
203
+ // Positive signals
204
+ const sentences = content.split(/[.!?]+/).filter((s) => s.trim().length > 0);
205
+ const avgSentenceLength = content.length / Math.max(sentences.length, 1);
206
+ const hasGoodLength = avgSentenceLength >= 30 && avgSentenceLength <= 150;
207
+ const hasStructure = /^[-*•]|\n[-*•]|\n\d+\./.test(content); // Lists
208
+ const hasSeparators = /\n{2,}|:\s*\n/.test(content); // Paragraphs
209
+ const hasProperPunctuation = /[.!?]$/.test(content.trim());
210
+ if (hasGoodLength)
211
+ score += 0.15;
212
+ if (hasStructure)
213
+ score += 0.1;
214
+ if (hasSeparators)
215
+ score += 0.05;
216
+ if (hasProperPunctuation)
217
+ score += 0.1;
218
+ // Negative signals
219
+ const hasExcessiveCaps = (content.match(/[A-Z]{3,}/g) || []).length > 2;
220
+ const hasNoSpaces = content.length > 50 && !content.includes(' ');
221
+ const hasRepeatedChars = /(.)\1{4,}/.test(content);
222
+ if (hasExcessiveCaps)
223
+ score -= 0.1;
224
+ if (hasNoSpaces)
225
+ score -= 0.3;
226
+ if (hasRepeatedChars)
227
+ score -= 0.2;
228
+ return Math.max(0, Math.min(1, score));
229
+ }
230
+ /**
231
+ * Get the zero-shot classification pipeline (lazy loaded)
232
+ */
233
+ async function getClassifierPipeline() {
234
+ if (!classifierPipeline) {
235
+ const { pipeline } = await import('@huggingface/transformers');
236
+ console.log(`Loading quality scoring model: ${CLASSIFIER_MODEL}...`);
237
+ classifierPipeline = await pipeline('zero-shot-classification', CLASSIFIER_MODEL, {
238
+ device: 'cpu',
239
+ });
240
+ console.log('Quality scoring model loaded.');
241
+ }
242
+ return classifierPipeline;
243
+ }
244
+ /**
245
+ * Cleanup classifier pipeline to free memory
246
+ */
247
+ export function cleanupQualityScoring() {
248
+ if (classifierPipeline) {
249
+ classifierPipeline = null;
250
+ if (global.gc) {
251
+ global.gc();
252
+ }
253
+ }
254
+ }
255
+ /**
256
+ * Score memory using local ONNX model (zero-shot classification)
257
+ * Uses Xenova/nli-deberta-v3-xsmall for efficient classification
258
+ *
259
+ * Hybrid approach: combines ONNX classification with heuristic checks
260
+ * - ONNX is good at detecting technical content with code references
261
+ * - Heuristics act as a "gate" - if content fails basic quality checks, cap the score
262
+ */
263
+ export async function scoreWithLocal(content, existingSimilarity) {
264
+ try {
265
+ // First, run quick heuristic checks
266
+ const heuristicResult = scoreWithHeuristics(content, existingSimilarity);
267
+ // If heuristic specificity is uncertain (< 0.5), try embedding-based estimation.
268
+ // This helps non-EN/RU content that heuristic regex can't score fairly.
269
+ if (heuristicResult.factors.specificity < 0.5) {
270
+ try {
271
+ const embSpec = await estimateSpecificityByEmbedding(content);
272
+ if (embSpec > heuristicResult.factors.specificity) {
273
+ heuristicResult.factors.specificity = embSpec;
274
+ // Recalculate overall score with updated specificity
275
+ heuristicResult.score =
276
+ heuristicResult.factors.specificity * 0.3 +
277
+ heuristicResult.factors.clarity * 0.3 +
278
+ heuristicResult.factors.relevance * 0.2 +
279
+ heuristicResult.factors.uniqueness * 0.2;
280
+ }
281
+ }
282
+ catch {
283
+ // Non-fatal — continue with heuristic score
284
+ }
285
+ }
286
+ // If content is clearly low quality by heuristics, don't bother with ONNX
287
+ // This catches: too short, vague words, generic praise, etc.
288
+ if (heuristicResult.factors.specificity < 0.4) {
289
+ return { ...heuristicResult, mode: 'local' }; // Return heuristic score but mark as local
290
+ }
291
+ const classifier = await getClassifierPipeline();
292
+ // Run zero-shot classification for quality and relevance
293
+ const [qualityResult, relevanceResult] = await Promise.all([
294
+ classifier(content, QUALITY_LABELS.quality, { multi_label: false }),
295
+ classifier(content, QUALITY_LABELS.relevance, { multi_label: false }),
296
+ ]);
297
+ // Extract ONNX scores
298
+ const onnxQuality = qualityResult.scores[qualityResult.labels.indexOf(QUALITY_LABELS.quality[0])];
299
+ const onnxRelevance = relevanceResult.scores[relevanceResult.labels.indexOf(QUALITY_LABELS.relevance[0])];
300
+ // Uniqueness from similarity if provided
301
+ const uniqueness = existingSimilarity !== undefined ? 1 - existingSimilarity : 0.5;
302
+ // Combine ONNX with heuristics
303
+ // Use minimum of ONNX and heuristic specificity to catch edge cases
304
+ const specificity = Math.min(onnxQuality, heuristicResult.factors.specificity + 0.15);
305
+ const factors = {
306
+ specificity,
307
+ clarity: heuristicResult.factors.clarity,
308
+ relevance: onnxRelevance,
309
+ uniqueness,
310
+ };
311
+ // Weighted average for overall score
312
+ const score = factors.specificity * 0.35 + // Hybrid specificity
313
+ factors.clarity * 0.15 + // Heuristic clarity
314
+ factors.relevance * 0.25 + // ONNX relevance
315
+ factors.uniqueness * 0.25; // Similarity-based uniqueness
316
+ return {
317
+ score: clamp(score, 0, 1),
318
+ confidence: 0.85,
319
+ factors,
320
+ mode: 'local',
321
+ };
322
+ }
323
+ catch (error) {
324
+ // Fall back to heuristics if model fails
325
+ logWarn('quality', 'Local ONNX scoring failed, falling back to heuristics', {
326
+ error: String(error),
327
+ });
328
+ return scoreWithHeuristics(content, existingSimilarity);
329
+ }
330
+ }
331
+ /**
332
+ * Score memory using any OpenAI-compatible API (Ollama, OpenRouter, LM Studio, etc.)
333
+ * Auto-adds OpenRouter-specific headers when api_url contains 'openrouter.ai'.
334
+ */
335
+ export async function scoreWithApi(content, apiUrl, model, apiKey) {
336
+ const prompt = buildScoringPrompt(content);
337
+ const headers = {
338
+ 'Content-Type': 'application/json',
339
+ };
340
+ if (apiKey) {
341
+ headers['Authorization'] = `Bearer ${apiKey}`;
342
+ }
343
+ if (apiUrl.includes('openrouter.ai')) {
344
+ headers['HTTP-Referer'] = 'https://succ.ai';
345
+ headers['X-Title'] = 'succ';
346
+ }
347
+ try {
348
+ const response = await fetch(`${apiUrl}/chat/completions`, {
349
+ method: 'POST',
350
+ headers,
351
+ body: JSON.stringify({
352
+ model,
353
+ messages: [
354
+ { role: 'system', content: QUALITY_SCORER_SYSTEM },
355
+ { role: 'user', content: prompt },
356
+ ],
357
+ temperature: 0.1,
358
+ max_tokens: 200,
359
+ }),
360
+ });
361
+ if (!response.ok) {
362
+ throw new NetworkError(`API error: ${response.status}`, response.status);
363
+ }
364
+ const data = await response.json();
365
+ const result = parseScoreResponse(data.choices[0]?.message?.content || '');
366
+ return { ...result, mode: 'api' };
367
+ }
368
+ catch (error) {
369
+ logWarn('quality', 'API scoring failed, falling back to heuristics', { error: String(error) });
370
+ return scoreWithHeuristics(content);
371
+ }
372
+ }
373
+ /**
374
+ * Build the prompt for LLM-based scoring
375
+ */
376
+ function buildScoringPrompt(content) {
377
+ return `Rate the quality of this development memory on a scale of 0 to 1.
378
+
379
+ Memory content:
380
+ """
381
+ ${content}
382
+ """
383
+
384
+ Evaluate these factors (each 0-1):
385
+ - specificity: How specific and actionable is the content?
386
+ - clarity: How clear and well-written is it?
387
+ - relevance: How relevant is this to software development?
388
+ - uniqueness: How unique/non-obvious is this insight?
389
+
390
+ Respond with JSON only:
391
+ {
392
+ "score": <overall 0-1>,
393
+ "confidence": <your confidence 0-1>,
394
+ "factors": {
395
+ "specificity": <0-1>,
396
+ "clarity": <0-1>,
397
+ "relevance": <0-1>,
398
+ "uniqueness": <0-1>
399
+ }
400
+ }`;
401
+ }
402
+ /**
403
+ * Parse LLM response to QualityScore
404
+ */
405
+ function parseScoreResponse(response) {
406
+ try {
407
+ // Extract JSON from response (may have markdown wrapping)
408
+ const jsonMatch = response.match(/\{[\s\S]*\}/);
409
+ if (!jsonMatch) {
410
+ throw new ValidationError('No JSON found in response');
411
+ }
412
+ const parsed = JSON.parse(jsonMatch[0]);
413
+ return {
414
+ score: clamp(parsed.score || 0.5, 0, 1),
415
+ confidence: clamp(parsed.confidence || 0.8, 0, 1),
416
+ factors: {
417
+ specificity: clamp(parsed.factors?.specificity || 0.5, 0, 1),
418
+ clarity: clamp(parsed.factors?.clarity || 0.5, 0, 1),
419
+ relevance: clamp(parsed.factors?.relevance || 0.5, 0, 1),
420
+ uniqueness: clamp(parsed.factors?.uniqueness || 0.5, 0, 1),
421
+ },
422
+ };
423
+ }
424
+ catch {
425
+ // Return default scores on parse error
426
+ return {
427
+ score: 0.5,
428
+ confidence: 0.3,
429
+ factors: {
430
+ specificity: 0.5,
431
+ clarity: 0.5,
432
+ relevance: 0.5,
433
+ uniqueness: 0.5,
434
+ },
435
+ };
436
+ }
437
+ }
438
+ function clamp(value, min, max) {
439
+ return Math.max(min, Math.min(max, value));
440
+ }
441
+ /**
442
+ * Main scoring function - uses configured mode from llm.quality.*
443
+ */
444
+ export async function scoreMemory(content, existingSimilarity, configOverride) {
445
+ const config = { ...getConfig(), ...configOverride };
446
+ // If scoring disabled, return neutral score
447
+ if (config.quality_scoring_enabled === false) {
448
+ return {
449
+ score: 0.5,
450
+ confidence: 1,
451
+ factors: { specificity: 0.5, clarity: 0.5, relevance: 0.5, uniqueness: 0.5 },
452
+ mode: 'heuristic',
453
+ };
454
+ }
455
+ const taskCfg = getLLMTaskConfig('quality');
456
+ switch (taskCfg.mode) {
457
+ case 'local':
458
+ return scoreWithLocal(content);
459
+ case 'api':
460
+ if (!taskCfg.model) {
461
+ logWarn('quality', 'API scoring requires llm.quality.model');
462
+ return scoreWithHeuristics(content, existingSimilarity);
463
+ }
464
+ return scoreWithApi(content, taskCfg.api_url, taskCfg.model, taskCfg.api_key);
465
+ default:
466
+ return scoreWithHeuristics(content, existingSimilarity);
467
+ }
468
+ }
469
+ /**
470
+ * Check if memory passes quality threshold
471
+ */
472
+ export function passesQualityThreshold(score, threshold) {
473
+ const config = getConfig();
474
+ const minScore = threshold ?? config.quality_scoring_threshold ?? 0;
475
+ return score.score >= minScore;
476
+ }
477
+ /**
478
+ * Format quality score for display
479
+ */
480
+ export function formatQualityScore(score) {
481
+ const percent = Math.round(score.score * 100);
482
+ const stars = Math.round(score.score * 5);
483
+ const starStr = '★'.repeat(stars) + '☆'.repeat(5 - stars);
484
+ return `${starStr} ${percent}% (${score.mode})`;
485
+ }
486
+ //# sourceMappingURL=quality.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quality.js","sourceRoot":"","sources":["../../src/lib/quality.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * LLM-based query expansion for richer recall.
3
+ *
4
+ * Takes a user query and generates additional search terms
5
+ * to improve retrieval coverage. Disabled by default.
6
+ */
7
+ import type { LLMBackend } from './llm.js';
8
+ /**
9
+ * Expand a query into multiple search terms using LLM.
10
+ *
11
+ * @param query - The original user query
12
+ * @param mode - LLM backend override (defaults to configured backend)
13
+ * @returns Array of expanded queries (NOT including the original)
14
+ */
15
+ export declare function expandQuery(query: string, mode?: LLMBackend): Promise<string[]>;
16
+ //# sourceMappingURL=query-expansion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-expansion.d.ts","sourceRoot":"","sources":["../../src/lib/query-expansion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAe3C;;;;;;GAMG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAgCrF"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * LLM-based query expansion for richer recall.
3
+ *
4
+ * Takes a user query and generates additional search terms
5
+ * to improve retrieval coverage. Disabled by default.
6
+ */
7
+ import { callLLM, getLLMConfig } from './llm.js';
8
+ const EXPANSION_PROMPT = `You are a search query expander. Given a user's search query about code, software development, or technical decisions, generate 3-5 alternative search queries that would help find relevant information.
9
+
10
+ Rules:
11
+ - Each query should capture a different aspect or phrasing of the original intent
12
+ - Include synonyms, related concepts, and alternative terminology
13
+ - Keep queries concise (3-8 words each)
14
+ - Return ONLY the queries, one per line, no numbering or bullets
15
+ - Do not repeat the original query
16
+
17
+ User query: "{query}"
18
+
19
+ Alternative queries:`;
20
+ /**
21
+ * Expand a query into multiple search terms using LLM.
22
+ *
23
+ * @param query - The original user query
24
+ * @param mode - LLM backend override (defaults to configured backend)
25
+ * @returns Array of expanded queries (NOT including the original)
26
+ */
27
+ export async function expandQuery(query, mode) {
28
+ const prompt = EXPANSION_PROMPT.replace('{query}', query);
29
+ const llmConfig = getLLMConfig();
30
+ const backend = mode ?? llmConfig.backend;
31
+ try {
32
+ const configOverride = backend !== llmConfig.backend ? { backend } : undefined;
33
+ const response = await callLLM(prompt, {
34
+ maxTokens: 200,
35
+ temperature: 0.7,
36
+ }, configOverride);
37
+ if (!response || response.trim().length === 0)
38
+ return [];
39
+ // Parse response: one query per line, filter empty/invalid
40
+ const expanded = response
41
+ .split('\n')
42
+ .map((line) => line.replace(/^[\d\-*.)]+\s*/, '').trim()) // strip numbering
43
+ .filter((line) => line.length >= 3 && line.length <= 200)
44
+ .filter((line) => !/^(alternative|here are|queries?:)/i.test(line))
45
+ .slice(0, 5);
46
+ return expanded;
47
+ }
48
+ catch {
49
+ // LLM failure should never break search — silently fall back to no expansion
50
+ return [];
51
+ }
52
+ }
53
+ //# sourceMappingURL=query-expansion.js.map