@vinaes/succ 1.4.0 → 1.5.42

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 (687) hide show
  1. package/README.md +64 -10
  2. package/dist/cli.js +81 -1
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/agents-md.d.ts.map +1 -1
  5. package/dist/commands/agents-md.js +3 -2
  6. package/dist/commands/agents-md.js.map +1 -1
  7. package/dist/commands/analyze-profile.d.ts.map +1 -1
  8. package/dist/commands/analyze-profile.js +32 -8
  9. package/dist/commands/analyze-profile.js.map +1 -1
  10. package/dist/commands/analyze-recursive.d.ts.map +1 -1
  11. package/dist/commands/analyze-recursive.js +6 -2
  12. package/dist/commands/analyze-recursive.js.map +1 -1
  13. package/dist/commands/analyze-utils.d.ts.map +1 -1
  14. package/dist/commands/analyze-utils.js +17 -4
  15. package/dist/commands/analyze-utils.js.map +1 -1
  16. package/dist/commands/benchmark-quality.d.ts.map +1 -1
  17. package/dist/commands/benchmark-quality.js +11 -4
  18. package/dist/commands/benchmark-quality.js.map +1 -1
  19. package/dist/commands/benchmark-sqlite-vec.d.ts.map +1 -1
  20. package/dist/commands/benchmark-sqlite-vec.js +4 -0
  21. package/dist/commands/benchmark-sqlite-vec.js.map +1 -1
  22. package/dist/commands/benchmark.d.ts.map +1 -1
  23. package/dist/commands/benchmark.js +5 -1
  24. package/dist/commands/benchmark.js.map +1 -1
  25. package/dist/commands/codex-chat.d.ts +8 -0
  26. package/dist/commands/codex-chat.d.ts.map +1 -0
  27. package/dist/commands/codex-chat.js +161 -0
  28. package/dist/commands/codex-chat.js.map +1 -0
  29. package/dist/commands/config.d.ts.map +1 -1
  30. package/dist/commands/config.js +32 -4
  31. package/dist/commands/config.js.map +1 -1
  32. package/dist/commands/daemon.d.ts.map +1 -1
  33. package/dist/commands/daemon.js +13 -4
  34. package/dist/commands/daemon.js.map +1 -1
  35. package/dist/commands/index-code.d.ts +4 -0
  36. package/dist/commands/index-code.d.ts.map +1 -1
  37. package/dist/commands/index-code.js +1 -1
  38. package/dist/commands/index-code.js.map +1 -1
  39. package/dist/commands/init.d.ts.map +1 -1
  40. package/dist/commands/init.js +305 -203
  41. package/dist/commands/init.js.map +1 -1
  42. package/dist/commands/memories.d.ts.map +1 -1
  43. package/dist/commands/memories.js +25 -14
  44. package/dist/commands/memories.js.map +1 -1
  45. package/dist/commands/progress.d.ts.map +1 -1
  46. package/dist/commands/progress.js +3 -2
  47. package/dist/commands/progress.js.map +1 -1
  48. package/dist/commands/reindex.d.ts.map +1 -1
  49. package/dist/commands/reindex.js +54 -36
  50. package/dist/commands/reindex.js.map +1 -1
  51. package/dist/commands/retention.d.ts.map +1 -1
  52. package/dist/commands/retention.js +7 -5
  53. package/dist/commands/retention.js.map +1 -1
  54. package/dist/commands/scan-code.d.ts +76 -0
  55. package/dist/commands/scan-code.d.ts.map +1 -0
  56. package/dist/commands/scan-code.js +385 -0
  57. package/dist/commands/scan-code.js.map +1 -0
  58. package/dist/commands/score.d.ts.map +1 -1
  59. package/dist/commands/score.js +3 -2
  60. package/dist/commands/score.js.map +1 -1
  61. package/dist/commands/session.d.ts +33 -0
  62. package/dist/commands/session.d.ts.map +1 -0
  63. package/dist/commands/session.js +163 -0
  64. package/dist/commands/session.js.map +1 -0
  65. package/dist/commands/setup.d.ts.map +1 -1
  66. package/dist/commands/setup.js +254 -15
  67. package/dist/commands/setup.js.map +1 -1
  68. package/dist/commands/soul.js +3 -2
  69. package/dist/commands/soul.js.map +1 -1
  70. package/dist/commands/status.d.ts.map +1 -1
  71. package/dist/commands/status.js +14 -5
  72. package/dist/commands/status.js.map +1 -1
  73. package/dist/commands/watch.d.ts.map +1 -1
  74. package/dist/commands/watch.js +13 -4
  75. package/dist/commands/watch.js.map +1 -1
  76. package/dist/daemon/analyzer.d.ts.map +1 -1
  77. package/dist/daemon/analyzer.js +21 -5
  78. package/dist/daemon/analyzer.js.map +1 -1
  79. package/dist/daemon/client.d.ts.map +1 -1
  80. package/dist/daemon/client.js +32 -8
  81. package/dist/daemon/client.js.map +1 -1
  82. package/dist/daemon/routes/analyzer.d.ts +3 -0
  83. package/dist/daemon/routes/analyzer.d.ts.map +1 -0
  84. package/dist/daemon/routes/analyzer.js +27 -0
  85. package/dist/daemon/routes/analyzer.js.map +1 -0
  86. package/dist/daemon/routes/hooks.d.ts +14 -0
  87. package/dist/daemon/routes/hooks.d.ts.map +1 -0
  88. package/dist/daemon/routes/hooks.js +1212 -0
  89. package/dist/daemon/routes/hooks.js.map +1 -0
  90. package/dist/daemon/routes/memory.d.ts +4 -0
  91. package/dist/daemon/routes/memory.d.ts.map +1 -0
  92. package/dist/daemon/routes/memory.js +71 -0
  93. package/dist/daemon/routes/memory.js.map +1 -0
  94. package/dist/daemon/routes/reflection.d.ts +10 -0
  95. package/dist/daemon/routes/reflection.d.ts.map +1 -0
  96. package/dist/daemon/routes/reflection.js +397 -0
  97. package/dist/daemon/routes/reflection.js.map +1 -0
  98. package/dist/daemon/routes/search.d.ts +5 -0
  99. package/dist/daemon/routes/search.d.ts.map +1 -0
  100. package/dist/daemon/routes/search.js +93 -0
  101. package/dist/daemon/routes/search.js.map +1 -0
  102. package/dist/daemon/routes/sessions.d.ts +3 -0
  103. package/dist/daemon/routes/sessions.d.ts.map +1 -0
  104. package/dist/daemon/routes/sessions.js +160 -0
  105. package/dist/daemon/routes/sessions.js.map +1 -0
  106. package/dist/daemon/routes/skills.d.ts +3 -0
  107. package/dist/daemon/routes/skills.d.ts.map +1 -0
  108. package/dist/daemon/routes/skills.js +36 -0
  109. package/dist/daemon/routes/skills.js.map +1 -0
  110. package/dist/daemon/routes/status.d.ts +3 -0
  111. package/dist/daemon/routes/status.d.ts.map +1 -0
  112. package/dist/daemon/routes/status.js +47 -0
  113. package/dist/daemon/routes/status.js.map +1 -0
  114. package/dist/daemon/routes/types.d.ts +240 -0
  115. package/dist/daemon/routes/types.d.ts.map +1 -0
  116. package/dist/daemon/routes/types.js +97 -0
  117. package/dist/daemon/routes/types.js.map +1 -0
  118. package/dist/daemon/routes/versioning.d.ts +27 -0
  119. package/dist/daemon/routes/versioning.d.ts.map +1 -0
  120. package/dist/daemon/routes/versioning.js +44 -0
  121. package/dist/daemon/routes/versioning.js.map +1 -0
  122. package/dist/daemon/routes/watcher.d.ts +3 -0
  123. package/dist/daemon/routes/watcher.d.ts.map +1 -0
  124. package/dist/daemon/routes/watcher.js +28 -0
  125. package/dist/daemon/routes/watcher.js.map +1 -0
  126. package/dist/daemon/service.d.ts +5 -23
  127. package/dist/daemon/service.d.ts.map +1 -1
  128. package/dist/daemon/service.js +201 -933
  129. package/dist/daemon/service.js.map +1 -1
  130. package/dist/daemon/session-processor.d.ts +4 -8
  131. package/dist/daemon/session-processor.d.ts.map +1 -1
  132. package/dist/daemon/session-processor.js +39 -38
  133. package/dist/daemon/session-processor.js.map +1 -1
  134. package/dist/lib/ai-readiness.d.ts.map +1 -1
  135. package/dist/lib/ai-readiness.js +33 -8
  136. package/dist/lib/ai-readiness.js.map +1 -1
  137. package/dist/lib/analyze-state.d.ts.map +1 -1
  138. package/dist/lib/analyze-state.js +25 -3
  139. package/dist/lib/analyze-state.js.map +1 -1
  140. package/dist/lib/auto-memory/consolidation.d.ts +41 -0
  141. package/dist/lib/auto-memory/consolidation.d.ts.map +1 -0
  142. package/dist/lib/auto-memory/consolidation.js +151 -0
  143. package/dist/lib/auto-memory/consolidation.js.map +1 -0
  144. package/dist/lib/bpe.d.ts.map +1 -1
  145. package/dist/lib/bpe.js +9 -10
  146. package/dist/lib/bpe.js.map +1 -1
  147. package/dist/lib/brain-export.d.ts +65 -0
  148. package/dist/lib/brain-export.d.ts.map +1 -0
  149. package/dist/lib/brain-export.js +413 -0
  150. package/dist/lib/brain-export.js.map +1 -0
  151. package/dist/lib/checkpoint.d.ts.map +1 -1
  152. package/dist/lib/checkpoint.js +22 -6
  153. package/dist/lib/checkpoint.js.map +1 -1
  154. package/dist/lib/chunker.d.ts.map +1 -1
  155. package/dist/lib/chunker.js +6 -1
  156. package/dist/lib/chunker.js.map +1 -1
  157. package/dist/lib/claude-ws-transport.d.ts.map +1 -1
  158. package/dist/lib/claude-ws-transport.js +12 -4
  159. package/dist/lib/claude-ws-transport.js.map +1 -1
  160. package/dist/lib/command-safety.d.ts +64 -0
  161. package/dist/lib/command-safety.d.ts.map +1 -0
  162. package/dist/lib/command-safety.js +625 -0
  163. package/dist/lib/command-safety.js.map +1 -0
  164. package/dist/lib/compact-briefing.d.ts.map +1 -1
  165. package/dist/lib/compact-briefing.js +10 -13
  166. package/dist/lib/compact-briefing.js.map +1 -1
  167. package/dist/lib/config-defaults.d.ts.map +1 -1
  168. package/dist/lib/config-defaults.js +3 -0
  169. package/dist/lib/config-defaults.js.map +1 -1
  170. package/dist/lib/config-display.d.ts +4 -0
  171. package/dist/lib/config-display.d.ts.map +1 -1
  172. package/dist/lib/config-display.js +6 -1
  173. package/dist/lib/config-display.js.map +1 -1
  174. package/dist/lib/config-types.d.ts +156 -0
  175. package/dist/lib/config-types.d.ts.map +1 -1
  176. package/dist/lib/config-validation.d.ts.map +1 -1
  177. package/dist/lib/config-validation.js +5 -0
  178. package/dist/lib/config-validation.js.map +1 -1
  179. package/dist/lib/config.d.ts.map +1 -1
  180. package/dist/lib/config.js +92 -9
  181. package/dist/lib/config.js.map +1 -1
  182. package/dist/lib/consolidate.d.ts.map +1 -1
  183. package/dist/lib/consolidate.js +66 -47
  184. package/dist/lib/consolidate.js.map +1 -1
  185. package/dist/lib/content-sanitizer.d.ts +29 -0
  186. package/dist/lib/content-sanitizer.d.ts.map +1 -0
  187. package/dist/lib/content-sanitizer.js +72 -0
  188. package/dist/lib/content-sanitizer.js.map +1 -0
  189. package/dist/lib/cross-repo.d.ts +44 -0
  190. package/dist/lib/cross-repo.d.ts.map +1 -0
  191. package/dist/lib/cross-repo.js +108 -0
  192. package/dist/lib/cross-repo.js.map +1 -0
  193. package/dist/lib/daemon-port.d.ts +12 -0
  194. package/dist/lib/daemon-port.d.ts.map +1 -0
  195. package/dist/lib/daemon-port.js +20 -0
  196. package/dist/lib/daemon-port.js.map +1 -0
  197. package/dist/lib/db/auto-memory.d.ts +40 -0
  198. package/dist/lib/db/auto-memory.d.ts.map +1 -0
  199. package/dist/lib/db/auto-memory.js +74 -0
  200. package/dist/lib/db/auto-memory.js.map +1 -0
  201. package/dist/lib/db/bm25-indexes.d.ts.map +1 -1
  202. package/dist/lib/db/bm25-indexes.js +16 -4
  203. package/dist/lib/db/bm25-indexes.js.map +1 -1
  204. package/dist/lib/db/documents.d.ts.map +1 -1
  205. package/dist/lib/db/documents.js +4 -1
  206. package/dist/lib/db/documents.js.map +1 -1
  207. package/dist/lib/db/global-memories.d.ts +2 -10
  208. package/dist/lib/db/global-memories.d.ts.map +1 -1
  209. package/dist/lib/db/global-memories.js +13 -6
  210. package/dist/lib/db/global-memories.js.map +1 -1
  211. package/dist/lib/db/graph.d.ts +5 -1
  212. package/dist/lib/db/graph.d.ts.map +1 -1
  213. package/dist/lib/db/graph.js +38 -8
  214. package/dist/lib/db/graph.js.map +1 -1
  215. package/dist/lib/db/hybrid-search.d.ts +4 -2
  216. package/dist/lib/db/hybrid-search.d.ts.map +1 -1
  217. package/dist/lib/db/hybrid-search.js +29 -11
  218. package/dist/lib/db/hybrid-search.js.map +1 -1
  219. package/dist/lib/db/index.d.ts +6 -1
  220. package/dist/lib/db/index.d.ts.map +1 -1
  221. package/dist/lib/db/index.js +5 -1
  222. package/dist/lib/db/index.js.map +1 -1
  223. package/dist/lib/db/memories.d.ts +19 -14
  224. package/dist/lib/db/memories.d.ts.map +1 -1
  225. package/dist/lib/db/memories.js +100 -37
  226. package/dist/lib/db/memories.js.map +1 -1
  227. package/dist/lib/db/parse-helpers.d.ts +14 -0
  228. package/dist/lib/db/parse-helpers.d.ts.map +1 -0
  229. package/dist/lib/db/parse-helpers.js +59 -0
  230. package/dist/lib/db/parse-helpers.js.map +1 -0
  231. package/dist/lib/db/recall-events.d.ts +49 -0
  232. package/dist/lib/db/recall-events.d.ts.map +1 -0
  233. package/dist/lib/db/recall-events.js +196 -0
  234. package/dist/lib/db/recall-events.js.map +1 -0
  235. package/dist/lib/db/retention.d.ts +4 -3
  236. package/dist/lib/db/retention.d.ts.map +1 -1
  237. package/dist/lib/db/retention.js +12 -1
  238. package/dist/lib/db/retention.js.map +1 -1
  239. package/dist/lib/db/schema.d.ts +2 -0
  240. package/dist/lib/db/schema.d.ts.map +1 -1
  241. package/dist/lib/db/schema.js +140 -80
  242. package/dist/lib/db/schema.js.map +1 -1
  243. package/dist/lib/db/skills.d.ts.map +1 -1
  244. package/dist/lib/db/skills.js +10 -6
  245. package/dist/lib/db/skills.js.map +1 -1
  246. package/dist/lib/diff-brain.d.ts +24 -0
  247. package/dist/lib/diff-brain.d.ts.map +1 -0
  248. package/dist/lib/diff-brain.js +114 -0
  249. package/dist/lib/diff-brain.js.map +1 -0
  250. package/dist/lib/diff-parser.d.ts +74 -0
  251. package/dist/lib/diff-parser.d.ts.map +1 -0
  252. package/dist/lib/diff-parser.js +200 -0
  253. package/dist/lib/diff-parser.js.map +1 -0
  254. package/dist/lib/embedding-pool.d.ts.map +1 -1
  255. package/dist/lib/embedding-pool.js +5 -1
  256. package/dist/lib/embedding-pool.js.map +1 -1
  257. package/dist/lib/embeddings.d.ts +12 -0
  258. package/dist/lib/embeddings.d.ts.map +1 -1
  259. package/dist/lib/embeddings.js +77 -19
  260. package/dist/lib/embeddings.js.map +1 -1
  261. package/dist/lib/errors.d.ts +2 -0
  262. package/dist/lib/errors.d.ts.map +1 -1
  263. package/dist/lib/errors.js +4 -0
  264. package/dist/lib/errors.js.map +1 -1
  265. package/dist/lib/fault-logger.d.ts.map +1 -1
  266. package/dist/lib/fault-logger.js +22 -7
  267. package/dist/lib/fault-logger.js.map +1 -1
  268. package/dist/lib/git/co-change.d.ts +39 -0
  269. package/dist/lib/git/co-change.d.ts.map +1 -0
  270. package/dist/lib/git/co-change.js +139 -0
  271. package/dist/lib/git/co-change.js.map +1 -0
  272. package/dist/lib/graph/bridge-edges.d.ts +93 -0
  273. package/dist/lib/graph/bridge-edges.d.ts.map +1 -0
  274. package/dist/lib/graph/bridge-edges.js +276 -0
  275. package/dist/lib/graph/bridge-edges.js.map +1 -0
  276. package/dist/lib/graph/centrality.d.ts +11 -0
  277. package/dist/lib/graph/centrality.d.ts.map +1 -1
  278. package/dist/lib/graph/centrality.js +51 -3
  279. package/dist/lib/graph/centrality.js.map +1 -1
  280. package/dist/lib/graph/cleanup.d.ts.map +1 -1
  281. package/dist/lib/graph/cleanup.js +2 -1
  282. package/dist/lib/graph/cleanup.js.map +1 -1
  283. package/dist/lib/graph/community-detection.d.ts +17 -2
  284. package/dist/lib/graph/community-detection.d.ts.map +1 -1
  285. package/dist/lib/graph/community-detection.js +147 -48
  286. package/dist/lib/graph/community-detection.js.map +1 -1
  287. package/dist/lib/graph/community-summaries.d.ts +26 -0
  288. package/dist/lib/graph/community-summaries.d.ts.map +1 -0
  289. package/dist/lib/graph/community-summaries.js +130 -0
  290. package/dist/lib/graph/community-summaries.js.map +1 -0
  291. package/dist/lib/graph/contextual-proximity.d.ts.map +1 -1
  292. package/dist/lib/graph/contextual-proximity.js +11 -4
  293. package/dist/lib/graph/contextual-proximity.js.map +1 -1
  294. package/dist/lib/graph/graphology-bridge.d.ts +101 -0
  295. package/dist/lib/graph/graphology-bridge.d.ts.map +1 -0
  296. package/dist/lib/graph/graphology-bridge.js +488 -0
  297. package/dist/lib/graph/graphology-bridge.js.map +1 -0
  298. package/dist/lib/graph/llm-relations.d.ts.map +1 -1
  299. package/dist/lib/graph/llm-relations.js +27 -5
  300. package/dist/lib/graph/llm-relations.js.map +1 -1
  301. package/dist/lib/graph-export.d.ts.map +1 -1
  302. package/dist/lib/graph-export.js +2 -2
  303. package/dist/lib/graph-export.js.map +1 -1
  304. package/dist/lib/graph-scheduler.d.ts +0 -5
  305. package/dist/lib/graph-scheduler.d.ts.map +1 -1
  306. package/dist/lib/graph-scheduler.js +5 -1
  307. package/dist/lib/graph-scheduler.js.map +1 -1
  308. package/dist/lib/guardrails.d.ts +50 -0
  309. package/dist/lib/guardrails.d.ts.map +1 -0
  310. package/dist/lib/guardrails.js +502 -0
  311. package/dist/lib/guardrails.js.map +1 -0
  312. package/dist/lib/hook-rules.d.ts +1 -1
  313. package/dist/lib/hook-rules.d.ts.map +1 -1
  314. package/dist/lib/hook-rules.js +8 -2
  315. package/dist/lib/hook-rules.js.map +1 -1
  316. package/dist/lib/ifc/file-labels.d.ts +35 -0
  317. package/dist/lib/ifc/file-labels.d.ts.map +1 -0
  318. package/dist/lib/ifc/file-labels.js +208 -0
  319. package/dist/lib/ifc/file-labels.js.map +1 -0
  320. package/dist/lib/ifc/label.d.ts +38 -0
  321. package/dist/lib/ifc/label.d.ts.map +1 -0
  322. package/dist/lib/ifc/label.js +80 -0
  323. package/dist/lib/ifc/label.js.map +1 -0
  324. package/dist/lib/ifc/session-ifc.d.ts +92 -0
  325. package/dist/lib/ifc/session-ifc.d.ts.map +1 -0
  326. package/dist/lib/ifc/session-ifc.js +222 -0
  327. package/dist/lib/ifc/session-ifc.js.map +1 -0
  328. package/dist/lib/indexer.js +2 -2
  329. package/dist/lib/indexer.js.map +1 -1
  330. package/dist/lib/injection-detector.d.ts +83 -0
  331. package/dist/lib/injection-detector.d.ts.map +1 -0
  332. package/dist/lib/injection-detector.js +586 -0
  333. package/dist/lib/injection-detector.js.map +1 -0
  334. package/dist/lib/injection-semantic.d.ts +31 -0
  335. package/dist/lib/injection-semantic.d.ts.map +1 -0
  336. package/dist/lib/injection-semantic.js +230 -0
  337. package/dist/lib/injection-semantic.js.map +1 -0
  338. package/dist/lib/llm.d.ts.map +1 -1
  339. package/dist/lib/llm.js +19 -4
  340. package/dist/lib/llm.js.map +1 -1
  341. package/dist/lib/lock.d.ts.map +1 -1
  342. package/dist/lib/lock.js +24 -3
  343. package/dist/lib/lock.js.map +1 -1
  344. package/dist/lib/md-fetch.d.ts.map +1 -1
  345. package/dist/lib/md-fetch.js +9 -2
  346. package/dist/lib/md-fetch.js.map +1 -1
  347. package/dist/lib/observability.d.ts +75 -0
  348. package/dist/lib/observability.d.ts.map +1 -0
  349. package/dist/lib/observability.js +201 -0
  350. package/dist/lib/observability.js.map +1 -0
  351. package/dist/lib/ort-session.d.ts +26 -0
  352. package/dist/lib/ort-session.d.ts.map +1 -1
  353. package/dist/lib/ort-session.js +107 -3
  354. package/dist/lib/ort-session.js.map +1 -1
  355. package/dist/lib/prd/codebase-context.d.ts.map +1 -1
  356. package/dist/lib/prd/codebase-context.js +9 -2
  357. package/dist/lib/prd/codebase-context.js.map +1 -1
  358. package/dist/lib/prd/context.d.ts.map +1 -1
  359. package/dist/lib/prd/context.js +11 -3
  360. package/dist/lib/prd/context.js.map +1 -1
  361. package/dist/lib/prd/export.js +1 -1
  362. package/dist/lib/prd/export.js.map +1 -1
  363. package/dist/lib/prd/generate.d.ts.map +1 -1
  364. package/dist/lib/prd/generate.js +17 -4
  365. package/dist/lib/prd/generate.js.map +1 -1
  366. package/dist/lib/prd/parse.d.ts.map +1 -1
  367. package/dist/lib/prd/parse.js +6 -1
  368. package/dist/lib/prd/parse.js.map +1 -1
  369. package/dist/lib/prd/runner.d.ts +1 -2
  370. package/dist/lib/prd/runner.d.ts.map +1 -1
  371. package/dist/lib/prd/runner.js +43 -32
  372. package/dist/lib/prd/runner.js.map +1 -1
  373. package/dist/lib/prd/worktree.d.ts +1 -2
  374. package/dist/lib/prd/worktree.d.ts.map +1 -1
  375. package/dist/lib/prd/worktree.js +62 -70
  376. package/dist/lib/prd/worktree.js.map +1 -1
  377. package/dist/lib/precompute-context.d.ts.map +1 -1
  378. package/dist/lib/precompute-context.js +15 -34
  379. package/dist/lib/precompute-context.js.map +1 -1
  380. package/dist/lib/pricing.d.ts.map +1 -1
  381. package/dist/lib/pricing.js +5 -1
  382. package/dist/lib/pricing.js.map +1 -1
  383. package/dist/lib/process-registry.js +3 -3
  384. package/dist/lib/process-registry.js.map +1 -1
  385. package/dist/lib/public-api.d.ts +41 -1
  386. package/dist/lib/public-api.d.ts.map +1 -1
  387. package/dist/lib/public-api.js +38 -0
  388. package/dist/lib/public-api.js.map +1 -1
  389. package/dist/lib/quality.d.ts.map +1 -1
  390. package/dist/lib/quality.js +15 -6
  391. package/dist/lib/quality.js.map +1 -1
  392. package/dist/lib/query-expansion.d.ts +32 -0
  393. package/dist/lib/query-expansion.d.ts.map +1 -1
  394. package/dist/lib/query-expansion.js +62 -1
  395. package/dist/lib/query-expansion.js.map +1 -1
  396. package/dist/lib/reference-embeddings.d.ts.map +1 -1
  397. package/dist/lib/reference-embeddings.js +17 -4
  398. package/dist/lib/reference-embeddings.js.map +1 -1
  399. package/dist/lib/reflection-synthesizer.d.ts.map +1 -1
  400. package/dist/lib/reflection-synthesizer.js +7 -1
  401. package/dist/lib/reflection-synthesizer.js.map +1 -1
  402. package/dist/lib/reranker.d.ts +41 -0
  403. package/dist/lib/reranker.d.ts.map +1 -0
  404. package/dist/lib/reranker.js +294 -0
  405. package/dist/lib/reranker.js.map +1 -0
  406. package/dist/lib/retrieval-feedback.d.ts +100 -0
  407. package/dist/lib/retrieval-feedback.d.ts.map +1 -0
  408. package/dist/lib/retrieval-feedback.js +174 -0
  409. package/dist/lib/retrieval-feedback.js.map +1 -0
  410. package/dist/lib/review/context-pack.d.ts +58 -0
  411. package/dist/lib/review/context-pack.d.ts.map +1 -0
  412. package/dist/lib/review/context-pack.js +300 -0
  413. package/dist/lib/review/context-pack.js.map +1 -0
  414. package/dist/lib/search/hierarchical-summaries.d.ts +65 -0
  415. package/dist/lib/search/hierarchical-summaries.d.ts.map +1 -0
  416. package/dist/lib/search/hierarchical-summaries.js +423 -0
  417. package/dist/lib/search/hierarchical-summaries.js.map +1 -0
  418. package/dist/lib/search/hyde.d.ts +27 -0
  419. package/dist/lib/search/hyde.d.ts.map +1 -0
  420. package/dist/lib/search/hyde.js +141 -0
  421. package/dist/lib/search/hyde.js.map +1 -0
  422. package/dist/lib/search/late-chunking.d.ts +53 -0
  423. package/dist/lib/search/late-chunking.d.ts.map +1 -0
  424. package/dist/lib/search/late-chunking.js +230 -0
  425. package/dist/lib/search/late-chunking.js.map +1 -0
  426. package/dist/lib/search/ppr-retrieval.d.ts +49 -0
  427. package/dist/lib/search/ppr-retrieval.d.ts.map +1 -0
  428. package/dist/lib/search/ppr-retrieval.js +135 -0
  429. package/dist/lib/search/ppr-retrieval.js.map +1 -0
  430. package/dist/lib/search/repo-map.d.ts +43 -0
  431. package/dist/lib/search/repo-map.d.ts.map +1 -0
  432. package/dist/lib/search/repo-map.js +165 -0
  433. package/dist/lib/search/repo-map.js.map +1 -0
  434. package/dist/lib/session-analyzer.d.ts +90 -0
  435. package/dist/lib/session-analyzer.d.ts.map +1 -0
  436. package/dist/lib/session-analyzer.js +467 -0
  437. package/dist/lib/session-analyzer.js.map +1 -0
  438. package/dist/lib/session-observations.d.ts.map +1 -1
  439. package/dist/lib/session-observations.js +13 -3
  440. package/dist/lib/session-observations.js.map +1 -1
  441. package/dist/lib/session-summary.d.ts.map +1 -1
  442. package/dist/lib/session-summary.js +57 -50
  443. package/dist/lib/session-summary.js.map +1 -1
  444. package/dist/lib/session-surgeon.d.ts +53 -0
  445. package/dist/lib/session-surgeon.d.ts.map +1 -0
  446. package/dist/lib/session-surgeon.js +501 -0
  447. package/dist/lib/session-surgeon.js.map +1 -0
  448. package/dist/lib/similarity-utils.d.ts +26 -0
  449. package/dist/lib/similarity-utils.d.ts.map +1 -0
  450. package/dist/lib/similarity-utils.js +66 -0
  451. package/dist/lib/similarity-utils.js.map +1 -0
  452. package/dist/lib/skills.d.ts.map +1 -1
  453. package/dist/lib/skills.js +11 -11
  454. package/dist/lib/skills.js.map +1 -1
  455. package/dist/lib/storage/backends/interface.d.ts +13 -3
  456. package/dist/lib/storage/backends/interface.d.ts.map +1 -1
  457. package/dist/lib/storage/backends/postgresql.d.ts +52 -3
  458. package/dist/lib/storage/backends/postgresql.d.ts.map +1 -1
  459. package/dist/lib/storage/backends/postgresql.js +694 -49
  460. package/dist/lib/storage/backends/postgresql.js.map +1 -1
  461. package/dist/lib/storage/benchmark.js +2 -2
  462. package/dist/lib/storage/benchmark.js.map +1 -1
  463. package/dist/lib/storage/dispatcher/base.d.ts +114 -0
  464. package/dist/lib/storage/dispatcher/base.d.ts.map +1 -0
  465. package/dist/lib/storage/dispatcher/base.js +160 -0
  466. package/dist/lib/storage/dispatcher/base.js.map +1 -0
  467. package/dist/lib/storage/dispatcher/documents.d.ts +25 -0
  468. package/dist/lib/storage/dispatcher/documents.d.ts.map +1 -0
  469. package/dist/lib/storage/dispatcher/documents.js +194 -0
  470. package/dist/lib/storage/dispatcher/documents.js.map +1 -0
  471. package/dist/lib/storage/dispatcher/embeddings.d.ts +34 -0
  472. package/dist/lib/storage/dispatcher/embeddings.d.ts.map +1 -0
  473. package/dist/lib/storage/dispatcher/embeddings.js +144 -0
  474. package/dist/lib/storage/dispatcher/embeddings.js.map +1 -0
  475. package/dist/lib/storage/dispatcher/export-import.d.ts +139 -0
  476. package/dist/lib/storage/dispatcher/export-import.d.ts.map +1 -0
  477. package/dist/lib/storage/dispatcher/export-import.js +191 -0
  478. package/dist/lib/storage/dispatcher/export-import.js.map +1 -0
  479. package/dist/lib/storage/dispatcher/file-hashes.d.ts +13 -0
  480. package/dist/lib/storage/dispatcher/file-hashes.d.ts.map +1 -0
  481. package/dist/lib/storage/dispatcher/file-hashes.js +36 -0
  482. package/dist/lib/storage/dispatcher/file-hashes.js.map +1 -0
  483. package/dist/lib/storage/dispatcher/global-memories.d.ts +28 -0
  484. package/dist/lib/storage/dispatcher/global-memories.d.ts.map +1 -0
  485. package/dist/lib/storage/dispatcher/global-memories.js +151 -0
  486. package/dist/lib/storage/dispatcher/global-memories.js.map +1 -0
  487. package/dist/lib/storage/dispatcher/graph.d.ts +32 -0
  488. package/dist/lib/storage/dispatcher/graph.d.ts.map +1 -0
  489. package/dist/lib/storage/dispatcher/graph.js +146 -0
  490. package/dist/lib/storage/dispatcher/graph.js.map +1 -0
  491. package/dist/lib/storage/dispatcher/index.d.ts +34 -0
  492. package/dist/lib/storage/dispatcher/index.d.ts.map +1 -0
  493. package/dist/lib/storage/dispatcher/index.js +139 -0
  494. package/dist/lib/storage/dispatcher/index.js.map +1 -0
  495. package/dist/lib/storage/dispatcher/memories.d.ts +65 -0
  496. package/dist/lib/storage/dispatcher/memories.d.ts.map +1 -0
  497. package/dist/lib/storage/dispatcher/memories.js +466 -0
  498. package/dist/lib/storage/dispatcher/memories.js.map +1 -0
  499. package/dist/lib/storage/dispatcher/mixin-helper.d.ts +6 -0
  500. package/dist/lib/storage/dispatcher/mixin-helper.d.ts.map +1 -0
  501. package/dist/lib/storage/dispatcher/mixin-helper.js +10 -0
  502. package/dist/lib/storage/dispatcher/mixin-helper.js.map +1 -0
  503. package/dist/lib/storage/dispatcher/retention.d.ts +20 -0
  504. package/dist/lib/storage/dispatcher/retention.d.ts.map +1 -0
  505. package/dist/lib/storage/dispatcher/retention.js +123 -0
  506. package/dist/lib/storage/dispatcher/retention.js.map +1 -0
  507. package/dist/lib/storage/dispatcher/search.d.ts +34 -0
  508. package/dist/lib/storage/dispatcher/search.d.ts.map +1 -0
  509. package/dist/lib/storage/dispatcher/search.js +222 -0
  510. package/dist/lib/storage/dispatcher/search.js.map +1 -0
  511. package/dist/lib/storage/dispatcher/skills.d.ts +53 -0
  512. package/dist/lib/storage/dispatcher/skills.d.ts.map +1 -0
  513. package/dist/lib/storage/dispatcher/skills.js +98 -0
  514. package/dist/lib/storage/dispatcher/skills.js.map +1 -0
  515. package/dist/lib/storage/dispatcher/token-stats.d.ts +23 -0
  516. package/dist/lib/storage/dispatcher/token-stats.d.ts.map +1 -0
  517. package/dist/lib/storage/dispatcher/token-stats.js +92 -0
  518. package/dist/lib/storage/dispatcher/token-stats.js.map +1 -0
  519. package/dist/lib/storage/dispatcher/web-search.d.ts +10 -0
  520. package/dist/lib/storage/dispatcher/web-search.d.ts.map +1 -0
  521. package/dist/lib/storage/dispatcher/web-search.js +39 -0
  522. package/dist/lib/storage/dispatcher/web-search.js.map +1 -0
  523. package/dist/lib/storage/dispatcher-export.d.ts.map +1 -1
  524. package/dist/lib/storage/dispatcher-export.js +48 -39
  525. package/dist/lib/storage/dispatcher-export.js.map +1 -1
  526. package/dist/lib/storage/dispatcher.d.ts +1 -468
  527. package/dist/lib/storage/dispatcher.d.ts.map +1 -1
  528. package/dist/lib/storage/dispatcher.js +1 -1931
  529. package/dist/lib/storage/dispatcher.js.map +1 -1
  530. package/dist/lib/storage/index.d.ts +20 -5
  531. package/dist/lib/storage/index.d.ts.map +1 -1
  532. package/dist/lib/storage/index.js +36 -7
  533. package/dist/lib/storage/index.js.map +1 -1
  534. package/dist/lib/storage/migration/export-import.d.ts.map +1 -1
  535. package/dist/lib/storage/migration/export-import.js +9 -2
  536. package/dist/lib/storage/migration/export-import.js.map +1 -1
  537. package/dist/lib/storage/types.d.ts +152 -10
  538. package/dist/lib/storage/types.d.ts.map +1 -1
  539. package/dist/lib/storage/types.js +13 -0
  540. package/dist/lib/storage/types.js.map +1 -1
  541. package/dist/lib/storage/vector/interface.d.ts +4 -0
  542. package/dist/lib/storage/vector/interface.d.ts.map +1 -1
  543. package/dist/lib/storage/vector/qdrant.d.ts +13 -2
  544. package/dist/lib/storage/vector/qdrant.d.ts.map +1 -1
  545. package/dist/lib/storage/vector/qdrant.js +147 -61
  546. package/dist/lib/storage/vector/qdrant.js.map +1 -1
  547. package/dist/lib/token-budget.d.ts.map +1 -1
  548. package/dist/lib/token-budget.js +9 -2
  549. package/dist/lib/token-budget.js.map +1 -1
  550. package/dist/lib/transcript-utils.d.ts +60 -0
  551. package/dist/lib/transcript-utils.d.ts.map +1 -0
  552. package/dist/lib/transcript-utils.js +69 -0
  553. package/dist/lib/transcript-utils.js.map +1 -0
  554. package/dist/lib/tree-sitter/extractor.d.ts +1 -1
  555. package/dist/lib/tree-sitter/extractor.d.ts.map +1 -1
  556. package/dist/lib/tree-sitter/extractor.js +34 -9
  557. package/dist/lib/tree-sitter/extractor.js.map +1 -1
  558. package/dist/lib/tree-sitter/parser.d.ts.map +1 -1
  559. package/dist/lib/tree-sitter/parser.js +45 -11
  560. package/dist/lib/tree-sitter/parser.js.map +1 -1
  561. package/dist/lib/tree-sitter/public.d.ts +12 -0
  562. package/dist/lib/tree-sitter/public.d.ts.map +1 -1
  563. package/dist/lib/tree-sitter/public.js +33 -1
  564. package/dist/lib/tree-sitter/public.js.map +1 -1
  565. package/dist/lib/tree-sitter/queries.d.ts.map +1 -1
  566. package/dist/lib/tree-sitter/queries.js +8 -0
  567. package/dist/lib/tree-sitter/queries.js.map +1 -1
  568. package/dist/lib/version-check.d.ts +29 -0
  569. package/dist/lib/version-check.d.ts.map +1 -0
  570. package/dist/lib/version-check.js +187 -0
  571. package/dist/lib/version-check.js.map +1 -0
  572. package/dist/lib/working-memory-pipeline.d.ts.map +1 -1
  573. package/dist/lib/working-memory-pipeline.js +12 -3
  574. package/dist/lib/working-memory-pipeline.js.map +1 -1
  575. package/dist/lib/worktree-detect.d.ts +43 -0
  576. package/dist/lib/worktree-detect.d.ts.map +1 -0
  577. package/dist/lib/worktree-detect.js +154 -0
  578. package/dist/lib/worktree-detect.js.map +1 -0
  579. package/dist/lsp/client.d.ts +96 -0
  580. package/dist/lsp/client.d.ts.map +1 -0
  581. package/dist/lsp/client.js +435 -0
  582. package/dist/lsp/client.js.map +1 -0
  583. package/dist/lsp/installer.d.ts +39 -0
  584. package/dist/lsp/installer.d.ts.map +1 -0
  585. package/dist/lsp/installer.js +275 -0
  586. package/dist/lsp/installer.js.map +1 -0
  587. package/dist/lsp/manager.d.ts +62 -0
  588. package/dist/lsp/manager.d.ts.map +1 -0
  589. package/dist/lsp/manager.js +234 -0
  590. package/dist/lsp/manager.js.map +1 -0
  591. package/dist/lsp/servers.d.ts +52 -0
  592. package/dist/lsp/servers.d.ts.map +1 -0
  593. package/dist/lsp/servers.js +162 -0
  594. package/dist/lsp/servers.js.map +1 -0
  595. package/dist/mcp/helpers.d.ts.map +1 -1
  596. package/dist/mcp/helpers.js +8 -2
  597. package/dist/mcp/helpers.js.map +1 -1
  598. package/dist/mcp/profile.js +1 -1
  599. package/dist/mcp/server.d.ts +3 -2
  600. package/dist/mcp/server.d.ts.map +1 -1
  601. package/dist/mcp/server.js +19 -7
  602. package/dist/mcp/server.js.map +1 -1
  603. package/dist/mcp/tools/config.d.ts.map +1 -1
  604. package/dist/mcp/tools/config.js +28 -118
  605. package/dist/mcp/tools/config.js.map +1 -1
  606. package/dist/mcp/tools/dead-end.d.ts.map +1 -1
  607. package/dist/mcp/tools/dead-end.js +4 -3
  608. package/dist/mcp/tools/dead-end.js.map +1 -1
  609. package/dist/mcp/tools/debug.d.ts.map +1 -1
  610. package/dist/mcp/tools/debug.js +27 -112
  611. package/dist/mcp/tools/debug.js.map +1 -1
  612. package/dist/mcp/tools/graph.d.ts.map +1 -1
  613. package/dist/mcp/tools/graph.js +164 -176
  614. package/dist/mcp/tools/graph.js.map +1 -1
  615. package/dist/mcp/tools/indexing.d.ts +1 -1
  616. package/dist/mcp/tools/indexing.d.ts.map +1 -1
  617. package/dist/mcp/tools/indexing.js +63 -164
  618. package/dist/mcp/tools/indexing.js.map +1 -1
  619. package/dist/mcp/tools/memory/forget.d.ts +3 -0
  620. package/dist/mcp/tools/memory/forget.d.ts.map +1 -0
  621. package/dist/mcp/tools/memory/forget.js +175 -0
  622. package/dist/mcp/tools/memory/forget.js.map +1 -0
  623. package/dist/mcp/tools/memory/memory-helpers.d.ts +45 -0
  624. package/dist/mcp/tools/memory/memory-helpers.d.ts.map +1 -0
  625. package/dist/mcp/tools/memory/memory-helpers.js +291 -0
  626. package/dist/mcp/tools/memory/memory-helpers.js.map +1 -0
  627. package/dist/mcp/tools/memory/recall.d.ts +3 -0
  628. package/dist/mcp/tools/memory/recall.d.ts.map +1 -0
  629. package/dist/mcp/tools/memory/recall.js +495 -0
  630. package/dist/mcp/tools/memory/recall.js.map +1 -0
  631. package/dist/mcp/tools/memory/remember.d.ts +3 -0
  632. package/dist/mcp/tools/memory/remember.d.ts.map +1 -0
  633. package/dist/mcp/tools/memory/remember.js +256 -0
  634. package/dist/mcp/tools/memory/remember.js.map +1 -0
  635. package/dist/mcp/tools/memory/temporal-query.d.ts +8 -0
  636. package/dist/mcp/tools/memory/temporal-query.d.ts.map +1 -0
  637. package/dist/mcp/tools/memory/temporal-query.js +68 -0
  638. package/dist/mcp/tools/memory/temporal-query.js.map +1 -0
  639. package/dist/mcp/tools/memory.d.ts +0 -11
  640. package/dist/mcp/tools/memory.d.ts.map +1 -1
  641. package/dist/mcp/tools/memory.js +6 -1228
  642. package/dist/mcp/tools/memory.js.map +1 -1
  643. package/dist/mcp/tools/prd.d.ts.map +1 -1
  644. package/dist/mcp/tools/prd.js +19 -70
  645. package/dist/mcp/tools/prd.js.map +1 -1
  646. package/dist/mcp/tools/review.d.ts +8 -0
  647. package/dist/mcp/tools/review.d.ts.map +1 -0
  648. package/dist/mcp/tools/review.js +133 -0
  649. package/dist/mcp/tools/review.js.map +1 -0
  650. package/dist/mcp/tools/search.d.ts.map +1 -1
  651. package/dist/mcp/tools/search.js +79 -8
  652. package/dist/mcp/tools/search.js.map +1 -1
  653. package/dist/mcp/tools/status.d.ts.map +1 -1
  654. package/dist/mcp/tools/status.js +50 -75
  655. package/dist/mcp/tools/status.js.map +1 -1
  656. package/dist/mcp/tools/web-fetch.d.ts.map +1 -1
  657. package/dist/mcp/tools/web-fetch.js +5 -1
  658. package/dist/mcp/tools/web-fetch.js.map +1 -1
  659. package/dist/mcp/tools/web-search.d.ts.map +1 -1
  660. package/dist/mcp/tools/web-search.js +25 -103
  661. package/dist/mcp/tools/web-search.js.map +1 -1
  662. package/dist/prompts/guardrails.d.ts +14 -0
  663. package/dist/prompts/guardrails.d.ts.map +1 -0
  664. package/dist/prompts/guardrails.js +115 -0
  665. package/dist/prompts/guardrails.js.map +1 -0
  666. package/dist/prompts/index.d.ts +2 -1
  667. package/dist/prompts/index.d.ts.map +1 -1
  668. package/dist/prompts/index.js +3 -1
  669. package/dist/prompts/index.js.map +1 -1
  670. package/dist/prompts/prd.d.ts +0 -2
  671. package/dist/prompts/prd.d.ts.map +1 -1
  672. package/dist/prompts/prd.js +0 -2
  673. package/dist/prompts/prd.js.map +1 -1
  674. package/hooks/core/__tests__/adapter.test.cjs +340 -0
  675. package/hooks/core/adapter.cjs +463 -0
  676. package/hooks/core/config.cjs +83 -0
  677. package/hooks/core/daemon-boot.cjs +140 -0
  678. package/hooks/core/log.cjs +41 -0
  679. package/hooks/core/worktree.cjs +119 -0
  680. package/hooks/succ-post-tool.cjs +198 -134
  681. package/hooks/succ-pre-compact.cjs +262 -0
  682. package/hooks/succ-pre-tool.cjs +526 -182
  683. package/hooks/succ-session-end.cjs +40 -64
  684. package/hooks/succ-session-start.cjs +528 -427
  685. package/hooks/succ-stop-reflection.cjs +36 -62
  686. package/hooks/succ-user-prompt.cjs +137 -180
  687. package/package.json +17 -6
