agentic-qe 3.8.14 → 3.9.1

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 (451) hide show
  1. package/.claude/skills/skills-manifest.json +1 -1
  2. package/CHANGELOG.md +60 -0
  3. package/dist/adapters/a2ui/integration/agui-sync.js +2 -1
  4. package/dist/audit/witness-chain.d.ts +1 -1
  5. package/dist/boot/fast-paths.d.ts +24 -0
  6. package/dist/boot/fast-paths.js +43 -0
  7. package/dist/boot/parallel-prefetch.d.ts +26 -0
  8. package/dist/boot/parallel-prefetch.js +36 -0
  9. package/dist/cli/bundle.js +12 -9431
  10. package/dist/cli/chunks/adapter-NTM4ZH3P.js +2 -0
  11. package/dist/cli/chunks/agent-booster-wasm-UH2J6BNA.js +2 -0
  12. package/dist/cli/chunks/agent-handler-ZCBWQE3X.js +33 -0
  13. package/dist/cli/chunks/agent-memory-branch-2BAVI7UW.js +2 -0
  14. package/dist/cli/chunks/aqe-learning-engine-RVX6MPYK.js +2 -0
  15. package/dist/cli/chunks/audit-G5UIJBSQ.js +3 -0
  16. package/dist/cli/chunks/base-7HKNQ6UP.js +2 -0
  17. package/dist/cli/chunks/better-sqlite3-YHIAPPVT.js +2 -0
  18. package/dist/cli/chunks/brain-handler-5EE3J5PR.js +68 -0
  19. package/dist/cli/chunks/branch-enumerator-OV54PID5.js +7 -0
  20. package/dist/cli/chunks/browser-7RZGKOEO.js +4 -0
  21. package/dist/cli/chunks/browser-workflow-UOFSQK7X.js +2 -0
  22. package/dist/cli/chunks/chunk-24E47G3D.js +604 -0
  23. package/dist/cli/chunks/chunk-35H73OPP.js +2 -0
  24. package/dist/cli/chunks/chunk-36X2O3BL.js +3 -0
  25. package/dist/cli/chunks/chunk-3JESHZQM.js +2 -0
  26. package/dist/cli/chunks/chunk-3VAKR43Z.js +2 -0
  27. package/dist/cli/chunks/chunk-3WQNW6CH.js +2 -0
  28. package/dist/cli/chunks/chunk-43M6Y6VF.js +15 -0
  29. package/dist/cli/chunks/chunk-4BHOAQJH.js +2 -0
  30. package/dist/cli/chunks/chunk-4LWXZCSD.js +146 -0
  31. package/dist/cli/chunks/chunk-4TNXEANY.js +2 -0
  32. package/dist/cli/chunks/chunk-4XBY5JDT.js +4 -0
  33. package/dist/cli/chunks/chunk-4XREPCBZ.js +2 -0
  34. package/dist/cli/chunks/chunk-5GPTM2RV.js +2 -0
  35. package/dist/cli/chunks/chunk-5KBQQP3X.js +7 -0
  36. package/dist/cli/chunks/chunk-5LDBKZ6P.js +2 -0
  37. package/dist/cli/chunks/chunk-6BSJNG2S.js +2 -0
  38. package/dist/cli/chunks/chunk-6YC24TPL.js +27 -0
  39. package/dist/cli/chunks/chunk-7ATLJCSG.js +2 -0
  40. package/dist/cli/chunks/chunk-7JQTHPCD.js +2 -0
  41. package/dist/cli/chunks/chunk-7YUOUVN7.js +2 -0
  42. package/dist/cli/chunks/chunk-7ZNINH6J.js +59 -0
  43. package/dist/cli/chunks/chunk-A57BEPL7.js +3 -0
  44. package/dist/cli/chunks/chunk-AFPMCMVX.js +45 -0
  45. package/dist/cli/chunks/chunk-AREIP4FX.js +3 -0
  46. package/dist/cli/chunks/chunk-B2I7BJLL.js +3 -0
  47. package/dist/cli/chunks/chunk-BEHP3DEF.js +66 -0
  48. package/dist/cli/chunks/chunk-C24ZDUCM.js +30 -0
  49. package/dist/cli/chunks/chunk-D4PSFWND.js +2 -0
  50. package/dist/cli/chunks/chunk-D55PSO5D.js +81 -0
  51. package/dist/cli/chunks/chunk-DC3HPOOJ.js +2 -0
  52. package/dist/cli/chunks/chunk-DMGLX76J.js +180 -0
  53. package/dist/cli/chunks/chunk-E33KQBMW.js +2 -0
  54. package/dist/cli/chunks/chunk-EQFZQPFN.js +2 -0
  55. package/dist/cli/chunks/chunk-FPRL6UDF.js +2 -0
  56. package/dist/cli/chunks/chunk-FRNB4CH2.js +2 -0
  57. package/dist/cli/chunks/chunk-FWDKVTK4.js +2 -0
  58. package/dist/cli/chunks/chunk-GFNUESMU.js +2 -0
  59. package/dist/cli/chunks/chunk-GJW6V35N.js +2 -0
  60. package/dist/cli/chunks/chunk-GLIFZWV2.js +2 -0
  61. package/dist/cli/chunks/chunk-GNUUBTSX.js +14 -0
  62. package/dist/cli/chunks/chunk-HAUXLXKZ.js +2 -0
  63. package/dist/cli/chunks/chunk-HTXSUTWL.js +9 -0
  64. package/dist/cli/chunks/chunk-I5WZ2NM2.js +95 -0
  65. package/dist/cli/chunks/chunk-I7TA453K.js +2 -0
  66. package/dist/cli/chunks/chunk-IF6GW6IY.js +27 -0
  67. package/dist/cli/chunks/chunk-IHWSNYL2.js +5 -0
  68. package/dist/cli/chunks/chunk-IJKYJGJL.js +2 -0
  69. package/dist/cli/chunks/chunk-IQPXANCE.js +14 -0
  70. package/dist/cli/chunks/chunk-JCEY7RLP.js +2 -0
  71. package/dist/cli/chunks/chunk-JSOBRKMA.js +2 -0
  72. package/dist/cli/chunks/chunk-KIGRLIU4.js +2 -0
  73. package/dist/cli/chunks/chunk-L4H54Z27.js +21 -0
  74. package/dist/cli/chunks/chunk-LCOEBFAB.js +2 -0
  75. package/dist/cli/chunks/chunk-MZ54VM6A.js +2 -0
  76. package/dist/cli/chunks/chunk-NB47YT6A.js +167 -0
  77. package/dist/cli/chunks/chunk-NG3BKE7V.js +2 -0
  78. package/dist/cli/chunks/chunk-NG4TE3OW.js +2 -0
  79. package/dist/cli/chunks/chunk-O636JKJR.js +18 -0
  80. package/dist/cli/chunks/chunk-O6QQ4HLS.js +2 -0
  81. package/dist/cli/chunks/chunk-OFNIQCGX.js +2 -0
  82. package/dist/cli/chunks/chunk-OTSJU5LH.js +2 -0
  83. package/dist/cli/chunks/chunk-POLFT2PQ.js +15 -0
  84. package/dist/cli/chunks/chunk-QAYTL6KC.js +2 -0
  85. package/dist/cli/chunks/chunk-QMFP5OKH.js +2 -0
  86. package/dist/cli/chunks/chunk-RAJO7VML.js +2 -0
  87. package/dist/cli/chunks/chunk-RKIGOARX.js +2 -0
  88. package/dist/cli/chunks/chunk-RU6Q5HOC.js +3 -0
  89. package/dist/cli/chunks/chunk-RV6SGDET.js +2 -0
  90. package/dist/cli/chunks/chunk-RWXI7XAR.js +2 -0
  91. package/dist/cli/chunks/chunk-RXVYOXDB.js +2 -0
  92. package/dist/cli/chunks/chunk-SGRN6JFB.js +2 -0
  93. package/dist/cli/chunks/chunk-SVNX4UWR.js +3029 -0
  94. package/dist/cli/chunks/chunk-TL7ABIMP.js +2 -0
  95. package/dist/cli/chunks/chunk-TOLYWONQ.js +2 -0
  96. package/dist/cli/chunks/chunk-TPXYS3WG.js +3 -0
  97. package/dist/cli/chunks/chunk-U5JQGRHZ.js +2 -0
  98. package/dist/cli/chunks/chunk-UB7RGVKO.js +2 -0
  99. package/dist/cli/chunks/chunk-UBKK7KCR.js +70 -0
  100. package/dist/cli/chunks/chunk-UMGWGX7C.js +2 -0
  101. package/dist/cli/chunks/chunk-UN4PA4M2.js +2 -0
  102. package/dist/cli/chunks/chunk-US7INRP2.js +314 -0
  103. package/dist/cli/chunks/chunk-UWDBFPHQ.js +750 -0
  104. package/dist/cli/chunks/chunk-UZZCWWIG.js +2 -0
  105. package/dist/cli/chunks/chunk-V4HM4QAO.js +24 -0
  106. package/dist/cli/chunks/chunk-V4U3CTS2.js +180 -0
  107. package/dist/cli/chunks/chunk-VCCMCFDU.js +2 -0
  108. package/dist/cli/chunks/chunk-VEWIT6VN.js +4 -0
  109. package/dist/cli/chunks/chunk-VNYGVG4Y.js +2 -0
  110. package/dist/cli/chunks/chunk-VO3OVD5D.js +4 -0
  111. package/dist/cli/chunks/chunk-VY74OMGQ.js +6 -0
  112. package/dist/cli/chunks/chunk-WDJBGXC2.js +2 -0
  113. package/dist/cli/chunks/chunk-WDV6TN7E.js +65 -0
  114. package/dist/cli/chunks/chunk-WLXEDOG4.js +2 -0
  115. package/dist/cli/chunks/chunk-WXXAAXNS.js +12 -0
  116. package/dist/cli/chunks/chunk-X4MZYBOU.js +256 -0
  117. package/dist/cli/chunks/chunk-XE2YAYU5.js +12 -0
  118. package/dist/cli/chunks/chunk-XP6XKBNW.js +2 -0
  119. package/dist/cli/chunks/chunk-XPB6ZVQY.js +2 -0
  120. package/dist/cli/chunks/chunk-XRVUSKQV.js +1 -0
  121. package/dist/cli/chunks/chunk-XSITQBYB.js +20 -0
  122. package/dist/cli/chunks/chunk-XTLA4F5Z.js +91 -0
  123. package/dist/cli/chunks/chunk-XU6L2VJY.js +2 -0
  124. package/dist/cli/chunks/chunk-XUFHYPZK.js +2 -0
  125. package/dist/cli/chunks/chunk-Y2ZEDXTV.js +16 -0
  126. package/dist/cli/chunks/chunk-YQWB4QUP.js +316 -0
  127. package/dist/cli/chunks/chunk-YUQIXT3G.js +79 -0
  128. package/dist/cli/chunks/chunk-YYYB2JN5.js +2 -0
  129. package/dist/cli/chunks/chunk-ZEUVPLGX.js +2 -0
  130. package/dist/cli/chunks/chunk-ZSRQHJEW.js +3 -0
  131. package/dist/cli/chunks/ci-N4NTYAAI.js +81 -0
  132. package/dist/cli/chunks/ci-output-XYR2PSYH.js +2 -0
  133. package/dist/cli/chunks/claude-flow-setup-FX7PRBJV.js +2 -0
  134. package/dist/cli/chunks/client-CRRENRK4.js +2 -0
  135. package/dist/cli/chunks/cline-installer-GTHQOK7U.js +4 -0
  136. package/dist/cli/chunks/code-4G6ZHVNI.js +38 -0
  137. package/dist/cli/chunks/code-index-extractor-MKJTP5AK.js +3 -0
  138. package/dist/cli/chunks/codex-installer-UGS773DT.js +8 -0
  139. package/dist/cli/chunks/completions-B3BXNXAU.js +1364 -0
  140. package/dist/cli/chunks/complexity-analyzer-PMN77CUP.js +2 -0
  141. package/dist/cli/chunks/continuedev-installer-3DYKSIP3.js +14 -0
  142. package/dist/cli/chunks/copilot-installer-IUC5HDHD.js +3 -0
  143. package/dist/cli/chunks/cost-tracker-GSGQ7O5T.js +2 -0
  144. package/dist/cli/chunks/coverage-PO72QC3P.js +27 -0
  145. package/dist/cli/chunks/cross-domain-router-FSCGJG3B.js +2 -0
  146. package/dist/cli/chunks/cursor-installer-FK53S3ZL.js +3 -0
  147. package/dist/cli/chunks/daemon-4UIQTQ73.js +19 -0
  148. package/dist/cli/chunks/dag-attention-scheduler-ZGIMLECE.js +2 -0
  149. package/dist/cli/chunks/detect-XXHLTLL7.js +2 -0
  150. package/dist/cli/chunks/domain-handler-PPGFP7P4.js +25 -0
  151. package/dist/cli/chunks/domain-transfer-Q5UAE65W.js +2 -0
  152. package/dist/cli/chunks/dream-PONKQULG.js +2 -0
  153. package/dist/cli/chunks/esm-node-XLWDJRBX.js +2 -0
  154. package/dist/cli/chunks/eval-JVJKHSTQ.js +15 -0
  155. package/dist/cli/chunks/fast-paths-3KX4ZV66.js +2 -0
  156. package/dist/cli/chunks/feature-flags-2NOVE7DL.js +2 -0
  157. package/dist/cli/chunks/feature-flags-GKHHG2I2.js +2 -0
  158. package/dist/cli/chunks/file-discovery-XFSGQNM3.js +2 -0
  159. package/dist/cli/chunks/fleet-FOIDAXLR.js +43 -0
  160. package/dist/cli/chunks/gnn-wrapper-HPCQREKP.js +2 -0
  161. package/dist/cli/chunks/heartbeat-handler-HTR3EFFV.js +48 -0
  162. package/dist/cli/chunks/heartbeat-scheduler-NZQWN7CH.js +2 -0
  163. package/dist/cli/chunks/hnsw-adapter-BNA5WUAB.js +2 -0
  164. package/dist/cli/chunks/hnsw-index-RQIIAE7S.js +2 -0
  165. package/dist/cli/chunks/hnsw-legacy-bridge-H6OA3AA3.js +2 -0
  166. package/dist/cli/chunks/hnswlib-node-FF27BDMD.js +2 -0
  167. package/dist/cli/chunks/hooks-63NZQ7NH.js +101 -0
  168. package/dist/cli/chunks/hypergraph-engine-XMSLA4XH.js +2 -0
  169. package/dist/cli/chunks/hypergraph-handler-ID6J6GS2.js +35 -0
  170. package/dist/cli/chunks/impact-analyzer-FS2UNVP4.js +2 -0
  171. package/dist/cli/chunks/init-handler-CIKZGGAY.js +68 -0
  172. package/dist/cli/chunks/init-wizard-TUU5PPY6.js +2 -0
  173. package/dist/cli/chunks/kernel-XFG42WAG.js +2 -0
  174. package/dist/cli/chunks/kilocode-installer-N7NLISYY.js +4 -0
  175. package/dist/cli/chunks/kiro-installer-U6XIPAT3.js +74 -0
  176. package/dist/cli/chunks/knowledge-graph-XV7FPU2T.js +2 -0
  177. package/dist/cli/chunks/learning-NKOF7KDJ.js +107 -0
  178. package/dist/cli/chunks/llm-router-34WHT3PH.js +30 -0
  179. package/dist/cli/chunks/load-ZW4Z3YLT.js +2 -0
  180. package/dist/cli/chunks/load-test-F4L7RTXJ.js +2 -0
  181. package/dist/cli/chunks/mcp-6R7SVGKO.js +2 -0
  182. package/dist/cli/chunks/memory-OUYCBU4M.js +32 -0
  183. package/dist/cli/chunks/memory-backend-DTJD2DWF.js +2 -0
  184. package/dist/cli/chunks/memory-handlers-WNXKZRNM.js +2 -0
  185. package/dist/cli/chunks/opencode-installer-FR75GHFU.js +3 -0
  186. package/dist/cli/chunks/orchestrator-AK7ZMVNH.js +371 -0
  187. package/dist/cli/chunks/pipeline-CFOPG7EM.js +19 -0
  188. package/dist/cli/chunks/platform-NY3ULBR7.js +2 -0
  189. package/dist/cli/chunks/plugin-LRANQYUR.js +27 -0
  190. package/dist/cli/chunks/prime-radiant-advanced-wasm-6KEIU55P.js +2 -0
  191. package/dist/cli/chunks/protocol-executor-6W4PS2D4.js +2 -0
  192. package/dist/cli/chunks/protocol-handler-ESSZGJ7R.js +20 -0
  193. package/dist/cli/chunks/prove-EF2PPY65.js +3 -0
  194. package/dist/cli/chunks/qe-reasoning-bank-7G3TZLEA.js +2 -0
  195. package/dist/cli/chunks/quality-AYBXB635.js +7 -0
  196. package/dist/cli/chunks/queen-coordinator-NFPKGMQN.js +2 -0
  197. package/dist/cli/chunks/real-embeddings-QPBXE7MA.js +2 -0
  198. package/dist/cli/chunks/roocode-installer-UF6MMBH6.js +4 -0
  199. package/dist/cli/chunks/router-F4B7Q66G.js +2 -0
  200. package/dist/cli/chunks/routing-feedback-5CIDDW7P.js +2 -0
  201. package/dist/cli/chunks/routing-handler-5TVKFU7V.js +20 -0
  202. package/dist/cli/chunks/ruvector-commands-E33VXFIA.js +8 -0
  203. package/dist/cli/chunks/rvf-dual-writer-O3AZKD24.js +2 -0
  204. package/dist/cli/chunks/rvf-migration-adapter-IKEUZ2HX.js +2 -0
  205. package/dist/cli/chunks/rvf-migration-coordinator-M4H7W4RN.js +2 -0
  206. package/dist/cli/chunks/rvf-native-adapter-UX3WAPIP.js +2 -0
  207. package/dist/cli/chunks/safe-db-QBBNXEVK.js +2 -0
  208. package/dist/cli/chunks/schedule-GFT4NN6Z.js +2 -0
  209. package/dist/cli/chunks/scheduler-CQ56T7DB.js +2 -0
  210. package/dist/cli/chunks/security-ZLWT7IU3.js +14 -0
  211. package/dist/cli/chunks/shared-rvf-adapter-EXACQ2PT.js +2 -0
  212. package/dist/cli/chunks/shared-rvf-dual-writer-G43LQDIV.js +2 -0
  213. package/dist/cli/chunks/sqlite-persistence-JHSUZPAW.js +2 -0
  214. package/dist/cli/chunks/status-handler-7P23CXUI.js +45 -0
  215. package/dist/cli/chunks/structural-health-SCNBNL7K.js +2 -0
  216. package/dist/cli/chunks/sync-BYZBBH65.js +23 -0
  217. package/dist/cli/chunks/task-handler-DWJQXZ2K.js +49 -0
  218. package/dist/cli/chunks/task-handlers-35JIXVRW.js +2 -0
  219. package/dist/cli/chunks/test-2JSS4XW7.js +33 -0
  220. package/dist/cli/chunks/test-scheduling-TWJ5I7N3.js +15 -0
  221. package/dist/cli/chunks/token-bootstrap-LLLNJT5V.js +2 -0
  222. package/dist/cli/chunks/token-usage-EQ4HM4EZ.js +25 -0
  223. package/dist/cli/chunks/transformers-PBIR5U5S.js +2 -0
  224. package/dist/cli/chunks/tree-sitter-wasm-parser-X3L2GXUX.js +2 -0
  225. package/dist/cli/chunks/types-OD43K2NP.js +2 -0
  226. package/dist/cli/chunks/unified-memory-YPHONR2T.js +2 -0
  227. package/dist/cli/chunks/unified-memory-hnsw-HJS4OXWM.js +2 -0
  228. package/dist/cli/chunks/unified-persistence-EFZRO6AW.js +2 -0
  229. package/dist/cli/chunks/validate-POMLT2KU.js +21 -0
  230. package/dist/cli/chunks/validate-swarm-UOC4JGZT.js +14 -0
  231. package/dist/cli/chunks/vibium-5JF6LAXI.js +2 -0
  232. package/dist/cli/chunks/visual-security-7KWFLYNB.js +2 -0
  233. package/dist/cli/chunks/web-tree-sitter-R7WR7J7B.js +2 -0
  234. package/dist/cli/chunks/windsurf-installer-ZSPEUBKR.js +7 -0
  235. package/dist/cli/chunks/witness-chain-CFSPCXHG.js +2 -0
  236. package/dist/cli/chunks/witness-chain-RWU6WT37.js +2 -0
  237. package/dist/cli/chunks/workflow-YNQT3OW2.js +51 -0
  238. package/dist/cli/chunks/workflow-orchestrator-Z6TAVMQP.js +2 -0
  239. package/dist/cli/chunks/wrappers-BP4FODVH.js +2 -0
  240. package/dist/cli/commands/daemon.d.ts +13 -0
  241. package/dist/cli/commands/daemon.js +224 -0
  242. package/dist/cli/commands/hooks-handlers/hooks-shared.js +2 -1
  243. package/dist/cli/commands/plugin.d.ts +12 -0
  244. package/dist/cli/commands/plugin.js +135 -0
  245. package/dist/cli/commands/ruvector-commands.js +14 -2
  246. package/dist/cli/commands/workflow.d.ts +10 -0
  247. package/dist/cli/commands/workflow.js +587 -0
  248. package/dist/cli/handlers/brain-handler.js +13 -8
  249. package/dist/cli/handlers/heartbeat-handler.d.ts +1 -0
  250. package/dist/cli/handlers/heartbeat-handler.js +20 -10
  251. package/dist/cli/handlers/hypergraph-handler.js +3 -3
  252. package/dist/cli/handlers/init-handler.js +10 -9
  253. package/dist/cli/handlers/interfaces.d.ts +4 -4
  254. package/dist/cli/index.js +159 -638
  255. package/dist/cli/lazy-registry.d.ts +27 -0
  256. package/dist/cli/lazy-registry.js +70 -0
  257. package/dist/context/compaction/context-budget.d.ts +71 -0
  258. package/dist/context/compaction/context-budget.js +120 -0
  259. package/dist/context/compaction/index.d.ts +96 -0
  260. package/dist/context/compaction/index.js +259 -0
  261. package/dist/context/compaction/llm-caller-adapter.d.ts +14 -0
  262. package/dist/context/compaction/llm-caller-adapter.js +47 -0
  263. package/dist/context/compaction/tier1-microcompact.d.ts +33 -0
  264. package/dist/context/compaction/tier1-microcompact.js +47 -0
  265. package/dist/context/compaction/tier2-session-summary.d.ts +72 -0
  266. package/dist/context/compaction/tier2-session-summary.js +172 -0
  267. package/dist/context/compaction/tier3-llm-compact.d.ts +65 -0
  268. package/dist/context/compaction/tier3-llm-compact.js +166 -0
  269. package/dist/context/compaction/tier4-reactive.d.ts +54 -0
  270. package/dist/context/compaction/tier4-reactive.js +129 -0
  271. package/dist/coordination/agent-memory-branch.d.ts +117 -0
  272. package/dist/coordination/agent-memory-branch.js +213 -0
  273. package/dist/coordination/agent-teams/mailbox.d.ts +43 -0
  274. package/dist/coordination/agent-teams/mailbox.js +130 -4
  275. package/dist/coordination/consensus/providers/claude-provider.d.ts +1 -0
  276. package/dist/coordination/consensus/providers/claude-provider.js +23 -3
  277. package/dist/coordination/handlers/handler-utils.d.ts +1 -0
  278. package/dist/coordination/handlers/handler-utils.js +9 -2
  279. package/dist/coordination/handlers/quality-handlers.js +7 -1
  280. package/dist/domains/contract-testing/coordinator.js +11 -0
  281. package/dist/domains/quality-assessment/coherence/gate-controller.d.ts +20 -1
  282. package/dist/domains/quality-assessment/coherence/gate-controller.js +64 -0
  283. package/dist/domains/quality-assessment/coherence/index.d.ts +3 -3
  284. package/dist/domains/quality-assessment/coherence/index.js +2 -2
  285. package/dist/domains/quality-assessment/coherence/types.d.ts +39 -0
  286. package/dist/domains/quality-assessment/coherence/types.js +11 -0
  287. package/dist/domains/quality-assessment/coordinator.d.ts +14 -0
  288. package/dist/domains/quality-assessment/coordinator.js +92 -0
  289. package/dist/domains/test-execution/coordinator.d.ts +19 -0
  290. package/dist/domains/test-execution/coordinator.js +102 -5
  291. package/dist/domains/test-generation/coordinator.js +11 -0
  292. package/dist/domains/test-generation/interfaces.d.ts +2 -0
  293. package/dist/domains/test-generation/services/test-generator.d.ts +9 -0
  294. package/dist/domains/test-generation/services/test-generator.js +37 -0
  295. package/dist/hooks/cross-phase-hooks.d.ts +11 -0
  296. package/dist/hooks/cross-phase-hooks.js +73 -9
  297. package/dist/hooks/security/config-snapshot.d.ts +21 -0
  298. package/dist/hooks/security/config-snapshot.js +33 -0
  299. package/dist/hooks/security/exit-codes.d.ts +28 -0
  300. package/dist/hooks/security/exit-codes.js +33 -0
  301. package/dist/hooks/security/index.d.ts +15 -0
  302. package/dist/hooks/security/index.js +15 -0
  303. package/dist/hooks/security/ssrf-guard.d.ts +25 -0
  304. package/dist/hooks/security/ssrf-guard.js +69 -0
  305. package/dist/init/agents-installer.d.ts +5 -3
  306. package/dist/init/agents-installer.js +17 -43
  307. package/dist/init/find-package-root.d.ts +22 -0
  308. package/dist/init/find-package-root.js +46 -0
  309. package/dist/init/n8n-installer.d.ts +4 -2
  310. package/dist/init/n8n-installer.js +23 -23
  311. package/dist/init/opencode-installer.d.ts +0 -5
  312. package/dist/init/opencode-installer.js +12 -39
  313. package/dist/init/skills-installer.d.ts +5 -2
  314. package/dist/init/skills-installer.js +15 -37
  315. package/dist/integrations/embeddings/index/HNSWIndex.d.ts +9 -2
  316. package/dist/integrations/embeddings/index/HNSWIndex.js +110 -35
  317. package/dist/integrations/ruvector/cognitive-routing.d.ts +67 -0
  318. package/dist/integrations/ruvector/cognitive-routing.js +208 -0
  319. package/dist/integrations/ruvector/feature-flags.d.ts +84 -0
  320. package/dist/integrations/ruvector/feature-flags.js +59 -0
  321. package/dist/integrations/ruvector/hdc-fingerprint.d.ts +76 -0
  322. package/dist/integrations/ruvector/hdc-fingerprint.js +217 -0
  323. package/dist/integrations/ruvector/hyperbolic-hnsw.d.ts +59 -0
  324. package/dist/integrations/ruvector/hyperbolic-hnsw.js +194 -0
  325. package/dist/integrations/ruvector/index.d.ts +5 -2
  326. package/dist/integrations/ruvector/index.js +13 -2
  327. package/dist/integrations/ruvector/shared-rvf-adapter.d.ts +24 -0
  328. package/dist/integrations/ruvector/shared-rvf-adapter.js +55 -0
  329. package/dist/integrations/ruvector/shared-rvf-dual-writer.d.ts +6 -0
  330. package/dist/integrations/ruvector/shared-rvf-dual-writer.js +38 -0
  331. package/dist/integrations/ruvector/sona-persistence.d.ts +8 -0
  332. package/dist/integrations/ruvector/sona-persistence.js +10 -0
  333. package/dist/integrations/ruvector/vector-delta-tracker.d.ts +96 -0
  334. package/dist/integrations/ruvector/vector-delta-tracker.js +226 -0
  335. package/dist/kernel/agent-coordinator.d.ts +75 -1
  336. package/dist/kernel/agent-coordinator.js +250 -1
  337. package/dist/kernel/hnsw-legacy-bridge.d.ts +38 -0
  338. package/dist/kernel/hnsw-legacy-bridge.js +88 -0
  339. package/dist/kernel/hnsw-shadow-validator.d.ts +91 -0
  340. package/dist/kernel/hnsw-shadow-validator.js +139 -0
  341. package/dist/kernel/index.d.ts +1 -1
  342. package/dist/kernel/index.js +1 -1
  343. package/dist/kernel/interfaces.d.ts +39 -0
  344. package/dist/kernel/kernel.d.ts +23 -0
  345. package/dist/kernel/kernel.js +141 -1
  346. package/dist/kernel/memory-backend.js +3 -1
  347. package/dist/kernel/unified-memory.d.ts +1 -1
  348. package/dist/kernel/unified-memory.js +7 -3
  349. package/dist/learning/aqe-learning-engine.d.ts +65 -0
  350. package/dist/learning/aqe-learning-engine.js +134 -0
  351. package/dist/learning/dream/dream-engine.d.ts +6 -1
  352. package/dist/learning/dream/dream-engine.js +37 -2
  353. package/dist/learning/dream/dream-scheduler.d.ts +25 -0
  354. package/dist/learning/dream/dream-scheduler.js +120 -0
  355. package/dist/learning/dream/rvcow-branch-manager.d.ts +6 -3
  356. package/dist/learning/dream/rvcow-branch-manager.js +60 -5
  357. package/dist/learning/experience-capture.d.ts +3 -3
  358. package/dist/learning/hyperbolic-pattern-index.d.ts +82 -0
  359. package/dist/learning/hyperbolic-pattern-index.js +142 -0
  360. package/dist/learning/index.d.ts +3 -3
  361. package/dist/learning/index.js +1 -1
  362. package/dist/learning/metrics-tracker.d.ts +44 -0
  363. package/dist/learning/metrics-tracker.js +37 -0
  364. package/dist/learning/pattern-promotion.d.ts +3 -3
  365. package/dist/learning/pattern-store.d.ts +45 -2
  366. package/dist/learning/pattern-store.js +217 -4
  367. package/dist/learning/qe-patterns.d.ts +1 -1
  368. package/dist/learning/qe-reasoning-bank.js +1 -1
  369. package/dist/learning/rvf-pattern-migration.d.ts +50 -0
  370. package/dist/learning/rvf-pattern-migration.js +106 -0
  371. package/dist/learning/rvf-pattern-store.d.ts +66 -0
  372. package/dist/learning/rvf-pattern-store.js +447 -0
  373. package/dist/mcp/bundle.js +1937 -1793
  374. package/dist/mcp/entry.js +132 -77
  375. package/dist/mcp/handlers/index.d.ts +1 -0
  376. package/dist/mcp/handlers/index.js +2 -0
  377. package/dist/mcp/handlers/migration-handlers.d.ts +52 -0
  378. package/dist/mcp/handlers/migration-handlers.js +85 -0
  379. package/dist/mcp/middleware/batch-executor.d.ts +46 -0
  380. package/dist/mcp/middleware/batch-executor.js +150 -0
  381. package/dist/mcp/middleware/microcompact.d.ts +97 -0
  382. package/dist/mcp/middleware/microcompact.js +179 -0
  383. package/dist/mcp/middleware/middleware-chain.d.ts +37 -0
  384. package/dist/mcp/middleware/middleware-chain.js +60 -0
  385. package/dist/mcp/protocol-server.d.ts +12 -0
  386. package/dist/mcp/protocol-server.js +192 -36
  387. package/dist/mcp/services/session-durability-middleware.d.ts +22 -0
  388. package/dist/mcp/services/session-durability-middleware.js +64 -0
  389. package/dist/mcp/services/session-resume.d.ts +29 -0
  390. package/dist/mcp/services/session-resume.js +221 -0
  391. package/dist/mcp/services/session-store.d.ts +84 -0
  392. package/dist/mcp/services/session-store.js +163 -0
  393. package/dist/mcp/tool-registry.d.ts +9 -0
  394. package/dist/mcp/tool-registry.js +30 -1
  395. package/dist/mcp/types.d.ts +2 -1
  396. package/dist/optimization/early-exit-token-optimizer.d.ts +7 -7
  397. package/dist/optimization/early-exit-token-optimizer.js +3 -3
  398. package/dist/persistence/rvf-consistency-validator.d.ts +85 -0
  399. package/dist/persistence/rvf-consistency-validator.js +182 -0
  400. package/dist/persistence/rvf-migration-adapter.d.ts +125 -0
  401. package/dist/persistence/rvf-migration-adapter.js +303 -0
  402. package/dist/persistence/rvf-migration-coordinator.d.ts +115 -0
  403. package/dist/persistence/rvf-migration-coordinator.js +224 -0
  404. package/dist/persistence/rvf-stage-gate.d.ts +70 -0
  405. package/dist/persistence/rvf-stage-gate.js +163 -0
  406. package/dist/plugins/cache.d.ts +44 -0
  407. package/dist/plugins/cache.js +149 -0
  408. package/dist/plugins/index.d.ts +15 -0
  409. package/dist/plugins/index.js +15 -0
  410. package/dist/plugins/lifecycle.d.ts +67 -0
  411. package/dist/plugins/lifecycle.js +175 -0
  412. package/dist/plugins/manifest.d.ts +45 -0
  413. package/dist/plugins/manifest.js +173 -0
  414. package/dist/plugins/resolver.d.ts +37 -0
  415. package/dist/plugins/resolver.js +80 -0
  416. package/dist/plugins/security.d.ts +23 -0
  417. package/dist/plugins/security.js +125 -0
  418. package/dist/plugins/sources/github.d.ts +17 -0
  419. package/dist/plugins/sources/github.js +77 -0
  420. package/dist/plugins/sources/local.d.ts +20 -0
  421. package/dist/plugins/sources/local.js +32 -0
  422. package/dist/plugins/sources/npm.d.ts +18 -0
  423. package/dist/plugins/sources/npm.js +82 -0
  424. package/dist/shared/llm/retry.d.ts +5 -2
  425. package/dist/shared/llm/retry.js +7 -3
  426. package/dist/shared/prompt-cache-latch.d.ts +41 -0
  427. package/dist/shared/prompt-cache-latch.js +63 -0
  428. package/dist/shared/retry-engine.d.ts +77 -0
  429. package/dist/shared/retry-engine.js +194 -0
  430. package/dist/workers/daemon.d.ts +8 -0
  431. package/dist/workers/daemon.js +13 -0
  432. package/dist/workers/quality-daemon/ci-monitor.d.ts +55 -0
  433. package/dist/workers/quality-daemon/ci-monitor.js +147 -0
  434. package/dist/workers/quality-daemon/coverage-delta.d.ts +72 -0
  435. package/dist/workers/quality-daemon/coverage-delta.js +135 -0
  436. package/dist/workers/quality-daemon/git-watcher.d.ts +51 -0
  437. package/dist/workers/quality-daemon/git-watcher.js +209 -0
  438. package/dist/workers/quality-daemon/index.d.ts +119 -0
  439. package/dist/workers/quality-daemon/index.js +343 -0
  440. package/dist/workers/quality-daemon/nightly-consolidation.d.ts +74 -0
  441. package/dist/workers/quality-daemon/nightly-consolidation.js +136 -0
  442. package/dist/workers/quality-daemon/notification-service.d.ts +67 -0
  443. package/dist/workers/quality-daemon/notification-service.js +178 -0
  444. package/dist/workers/quality-daemon/persistent-memory.d.ts +31 -0
  445. package/dist/workers/quality-daemon/persistent-memory.js +30 -0
  446. package/dist/workers/quality-daemon/priority-queue.d.ts +97 -0
  447. package/dist/workers/quality-daemon/priority-queue.js +126 -0
  448. package/dist/workers/quality-daemon/test-suggester.d.ts +50 -0
  449. package/dist/workers/quality-daemon/test-suggester.js +121 -0
  450. package/dist/workers/worker-manager.js +2 -1
  451. package/package.json +10 -10
@@ -0,0 +1,221 @@
1
+ /**
2
+ * Agentic QE v3 - Session Resume Service
3
+ *
4
+ * IMP-04: Transcript-First Session Durability
5
+ * Reads an existing JSONL session file by sampling the head (first 4KB)
6
+ * and tail (last 64KB) to reconstruct metadata and recent entries
7
+ * without reading the entire file.
8
+ *
9
+ * @module mcp/services/session-resume
10
+ */
11
+ import * as fs from 'fs';
12
+ import * as path from 'path';
13
+ // ============================================================================
14
+ // Constants
15
+ // ============================================================================
16
+ const HEAD_BYTES = 4 * 1024; // 4KB
17
+ const TAIL_BYTES = 64 * 1024; // 64KB
18
+ // ============================================================================
19
+ // Public API
20
+ // ============================================================================
21
+ /**
22
+ * Resume a session from a JSONL file.
23
+ *
24
+ * Reads the first 4KB (head) to extract session start metadata and
25
+ * the last 64KB (tail) to get recent entries. Parses JSONL lines,
26
+ * reconstructs the parentUuid linked list, and returns metadata +
27
+ * recent entries + resume capability.
28
+ *
29
+ * Corrupt or incomplete lines are skipped gracefully.
30
+ */
31
+ export function resumeSession(filePath) {
32
+ // If file doesn't exist, return non-resumable result
33
+ if (!fs.existsSync(filePath)) {
34
+ return {
35
+ metadata: {
36
+ sessionId: extractSessionId(filePath),
37
+ createdAt: 0,
38
+ lastActivityAt: 0,
39
+ entryCount: 0,
40
+ state: 'idle',
41
+ },
42
+ recentEntries: [],
43
+ lastState: 'idle',
44
+ canResume: false,
45
+ };
46
+ }
47
+ const stat = fs.statSync(filePath);
48
+ const fileSize = stat.size;
49
+ if (fileSize === 0) {
50
+ return {
51
+ metadata: {
52
+ sessionId: extractSessionId(filePath),
53
+ createdAt: 0,
54
+ lastActivityAt: 0,
55
+ entryCount: 0,
56
+ state: 'idle',
57
+ },
58
+ recentEntries: [],
59
+ lastState: 'idle',
60
+ canResume: false,
61
+ };
62
+ }
63
+ // Read head (first 4KB)
64
+ const headEntries = readHead(filePath, fileSize);
65
+ // Read tail (last 64KB)
66
+ const tailEntries = readTail(filePath, fileSize);
67
+ // Merge and deduplicate: use a Map keyed by uuid to ensure uniqueness
68
+ const entryMap = new Map();
69
+ for (const entry of headEntries) {
70
+ entryMap.set(entry.uuid, entry);
71
+ }
72
+ for (const entry of tailEntries) {
73
+ entryMap.set(entry.uuid, entry);
74
+ }
75
+ const allEntries = Array.from(entryMap.values());
76
+ allEntries.sort((a, b) => a.timestamp - b.timestamp);
77
+ // Reconstruct metadata from available entries
78
+ const firstEntry = headEntries[0] ?? allEntries[0];
79
+ const lastEntry = tailEntries[tailEntries.length - 1] ?? allEntries[allEntries.length - 1];
80
+ // For entry count: if file is small enough that head+tail overlap,
81
+ // allEntries.length is accurate. Otherwise, count total lines.
82
+ let entryCount;
83
+ if (fileSize <= HEAD_BYTES + TAIL_BYTES) {
84
+ entryCount = allEntries.length;
85
+ }
86
+ else {
87
+ entryCount = countLines(filePath);
88
+ }
89
+ const lastState = lastEntry?.state ?? 'idle';
90
+ const metadata = {
91
+ sessionId: extractSessionId(filePath),
92
+ createdAt: firstEntry?.timestamp ?? 0,
93
+ lastActivityAt: lastEntry?.timestamp ?? 0,
94
+ entryCount,
95
+ state: lastState,
96
+ };
97
+ return {
98
+ metadata,
99
+ recentEntries: tailEntries,
100
+ lastState,
101
+ canResume: allEntries.length > 0,
102
+ };
103
+ }
104
+ // ============================================================================
105
+ // Private helpers
106
+ // ============================================================================
107
+ /**
108
+ * Extract session ID from file path (filename without extension).
109
+ */
110
+ function extractSessionId(filePath) {
111
+ return path.basename(filePath, '.jsonl');
112
+ }
113
+ /**
114
+ * Read and parse the first HEAD_BYTES of the file.
115
+ */
116
+ function readHead(filePath, fileSize) {
117
+ const bytesToRead = Math.min(HEAD_BYTES, fileSize);
118
+ const fd = fs.openSync(filePath, 'r');
119
+ try {
120
+ const buffer = Buffer.alloc(bytesToRead);
121
+ fs.readSync(fd, buffer, 0, bytesToRead, 0);
122
+ const text = buffer.toString('utf-8');
123
+ return parseJsonlLines(text, /* isHead */ true);
124
+ }
125
+ finally {
126
+ fs.closeSync(fd);
127
+ }
128
+ }
129
+ /**
130
+ * Read and parse the last TAIL_BYTES of the file.
131
+ */
132
+ function readTail(filePath, fileSize) {
133
+ const bytesToRead = Math.min(TAIL_BYTES, fileSize);
134
+ const offset = Math.max(0, fileSize - bytesToRead);
135
+ const fd = fs.openSync(filePath, 'r');
136
+ try {
137
+ const buffer = Buffer.alloc(bytesToRead);
138
+ fs.readSync(fd, buffer, 0, bytesToRead, offset);
139
+ const text = buffer.toString('utf-8');
140
+ // When offset is 0, we read from the start of the file so
141
+ // the first line is complete -- don't skip it.
142
+ const isMidFileRead = offset > 0;
143
+ return parseJsonlLines(text, /* isHead */ false, isMidFileRead);
144
+ }
145
+ finally {
146
+ fs.closeSync(fd);
147
+ }
148
+ }
149
+ /**
150
+ * Parse JSONL text into SessionEntry[], skipping corrupt/incomplete lines.
151
+ * When reading from a mid-file offset (tail), the first partial line is skipped.
152
+ * When reading head, the last partial line is skipped if the chunk doesn't
153
+ * end with a newline.
154
+ *
155
+ * @param text - Raw text from the file chunk
156
+ * @param isHead - Whether this is a head read (skip trailing partial line)
157
+ * @param skipFirstLine - Whether to skip the first line (true for mid-file
158
+ * tail reads where the first line is likely a partial). Defaults to !isHead.
159
+ */
160
+ function parseJsonlLines(text, isHead, skipFirstLine) {
161
+ const lines = text.split('\n');
162
+ const entries = [];
163
+ // Default: skip first line for non-head reads (standard tail behavior)
164
+ const shouldSkipFirst = skipFirstLine ?? !isHead;
165
+ for (let i = 0; i < lines.length; i++) {
166
+ const line = lines[i].trim();
167
+ if (!line)
168
+ continue;
169
+ // Skip first line of mid-file tail read (may be partial)
170
+ if (shouldSkipFirst && i === 0 && lines.length > 1)
171
+ continue;
172
+ // Skip last line of head read if it may be truncated
173
+ if (isHead && i === lines.length - 1 && lines.length > 1 && !text.endsWith('\n'))
174
+ continue;
175
+ try {
176
+ const entry = JSON.parse(line);
177
+ if (isValidEntry(entry)) {
178
+ entries.push(entry);
179
+ }
180
+ }
181
+ catch {
182
+ // Skip corrupt lines
183
+ continue;
184
+ }
185
+ }
186
+ return entries;
187
+ }
188
+ /**
189
+ * Minimal validation that a parsed object looks like a SessionEntry.
190
+ */
191
+ function isValidEntry(obj) {
192
+ if (typeof obj !== 'object' || obj === null)
193
+ return false;
194
+ const entry = obj;
195
+ return (typeof entry.uuid === 'string' &&
196
+ typeof entry.timestamp === 'number' &&
197
+ typeof entry.type === 'string' &&
198
+ typeof entry.state === 'string');
199
+ }
200
+ /**
201
+ * Count total lines in a file (for large files where head+tail don't overlap).
202
+ * Only counts non-empty lines that parse as valid JSON.
203
+ */
204
+ function countLines(filePath) {
205
+ const content = fs.readFileSync(filePath, 'utf-8');
206
+ let count = 0;
207
+ for (const line of content.split('\n')) {
208
+ const trimmed = line.trim();
209
+ if (trimmed) {
210
+ try {
211
+ JSON.parse(trimmed);
212
+ count++;
213
+ }
214
+ catch {
215
+ // Skip corrupt lines in count
216
+ }
217
+ }
218
+ }
219
+ return count;
220
+ }
221
+ //# sourceMappingURL=session-resume.js.map
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Agentic QE v3 - Append-Only JSONL Session Store
3
+ *
4
+ * IMP-04: Transcript-First Session Durability
5
+ * Provides an append-only JSONL log of all tool calls, results, and state
6
+ * changes within a session. Supports write batching (100ms window) and
7
+ * lazy file creation (no file until first append).
8
+ *
9
+ * @module mcp/services/session-store
10
+ */
11
+ export interface SessionEntry {
12
+ uuid: string;
13
+ parentUuid: string | null;
14
+ timestamp: number;
15
+ type: 'tool_call' | 'tool_result' | 'state_change' | 'error';
16
+ toolName?: string;
17
+ params?: Record<string, unknown>;
18
+ result?: unknown;
19
+ state: 'idle' | 'running' | 'requires_action';
20
+ tokenEstimate?: number;
21
+ }
22
+ export interface SessionMetadata {
23
+ sessionId: string;
24
+ createdAt: number;
25
+ lastActivityAt: number;
26
+ entryCount: number;
27
+ state: 'idle' | 'running' | 'requires_action';
28
+ }
29
+ export type SessionEntryInput = Omit<SessionEntry, 'uuid' | 'parentUuid'>;
30
+ export declare class SessionStore {
31
+ private readonly sessionDir;
32
+ private sessionId;
33
+ private filePath;
34
+ private fileCreated;
35
+ private lastUuid;
36
+ private entryCount;
37
+ private createdAt;
38
+ private lastActivityAt;
39
+ private currentState;
40
+ private writeBuffer;
41
+ private flushTimer;
42
+ private closed;
43
+ constructor(sessionDir?: string);
44
+ /**
45
+ * Start a new session. Returns the sessionId (UUID).
46
+ * File is NOT created until the first append (lazy creation).
47
+ */
48
+ startSession(): string;
49
+ /**
50
+ * Append an entry to the session log.
51
+ * Assigns a uuid, links parentUuid to the previous entry,
52
+ * and writes a JSON line to the file.
53
+ *
54
+ * First write uses appendFileSync for write-ahead guarantee.
55
+ * Subsequent writes are batched for up to 100ms before flushing.
56
+ *
57
+ * Returns the assigned uuid.
58
+ */
59
+ append(entry: SessionEntryInput): string;
60
+ /**
61
+ * Force sync any buffered writes to disk immediately.
62
+ */
63
+ flush(): void;
64
+ /**
65
+ * Returns metadata about the current session.
66
+ */
67
+ getMetadata(): SessionMetadata;
68
+ /**
69
+ * Returns the current session ID, or null if no session is active.
70
+ */
71
+ getSessionId(): string | null;
72
+ /**
73
+ * Flush pending writes and mark the session as complete.
74
+ */
75
+ close(): void;
76
+ /**
77
+ * Returns the file path for the current session, or null.
78
+ * Exposed for testing and resume integration.
79
+ */
80
+ getFilePath(): string | null;
81
+ private ensureDirectory;
82
+ private scheduleBatchFlush;
83
+ }
84
+ //# sourceMappingURL=session-store.d.ts.map
@@ -0,0 +1,163 @@
1
+ /**
2
+ * Agentic QE v3 - Append-Only JSONL Session Store
3
+ *
4
+ * IMP-04: Transcript-First Session Durability
5
+ * Provides an append-only JSONL log of all tool calls, results, and state
6
+ * changes within a session. Supports write batching (100ms window) and
7
+ * lazy file creation (no file until first append).
8
+ *
9
+ * @module mcp/services/session-store
10
+ */
11
+ import { randomUUID } from 'crypto';
12
+ import * as fs from 'fs';
13
+ import * as path from 'path';
14
+ // ============================================================================
15
+ // Session Store
16
+ // ============================================================================
17
+ const DEFAULT_SESSION_DIR = '.agentic-qe/sessions';
18
+ const BATCH_FLUSH_MS = 100;
19
+ export class SessionStore {
20
+ sessionDir;
21
+ sessionId = null;
22
+ filePath = null;
23
+ fileCreated = false;
24
+ lastUuid = null;
25
+ entryCount = 0;
26
+ createdAt = 0;
27
+ lastActivityAt = 0;
28
+ currentState = 'idle';
29
+ writeBuffer = [];
30
+ flushTimer = null;
31
+ closed = false;
32
+ constructor(sessionDir) {
33
+ this.sessionDir = sessionDir ?? DEFAULT_SESSION_DIR;
34
+ }
35
+ /**
36
+ * Start a new session. Returns the sessionId (UUID).
37
+ * File is NOT created until the first append (lazy creation).
38
+ */
39
+ startSession() {
40
+ if (this.sessionId !== null) {
41
+ this.close();
42
+ }
43
+ this.sessionId = randomUUID();
44
+ this.filePath = path.join(this.sessionDir, `${this.sessionId}.jsonl`);
45
+ this.fileCreated = false;
46
+ this.lastUuid = null;
47
+ this.entryCount = 0;
48
+ this.createdAt = Date.now();
49
+ this.lastActivityAt = this.createdAt;
50
+ this.currentState = 'idle';
51
+ this.writeBuffer = [];
52
+ this.flushTimer = null;
53
+ this.closed = false;
54
+ return this.sessionId;
55
+ }
56
+ /**
57
+ * Append an entry to the session log.
58
+ * Assigns a uuid, links parentUuid to the previous entry,
59
+ * and writes a JSON line to the file.
60
+ *
61
+ * First write uses appendFileSync for write-ahead guarantee.
62
+ * Subsequent writes are batched for up to 100ms before flushing.
63
+ *
64
+ * Returns the assigned uuid.
65
+ */
66
+ append(entry) {
67
+ if (!this.sessionId || this.closed) {
68
+ throw new Error('No active session. Call startSession() first.');
69
+ }
70
+ const uuid = randomUUID();
71
+ const fullEntry = {
72
+ ...entry,
73
+ uuid,
74
+ parentUuid: this.lastUuid,
75
+ };
76
+ this.lastUuid = uuid;
77
+ this.entryCount++;
78
+ this.lastActivityAt = fullEntry.timestamp;
79
+ this.currentState = fullEntry.state;
80
+ const line = JSON.stringify(fullEntry) + '\n';
81
+ if (!this.fileCreated) {
82
+ // First write: synchronous for write-ahead guarantee
83
+ this.ensureDirectory();
84
+ fs.appendFileSync(this.filePath, line, 'utf-8');
85
+ this.fileCreated = true;
86
+ }
87
+ else {
88
+ // Subsequent writes: buffer and batch
89
+ this.writeBuffer.push(line);
90
+ this.scheduleBatchFlush();
91
+ }
92
+ return uuid;
93
+ }
94
+ /**
95
+ * Force sync any buffered writes to disk immediately.
96
+ */
97
+ flush() {
98
+ if (this.flushTimer !== null) {
99
+ clearTimeout(this.flushTimer);
100
+ this.flushTimer = null;
101
+ }
102
+ if (this.writeBuffer.length > 0 && this.filePath && this.fileCreated) {
103
+ const batch = this.writeBuffer.join('');
104
+ this.writeBuffer = [];
105
+ fs.appendFileSync(this.filePath, batch, 'utf-8');
106
+ }
107
+ }
108
+ /**
109
+ * Returns metadata about the current session.
110
+ */
111
+ getMetadata() {
112
+ if (!this.sessionId) {
113
+ throw new Error('No active session. Call startSession() first.');
114
+ }
115
+ return {
116
+ sessionId: this.sessionId,
117
+ createdAt: this.createdAt,
118
+ lastActivityAt: this.lastActivityAt,
119
+ entryCount: this.entryCount,
120
+ state: this.currentState,
121
+ };
122
+ }
123
+ /**
124
+ * Returns the current session ID, or null if no session is active.
125
+ */
126
+ getSessionId() {
127
+ return this.sessionId;
128
+ }
129
+ /**
130
+ * Flush pending writes and mark the session as complete.
131
+ */
132
+ close() {
133
+ if (this.closed)
134
+ return;
135
+ this.flush();
136
+ this.closed = true;
137
+ }
138
+ /**
139
+ * Returns the file path for the current session, or null.
140
+ * Exposed for testing and resume integration.
141
+ */
142
+ getFilePath() {
143
+ return this.filePath;
144
+ }
145
+ // --------------------------------------------------------------------------
146
+ // Private helpers
147
+ // --------------------------------------------------------------------------
148
+ ensureDirectory() {
149
+ const dir = path.dirname(this.filePath);
150
+ if (!fs.existsSync(dir)) {
151
+ fs.mkdirSync(dir, { recursive: true });
152
+ }
153
+ }
154
+ scheduleBatchFlush() {
155
+ if (this.flushTimer === null) {
156
+ this.flushTimer = setTimeout(() => {
157
+ this.flushTimer = null;
158
+ this.flush();
159
+ }, BATCH_FLUSH_MS);
160
+ }
161
+ }
162
+ }
163
+ //# sourceMappingURL=session-store.js.map
@@ -90,6 +90,15 @@ export declare class ToolRegistry {
90
90
  * Clear all tools
91
91
  */
92
92
  clear(): void;
93
+ /**
94
+ * IMP-02: Invoke multiple tools with concurrency partitioning.
95
+ * Concurrent-safe tools (isConcurrencySafe: true) run in parallel batches.
96
+ * Non-safe tools run sequentially between batches.
97
+ */
98
+ invokeBatch(calls: Array<{
99
+ name: string;
100
+ params: Record<string, unknown>;
101
+ }>): Promise<Array<ToolResult<unknown>>>;
93
102
  /**
94
103
  * Create result metadata
95
104
  */
@@ -8,6 +8,8 @@ import { v4 as uuidv4 } from 'uuid';
8
8
  import { ALL_DOMAINS } from '../shared/types';
9
9
  import { sanitizeInput } from './security/cve-prevention';
10
10
  import { toErrorMessage } from '../shared/error-utils.js';
11
+ import { BatchToolExecutor } from './middleware/batch-executor';
12
+ import { withRetry, isRetryableError } from '../shared/retry-engine';
11
13
  // ============================================================================
12
14
  // Security: Input Validation (SEC-001 Fix)
13
15
  // ============================================================================
@@ -363,12 +365,21 @@ export class ToolRegistry {
363
365
  tool.lastUsed = new Date();
364
366
  this.stats.invocations++;
365
367
  try {
366
- const result = await tool.handler(sanitizedParams);
368
+ // IMP-03: Wrap tool handler with unified retry engine
369
+ const retryResult = await withRetry(() => tool.handler(sanitizedParams), {
370
+ maxAttempts: 3,
371
+ baseDelayMs: 500,
372
+ maxDelayMs: 4000,
373
+ jitterFraction: 0.25,
374
+ retryableErrors: isRetryableError,
375
+ });
376
+ const result = retryResult.result;
367
377
  return {
368
378
  ...result,
369
379
  metadata: {
370
380
  ...result.metadata,
371
381
  ...this.createMetadata(startTime, requestId, tool.definition.domain),
382
+ ...(retryResult.attempts > 1 ? { retryAttempts: retryResult.attempts } : {}),
372
383
  },
373
384
  };
374
385
  }
@@ -463,6 +474,24 @@ export class ToolRegistry {
463
474
  errors: 0,
464
475
  };
465
476
  }
477
+ /**
478
+ * IMP-02: Invoke multiple tools with concurrency partitioning.
479
+ * Concurrent-safe tools (isConcurrencySafe: true) run in parallel batches.
480
+ * Non-safe tools run sequentially between batches.
481
+ */
482
+ async invokeBatch(calls) {
483
+ const batchCalls = calls.map(call => {
484
+ const tool = this.tools.get(call.name);
485
+ return {
486
+ name: call.name,
487
+ handler: () => this.invoke(call.name, call.params),
488
+ isConcurrencySafe: tool?.definition.isConcurrencySafe ?? false,
489
+ };
490
+ });
491
+ const executor = new BatchToolExecutor();
492
+ const batchResult = await executor.executeBatch(batchCalls);
493
+ return batchResult.results;
494
+ }
466
495
  /**
467
496
  * Create result metadata
468
497
  */
@@ -25,11 +25,12 @@ export interface ToolDefinition {
25
25
  category: ToolCategory;
26
26
  domain?: DomainName;
27
27
  lazyLoad?: boolean;
28
+ isConcurrencySafe?: boolean;
28
29
  }
29
30
  /**
30
31
  * Tool categories for organization and lazy loading
31
32
  */
32
- export type ToolCategory = 'core' | 'task' | 'agent' | 'domain' | 'coordination' | 'memory' | 'learning' | 'routing' | 'cross-phase' | 'infra-healing';
33
+ export type ToolCategory = 'core' | 'task' | 'agent' | 'domain' | 'coordination' | 'memory' | 'learning' | 'routing' | 'cross-phase' | 'infra-healing' | 'persistence';
33
34
  /**
34
35
  * Tool handler function type
35
36
  */
@@ -3,10 +3,10 @@
3
3
  * ADR-042: Token Optimization via Pattern Reuse
4
4
  *
5
5
  * Enables LLM call skipping by reusing high-confidence patterns from
6
- * the PatternStore. Uses HNSW similarity search for O(log n) pattern
6
+ * the IPatternStore. Uses HNSW similarity search for O(log n) pattern
7
7
  * matching and tracks token savings statistics.
8
8
  */
9
- import type { PatternStore } from '../learning/pattern-store.js';
9
+ import type { IPatternStore } from '../learning/pattern-store.js';
10
10
  import type { QEPattern, QEDomain } from '../learning/qe-patterns.js';
11
11
  /**
12
12
  * Configuration for early exit token optimization
@@ -181,7 +181,7 @@ export interface EarlyExitTask {
181
181
  * Early Exit Token Optimizer
182
182
  *
183
183
  * Enables LLM call skipping by reusing high-confidence patterns.
184
- * Uses HNSW-indexed PatternStore for O(log n) similarity search.
184
+ * Uses HNSW-indexed IPatternStore for O(log n) similarity search.
185
185
  *
186
186
  * @example
187
187
  * ```typescript
@@ -203,7 +203,7 @@ export declare class EarlyExitTokenOptimizer {
203
203
  private readonly config;
204
204
  private reuseHistory;
205
205
  private attemptHistory;
206
- constructor(patternStore: PatternStore, config?: Partial<EarlyExitConfig>);
206
+ constructor(patternStore: IPatternStore, config?: Partial<EarlyExitConfig>);
207
207
  /**
208
208
  * Check if we can skip LLM call by reusing a pattern
209
209
  *
@@ -265,13 +265,13 @@ export declare class EarlyExitTokenOptimizer {
265
265
  /**
266
266
  * Create an EarlyExitTokenOptimizer with default configuration
267
267
  */
268
- export declare function createEarlyExitTokenOptimizer(patternStore: PatternStore, config?: Partial<EarlyExitConfig>): EarlyExitTokenOptimizer;
268
+ export declare function createEarlyExitTokenOptimizer(patternStore: IPatternStore, config?: Partial<EarlyExitConfig>): EarlyExitTokenOptimizer;
269
269
  /**
270
270
  * Create an EarlyExitTokenOptimizer with aggressive configuration
271
271
  */
272
- export declare function createAggressiveTokenOptimizer(patternStore: PatternStore): EarlyExitTokenOptimizer;
272
+ export declare function createAggressiveTokenOptimizer(patternStore: IPatternStore): EarlyExitTokenOptimizer;
273
273
  /**
274
274
  * Create an EarlyExitTokenOptimizer with conservative configuration
275
275
  */
276
- export declare function createConservativeTokenOptimizer(patternStore: PatternStore): EarlyExitTokenOptimizer;
276
+ export declare function createConservativeTokenOptimizer(patternStore: IPatternStore): EarlyExitTokenOptimizer;
277
277
  //# sourceMappingURL=early-exit-token-optimizer.d.ts.map
@@ -3,7 +3,7 @@
3
3
  * ADR-042: Token Optimization via Pattern Reuse
4
4
  *
5
5
  * Enables LLM call skipping by reusing high-confidence patterns from
6
- * the PatternStore. Uses HNSW similarity search for O(log n) pattern
6
+ * the IPatternStore. Uses HNSW similarity search for O(log n) pattern
7
7
  * matching and tracks token savings statistics.
8
8
  */
9
9
  import { detectQEDomain } from '../learning/qe-patterns.js';
@@ -54,7 +54,7 @@ export const CONSERVATIVE_EARLY_EXIT_CONFIG = {
54
54
  * Early Exit Token Optimizer
55
55
  *
56
56
  * Enables LLM call skipping by reusing high-confidence patterns.
57
- * Uses HNSW-indexed PatternStore for O(log n) similarity search.
57
+ * Uses HNSW-indexed IPatternStore for O(log n) similarity search.
58
58
  *
59
59
  * @example
60
60
  * ```typescript
@@ -94,7 +94,7 @@ export class EarlyExitTokenOptimizer {
94
94
  // Detect domain if not provided
95
95
  const domain = task.domain ?? detectQEDomain(task.description) ?? undefined;
96
96
  // Build search options
97
- // Note: We don't pass minConfidence/minQualityScore to the PatternStore
97
+ // Note: We don't pass minConfidence/minQualityScore to the IPatternStore
98
98
  // because we want to evaluate patterns ourselves to provide proper rejection reasons
99
99
  const searchOptions = {
100
100
  limit: this.config.maxSearchResults * 2, // Get extra candidates for filtering