@@ -0,0 +1,294 @@
1
+ /**
2
+ * Cross-encoder reranker for search result post-processing.
3
+ *
4
+ * Uses an ONNX cross-encoder model (ms-marco-MiniLM-L6-v2) to score
5
+ * (query, document) pairs for relevance. Applied after hybrid search
6
+ * (BM25 + vector + RRF) to improve precision.
7
+ *
8
+ * Architecture: singleton session, lazy-loaded on first use, auto-disposed on cleanup.
9
+ */
10
+ import * as ort from 'onnxruntime-node';
11
+ import { resolveModelPath } from './ort-session.js';
12
+ import { detectExecutionProvider } from './ort-provider.js';
13
+ import { getConfig } from './config.js';
14
+ import { logInfo, logWarn } from './fault-logger.js';
15
+ /** Default cross-encoder model — small, fast, good quality */
16
+ const DEFAULT_RERANKER_MODEL = 'cross-encoder/ms-marco-MiniLM-L6-v2';
17
+ /** Max sequence length for cross-encoder input (query + doc tokens) */
18
+ const MAX_SEQ_LENGTH = 512;
19
+ /** Batch size for cross-encoder inference (limits memory usage) */
20
+ const RERANKER_BATCH_SIZE = 16;
21
+ // Singleton session
22
+ let rerankerSession = null;
23
+ let rerankerTokenizer = null;
24
+ let rerankerInitializing = null;
25
+ let rerankerInitFailed = false; // Don't retry after initialization failure
26
+ let rerankerShuttingDown = false; // Guard against races between init and cleanup
27
+ /**
28
+ * Initialize the cross-encoder reranker session.
29
+ * Uses same model resolution + provider detection as embedding pipeline.
30
+ */
31
+ async function initReranker() {
32
+ if (rerankerShuttingDown)
33
+ throw new Error('Reranker is shutting down');
34
+ if (rerankerSession && rerankerTokenizer)
35
+ return;
36
+ if (rerankerInitFailed)
37
+ throw new Error('Reranker initialization previously failed');
38
+ // Prevent concurrent initialization
39
+ if (rerankerInitializing) {
40
+ await rerankerInitializing;
41
+ return;
42
+ }
43
+ rerankerInitializing = (async () => {
44
+ try {
45
+ const config = getConfig();
46
+ const model = config.llm?.reranker?.model ?? DEFAULT_RERANKER_MODEL;
47
+ logInfo('reranker', `Loading cross-encoder model: ${model}`);
48
+ // Load tokenizer
49
+ const { AutoTokenizer } = await import('@huggingface/transformers');
50
+ rerankerTokenizer = await AutoTokenizer.from_pretrained(model);
51
+ // Resolve model path (same cache locations as embeddings)
52
+ const modelPath = await resolveModelPath(model);
53
+ // Create session with GPU fallback
54
+ const providerResult = detectExecutionProvider(process.platform, {
55
+ gpu_enabled: config.gpu_enabled,
56
+ gpu_device: config.gpu_device,
57
+ });
58
+ for (const provider of providerResult.fallbackChain) {
59
+ try {
60
+ rerankerSession = await ort.InferenceSession.create(modelPath, {
61
+ executionProviders: [provider],
62
+ interOpNumThreads: 1,
63
+ intraOpNumThreads: 2,
64
+ });
65
+ logInfo('reranker', `Cross-encoder loaded with provider: ${provider}`);
66
+ return;
67
+ }
68
+ catch (err) {
69
+ logWarn('reranker', `Provider ${provider} failed, trying next`, {
70
+ error: err instanceof Error ? err.message : String(err),
71
+ });
72
+ }
73
+ }
74
+ throw new Error(`Failed to create reranker session with any provider: ${providerResult.fallbackChain.join(', ')}`);
75
+ }
76
+ catch (error) {
77
+ rerankerSession = null;
78
+ rerankerTokenizer = null;
79
+ rerankerInitFailed = true;
80
+ throw error;
81
+ }
82
+ finally {
83
+ rerankerInitializing = null;
84
+ }
85
+ })();
86
+ await rerankerInitializing;
87
+ }
88
+ /**
89
+ * Score a batch of (query, document) pairs using the cross-encoder.
90
+ * Returns relevance scores (higher = more relevant).
91
+ *
92
+ * Cross-encoders output logits; we apply sigmoid to get 0-1 scores.
93
+ */
94
+ async function scorePairs(query, documents) {
95
+ if (documents.length === 0)
96
+ return [];
97
+ await initReranker();
98
+ if (!rerankerSession || !rerankerTokenizer) {
99
+ throw new Error('Reranker not initialized');
100
+ }
101
+ const allScores = [];
102
+ // Process in batches to limit memory usage
103
+ for (let i = 0; i < documents.length; i += RERANKER_BATCH_SIZE) {
104
+ const batch = documents.slice(i, i + RERANKER_BATCH_SIZE);
105
+ const batchScores = await scoreBatch(query, batch);
106
+ allScores.push(...batchScores);
107
+ }
108
+ return allScores;
109
+ }
110
+ /**
111
+ * Score a single batch of (query, document) pairs.
112
+ */
113
+ async function scoreBatch(query, documents) {
114
+ // Cross-encoders take (query, document) as a text pair input.
115
+ // The tokenizer encodes them as [CLS] query [SEP] document [SEP].
116
+ const pairs = documents.map((doc) => [query, doc]);
117
+ // Tokenize all pairs
118
+ const encoded = rerankerTokenizer(pairs, {
119
+ padding: true,
120
+ truncation: true,
121
+ max_length: MAX_SEQ_LENGTH,
122
+ return_tensors: false,
123
+ });
124
+ const batchSize = documents.length;
125
+ const seqLen = encoded.input_ids.dims ? encoded.input_ids.dims[1] : encoded.input_ids[0].length;
126
+ // Flatten for ORT tensors
127
+ const flatInputIds = encoded.input_ids.dims
128
+ ? encoded.input_ids.data
129
+ : new BigInt64Array(encoded.input_ids.flat().map((v) => BigInt(v)));
130
+ const flatAttentionMask = encoded.attention_mask.dims
131
+ ? encoded.attention_mask.data
132
+ : new BigInt64Array(encoded.attention_mask.flat().map((v) => BigInt(v)));
133
+ const inputIdsTensor = new ort.Tensor('int64', toBigInt64(flatInputIds, batchSize * seqLen), [
134
+ batchSize,
135
+ seqLen,
136
+ ]);
137
+ const attentionMaskTensor = new ort.Tensor('int64', toBigInt64(flatAttentionMask, batchSize * seqLen), [batchSize, seqLen]);
138
+ const feeds = {
139
+ input_ids: inputIdsTensor,
140
+ attention_mask: attentionMaskTensor,
141
+ };
142
+ // Some models need token_type_ids (0 for query, 1 for document)
143
+ if (rerankerSession.inputNames.includes('token_type_ids')) {
144
+ let tokenTypeData;
145
+ if (encoded.token_type_ids) {
146
+ const flatTokenTypes = encoded.token_type_ids.dims
147
+ ? encoded.token_type_ids.data
148
+ : new BigInt64Array(encoded.token_type_ids.flat().map((v) => BigInt(v)));
149
+ tokenTypeData = toBigInt64(flatTokenTypes, batchSize * seqLen);
150
+ }
151
+ else {
152
+ tokenTypeData = new BigInt64Array(batchSize * seqLen);
153
+ }
154
+ feeds.token_type_ids = new ort.Tensor('int64', tokenTypeData, [batchSize, seqLen]);
155
+ }
156
+ // Run inference
157
+ const results = await rerankerSession.run(feeds);
158
+ // Cross-encoder outputs logits (usually shape [batch, 1] or [batch])
159
+ const outputKey = rerankerSession.outputNames[0];
160
+ const output = results[outputKey];
161
+ const logits = output.data;
162
+ // Apply sigmoid to convert logits to 0-1 relevance scores
163
+ const scores = [];
164
+ for (let i = 0; i < batchSize; i++) {
165
+ const logit = logits[i];
166
+ scores.push(sigmoid(logit));
167
+ }
168
+ return scores;
169
+ }
170
+ /**
171
+ * Rerank hybrid search results using cross-encoder scoring.
172
+ *
173
+ * Takes existing search results (from BM25 + vector + RRF) and re-scores
174
+ * them using a cross-encoder model that sees both query and document together.
175
+ *
176
+ * @param query - Original search query
177
+ * @param results - Hybrid search results to rerank
178
+ * @param topK - Number of top results to return (default: results.length)
179
+ * @returns Reranked results with updated similarity scores
180
+ */
181
+ export async function rerank(query, results, topK) {
182
+ if (results.length === 0)
183
+ return [];
184
+ // Normalize topK: must be a positive integer, clamped to results length.
185
+ const safeTopK = topK !== undefined && Number.isFinite(topK) && topK > 0
186
+ ? Math.min(Math.floor(topK), results.length)
187
+ : undefined;
188
+ // Helper: apply topK slice consistently on every return path.
189
+ const applyTopK = (arr) => (safeTopK !== undefined ? arr.slice(0, safeTopK) : arr);
190
+ if (results.length === 1)
191
+ return applyTopK(results);
192
+ const config = getConfig();
193
+ const rerankerConfig = config.llm?.reranker;
194
+ // Check if reranking is enabled
195
+ if (rerankerConfig?.enabled === false) {
196
+ return applyTopK(results);
197
+ }
198
+ // Don't rerank if too few results (overhead not worth it)
199
+ const minResults = rerankerConfig?.min_results ?? 3;
200
+ if (results.length < minResults) {
201
+ return applyTopK(results);
202
+ }
203
+ try {
204
+ // Prepare document texts for scoring
205
+ // Truncate long documents to save compute
206
+ const rawMaxDocChars = rerankerConfig?.max_doc_chars ?? 1000;
207
+ const maxDocChars = Number.isFinite(rawMaxDocChars) && rawMaxDocChars > 0 ? Math.floor(rawMaxDocChars) : 1000;
208
+ const docTexts = results.map((r) => {
209
+ const text = r.content.slice(0, maxDocChars);
210
+ // Include symbol metadata for code results
211
+ if (r.symbol_name) {
212
+ return `${r.symbol_name}${r.signature ? ': ' + r.signature : ''}\n${text}`;
213
+ }
214
+ return text;
215
+ });
216
+ // Score all (query, document) pairs
217
+ const scores = await scorePairs(query, docTexts);
218
+ // Combine with original scores:
219
+ // reranker_weight * cross_encoder_score + (1 - reranker_weight) * original_score
220
+ const rawWeight = rerankerConfig?.weight ?? 0.7;
221
+ const weight = Number.isFinite(rawWeight) ? Math.max(0, Math.min(1, rawWeight)) : 0.7;
222
+ const reranked = results.map((result, i) => ({
223
+ ...result,
224
+ _originalSimilarity: result.similarity,
225
+ similarity: weight * scores[i] + (1 - weight) * result.similarity,
226
+ }));
227
+ // Sort by new combined score
228
+ reranked.sort((a, b) => b.similarity - a.similarity);
229
+ // Return top-K
230
+ return applyTopK(reranked);
231
+ }
232
+ catch (error) {
233
+ // Graceful degradation: return original results if reranker fails
234
+ logWarn('reranker', `Cross-encoder reranking failed, returning original results: ${error instanceof Error ? error.message : String(error)}`);
235
+ return applyTopK(results);
236
+ }
237
+ }
238
+ /**
239
+ * Check if the reranker is available and enabled.
240
+ */
241
+ export function isRerankerEnabled() {
242
+ const config = getConfig();
243
+ return config.llm?.reranker?.enabled !== false;
244
+ }
245
+ /**
246
+ * Cleanup reranker session to free memory.
247
+ *
248
+ * Sets a shutdown guard first, then awaits any in-flight initialization before
249
+ * releasing ONNX resources. This prevents a race where cleanup returns while
250
+ * initReranker() is still allocating the session (which would then leak).
251
+ */
252
+ export async function cleanupReranker() {
253
+ rerankerShuttingDown = true;
254
+ // Wait for any in-flight init to finish before releasing resources.
255
+ if (rerankerInitializing) {
256
+ try {
257
+ await rerankerInitializing;
258
+ }
259
+ catch {
260
+ // Init may have failed — that's fine, we're cleaning up anyway
261
+ logWarn('reranker', 'Reranker init failed during shutdown — continuing cleanup');
262
+ }
263
+ }
264
+ if (rerankerSession) {
265
+ try {
266
+ await rerankerSession.release();
267
+ }
268
+ catch (err) {
269
+ logWarn('reranker', err instanceof Error ? err.message : 'Reranker session release failed');
270
+ }
271
+ rerankerSession = null;
272
+ }
273
+ rerankerTokenizer = null;
274
+ rerankerInitializing = null;
275
+ rerankerInitFailed = false;
276
+ rerankerShuttingDown = false;
277
+ }
278
+ // ============================================================================
279
+ // Utilities
280
+ // ============================================================================
281
+ function sigmoid(x) {
282
+ return 1 / (1 + Math.exp(-x));
283
+ }
284
+ function toBigInt64(data, expectedLength) {
285
+ if (data instanceof BigInt64Array && data.length === expectedLength) {
286
+ return data;
287
+ }
288
+ const arr = new BigInt64Array(expectedLength);
289
+ for (let i = 0; i < expectedLength && i < data.length; i++) {
290
+ arr[i] = typeof data[i] === 'bigint' ? data[i] : BigInt(Number(data[i]));
291
+ }
292
+ return arr;
293
+ }
294
+ //# sourceMappingURL=reranker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reranker.js","sourceRoot":"","sources":["../../src/lib/reranker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Retrieval Feedback Loops — track whether recalled memories were useful.
3
+ *
4
+ * Records recall events and uses historical usefulness to boost/decay
5
+ * memory retrieval scores. Self-improving retrieval over time.
6
+ *
7
+ * Inspired by Cognee's ~90% accuracy from feedback loops.
8
+ */
9
+ export interface RecallEvent {
10
+ id: number;
11
+ memory_id: number;
12
+ query: string;
13
+ was_used: boolean;
14
+ rank_position: number | null;
15
+ similarity_score: number | null;
16
+ created_at: string;
17
+ }
18
+ export interface RecallStats {
19
+ memoryId: number;
20
+ totalRecalls: number;
21
+ timesUsed: number;
22
+ timesIgnored: number;
23
+ useRate: number;
24
+ avgRankWhenUsed: number | null;
25
+ avgRankWhenIgnored: number | null;
26
+ lastRecalled: string | null;
27
+ /** Boost factor: >1 means boost, <1 means decay */
28
+ boostFactor: number;
29
+ }
30
+ export interface RecallSummary {
31
+ totalEvents: number;
32
+ uniqueMemories: number;
33
+ overallUseRate: number;
34
+ neverUsedMemories: number;
35
+ topPerformers: Array<{
36
+ memoryId: number;
37
+ useRate: number;
38
+ totalRecalls: number;
39
+ }>;
40
+ worstPerformers: Array<{
41
+ memoryId: number;
42
+ useRate: number;
43
+ totalRecalls: number;
44
+ }>;
45
+ }
46
+ /**
47
+ * Record a recall event — whether a memory was used after being retrieved.
48
+ *
49
+ * @param memoryId - The memory that was recalled
50
+ * @param query - The query that triggered the recall
51
+ * @param wasUsed - Whether the agent/user used this memory
52
+ * @param rankPosition - Position in the result list (1-based)
53
+ * @param similarityScore - The similarity score from retrieval
54
+ */
55
+ export declare function recordRecallEvent(memoryId: number, query: string, wasUsed: boolean, rankPosition?: number, similarityScore?: number): number;
56
+ /**
57
+ * Record recall events for a batch of retrieved memories.
58
+ * Mark top-K as "used" and remaining as "ignored".
59
+ *
60
+ * @param retrievedIds - All memory IDs returned by recall, in rank order
61
+ * @param usedIds - Memory IDs that were actually used/referenced
62
+ * @param query - The search query
63
+ */
64
+ export declare function recordRecallBatch(retrievedIds: number[], usedIds: Set<number>, query: string, similarityScores?: Map<number, number>): void;
65
+ /**
66
+ * Get recall statistics for a specific memory.
67
+ */
68
+ export declare function getRecallStats(memoryId: number): RecallStats;
69
+ /**
70
+ * Get recall summary across all memories.
71
+ */
72
+ export declare function getRecallSummary(): RecallSummary;
73
+ /**
74
+ * Get the boost factor for a memory based on its recall history.
75
+ * Used to adjust retrieval scores.
76
+ *
77
+ * @returns boost factor: 1.0 = neutral, >1.0 = boost, <1.0 = decay
78
+ */
79
+ export declare function getBoostFactor(memoryId: number): number;
80
+ /**
81
+ * Get boost factors for multiple memories at once.
82
+ */
83
+ export declare function getBoostFactors(memoryIds: number[]): Map<number, number>;
84
+ /**
85
+ * Get memory IDs that are never used (recalled but never marked as used).
86
+ * Useful for cleanup suggestions.
87
+ */
88
+ export declare function getNeverUsedMemories(minRecalls?: number, limit?: number): Array<{
89
+ memoryId: number;
90
+ totalRecalls: number;
91
+ lastRecalled: string;
92
+ }>;
93
+ /**
94
+ * Delete old recall events to prevent unbounded growth.
95
+ *
96
+ * @param olderThanDays - Delete events older than this many days
97
+ * @returns Number of events deleted
98
+ */
99
+ export declare function cleanupRecallEvents(olderThanDays?: number): number;
100
+ //# sourceMappingURL=retrieval-feedback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retrieval-feedback.d.ts","sourceRoot":"","sources":["../../src/lib/retrieval-feedback.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAqBH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,mDAAmD;IACnD,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClF,eAAe,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACrF;AAMD;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,EAChB,YAAY,CAAC,EAAE,MAAM,EACrB,eAAe,CAAC,EAAE,MAAM,GACvB,MAAM,CAER;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,MAAM,EAAE,EACtB,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,EACpB,KAAK,EAAE,MAAM,EACb,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACrC,IAAI,CAUN;AAMD;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAmB5D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAiBhD;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAIvD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAmBxE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,GAAE,MAAU,EACtB,KAAK,GAAE,MAAW,GACjB,KAAK,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC,CAEzE;AAMD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,aAAa,GAAE,MAAW,GAAG,MAAM,CAEtE"}
@@ -0,0 +1,174 @@
1
+ /**
2
+ * Retrieval Feedback Loops — track whether recalled memories were useful.
3
+ *
4
+ * Records recall events and uses historical usefulness to boost/decay
5
+ * memory retrieval scores. Self-improving retrieval over time.
6
+ *
7
+ * Inspired by Cognee's ~90% accuracy from feedback loops.
8
+ */
9
+ // NOTE: Use-rate boost from recall events. See also temporal.ts calculateAccessBoost() for count-based access boost. These are complementary.
10
+ import { insertRecallEvent, insertRecallEventsBatch, getRecallStatsRow, getRecallSummaryRow, getNeverUsedCount, getTopPerformers, getWorstPerformers, getBoostDataForMemory, getBoostDataForMemories, getNeverUsedMemoryRows, deleteOldRecallEvents, } from './db/index.js';
11
+ // ============================================================================
12
+ // Recording
13
+ // ============================================================================
14
+ /**
15
+ * Record a recall event — whether a memory was used after being retrieved.
16
+ *
17
+ * @param memoryId - The memory that was recalled
18
+ * @param query - The query that triggered the recall
19
+ * @param wasUsed - Whether the agent/user used this memory
20
+ * @param rankPosition - Position in the result list (1-based)
21
+ * @param similarityScore - The similarity score from retrieval
22
+ */
23
+ export function recordRecallEvent(memoryId, query, wasUsed, rankPosition, similarityScore) {
24
+ return insertRecallEvent(memoryId, query, wasUsed, rankPosition ?? null, similarityScore ?? null);
25
+ }
26
+ /**
27
+ * Record recall events for a batch of retrieved memories.
28
+ * Mark top-K as "used" and remaining as "ignored".
29
+ *
30
+ * @param retrievedIds - All memory IDs returned by recall, in rank order
31
+ * @param usedIds - Memory IDs that were actually used/referenced
32
+ * @param query - The search query
33
+ */
34
+ export function recordRecallBatch(retrievedIds, usedIds, query, similarityScores) {
35
+ const events = retrievedIds.map((memId, i) => ({
36
+ memoryId: memId,
37
+ query,
38
+ wasUsed: usedIds.has(memId),
39
+ rankPosition: i + 1,
40
+ similarityScore: similarityScores?.get(memId) ?? null,
41
+ }));
42
+ insertRecallEventsBatch(events);
43
+ }
44
+ // ============================================================================
45
+ // Statistics
46
+ // ============================================================================
47
+ /**
48
+ * Get recall statistics for a specific memory.
49
+ */
50
+ export function getRecallStats(memoryId) {
51
+ const row = getRecallStatsRow(memoryId);
52
+ const totalRecalls = row.total_recalls;
53
+ const timesUsed = row.times_used;
54
+ const timesIgnored = totalRecalls - timesUsed;
55
+ const useRate = totalRecalls > 0 ? timesUsed / totalRecalls : 0;
56
+ return {
57
+ memoryId,
58
+ totalRecalls,
59
+ timesUsed,
60
+ timesIgnored,
61
+ useRate,
62
+ avgRankWhenUsed: row.avg_rank_used,
63
+ avgRankWhenIgnored: row.avg_rank_ignored,
64
+ lastRecalled: row.last_recalled,
65
+ boostFactor: computeBoostFactor(totalRecalls, useRate),
66
+ };
67
+ }
68
+ /**
69
+ * Get recall summary across all memories.
70
+ */
71
+ export function getRecallSummary() {
72
+ const totalRow = getRecallSummaryRow();
73
+ const total = totalRow.total;
74
+ const uniqueMemories = totalRow.unique_mems;
75
+ const overallUseRate = total > 0 ? totalRow.total_used / total : 0;
76
+ const neverUsedMemories = getNeverUsedCount();
77
+ const topPerformers = getTopPerformers();
78
+ const worstPerformers = getWorstPerformers();
79
+ return {
80
+ totalEvents: total,
81
+ uniqueMemories,
82
+ overallUseRate,
83
+ neverUsedMemories,
84
+ topPerformers,
85
+ worstPerformers,
86
+ };
87
+ }
88
+ /**
89
+ * Get the boost factor for a memory based on its recall history.
90
+ * Used to adjust retrieval scores.
91
+ *
92
+ * @returns boost factor: 1.0 = neutral, >1.0 = boost, <1.0 = decay
93
+ */
94
+ export function getBoostFactor(memoryId) {
95
+ const row = getBoostDataForMemory(memoryId);
96
+ const useRate = row.total > 0 ? row.used / row.total : 0;
97
+ return computeBoostFactor(row.total, useRate);
98
+ }
99
+ /**
100
+ * Get boost factors for multiple memories at once.
101
+ */
102
+ export function getBoostFactors(memoryIds) {
103
+ if (memoryIds.length === 0)
104
+ return new Map();
105
+ const rows = getBoostDataForMemories(memoryIds);
106
+ const result = new Map();
107
+ for (const row of rows) {
108
+ const useRate = row.total > 0 ? row.used / row.total : 0;
109
+ result.set(row.memory_id, computeBoostFactor(row.total, useRate));
110
+ }
111
+ // Memories with no recall history get neutral boost
112
+ for (const id of memoryIds) {
113
+ if (!result.has(id)) {
114
+ result.set(id, 1.0);
115
+ }
116
+ }
117
+ return result;
118
+ }
119
+ /**
120
+ * Get memory IDs that are never used (recalled but never marked as used).
121
+ * Useful for cleanup suggestions.
122
+ */
123
+ export function getNeverUsedMemories(minRecalls = 3, limit = 50) {
124
+ return getNeverUsedMemoryRows(minRecalls, limit);
125
+ }
126
+ // ============================================================================
127
+ // Cleanup
128
+ // ============================================================================
129
+ /**
130
+ * Delete old recall events to prevent unbounded growth.
131
+ *
132
+ * @param olderThanDays - Delete events older than this many days
133
+ * @returns Number of events deleted
134
+ */
135
+ export function cleanupRecallEvents(olderThanDays = 90) {
136
+ return deleteOldRecallEvents(olderThanDays);
137
+ }
138
+ // ============================================================================
139
+ // Internal
140
+ // ============================================================================
141
+ /**
142
+ * Compute boost factor from total recalls and use rate.
143
+ *
144
+ * Formula:
145
+ * - 0 recalls → 1.0 (neutral)
146
+ * - 1-2 recalls → minor adjustment (not enough data)
147
+ * - 3+ recalls → significant adjustment based on use rate
148
+ *
149
+ * Use rate mapping:
150
+ * - 80-100% → 1.3 (strong boost)
151
+ * - 60-80% → 1.15 (moderate boost)
152
+ * - 40-60% → 1.0 (neutral)
153
+ * - 20-40% → 0.85 (moderate decay)
154
+ * - 0-20% → 0.7 (strong decay)
155
+ */
156
+ function computeBoostFactor(totalRecalls, useRate) {
157
+ if (totalRecalls < 3) {
158
+ // Not enough data — minor adjustment
159
+ if (totalRecalls === 0)
160
+ return 1.0;
161
+ return 0.95 + useRate * 0.1; // 0.95-1.05 range
162
+ }
163
+ // Significant data — apply full boost/decay
164
+ if (useRate >= 0.8)
165
+ return 1.3;
166
+ if (useRate >= 0.6)
167
+ return 1.15;
168
+ if (useRate >= 0.4)
169
+ return 1.0;
170
+ if (useRate >= 0.2)
171
+ return 0.85;
172
+ return 0.7;
173
+ }
174
+ //# sourceMappingURL=retrieval-feedback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retrieval-feedback.js","sourceRoot":"","sources":["../../src/lib/retrieval-feedback.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * MR Context Pack Generator — builds review context from a git diff.
3
+ *
4
+ * Pipeline:
5
+ * 1. git diff → parse-diff → changed files + hunks
6
+ * 2. succ_search_code → related symbols for each changed function
7
+ * 3. succ_recall → past decisions/pitfalls for touched modules
8
+ * 4. git log → recent changes to same files
9
+ * 5. callLLM → structured review context pack
10
+ */
11
+ export interface ReviewContextPack {
12
+ summary: string;
13
+ diffStats: {
14
+ files: number;
15
+ additions: number;
16
+ deletions: number;
17
+ };
18
+ changedFiles: Array<{
19
+ path: string;
20
+ additions: number;
21
+ deletions: number;
22
+ isNew: boolean;
23
+ isDeleted: boolean;
24
+ }>;
25
+ changedSymbols: Array<{
26
+ file: string;
27
+ symbol: string;
28
+ }>;
29
+ relatedSymbols: Array<{
30
+ file: string;
31
+ symbol: string;
32
+ similarity: number;
33
+ }>;
34
+ relevantMemories: Array<{
35
+ id: number;
36
+ content: string;
37
+ tags: string[];
38
+ similarity: number;
39
+ }>;
40
+ recentHistory: Array<{
41
+ file: string;
42
+ commits: string[];
43
+ }>;
44
+ reviewFocus: string[];
45
+ blastRadius: string;
46
+ }
47
+ /**
48
+ * Generate a review context pack for a git diff reference.
49
+ *
50
+ * @param diffRef - Git diff reference (e.g., "HEAD~1", "main..feature", a commit SHA)
51
+ * @param options - Configuration options
52
+ */
53
+ export declare function generateReviewContext(diffRef?: string, options?: {
54
+ maxRelatedSymbols?: number;
55
+ maxMemories?: number;
56
+ generateLLMSummary?: boolean;
57
+ }): Promise<ReviewContextPack>;
58
+ //# sourceMappingURL=context-pack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-pack.d.ts","sourceRoot":"","sources":["../../../src/lib/review/context-pack.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAiBH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE;QACT,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,YAAY,EAAE,KAAK,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,OAAO,CAAC;QACf,SAAS,EAAE,OAAO,CAAC;KACpB,CAAC,CAAC;IACH,cAAc,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxD,cAAc,EAAE,KAAK,CAAC;QACpB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;IACH,gBAAgB,EAAE,KAAK,CAAC;QACtB,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;IACH,aAAa,EAAE,KAAK,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC,CAAC;IACH,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAMD;;;;;GAKG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,GAAE,MAAiB,EAC1B,OAAO,GAAE;IACP,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CACzB,GACL,OAAO,CAAC,iBAAiB,CAAC,CAuE5B"}