agentic-qe 3.15.10 → 3.15.12

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 (536) hide show
  1. package/.claude/hooks/aqe-hook.cjs +38 -2
  2. package/.claude/skills/skills-manifest.json +1 -1
  3. package/CHANGELOG.md +263 -0
  4. package/README.md +8 -0
  5. package/assets/skills/skills-manifest.json +1 -1
  6. package/dist/adapters/a2a/agent-cards/generator.js +6 -3
  7. package/dist/adapters/a2a/tasks/task-router.js +3 -1
  8. package/dist/adapters/trajectory-adapter.js +1 -1
  9. package/dist/agents/claim-verifier/verifiers/output-verifier.d.ts +3 -1
  10. package/dist/agents/claim-verifier/verifiers/output-verifier.js +31 -2
  11. package/dist/agents/overlay-loader.js +26 -21
  12. package/dist/cli/bundle.js +6 -6
  13. package/dist/cli/chunks/adapter-HL7MOCQN.js +2 -0
  14. package/dist/cli/chunks/{agent-booster-wasm-H7ANGXW4.js → agent-booster-wasm-5VZCKTIJ.js} +2 -2
  15. package/dist/cli/chunks/{agent-handler-SVXSHEET.js → agent-handler-K3C6CQCD.js} +2 -2
  16. package/dist/cli/chunks/{agent-memory-branch-WKQH36XL.js → agent-memory-branch-NVFQ25WS.js} +2 -2
  17. package/dist/cli/chunks/aqe-learning-engine-OZ2DXB4G.js +2 -0
  18. package/dist/cli/chunks/{arena-EKOOFVST.js → arena-QGWIJADQ.js} +2 -2
  19. package/dist/cli/chunks/{arena-OPS36NFZ.js → arena-TSZVDSXS.js} +4 -4
  20. package/dist/cli/chunks/{audit-AO5NDZRI.js → audit-KIEE2SHJ.js} +3 -3
  21. package/dist/cli/chunks/base-WIM7G3HC.js +2 -0
  22. package/dist/cli/chunks/{better-sqlite3-TFLVEMMY.js → better-sqlite3-BNB32NW3.js} +2 -2
  23. package/dist/cli/chunks/{brain-handler-ADBBJPYW.js → brain-handler-MPC5SPYI.js} +3 -3
  24. package/dist/cli/chunks/{branch-enumerator-HGHUYYL5.js → branch-enumerator-LZ7UXKAY.js} +2 -2
  25. package/dist/cli/chunks/{browser-5LU6P4SZ.js → browser-VDHAW4RK.js} +2 -2
  26. package/dist/cli/chunks/browser-workflow-QRKCFVR3.js +2 -0
  27. package/dist/cli/chunks/{chunk-5LPYV3TK.js → chunk-23PQF7NN.js} +1 -1
  28. package/dist/cli/chunks/{chunk-2ZMF4NCF.js → chunk-26672ISV.js} +2 -2
  29. package/dist/cli/chunks/{chunk-U53ZB4IX.js → chunk-2ASQRBK2.js} +2 -2
  30. package/dist/cli/chunks/{chunk-7PJIR4ST.js → chunk-2E2QO44T.js} +2 -2
  31. package/dist/cli/chunks/{chunk-2T7RRL6G.js → chunk-2IVE5AR3.js} +1 -1
  32. package/dist/cli/chunks/{chunk-B6LTH6YV.js → chunk-2JYUA27M.js} +1 -1
  33. package/dist/cli/chunks/{chunk-PFG6VQ5Z.js → chunk-2PPSS4JD.js} +2 -2
  34. package/dist/cli/chunks/{chunk-NZYLNXT6.js → chunk-32UTHIY5.js} +5 -5
  35. package/dist/cli/chunks/{chunk-5E6GHSTY.js → chunk-33I2ZP6E.js} +2 -2
  36. package/dist/cli/chunks/{chunk-XLZYRTNO.js → chunk-35MIUSXQ.js} +2 -2
  37. package/dist/cli/chunks/{chunk-7LFZ4CHM.js → chunk-35NW676P.js} +2 -2
  38. package/dist/cli/chunks/{chunk-4G63WT4F.js → chunk-3EWQN37E.js} +2 -2
  39. package/dist/cli/chunks/{chunk-GZLZCZ42.js → chunk-3IU4LDZR.js} +2 -2
  40. package/dist/cli/chunks/{chunk-CESIR27V.js → chunk-47RMGDG4.js} +2 -2
  41. package/dist/cli/chunks/chunk-4A76VPU4.js +3 -0
  42. package/dist/cli/chunks/{chunk-DT7SIJOA.js → chunk-4CB3QPZM.js} +2 -2
  43. package/dist/cli/chunks/{chunk-ERQKYIP7.js → chunk-4HWUECVD.js} +5 -5
  44. package/dist/cli/chunks/{chunk-MA7JIQ6U.js → chunk-4KUOYDY2.js} +5 -5
  45. package/dist/cli/chunks/{chunk-VWNFAW2M.js → chunk-4LWMAAWK.js} +2 -2
  46. package/dist/cli/chunks/{chunk-IKISCIGH.js → chunk-4PU5GTZW.js} +2 -2
  47. package/dist/cli/chunks/{chunk-ZXPY654C.js → chunk-4SA7M34P.js} +1 -1
  48. package/dist/cli/chunks/{chunk-NGKNYIQZ.js → chunk-4Y6OEBJZ.js} +1 -1
  49. package/dist/cli/chunks/{chunk-KOBVYY6H.js → chunk-5A66EGEW.js} +2 -2
  50. package/dist/cli/chunks/{chunk-Z2O2YJAF.js → chunk-5ADXFUMO.js} +2 -2
  51. package/dist/cli/chunks/{chunk-YKMU4LBV.js → chunk-5S4UIDFK.js} +1 -1
  52. package/dist/cli/chunks/{chunk-Z7IYW5U7.js → chunk-5TAEW5OV.js} +1 -1
  53. package/dist/cli/chunks/chunk-5Z23ZMXZ.js +742 -0
  54. package/dist/cli/chunks/{chunk-6TB6YOCZ.js → chunk-65TH6RPD.js} +1 -1
  55. package/dist/cli/chunks/{chunk-3Y7SPD72.js → chunk-66PXR3NI.js} +2 -2
  56. package/dist/cli/chunks/{chunk-3P34JFQH.js → chunk-6E6HB4N4.js} +14 -14
  57. package/dist/cli/chunks/{chunk-6PX4OXQO.js → chunk-6QRI3JVE.js} +2 -2
  58. package/dist/cli/chunks/{chunk-WBM6N6IM.js → chunk-7DNR4KKR.js} +1 -1
  59. package/dist/cli/chunks/{chunk-6XCMKIZN.js → chunk-7JFDLL2F.js} +1 -1
  60. package/dist/cli/chunks/chunk-7OEFBWAG.js +5 -0
  61. package/dist/cli/chunks/{chunk-Y76IAYQD.js → chunk-7QEUHNKO.js} +1 -1
  62. package/dist/cli/chunks/{chunk-WQ4PYWSW.js → chunk-7TA5MUPW.js} +1 -1
  63. package/dist/cli/chunks/{chunk-2XGVTYVX.js → chunk-A2JCRXTK.js} +2 -2
  64. package/dist/cli/chunks/{chunk-ESUO3GTJ.js → chunk-A5Y7DAVQ.js} +2 -2
  65. package/dist/cli/chunks/{chunk-ATHWDAXB.js → chunk-ADUAJIAU.js} +2 -2
  66. package/dist/cli/chunks/{chunk-IU2IV4NE.js → chunk-AJEXPFAB.js} +1 -1
  67. package/dist/cli/chunks/{chunk-YK7JN5N7.js → chunk-BC4T6SCV.js} +4 -4
  68. package/dist/cli/chunks/{chunk-KSIWGGJI.js → chunk-BMG2JLSQ.js} +2 -2
  69. package/dist/cli/chunks/chunk-BOSMELJX.js +180 -0
  70. package/dist/cli/chunks/{chunk-7OZVZIBE.js → chunk-BYRCB5JT.js} +2 -2
  71. package/dist/cli/chunks/{chunk-FAUCT5KR.js → chunk-C3YOVASQ.js} +6 -5
  72. package/dist/cli/chunks/{chunk-DMFTELBS.js → chunk-C74M4WUI.js} +2 -2
  73. package/dist/cli/chunks/{chunk-2SXBBUM6.js → chunk-CA5UNWQF.js} +2 -2
  74. package/dist/cli/chunks/{chunk-UCJMVXO4.js → chunk-CDA5Z74H.js} +2 -2
  75. package/dist/cli/chunks/{chunk-NVYIZCSR.js → chunk-CPIBIR3X.js} +2 -2
  76. package/dist/cli/chunks/{chunk-YK3BVZY6.js → chunk-CU36D7TN.js} +2 -2
  77. package/dist/cli/chunks/{chunk-H32EPIR2.js → chunk-DAUEK66C.js} +1 -1
  78. package/dist/cli/chunks/{chunk-6KIL6CMD.js → chunk-DRCBRUGN.js} +2 -2
  79. package/dist/cli/chunks/{chunk-EWFECZ2U.js → chunk-DZGPUGUG.js} +2 -2
  80. package/dist/cli/chunks/{chunk-YDAQK5UF.js → chunk-EF6OERRR.js} +1 -1
  81. package/dist/cli/chunks/{chunk-KG336OV3.js → chunk-EN7GRVEQ.js} +2 -2
  82. package/dist/cli/chunks/{chunk-DBMNJSBV.js → chunk-ENGL7FIJ.js} +1 -1
  83. package/dist/cli/chunks/{chunk-FKL3R5JQ.js → chunk-FAGKBOX2.js} +2 -2
  84. package/dist/cli/chunks/{chunk-NAXGWDVM.js → chunk-FNUFTWEO.js} +3 -3
  85. package/dist/cli/chunks/{chunk-RWWOHCMG.js → chunk-FZJCBSN4.js} +2 -2
  86. package/dist/cli/chunks/{chunk-ABFFWZPC.js → chunk-G24SWTAX.js} +151 -149
  87. package/dist/cli/chunks/{chunk-ODJNUMV3.js → chunk-G3AABG4Q.js} +2 -2
  88. package/dist/cli/chunks/{chunk-FBXTQNRH.js → chunk-GJKZ7UQO.js} +2 -2
  89. package/dist/cli/chunks/{chunk-DEF34AFL.js → chunk-GKFV6CUD.js} +2 -2
  90. package/dist/cli/chunks/{chunk-SY2IB442.js → chunk-HLGFHHWV.js} +2 -2
  91. package/dist/cli/chunks/{chunk-CZGOSJQ4.js → chunk-HM3LSFTY.js} +2 -2
  92. package/dist/cli/chunks/chunk-HSA5IGGW.js +2 -0
  93. package/dist/cli/chunks/{chunk-GJHWY3ZX.js → chunk-HZBXJFGN.js} +2 -2
  94. package/dist/cli/chunks/chunk-IA55PFLG.js +7 -0
  95. package/dist/cli/chunks/{chunk-MNN5J4GU.js → chunk-ICKUINKD.js} +2 -2
  96. package/dist/cli/chunks/{chunk-XEB3NLJR.js → chunk-IETBWYHW.js} +2 -2
  97. package/dist/cli/chunks/{chunk-A55QKKT2.js → chunk-IL7GQNNE.js} +2 -2
  98. package/dist/cli/chunks/{chunk-LRZY4KS2.js → chunk-INZARYUD.js} +2 -2
  99. package/dist/cli/chunks/{chunk-OBAREPDC.js → chunk-IPA7K556.js} +2 -2
  100. package/dist/cli/chunks/{chunk-CFBEBXLO.js → chunk-IVTQF55W.js} +3 -3
  101. package/dist/cli/chunks/{chunk-FFTPAWM6.js → chunk-J7Y7ZBIT.js} +8 -8
  102. package/dist/cli/chunks/{chunk-I33O4BRQ.js → chunk-JGIJPDGD.js} +2 -2
  103. package/dist/cli/chunks/chunk-JNXK47OL.js +2 -0
  104. package/dist/cli/chunks/{chunk-PCEW6Q2C.js → chunk-JOWUS2X5.js} +1 -1
  105. package/dist/cli/chunks/{chunk-KI73QCR5.js → chunk-JR6CUKAI.js} +2 -2
  106. package/dist/cli/chunks/chunk-JRYWLOBD.js +21 -0
  107. package/dist/cli/chunks/{chunk-SO45NA4D.js → chunk-JW5PDJ5O.js} +11 -11
  108. package/dist/cli/chunks/{chunk-APSRPR4W.js → chunk-K3A3NWT3.js} +2 -2
  109. package/dist/cli/chunks/{chunk-FESZBPUB.js → chunk-KA5SHLMW.js} +2 -2
  110. package/dist/cli/chunks/{chunk-OPFGRS5S.js → chunk-KGA7VAI4.js} +2 -2
  111. package/dist/cli/chunks/chunk-KJDI5CHX.js +2 -0
  112. package/dist/cli/chunks/{chunk-V2RSNVMW.js → chunk-L3PV7VXK.js} +1 -1
  113. package/dist/cli/chunks/{chunk-C522H7XR.js → chunk-L7NGKANW.js} +32 -32
  114. package/dist/cli/chunks/{chunk-DNRWGATA.js → chunk-LFBA735S.js} +7 -7
  115. package/dist/cli/chunks/{chunk-V2M2XCR5.js → chunk-MAJXZYGK.js} +1 -1
  116. package/dist/cli/chunks/{chunk-FZOWULMH.js → chunk-MCPEC6OO.js} +1 -1
  117. package/dist/cli/chunks/{chunk-LMS3Y7JD.js → chunk-MCPXNUDK.js} +2 -2
  118. package/dist/cli/chunks/{chunk-GWZZ7DAO.js → chunk-MMEALJ4D.js} +2 -2
  119. package/dist/cli/chunks/{chunk-G3CZCUPM.js → chunk-MYF5CNGV.js} +2 -2
  120. package/dist/cli/chunks/{chunk-NNFZUTDH.js → chunk-MYUMJ2ZI.js} +1 -1
  121. package/dist/cli/chunks/{chunk-WDQ7IEZY.js → chunk-N7O3PF6Y.js} +2 -2
  122. package/dist/cli/chunks/{chunk-YAKGBHO4.js → chunk-NA3F6FEO.js} +2 -2
  123. package/dist/cli/chunks/chunk-NNBQZR73.js +6 -0
  124. package/dist/cli/chunks/{chunk-6C3II5OM.js → chunk-NV74SICL.js} +2 -2
  125. package/dist/cli/chunks/chunk-NVRYELCY.js +13 -0
  126. package/dist/cli/chunks/{chunk-UHTTW3IT.js → chunk-NX4BCSOZ.js} +2 -2
  127. package/dist/cli/chunks/{chunk-EN2QSKFF.js → chunk-O3IM4WRZ.js} +2 -2
  128. package/dist/cli/chunks/{chunk-S75EYIJG.js → chunk-O4QJMANM.js} +1 -1
  129. package/dist/cli/chunks/{chunk-NPPHWFA2.js → chunk-OHVYINGM.js} +18 -18
  130. package/dist/cli/chunks/{chunk-DE4YJQJF.js → chunk-P5E26N2X.js} +2 -2
  131. package/dist/cli/chunks/chunk-P7UFJ6DO.js +14 -0
  132. package/dist/cli/chunks/{chunk-XFVTGAAJ.js → chunk-PGSJBXTD.js} +2 -2
  133. package/dist/cli/chunks/{chunk-CZ2IF6MC.js → chunk-PT2NXS43.js} +1 -1
  134. package/dist/cli/chunks/{chunk-RK73HB2F.js → chunk-PTBOLBM4.js} +2 -2
  135. package/dist/cli/chunks/{chunk-EAU5KDFO.js → chunk-PX5OPXY6.js} +1 -1
  136. package/dist/cli/chunks/chunk-QCPVUNN3.js +2 -0
  137. package/dist/cli/chunks/{chunk-VKRTTFB6.js → chunk-QSGEBCDB.js} +2 -2
  138. package/dist/cli/chunks/{chunk-SKQUUE4F.js → chunk-QUJJYTJH.js} +2 -2
  139. package/dist/cli/chunks/chunk-QWG3SILX.js +59 -0
  140. package/dist/cli/chunks/{chunk-D6DA2KFD.js → chunk-RCOLPF3B.js} +2 -2
  141. package/dist/cli/chunks/{chunk-SU5H66SD.js → chunk-RYHG3I7J.js} +2 -2
  142. package/dist/cli/chunks/chunk-SBHM5X2S.js +4 -0
  143. package/dist/cli/chunks/{chunk-62OAY5KJ.js → chunk-SDRJJUPO.js} +1 -1
  144. package/dist/cli/chunks/{chunk-FB6TI3BH.js → chunk-SG2TX72G.js} +2 -2
  145. package/dist/cli/chunks/{chunk-H2PYU7MN.js → chunk-SITL5YZV.js} +4 -4
  146. package/dist/cli/chunks/{chunk-AI4VYSFS.js → chunk-SPC4RBLF.js} +2 -2
  147. package/dist/cli/chunks/{chunk-BQUAE3CP.js → chunk-SQVZ3TRU.js} +2 -2
  148. package/dist/cli/chunks/{chunk-TBLI254A.js → chunk-SUX5XB2Z.js} +2 -2
  149. package/dist/cli/chunks/{chunk-VFSYMOAL.js → chunk-T4EN5VVK.js} +2 -2
  150. package/dist/cli/chunks/{chunk-KNQ2ERFX.js → chunk-TGMXUZZC.js} +2 -2
  151. package/dist/cli/chunks/{chunk-7TB6FK4B.js → chunk-TLRHAMX5.js} +1 -1
  152. package/dist/cli/chunks/{chunk-V6JBOIMX.js → chunk-TOWOJGEI.js} +1 -1
  153. package/dist/cli/chunks/{chunk-JHIY4VCC.js → chunk-TSOQ2QLT.js} +3 -3
  154. package/dist/cli/chunks/{chunk-YYTGXD3R.js → chunk-TVA5GRIU.js} +2 -2
  155. package/dist/cli/chunks/{chunk-6MVVSSID.js → chunk-TXEUVUMO.js} +1 -1
  156. package/dist/cli/chunks/{chunk-7ZCDZHDB.js → chunk-U6IXYQO4.js} +2 -2
  157. package/dist/cli/chunks/{chunk-NW5JUCCG.js → chunk-U7ZHDGXG.js} +1 -1
  158. package/dist/cli/chunks/{chunk-UARKIZAS.js → chunk-UCSK2RMI.js} +2 -2
  159. package/dist/cli/chunks/{chunk-RPHY2DU6.js → chunk-UIKQPO4Y.js} +2 -2
  160. package/dist/cli/chunks/chunk-UJNGGFGX.js +2 -0
  161. package/dist/cli/chunks/{chunk-EDLFX4ZB.js → chunk-ULCW6IVQ.js} +2 -2
  162. package/dist/cli/chunks/{chunk-M2QV7PT7.js → chunk-UREDS662.js} +2 -2
  163. package/dist/cli/chunks/{chunk-MG27QY4D.js → chunk-URSTP3WI.js} +2 -2
  164. package/dist/cli/chunks/{chunk-2ZI5FKSF.js → chunk-UUZZXHUF.js} +2 -2
  165. package/dist/cli/chunks/{chunk-IPJ7Q3AJ.js → chunk-UZED4YZ5.js} +1 -1
  166. package/dist/cli/chunks/{chunk-VFKF2XO7.js → chunk-VF7FTD64.js} +1 -1
  167. package/dist/cli/chunks/{chunk-YCGP5VFP.js → chunk-VUR5THML.js} +2 -2
  168. package/dist/cli/chunks/{chunk-WDVRE6GN.js → chunk-VXVTFKRA.js} +2 -2
  169. package/dist/cli/chunks/chunk-VZBC6DP7.js +2 -0
  170. package/dist/cli/chunks/{chunk-GHBNRMSJ.js → chunk-W4II6SIH.js} +2 -2
  171. package/dist/cli/chunks/{chunk-TNMBRDCA.js → chunk-W5HQIYQU.js} +3 -3
  172. package/dist/cli/chunks/{chunk-H74Q7TJN.js → chunk-W7H55PY4.js} +1 -1
  173. package/dist/cli/chunks/{chunk-OY2AHLSF.js → chunk-WDEXOLK2.js} +1 -1
  174. package/dist/cli/chunks/{chunk-VJQYDYAJ.js → chunk-WGTEZT7G.js} +2 -2
  175. package/dist/cli/chunks/{chunk-GRCIBCJ2.js → chunk-WLRU6ESI.js} +2 -2
  176. package/dist/cli/chunks/{chunk-ACWFKES2.js → chunk-WTAUF6O4.js} +2 -2
  177. package/dist/cli/chunks/chunk-XCNSGSKV.js +3 -0
  178. package/dist/cli/chunks/{chunk-6S3WJGUV.js → chunk-XZOYKB22.js} +2 -2
  179. package/dist/cli/chunks/chunk-YIDAXOUX.js +8 -0
  180. package/dist/cli/chunks/{chunk-LQEURY7C.js → chunk-YLKIXEPP.js} +1 -1
  181. package/dist/cli/chunks/chunk-YNVEDFPQ.js +2 -0
  182. package/dist/cli/chunks/{chunk-PGYMKGOE.js → chunk-YUA6ZKKY.js} +2 -2
  183. package/dist/cli/chunks/{chunk-GJMLK5UT.js → chunk-YVJEUX3I.js} +2 -2
  184. package/dist/cli/chunks/{chunk-AH3ZD3NJ.js → chunk-YWWMNTBF.js} +2 -2
  185. package/dist/cli/chunks/{chunk-37OWRCUN.js → chunk-ZGROHCOW.js} +2 -2
  186. package/dist/cli/chunks/{chunk-OEKP73MC.js → chunk-ZPVGX4DI.js} +2 -2
  187. package/dist/cli/chunks/{chunk-6GP6W46M.js → chunk-ZROAMFX2.js} +2 -2
  188. package/dist/cli/chunks/{chunk-OY3NJNP2.js → chunk-ZYOYR3UR.js} +1 -1
  189. package/dist/cli/chunks/ci-BZNWW3I3.js +81 -0
  190. package/dist/cli/chunks/{ci-config-7ODMNAUM.js → ci-config-LOHNXOKV.js} +2 -2
  191. package/dist/cli/chunks/{ci-output-FXZ7ZZW3.js → ci-output-LCOQBSJL.js} +2 -2
  192. package/dist/cli/chunks/{circuit-breaker-4VOUEPOX.js → circuit-breaker-7LRXTLFE.js} +2 -2
  193. package/dist/cli/chunks/{claude-flow-setup-7D4SGLM4.js → claude-flow-setup-HBU4VWC3.js} +2 -2
  194. package/dist/cli/chunks/client-4PNYDFYS.js +2 -0
  195. package/dist/cli/chunks/{cline-installer-WRRT7BGQ.js → cline-installer-CO6MLH6X.js} +2 -2
  196. package/dist/cli/chunks/{code-ZDJRIL3S.js → code-SIXBS6JM.js} +3 -3
  197. package/dist/cli/chunks/{code-index-extractor-4S4SHM56.js → code-index-extractor-GWJKZ2IQ.js} +2 -2
  198. package/dist/cli/chunks/{codex-installer-YTRHNDWR.js → codex-installer-6NINVWXJ.js} +2 -2
  199. package/dist/cli/chunks/{completions-6N64JUXJ.js → completions-7VIX3GML.js} +2 -2
  200. package/dist/cli/chunks/{complexity-analyzer-I4A26VCJ.js → complexity-analyzer-FBQR6ZP2.js} +2 -2
  201. package/dist/cli/chunks/{continuedev-installer-IIDR66LB.js → continuedev-installer-VA7RIXW5.js} +2 -2
  202. package/dist/cli/chunks/{copilot-installer-SVVFY3S2.js → copilot-installer-4QEBC4MU.js} +2 -2
  203. package/dist/cli/chunks/core-handlers-ODO6LUWQ.js +2 -0
  204. package/dist/cli/chunks/{cost-tracker-VGFS6IBX.js → cost-tracker-GRYKHPWL.js} +2 -2
  205. package/dist/cli/chunks/coverage-USPMNKOU.js +50 -0
  206. package/dist/cli/chunks/cross-domain-router-DT4MHJKK.js +2 -0
  207. package/dist/cli/chunks/{cursor-installer-UPETT57E.js → cursor-installer-ZXIPSZVH.js} +2 -2
  208. package/dist/cli/chunks/{daemon-CQFNZLXU.js → daemon-D7F3RGI5.js} +3 -3
  209. package/dist/cli/chunks/{daemon-7BDJHEIJ.js → daemon-N2VRHPSJ.js} +4 -4
  210. package/dist/cli/chunks/{dag-attention-scheduler-PJVABHON.js → dag-attention-scheduler-NL6BA7BY.js} +2 -2
  211. package/dist/cli/chunks/{detect-56SKAGWX.js → detect-XC2HCIIT.js} +2 -2
  212. package/dist/cli/chunks/{dist-node-UYTYUMLN.js → dist-node-A3Y26MEI.js} +2 -2
  213. package/dist/cli/chunks/{domain-handler-YOYLBYJE.js → domain-handler-WV6SFXRB.js} +2 -2
  214. package/dist/cli/chunks/{domain-plugins-7TARX2XF.js → domain-plugins-KJIF6Z2B.js} +2 -2
  215. package/dist/cli/chunks/{domain-transfer-AKVSBD6E.js → domain-transfer-L3F6AES2.js} +2 -2
  216. package/dist/cli/chunks/dream-QOB3JCOM.js +2 -0
  217. package/dist/cli/chunks/{embed-and-insert-pattern-IS6HSR66.js → embed-and-insert-pattern-PA3Y4KGO.js} +2 -2
  218. package/dist/cli/chunks/{eval-GNB574IM.js → eval-YGEZNUVE.js} +2 -2
  219. package/dist/cli/chunks/{experience-capture-middleware-RCAOCKM7.js → experience-capture-middleware-D4T7NW6B.js} +3 -3
  220. package/dist/cli/chunks/{fast-paths-KTZ5SF54.js → fast-paths-6JYK7RYQ.js} +2 -2
  221. package/dist/cli/chunks/{feature-flags-KFHSR5YF.js → feature-flags-DKXMDVPE.js} +2 -2
  222. package/dist/cli/chunks/{feature-flags-ITX5LQ57.js → feature-flags-RBH2GDSR.js} +2 -2
  223. package/dist/cli/chunks/file-discovery-BN76S2PR.js +2 -0
  224. package/dist/cli/chunks/fleet-43YMXACN.js +46 -0
  225. package/dist/cli/chunks/{gnn-wrapper-RLFW3GSX.js → gnn-wrapper-MV54UC4C.js} +2 -2
  226. package/dist/cli/chunks/{heartbeat-handler-EM2URCYZ.js → heartbeat-handler-7DKMVQQH.js} +4 -4
  227. package/dist/cli/chunks/heartbeat-scheduler-3NNP4WCP.js +2 -0
  228. package/dist/cli/chunks/hnsw-adapter-MZR7Y4WF.js +2 -0
  229. package/dist/cli/chunks/hnsw-index-HE4AX22U.js +2 -0
  230. package/dist/cli/chunks/{hnsw-legacy-bridge-JMHEOIBH.js → hnsw-legacy-bridge-6IWREDQC.js} +2 -2
  231. package/dist/cli/chunks/{hnswlib-node-CBP73QHY.js → hnswlib-node-5BIESSCK.js} +2 -2
  232. package/dist/cli/chunks/{hooks-IP7XE34Z.js → hooks-3EETRM62.js} +30 -30
  233. package/dist/cli/chunks/hybrid-backend-IHUHB3Y2.js +2 -0
  234. package/dist/cli/chunks/{hypergraph-engine-ONAYHU25.js → hypergraph-engine-RSWCB2D3.js} +2 -2
  235. package/dist/cli/chunks/{hypergraph-handler-VINJRAID.js → hypergraph-handler-552LXKL3.js} +3 -3
  236. package/dist/cli/chunks/impact-analyzer-FI6GI6PD.js +2 -0
  237. package/dist/cli/chunks/{init-guard-RYVV5R3Z.js → init-guard-OTDBJ5HD.js} +2 -2
  238. package/dist/cli/chunks/{init-handler-MPRGWMOE.js → init-handler-3FK3TKEA.js} +26 -25
  239. package/dist/cli/chunks/init-wizard-WLQKH5Y5.js +2 -0
  240. package/dist/cli/chunks/kernel-2WZOQEZS.js +2 -0
  241. package/dist/cli/chunks/{kilocode-installer-OPD7JBRL.js → kilocode-installer-KZ2O4LF3.js} +2 -2
  242. package/dist/cli/chunks/{kiro-installer-M4OPUNK2.js → kiro-installer-MLCCXRF7.js} +2 -2
  243. package/dist/cli/chunks/knowledge-graph-G3LVKK6P.js +2 -0
  244. package/dist/cli/chunks/{learning-4UWTQLMF.js → learning-QUCMBD77.js} +3 -3
  245. package/dist/cli/chunks/{llm-router-SQ56FF6Z.js → llm-router-PDEV3UP2.js} +4 -4
  246. package/dist/cli/chunks/llm-router-service-MM75HKWJ.js +2 -0
  247. package/dist/cli/chunks/{load-HPHKDGGL.js → load-XFVVLO7E.js} +2 -2
  248. package/dist/cli/chunks/load-test-BEWEE44J.js +2 -0
  249. package/dist/cli/chunks/{mcp-TELMAC7Z.js → mcp-74G3CL2S.js} +2 -2
  250. package/dist/cli/chunks/{memory-PFQ3KPVJ.js → memory-XIFM6JNX.js} +5 -5
  251. package/dist/cli/chunks/memory-backend-NYKBBKZR.js +2 -0
  252. package/dist/cli/chunks/memory-handlers-ZCKURV6S.js +2 -0
  253. package/dist/cli/chunks/{multi-model-executor-3VDRX6TZ.js → multi-model-executor-7L4W3O2Q.js} +2 -2
  254. package/dist/cli/chunks/{opencode-installer-PJ576R63.js → opencode-installer-BPG422LF.js} +2 -2
  255. package/dist/cli/chunks/{orchestrator-72QP4UU7.js → orchestrator-OEAFLAEV.js} +61 -23
  256. package/dist/cli/chunks/pattern-null-store-QGPUIV6M.js +2 -0
  257. package/dist/cli/chunks/{pattern-usage-recorder-754YQW7C.js → pattern-usage-recorder-LOPNCULT.js} +2 -2
  258. package/dist/cli/chunks/{pipeline-AVXY4MVB.js → pipeline-VWTYUZB7.js} +2 -2
  259. package/dist/cli/chunks/{platform-3E3DXLYB.js → platform-WFJJ3X2E.js} +2 -2
  260. package/dist/cli/chunks/{plugin-7FUQAKRE.js → plugin-744TPUSG.js} +2 -2
  261. package/dist/cli/chunks/{prime-radiant-advanced-wasm-NIB4F5NV.js → prime-radiant-advanced-wasm-BD5BLNDR.js} +2 -2
  262. package/dist/cli/chunks/project-root-C7ELXZRK.js +2 -0
  263. package/dist/cli/chunks/protocol-executor-SUVE33BM.js +2 -0
  264. package/dist/cli/chunks/{protocol-handler-BQRYMUTG.js → protocol-handler-JIBILI74.js} +2 -2
  265. package/dist/cli/chunks/{prove-H52QGC6B.js → prove-MNOL5FYW.js} +2 -2
  266. package/dist/cli/chunks/qe-reasoning-bank-YWZMMGJB.js +2 -0
  267. package/dist/cli/chunks/{quality-QO4XPAUM.js → quality-JEGBDGGX.js} +2 -2
  268. package/dist/cli/chunks/{quality-gate-FBKE5E6F.js → quality-gate-SYJ6ROMI.js} +3 -3
  269. package/dist/cli/chunks/queen-coordinator-ZFAKXRN7.js +2 -0
  270. package/dist/cli/chunks/real-embeddings-ZWXS5ZFV.js +2 -0
  271. package/dist/cli/chunks/{ref-validation-LF76ZOBD.js → ref-validation-RRHUFW2N.js} +2 -2
  272. package/dist/cli/chunks/{roocode-installer-3BYEBTQ7.js → roocode-installer-XFO6JSVN.js} +2 -2
  273. package/dist/cli/chunks/router-4FTAVYLJ.js +2 -0
  274. package/dist/cli/chunks/routing-feedback-IO2KOWMJ.js +2 -0
  275. package/dist/cli/chunks/{routing-handler-DST7BVCU.js → routing-handler-L2K3JASE.js} +2 -2
  276. package/dist/cli/chunks/{ruvector-commands-XE32PGKC.js → ruvector-commands-A6CINHGM.js} +2 -2
  277. package/dist/cli/chunks/rvf-dual-writer-KCIRNE7C.js +2 -0
  278. package/dist/cli/chunks/rvf-migration-adapter-MFC5WTJU.js +2 -0
  279. package/dist/cli/chunks/{rvf-migration-coordinator-VP32XC75.js → rvf-migration-coordinator-T4RY7L53.js} +2 -2
  280. package/dist/cli/chunks/rvf-native-adapter-I3KWHE7X.js +2 -0
  281. package/dist/cli/chunks/{rvf-store-integrity-SH2AMVI7.js → rvf-store-integrity-IR33TGQS.js} +2 -2
  282. package/dist/cli/chunks/safe-db-QXDZ6QY3.js +2 -0
  283. package/dist/cli/chunks/schedule-CZKD6RIY.js +2 -0
  284. package/dist/cli/chunks/scheduler-BLA3Q4CH.js +2 -0
  285. package/dist/cli/chunks/{security-VSPNKCDS.js → security-Z5GDE2IH.js} +3 -3
  286. package/dist/cli/chunks/{shared-rvf-adapter-HX6AHL3P.js → shared-rvf-adapter-SIZMEHPM.js} +2 -2
  287. package/dist/cli/chunks/{shared-rvf-dual-writer-MX4FC2JE.js → shared-rvf-dual-writer-HLM65RDS.js} +2 -2
  288. package/dist/cli/chunks/sqlite-persistence-XIUYDJC4.js +2 -0
  289. package/dist/cli/chunks/{standalone-memory-O4QUTK6L.js → standalone-memory-SKSZG7P5.js} +2 -2
  290. package/dist/cli/chunks/{status-handler-Z2BP6EOG.js → status-handler-766YOOMJ.js} +2 -2
  291. package/dist/cli/chunks/{structural-health-R36WNLQG.js → structural-health-M45FNOLT.js} +2 -2
  292. package/dist/cli/chunks/{sync-QF5Y3EMZ.js → sync-6CJ24B5T.js} +2 -2
  293. package/dist/cli/chunks/{sync-2ELWUFQU.js → sync-B2U366I3.js} +2 -2
  294. package/dist/cli/chunks/{task-handler-43PYE75J.js → task-handler-P6IFLCKP.js} +17 -15
  295. package/dist/cli/chunks/task-handlers-DPWMUKFC.js +9 -0
  296. package/dist/cli/chunks/{test-UWA377D4.js → test-TODH7KRF.js} +11 -11
  297. package/dist/cli/chunks/test-runner-process-46IPK3GH.js +2 -0
  298. package/dist/cli/chunks/{test-scheduling-YQZPJRRN.js → test-scheduling-VMVMVRHT.js} +3 -3
  299. package/dist/cli/chunks/{token-bootstrap-F7C6UKTC.js → token-bootstrap-XQW7BMCK.js} +2 -2
  300. package/dist/cli/chunks/{token-usage-DO6WLMXP.js → token-usage-JCZEIRKO.js} +2 -2
  301. package/dist/cli/chunks/{transformers-H5RGFKVO.js → transformers-U2ML3OHE.js} +2 -2
  302. package/dist/cli/chunks/tree-sitter-wasm-parser-MOI2WWNJ.js +2 -0
  303. package/dist/cli/chunks/{types-PJS2FGPF.js → types-GGEPCHP6.js} +2 -2
  304. package/dist/cli/chunks/unified-memory-FL26RTV3.js +2 -0
  305. package/dist/cli/chunks/unified-memory-hnsw-E2BPTH3U.js +2 -0
  306. package/dist/cli/chunks/unified-persistence-5ZOUPKHF.js +2 -0
  307. package/dist/cli/chunks/{upgrade-4IC4F6AB.js → upgrade-T5GRM7HS.js} +2 -2
  308. package/dist/cli/chunks/{validate-DHUWW7PF.js → validate-XMUJPLP3.js} +2 -2
  309. package/dist/cli/chunks/{validate-swarm-OERQNOX5.js → validate-swarm-KJLF7JEH.js} +2 -2
  310. package/dist/cli/chunks/visual-security-IJVPO5FA.js +2 -0
  311. package/dist/cli/chunks/{web-tree-sitter-TV7DMKES.js → web-tree-sitter-LOHVZ7G5.js} +2 -2
  312. package/dist/cli/chunks/{windsurf-installer-QZPWSH37.js → windsurf-installer-33FBTXJU.js} +2 -2
  313. package/dist/cli/chunks/witness-chain-5FAFCQKP.js +2 -0
  314. package/dist/cli/chunks/witness-chain-V2M32W5D.js +2 -0
  315. package/dist/cli/chunks/{witness-chain-repair-RUXIOE7F.js → witness-chain-repair-VWBO4NXE.js} +2 -2
  316. package/dist/cli/chunks/{witness-chain-verifier-YXENHB42.js → witness-chain-verifier-BHJ3ZAEK.js} +2 -2
  317. package/dist/cli/chunks/{witness-key-manager-HL26AGFO.js → witness-key-manager-WNVPH2Z3.js} +2 -2
  318. package/dist/cli/chunks/{workflow-EOVVCN2E.js → workflow-6QR5MQTO.js} +4 -4
  319. package/dist/cli/chunks/workflow-orchestrator-3JLF3IX7.js +2 -0
  320. package/dist/cli/chunks/{wrappers-AGODHBOO.js → wrappers-EHOL62TS.js} +2 -2
  321. package/dist/cli/commands/ci.js +7 -0
  322. package/dist/cli/commands/coverage.js +7 -1
  323. package/dist/cli/commands/fleet.js +5 -2
  324. package/dist/cli/commands/hooks-handlers/stats-hooks.d.ts +4 -3
  325. package/dist/cli/commands/hooks-handlers/stats-hooks.js +22 -4
  326. package/dist/cli/commands/hooks-handlers/tool-loop-guardrail.js +11 -6
  327. package/dist/cli/commands/test.js +5 -2
  328. package/dist/cli/handlers/init-handler.d.ts +12 -0
  329. package/dist/cli/handlers/init-handler.js +27 -12
  330. package/dist/cli/handlers/task-handler.js +6 -0
  331. package/dist/cli/utils/ci-output.d.ts +2 -0
  332. package/dist/cli/utils/ci-output.js +2 -0
  333. package/dist/cli/utils/coverage-verdict.d.ts +11 -2
  334. package/dist/cli/utils/coverage-verdict.js +26 -6
  335. package/dist/cli/utils/fleet-operation.d.ts +5 -0
  336. package/dist/cli/utils/fleet-operation.js +7 -1
  337. package/dist/cli/utils/fleet-result.d.ts +5 -3
  338. package/dist/cli/utils/fleet-result.js +9 -3
  339. package/dist/cli/utils/progress.d.ts +16 -2
  340. package/dist/cli/utils/progress.js +31 -14
  341. package/dist/coordination/consensus/consensus-engine.js +3 -1
  342. package/dist/coordination/handlers/code-intelligence-handlers.js +3 -2
  343. package/dist/coordination/handlers/coverage-collection.d.ts +2 -0
  344. package/dist/coordination/handlers/coverage-collection.js +5 -2
  345. package/dist/coordination/handlers/coverage-evidence.d.ts +75 -0
  346. package/dist/coordination/handlers/coverage-evidence.js +159 -0
  347. package/dist/coordination/handlers/coverage-handlers.js +16 -3
  348. package/dist/coordination/handlers/coverage-runner.d.ts +3 -8
  349. package/dist/coordination/handlers/coverage-runner.js +6 -22
  350. package/dist/coordination/handlers/coverage-scope.d.ts +40 -0
  351. package/dist/coordination/handlers/coverage-scope.js +321 -0
  352. package/dist/coordination/handlers/coverage-stderr.d.ts +23 -0
  353. package/dist/coordination/handlers/coverage-stderr.js +39 -0
  354. package/dist/coordination/handlers/coverage-target.d.ts +9 -0
  355. package/dist/coordination/handlers/coverage-target.js +21 -8
  356. package/dist/coordination/handlers/handler-utils.d.ts +5 -0
  357. package/dist/coordination/handlers/handler-utils.js +11 -5
  358. package/dist/coordination/handlers/requirements-handlers.js +3 -2
  359. package/dist/coordination/handlers/security-handlers.js +34 -20
  360. package/dist/coordination/queen-coordinator.js +8 -3
  361. package/dist/coordination/task-executability.d.ts +12 -0
  362. package/dist/coordination/task-executability.js +27 -0
  363. package/dist/coordination/workflow-orchestrator.d.ts +6 -0
  364. package/dist/coordination/workflow-orchestrator.js +22 -8
  365. package/dist/domains/code-intelligence/services/metric-collector/listing-process-owner.js +4 -1
  366. package/dist/domains/code-intelligence/services/product-factors-bridge.js +7 -4
  367. package/dist/domains/code-intelligence/services/semantic-analyzer.d.ts +8 -0
  368. package/dist/domains/code-intelligence/services/semantic-analyzer.js +10 -7
  369. package/dist/domains/coverage-analysis/services/coverage-parser.js +19 -10
  370. package/dist/domains/learning-optimization/interfaces.d.ts +2 -0
  371. package/dist/domains/learning-optimization/services/learning-coordinator.js +2 -1
  372. package/dist/domains/learning-optimization/services/metrics-optimizer.js +14 -4
  373. package/dist/domains/learning-optimization/services/production-intel.js +3 -1
  374. package/dist/domains/security-compliance/generic-finding-dedup.d.ts +40 -0
  375. package/dist/domains/security-compliance/generic-finding-dedup.js +63 -0
  376. package/dist/domains/security-compliance/services/scanners/dependency-resolver.js +14 -6
  377. package/dist/domains/security-compliance/services/scanners/sast-scanner.js +4 -2
  378. package/dist/domains/security-compliance/services/security-auditor-sast.js +2 -2
  379. package/dist/domains/security-compliance/services/security-auditor-secrets.js +2 -2
  380. package/dist/domains/security-compliance/services/security-auditor.js +3 -2
  381. package/dist/domains/test-execution/coordinator.d.ts +2 -1
  382. package/dist/domains/test-execution/coordinator.js +5 -14
  383. package/dist/domains/test-execution/interfaces.d.ts +11 -1
  384. package/dist/domains/test-execution/services/retry-outcome.d.ts +18 -0
  385. package/dist/domains/test-execution/services/retry-outcome.js +53 -0
  386. package/dist/domains/test-generation/coordinator.js +2 -2
  387. package/dist/domains/test-generation/services/pattern-matcher.js +4 -4
  388. package/dist/domains/test-generation/services/test-generator.js +2 -2
  389. package/dist/governance/evolution-pipeline-integration.js +3 -1
  390. package/dist/hooks/cross-phase-hooks.js +3 -1
  391. package/dist/init/init-wizard-steps.js +5 -1
  392. package/dist/init/phases/04-database.js +7 -0
  393. package/dist/init/phases/10-workers.js +42 -4
  394. package/dist/init/phases/12-verification.js +14 -4
  395. package/dist/init/settings-merge.js +7 -4
  396. package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.d.ts +29 -0
  397. package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.js +70 -6
  398. package/dist/integrations/agentic-flow/reasoning-bank/index.d.ts +10 -3
  399. package/dist/integrations/agentic-flow/reasoning-bank/index.js +13 -0
  400. package/dist/integrations/ruvector/filter-adapter.js +2 -1
  401. package/dist/learning/dream/insight-generator.js +5 -4
  402. package/dist/learning/embedder-endpoint-client.d.ts +8 -0
  403. package/dist/learning/embedder-endpoint-client.js +20 -0
  404. package/dist/learning/embedder-recovery.d.ts +63 -0
  405. package/dist/learning/embedder-recovery.js +94 -0
  406. package/dist/learning/memory-auditor.js +3 -1
  407. package/dist/learning/qe-patterns.js +2 -1
  408. package/dist/learning/qe-reasoning-bank-types.d.ts +5 -0
  409. package/dist/learning/qe-reasoning-bank.d.ts +21 -0
  410. package/dist/learning/qe-reasoning-bank.js +54 -8
  411. package/dist/learning/real-embeddings.d.ts +23 -0
  412. package/dist/learning/real-embeddings.js +69 -2
  413. package/dist/learning/real-qe-reasoning-bank.d.ts +39 -0
  414. package/dist/learning/real-qe-reasoning-bank.js +108 -38
  415. package/dist/logging/redaction.js +142 -12
  416. package/dist/mcp/bundle.js +520 -503
  417. package/dist/mcp/daemon-mode.d.ts +126 -0
  418. package/dist/mcp/daemon-mode.js +257 -0
  419. package/dist/mcp/entry.d.ts +4 -0
  420. package/dist/mcp/entry.js +50 -2
  421. package/dist/mcp/handlers/domain-handler-configs.d.ts +2 -0
  422. package/dist/mcp/handlers/domain-handler-configs.js +13 -2
  423. package/dist/mcp/handlers/orchestrate-routes.d.ts +6 -1
  424. package/dist/mcp/handlers/orchestrate-routes.js +53 -0
  425. package/dist/mcp/handlers/task-handlers.d.ts +23 -1
  426. package/dist/mcp/handlers/task-handlers.js +90 -19
  427. package/dist/mcp/handlers/validation-pipeline-handler.js +9 -9
  428. package/dist/mcp/protocol-server.js +11 -8
  429. package/dist/mcp/qe-tool-bridge.js +3 -0
  430. package/dist/mcp/services/reasoning-bank-service.d.ts +9 -2
  431. package/dist/mcp/services/reasoning-bank-service.js +13 -0
  432. package/dist/mcp/tool-annotations.js +4 -1
  433. package/dist/mcp/tools/coherence/check.js +1 -0
  434. package/dist/mcp/tools/coherence/consensus.js +4 -2
  435. package/dist/mcp/tools/learning-optimization/optimize.js +1 -2
  436. package/dist/mcp/tools/mincut/index.js +3 -0
  437. package/dist/mcp/tools/quality-assessment/gate.js +7 -0
  438. package/dist/mcp/tools/qx-analysis/analyze.js +1 -0
  439. package/dist/mcp/tools/requirements-validation/quality-criteria.js +10 -3
  440. package/dist/mcp/tools/security-compliance/scan.js +4 -2
  441. package/dist/mcp/tools/test-execution/e2e-execute.js +2 -2
  442. package/dist/mcp/tools/test-execution/execute.js +3 -2
  443. package/dist/mcp/types.d.ts +14 -0
  444. package/dist/memory/crdt/crdt-store.js +5 -0
  445. package/dist/memory/crdt/lww-register.js +12 -2
  446. package/dist/optimization/early-exit-token-optimizer.js +3 -1
  447. package/dist/planning/goap-planner.js +5 -0
  448. package/dist/planning/plan-executor.js +5 -0
  449. package/dist/routing/advisor/redaction.js +22 -2
  450. package/dist/shared/io/confined-read.d.ts +74 -0
  451. package/dist/shared/io/confined-read.js +256 -0
  452. package/dist/shared/io/file-reader.d.ts +6 -6
  453. package/dist/shared/io/file-reader.js +16 -42
  454. package/dist/shared/llm/providers/claude-code.js +4 -1
  455. package/dist/shared/llm/providers/response-deadline.js +16 -2
  456. package/dist/shared/native-module-errors.d.ts +51 -0
  457. package/dist/shared/native-module-errors.js +129 -0
  458. package/dist/shared/safe-db.js +14 -4
  459. package/dist/shared/security/osv-client.js +4 -1
  460. package/dist/shared/types/index.js +3 -1
  461. package/dist/shared/types/test-frameworks.js +2 -2
  462. package/dist/strange-loop/infra-healing/infra-aware-agent-provider.js +8 -1
  463. package/dist/sync/readers/json-reader.js +2 -1
  464. package/dist/validation/anchor-set.d.ts +6 -0
  465. package/dist/validation/anchor-set.js +9 -1
  466. package/dist/validation/quality-gate-runner.d.ts +7 -1
  467. package/dist/validation/quality-gate-runner.js +3 -3
  468. package/package.json +3 -3
  469. package/dist/cli/chunks/adapter-TR5SLAZC.js +0 -2
  470. package/dist/cli/chunks/aqe-learning-engine-DXWKCHY2.js +0 -2
  471. package/dist/cli/chunks/base-GTB6POYE.js +0 -2
  472. package/dist/cli/chunks/browser-workflow-MSBOLYUY.js +0 -2
  473. package/dist/cli/chunks/chunk-4SJYIX54.js +0 -3
  474. package/dist/cli/chunks/chunk-6P7424AO.js +0 -21
  475. package/dist/cli/chunks/chunk-6X5DHU6Q.js +0 -14
  476. package/dist/cli/chunks/chunk-CMBLM26R.js +0 -2
  477. package/dist/cli/chunks/chunk-DKAC3E3B.js +0 -3
  478. package/dist/cli/chunks/chunk-DURHK377.js +0 -742
  479. package/dist/cli/chunks/chunk-FPUDRSFJ.js +0 -180
  480. package/dist/cli/chunks/chunk-G5I6KGMW.js +0 -59
  481. package/dist/cli/chunks/chunk-HOZUDE4C.js +0 -2
  482. package/dist/cli/chunks/chunk-N6PIIK6G.js +0 -3
  483. package/dist/cli/chunks/chunk-NSHU347M.js +0 -2
  484. package/dist/cli/chunks/chunk-PPSAMXYN.js +0 -13
  485. package/dist/cli/chunks/chunk-TYFZXDGZ.js +0 -4
  486. package/dist/cli/chunks/chunk-U4OICXV2.js +0 -6
  487. package/dist/cli/chunks/chunk-WSF24I3D.js +0 -2
  488. package/dist/cli/chunks/chunk-XBVUVFJK.js +0 -4
  489. package/dist/cli/chunks/chunk-XUZDBQ5X.js +0 -6
  490. package/dist/cli/chunks/chunk-YBSBABOS.js +0 -2
  491. package/dist/cli/chunks/chunk-ZG5666GJ.js +0 -2
  492. package/dist/cli/chunks/ci-MSKMVH5X.js +0 -81
  493. package/dist/cli/chunks/client-POSVREVS.js +0 -2
  494. package/dist/cli/chunks/core-handlers-V243GY7X.js +0 -2
  495. package/dist/cli/chunks/coverage-B7MCGNTE.js +0 -49
  496. package/dist/cli/chunks/cross-domain-router-N3AIEM3B.js +0 -2
  497. package/dist/cli/chunks/dream-UA7MKOPQ.js +0 -2
  498. package/dist/cli/chunks/file-discovery-YCMNKZAK.js +0 -2
  499. package/dist/cli/chunks/fleet-2Y3ZE6CE.js +0 -46
  500. package/dist/cli/chunks/heartbeat-scheduler-QH5V6G2P.js +0 -2
  501. package/dist/cli/chunks/hnsw-adapter-OJNFAGJS.js +0 -2
  502. package/dist/cli/chunks/hnsw-index-DFUNARVD.js +0 -2
  503. package/dist/cli/chunks/hybrid-backend-SSGQQEQ2.js +0 -2
  504. package/dist/cli/chunks/impact-analyzer-CRGCA7ZD.js +0 -2
  505. package/dist/cli/chunks/init-wizard-NIMZ4J55.js +0 -2
  506. package/dist/cli/chunks/kernel-JQK7PRAI.js +0 -2
  507. package/dist/cli/chunks/knowledge-graph-YPVVIKEU.js +0 -2
  508. package/dist/cli/chunks/llm-router-service-5OGAUOXF.js +0 -2
  509. package/dist/cli/chunks/load-test-UKNV5MWW.js +0 -2
  510. package/dist/cli/chunks/memory-backend-ZW4BTRNK.js +0 -2
  511. package/dist/cli/chunks/memory-handlers-FCXN437E.js +0 -2
  512. package/dist/cli/chunks/pattern-null-store-4DUV6MQC.js +0 -2
  513. package/dist/cli/chunks/project-root-JCAUNL6O.js +0 -2
  514. package/dist/cli/chunks/protocol-executor-RNZNZP3A.js +0 -2
  515. package/dist/cli/chunks/qe-reasoning-bank-WK6TQOG2.js +0 -2
  516. package/dist/cli/chunks/queen-coordinator-4452SXZQ.js +0 -2
  517. package/dist/cli/chunks/real-embeddings-RWGOVOXO.js +0 -2
  518. package/dist/cli/chunks/router-3DIS5X4R.js +0 -2
  519. package/dist/cli/chunks/routing-feedback-OPXRCXM7.js +0 -2
  520. package/dist/cli/chunks/rvf-dual-writer-JL6T727I.js +0 -2
  521. package/dist/cli/chunks/rvf-migration-adapter-V7IBDUCS.js +0 -2
  522. package/dist/cli/chunks/rvf-native-adapter-O3UQTEBK.js +0 -2
  523. package/dist/cli/chunks/safe-db-EVB4ZC7T.js +0 -2
  524. package/dist/cli/chunks/schedule-ORDDXXY4.js +0 -2
  525. package/dist/cli/chunks/scheduler-XFLJSFIU.js +0 -2
  526. package/dist/cli/chunks/sqlite-persistence-Y7B42CJ3.js +0 -2
  527. package/dist/cli/chunks/task-handlers-KPWAEMKH.js +0 -9
  528. package/dist/cli/chunks/test-runner-process-3XZUYST2.js +0 -2
  529. package/dist/cli/chunks/tree-sitter-wasm-parser-YTBCBHUO.js +0 -2
  530. package/dist/cli/chunks/unified-memory-EHD4VNFW.js +0 -2
  531. package/dist/cli/chunks/unified-memory-hnsw-ZODGM4UK.js +0 -2
  532. package/dist/cli/chunks/unified-persistence-MHSI7ABK.js +0 -2
  533. package/dist/cli/chunks/visual-security-54MLFKWY.js +0 -2
  534. package/dist/cli/chunks/witness-chain-LC6Q2W27.js +0 -2
  535. package/dist/cli/chunks/witness-chain-QUIBAF3W.js +0 -2
  536. package/dist/cli/chunks/workflow-orchestrator-UKHEJVSK.js +0 -2
@@ -9,7 +9,7 @@
9
9
  */
10
10
  import { LoggerFactory } from '../../logging/index.js';
11
11
  import { v4 as uuidv4 } from 'uuid';
12
- import { readFile } from 'node:fs/promises';
12
+ import { readConfinedText } from '../../shared/io/confined-read.js';
13
13
  import { ok, err, } from '../../shared/types/index.js';
14
14
  import { toError } from '../../shared/error-utils.js';
15
15
  // Opt-in free-tier local test generation (cross-pollination plan 06, D7-wire/D8/D9).
@@ -425,7 +425,7 @@ export class TestGenerationCoordinator extends BaseDomainCoordinator {
425
425
  return null;
426
426
  let code = '';
427
427
  try {
428
- code = await readFile(src, 'utf8');
428
+ code = await readConfinedText(src, { outsideRoot: 'allow' }); // #1161
429
429
  }
430
430
  catch {
431
431
  return null; // unreadable → fall back
@@ -7,7 +7,7 @@
7
7
  */
8
8
  import { v4 as uuidv4 } from 'uuid';
9
9
  import ts from 'typescript';
10
- import * as fs from 'fs';
10
+ import { readConfinedTextSync } from '../../../shared/io/confined-read.js';
11
11
  import * as path from 'path';
12
12
  import { ok, err } from '../../../shared/types/index.js';
13
13
  import { NomicEmbedder, EMBEDDING_CONFIG } from '../../../shared/embeddings/index.js';
@@ -45,7 +45,7 @@ export class PatternMatcherService {
45
45
  // Read file content
46
46
  let content;
47
47
  try {
48
- content = fs.readFileSync(filePath, 'utf-8');
48
+ content = readConfinedTextSync(filePath, { outsideRoot: 'allow' }); // #1161
49
49
  }
50
50
  catch {
51
51
  return err(new Error(`Cannot read file: ${filePath}`));
@@ -737,7 +737,7 @@ export class PatternMatcherService {
737
737
  // Read the file content
738
738
  let content;
739
739
  try {
740
- content = fs.readFileSync(file, 'utf-8');
740
+ content = readConfinedTextSync(file, { outsideRoot: 'allow' }); // #1161
741
741
  }
742
742
  catch {
743
743
  // File doesn't exist or can't be read, return empty
@@ -1068,7 +1068,7 @@ class TypeScriptASTParser {
1068
1068
  this.sourceCode = content;
1069
1069
  }
1070
1070
  else {
1071
- this.sourceCode = fs.readFileSync(filePath, 'utf-8');
1071
+ this.sourceCode = readConfinedTextSync(filePath, { outsideRoot: 'allow' }); // #1161
1072
1072
  }
1073
1073
  this.sourceFile = ts.createSourceFile(path.basename(filePath), this.sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);
1074
1074
  return this.sourceFile;
@@ -10,7 +10,7 @@ import { generateBehaviorExamples } from './behavior-examples.js';
10
10
  import { validateBehaviorExamples } from './behavior-example-validation.js';
11
11
  import { LoggerFactory } from '../../../logging/index.js';
12
12
  import { v4 as uuidv4 } from 'uuid';
13
- import * as fs from 'fs';
13
+ import { readConfinedTextSync } from '../../../shared/io/confined-read.js';
14
14
  import * as path from 'path';
15
15
  import ts from 'typescript';
16
16
  import { ok, err } from '../../../shared/types/index.js';
@@ -445,7 +445,7 @@ Return a JSON array of test suggestions, each with: { "name": "test name", "desc
445
445
  let codeAnalysis = null;
446
446
  let sourceContent = '';
447
447
  try {
448
- sourceContent = fs.readFileSync(sourceFile, 'utf-8');
448
+ sourceContent = readConfinedTextSync(sourceFile, { outsideRoot: 'allow' }); // #1161
449
449
  codeAnalysis = await this.analyzeSourceCode(sourceContent, sourceFile);
450
450
  }
451
451
  catch {
@@ -19,6 +19,7 @@
19
19
  import { governanceFlags } from './feature-flags.js';
20
20
  import { getUnifiedMemory } from '../kernel/unified-memory.js';
21
21
  import { toErrorMessage } from '../shared/error-utils.js';
22
+ import { createSafeRecord } from '../shared/utils/safe-record.js';
22
23
  // ============================================================================
23
24
  // Feature Flag Helpers
24
25
  // ============================================================================
@@ -799,7 +800,8 @@ export class EvolutionPipelineIntegration {
799
800
  * Group array by key function
800
801
  */
801
802
  groupBy(array, keyFn) {
802
- const groups = {};
803
+ // #1157: keys come from recorded rule applications.
804
+ const groups = createSafeRecord();
803
805
  for (const item of array) {
804
806
  const key = keyFn(item);
805
807
  if (!groups[key]) {
@@ -12,6 +12,7 @@ import { join } from 'path';
12
12
  import { parse as parseYaml } from 'yaml';
13
13
  import { getCrossPhaseMemory, } from '../memory/cross-phase-memory.js';
14
14
  import { captureHooksConfigSnapshot, validateHookUrl, classifyHookExit, } from './security/index.js';
15
+ import { createSafeRecord } from '../shared/utils/safe-record.js';
15
16
  // =============================================================================
16
17
  // Hook Executor
17
18
  // =============================================================================
@@ -79,7 +80,8 @@ export class CrossPhaseHookExecutor {
79
80
  // IMP-07: Runtime kill-switch check
80
81
  if (process.env.AQE_HOOKS_DISABLED === 'true')
81
82
  return {};
82
- const injectedSignals = {};
83
+ // #1157: agent names come from the hooks YAML file.
84
+ const injectedSignals = createSafeRecord();
83
85
  const matchingHooks = this.filterManagedHooks(Object.entries(this.config.hooks).filter(([_, hook]) => hook.trigger.event === 'phase-start' &&
84
86
  hook.trigger.phase === phaseName));
85
87
  for (const [hookName, hook] of matchingHooks) {
@@ -11,6 +11,7 @@ import { createSkillsInstaller } from './skills-installer.js';
11
11
  import { createAgentsInstaller } from './agents-installer.js';
12
12
  import { createN8nInstaller } from './n8n-installer.js';
13
13
  import { toErrorMessage } from '../shared/error-utils.js';
14
+ import { isNativeModuleLoadFailure, withNativeModuleRemedy } from '../shared/native-module-errors.js';
14
15
  import { openDatabase } from '../shared/safe-db.js';
15
16
  import { safeJsonParse } from '../shared/safe-json.js';
16
17
  // ============================================================================
@@ -112,7 +113,7 @@ export async function initializePersistenceDatabase(projectRoot) {
112
113
  const mod = await import('better-sqlite3');
113
114
  Database = mod.default;
114
115
  }
115
- catch (error) {
116
+ catch {
116
117
  throw new Error('SQLite persistence REQUIRED but better-sqlite3 is not installed.\n' +
117
118
  'Install it with: npm install better-sqlite3\n' +
118
119
  'If you see native compilation errors, ensure build tools are installed:\n' +
@@ -157,6 +158,9 @@ export async function initializePersistenceDatabase(projectRoot) {
157
158
  return true;
158
159
  }
159
160
  catch (error) {
161
+ if (isNativeModuleLoadFailure(error)) {
162
+ throw new Error(`SQLite persistence initialization FAILED: ${toErrorMessage(withNativeModuleRemedy(error))}`, { cause: error });
163
+ }
160
164
  throw new Error(`SQLite persistence initialization FAILED: ${error}\n` +
161
165
  `Database path: ${dbPath}\n` +
162
166
  'Ensure the directory is writable and has sufficient disk space.');
@@ -17,6 +17,8 @@ import { existsSync, mkdirSync } from 'fs';
17
17
  import { join } from 'path';
18
18
  import { BasePhase, } from './phase-interface.js';
19
19
  import { getAQEVersion } from '../types.js';
20
+ import { toErrorMessage } from '../../shared/error-utils.js';
21
+ import { isNativeModuleLoadFailure, withNativeModuleRemedy } from '../../shared/native-module-errors.js';
20
22
  /**
21
23
  * Database phase - initializes SQLite persistence via UnifiedMemoryManager
22
24
  */
@@ -106,6 +108,11 @@ export class DatabasePhase extends BasePhase {
106
108
  };
107
109
  }
108
110
  catch (error) {
111
+ // A native-addon load failure (#1173) is not a disk/permission problem:
112
+ // report the cause and the install fix instead of the generic advice.
113
+ if (isNativeModuleLoadFailure(error)) {
114
+ throw new Error(`SQLite persistence initialization FAILED: ${toErrorMessage(withNativeModuleRemedy(error))}`, { cause: error });
115
+ }
109
116
  throw new Error(`SQLite persistence initialization FAILED: ${error}\n` +
110
117
  `Database path: ${dbPath}\n` +
111
118
  'Ensure the directory is writable and has sufficient disk space.');
@@ -173,6 +173,26 @@ if (workersSetting !== undefined && ['false', '0', 'off', 'no'].includes(workers
173
173
  process.exit(0);
174
174
  }
175
175
 
176
+ // #1207: keep daemon.log bounded. The server truncates it on its heartbeat once
177
+ // it passes AQE_DAEMON_LOG_MAX_SIZE (default 5M, 0 or off disables); a log left
178
+ // over that size by an earlier run is moved to daemon.log.1 here, before
179
+ // anything writes to it. rename() replaces daemon.log.1 and never follows it.
180
+ function logMaxBytes() {
181
+ const text = String(process.env.AQE_DAEMON_LOG_MAX_SIZE || '').trim().toLowerCase();
182
+ if (['0', 'off', 'false', 'no', 'none', 'disable', 'disabled'].includes(text)) return 0;
183
+ const m = /^(\\d+)\\s*([kmg]?)b?$/.exec(text);
184
+ const bytes = m ? Number(m[1]) * { '': 1, k: 1024, m: 1048576, g: 1073741824 }[m[2]] : NaN;
185
+ return Number.isSafeInteger(bytes) && bytes >= 1024 ? bytes : 5 * 1048576;
186
+ }
187
+ function rotateLogAtStart(file) {
188
+ const max = logMaxBytes();
189
+ try {
190
+ const s = fs.lstatSync(file);
191
+ if (max > 0 && s.isFile() && s.size > max) fs.renameSync(file, file + '.1');
192
+ } catch {}
193
+ }
194
+ rotateLogAtStart(logFile);
195
+
176
196
  const ts = new Date().toISOString();
177
197
  appendFileSync(logFile, '[' + ts + '] Starting AQE v3 Worker Daemon...\\n');
178
198
 
@@ -228,10 +248,28 @@ if (binCandidate && binCandidate.endsWith('bundle.js')) {
228
248
  appendFileSync(logFile, '[' + ts + '] Using: ' + mcpCmd + ' ' + mcpArgs.join(' ') + '\\n');
229
249
 
230
250
  // #1066: keep a user's AQE_WORKERS_ENABLED (for example false) instead of forcing it on.
231
- const env = { ...process.env, AQE_STORAGE_PATH: '.agentic-qe', AQE_LEARNING_ENABLED: 'true', AQE_WORKERS_ENABLED: workersSetting ?? 'true', AQE_HTTP_PORT: '0' };
232
- const child = spawn(mcpCmd, mcpArgs, { cwd: projectRoot, env, detached: true, stdio: ['ignore', 'pipe', 'pipe'] });
233
- child.stdout.on('data', d => appendFileSync(logFile, d));
234
- child.stderr.on('data', d => appendFileSync(logFile, d));
251
+ // #1158: AQE_MCP_DAEMON=1 is daemon mode. The server has no stdin here, so
252
+ // without it the stdin-EOF guard (#513) shut it down right after starting;
253
+ // in daemon mode it stops only on SIGTERM/SIGINT (stop-daemon.cjs).
254
+ const env = { ...process.env, AQE_STORAGE_PATH: '.agentic-qe', AQE_LEARNING_ENABLED: 'true', AQE_WORKERS_ENABLED: workersSetting ?? 'true', AQE_HTTP_PORT: '0', AQE_MCP_DAEMON: '1' };
255
+ // #1158: the server writes daemon.log itself, through a descriptor opened
256
+ // here with the same symlink rules as appendFileSync. Piping its output
257
+ // through this script kept the script from exiting while the daemon ran, and
258
+ // once the script was gone nothing was logged any more.
259
+ function openLogFd(file) {
260
+ if (!isRegularOrAbsent(file)) return 'ignore';
261
+ const c = fs.constants;
262
+ try { return fs.openSync(file, c.O_APPEND | c.O_CREAT | c.O_WRONLY | (c.O_NOFOLLOW || 0), 0o644); } catch { return 'ignore'; }
263
+ }
264
+ const logFd = openLogFd(logFile);
265
+ // #1207: name the file behind the server's stdout/stderr so it can rotate it.
266
+ if (typeof logFd === 'number') env.AQE_MCP_DAEMON_LOG = logFile; else delete env.AQE_MCP_DAEMON_LOG;
267
+ let child;
268
+ try {
269
+ child = spawn(mcpCmd, mcpArgs, { cwd: projectRoot, env, detached: true, stdio: ['ignore', logFd, logFd] });
270
+ } finally {
271
+ if (typeof logFd === 'number') { try { fs.closeSync(logFd); } catch {} }
272
+ }
235
273
  let exited = null;
236
274
  child.on('exit', (code, signal) => { exited = { code, signal }; });
237
275
  // #1116: a command that cannot be started (no npx on PATH: spawn ENOENT) emits
@@ -13,6 +13,8 @@ import { BasePhase, } from './phase-interface.js';
13
13
  import { openDatabase } from '../../shared/safe-db.js';
14
14
  /** The `# <ISO timestamp>` header line written by configToYAML(). */
15
15
  const CONFIG_TIMESTAMP_LINE = /^# \d{4}-\d{2}-\d{2}T[\d:.]+Z$/;
16
+ /** #1157: config keys that would reach Object.prototype through a plain object. */
17
+ const UNSAFE_YAML_KEYS = new Set(['__proto__', 'constructor', 'prototype']);
16
18
  /**
17
19
  * Verification phase - verifies installation and writes markers
18
20
  */
@@ -173,8 +175,12 @@ export class VerificationPhase extends BasePhase {
173
175
  // Top-level key (no indentation)
174
176
  const topMatch = line.match(/^(\w+):\s*(.*)$/);
175
177
  if (topMatch) {
176
- currentSection = topMatch[1];
178
+ // #1157: keys come from config.yaml; a `__proto__` section (and
179
+ // everything under it) is skipped instead of re-prototyping result.
180
+ currentSection = UNSAFE_YAML_KEYS.has(topMatch[1]) ? '' : topMatch[1];
177
181
  currentSubSection = '';
182
+ if (!currentSection)
183
+ continue;
178
184
  const value = topMatch[2].trim();
179
185
  if (value && !value.startsWith('"')) {
180
186
  // Simple value
@@ -191,9 +197,11 @@ export class VerificationPhase extends BasePhase {
191
197
  // Second-level key (2-space indent)
192
198
  const subMatch = line.match(/^ {2}(\w+):\s*(.*)$/);
193
199
  if (subMatch && currentSection) {
194
- currentSubSection = subMatch[1];
200
+ currentSubSection = UNSAFE_YAML_KEYS.has(subMatch[1]) ? '' : subMatch[1];
201
+ if (!currentSubSection)
202
+ continue;
195
203
  const value = subMatch[2].trim();
196
- if (!result[currentSection]) {
204
+ if (!Object.hasOwn(result, currentSection) || !result[currentSection]) {
197
205
  result[currentSection] = {};
198
206
  }
199
207
  if (value) {
@@ -210,8 +218,10 @@ export class VerificationPhase extends BasePhase {
210
218
  if (thirdMatch && currentSection && currentSubSection) {
211
219
  const key = thirdMatch[1];
212
220
  const value = thirdMatch[2].trim();
221
+ if (UNSAFE_YAML_KEYS.has(key))
222
+ continue;
213
223
  const section = result[currentSection];
214
- if (!section[currentSubSection]) {
224
+ if (!Object.hasOwn(section, currentSubSection) || !section[currentSubSection]) {
215
225
  section[currentSubSection] = {};
216
226
  }
217
227
  if (typeof section[currentSubSection] === 'object' && !Array.isArray(section[currentSubSection])) {
@@ -8,6 +8,7 @@
8
8
  * - Generates full env vars and v3 settings sections
9
9
  */
10
10
  import { existsSync, readFileSync, writeFileSync } from 'fs';
11
+ import { getOwn, setOwn } from '../shared/utils/safe-record.js';
11
12
  /**
12
13
  * Create a one-time `.backup` of an existing settings.json before AQE modifies
13
14
  * it — mirroring the CLAUDE.md backup convention.
@@ -75,22 +76,24 @@ export function isAqeHookEntry(entry) {
75
76
  * 3. Preserve any hook types not in the new config
76
77
  */
77
78
  export function mergeHooksSmart(existingHooks, newAqeHooks) {
79
+ // #1157: hook types come from the user's settings.json; read and write own
80
+ // entries only, so a type named `constructor` or `__proto__` is kept as-is.
78
81
  const merged = {};
79
82
  // Process hook types that have new AQE entries
80
83
  for (const [hookType, newEntries] of Object.entries(newAqeHooks)) {
81
- const existing = existingHooks[hookType] || [];
84
+ const existing = getOwn(existingHooks, hookType) || [];
82
85
  // Keep only non-AQE entries from existing config
83
86
  const userEntries = Array.isArray(existing)
84
87
  ? existing.filter((entry) => !isAqeHookEntry(entry))
85
88
  : [];
86
89
  // New AQE hooks go after user hooks (except PreToolUse guard which should be first)
87
- merged[hookType] = [...newEntries, ...userEntries];
90
+ setOwn(merged, hookType, [...newEntries, ...userEntries]);
88
91
  }
89
92
  // Preserve hook types that are not in our new config (user's custom hook types)
90
93
  for (const [hookType, hookArray] of Object.entries(existingHooks)) {
91
- if (!merged[hookType]) {
94
+ if (!Object.hasOwn(merged, hookType)) {
92
95
  // This hook type isn't one we manage — keep it as-is
93
- merged[hookType] = hookArray;
96
+ setOwn(merged, hookType, hookArray);
94
97
  }
95
98
  }
96
99
  return merged;
@@ -71,6 +71,15 @@ export interface ExperienceGuidance {
71
71
  /** Estimated token savings */
72
72
  readonly estimatedTokenSavings: number;
73
73
  }
74
+ /**
75
+ * #1204: whether similar-experience guidance can use vectors. 'unavailable'
76
+ * means the embedder failed (or there is none): experiences are stored
77
+ * without vectors and getGuidance returns no guidance.
78
+ */
79
+ export interface ExperienceGuidanceStatus {
80
+ mode: 'vector' | 'unavailable';
81
+ reason?: string;
82
+ }
74
83
  /**
75
84
  * Configuration for ExperienceReplay
76
85
  */
@@ -89,6 +98,8 @@ export interface ExperienceReplayConfig {
89
98
  autoPrune: boolean;
90
99
  /** Prune threshold (quality below this is removed) */
91
100
  pruneThreshold: number;
101
+ /** #1204: after the embedder fails, wait this long before retrying it (default 60 s). */
102
+ embedderRetryIntervalMs?: number;
92
103
  }
93
104
  /**
94
105
  * ExperienceReplay stores and retrieves successful experiences for learning.
@@ -113,6 +124,13 @@ export declare class ExperienceReplay {
113
124
  private prepared;
114
125
  private initialized;
115
126
  private initializationPromise;
127
+ /**
128
+ * #1204: whether the embedder works; retried in the background after a
129
+ * failure, as the pattern banks do (#1187).
130
+ */
131
+ private readonly embedderRecovery;
132
+ /** Whether an embedding succeeded, to label later failures as runtime ones. */
133
+ private embedderWorked;
116
134
  private hnswIndex;
117
135
  private idToExperienceId;
118
136
  private experienceIdToHnswId;
@@ -150,6 +168,17 @@ export declare class ExperienceReplay {
150
168
  * @returns The stored experience
151
169
  */
152
170
  storeExperience(trajectory: Trajectory, strategy: string, tags?: string[]): Promise<Experience | null>;
171
+ /**
172
+ * #1022: embed text, or return null when no embedding runtime is available.
173
+ * The experience is then stored without a vector (backfilled at a later
174
+ * start that has an embedder) and similarity search finds no matches.
175
+ * #1204: a failure is reported by getEmbedderStatus(), labelled as a
176
+ * runtime failure when the embedder had worked, and warned about once per
177
+ * outage. The embedder is retried in the background after the interval.
178
+ */
179
+ private embedOrNull;
180
+ /** #1204: whether similar-experience guidance can use vectors, and if not why. */
181
+ getEmbedderStatus(): ExperienceGuidanceStatus;
153
182
  /**
154
183
  * Get guidance for a new task based on similar experiences
155
184
  *
@@ -14,7 +14,8 @@
14
14
  */
15
15
  import { v4 as uuidv4 } from 'uuid';
16
16
  import { getUnifiedMemory } from '../../../kernel/unified-memory.js';
17
- import { computeRealEmbedding, } from '../../../learning/real-embeddings.js';
17
+ import { computeRealEmbedding, cosineSimilarity, } from '../../../learning/real-embeddings.js';
18
+ import { EmbedderRecovery, probeEmbedder } from '../../../learning/embedder-recovery.js';
18
19
  import { CircularBuffer } from '../../../shared/utils/circular-buffer.js';
19
20
  import { HNSWEmbeddingIndex } from '../../embeddings/index/HNSWIndex.js';
20
21
  import { safeJsonParse } from '../../../shared/safe-json.js';
@@ -60,6 +61,13 @@ export class ExperienceReplay {
60
61
  prepared = new Map();
61
62
  initialized = false;
62
63
  initializationPromise = null;
64
+ /**
65
+ * #1204: whether the embedder works; retried in the background after a
66
+ * failure, as the pattern banks do (#1187).
67
+ */
68
+ embedderRecovery;
69
+ /** Whether an embedding succeeded, to label later failures as runtime ones. */
70
+ embedderWorked = false;
63
71
  // Real HNSW index for O(log n) similarity search (150x-12,500x faster than linear scan)
64
72
  hnswIndex;
65
73
  // Mapping from HNSW numeric IDs to experience string IDs
@@ -81,6 +89,11 @@ export class ExperienceReplay {
81
89
  constructor(config = {}) {
82
90
  this.config = { ...DEFAULT_CONFIG, ...config };
83
91
  this.recentExperiences = new CircularBuffer(100);
92
+ this.embedderRecovery = new EmbedderRecovery({
93
+ retryIntervalMs: this.config.embedderRetryIntervalMs,
94
+ probe: () => probeEmbedder(this.config.embedding),
95
+ onRecovered: () => console.log('[ExperienceReplay] Embedder available again: similar-experience guidance uses vectors'),
96
+ });
84
97
  // Initialize real HNSW index with optimal parameters for experience search
85
98
  this.hnswIndex = new HNSWEmbeddingIndex({
86
99
  dimension: 384, // all-MiniLM-L6-v2 dimension
@@ -399,7 +412,7 @@ export class ExperienceReplay {
399
412
  .map(s => scrubReasoningBlocks(s.action));
400
413
  // Generate embedding for similarity search
401
414
  const embeddingText = `${task} ${strategy} ${keyActions.join(' ')}`;
402
- const embedding = await computeRealEmbedding(embeddingText, this.config.embedding);
415
+ const embedding = (await this.embedOrNull(embeddingText)) ?? undefined;
403
416
  const id = uuidv4();
404
417
  const domain = trajectory.domain || 'test-generation';
405
418
  const experience = {
@@ -456,6 +469,40 @@ export class ExperienceReplay {
456
469
  }
457
470
  return experience;
458
471
  }
472
+ /**
473
+ * #1022: embed text, or return null when no embedding runtime is available.
474
+ * The experience is then stored without a vector (backfilled at a later
475
+ * start that has an embedder) and similarity search finds no matches.
476
+ * #1204: a failure is reported by getEmbedderStatus(), labelled as a
477
+ * runtime failure when the embedder had worked, and warned about once per
478
+ * outage. The embedder is retried in the background after the interval.
479
+ */
480
+ async embedOrNull(text) {
481
+ if (!this.embedderRecovery.isAvailable())
482
+ return null;
483
+ try {
484
+ const embedding = await computeRealEmbedding(text, this.config.embedding);
485
+ this.embedderWorked = true;
486
+ return embedding;
487
+ }
488
+ catch (error) {
489
+ const message = error instanceof Error ? error.message : String(error);
490
+ const reason = this.embedderWorked ? `Embedder failed at runtime: ${message}` : message;
491
+ if (this.embedderRecovery.markUnavailable(reason)) {
492
+ console.warn(this.embedderWorked
493
+ ? '[ExperienceReplay] Embedder failed; experiences are stored without vectors and ' +
494
+ 'similar-experience guidance is unavailable until it recovers:'
495
+ : '[ExperienceReplay] No embedding runtime; experiences are stored without vectors ' +
496
+ 'and similar-experience guidance is unavailable:', message);
497
+ }
498
+ return null;
499
+ }
500
+ }
501
+ /** #1204: whether similar-experience guidance can use vectors, and if not why. */
502
+ getEmbedderStatus() {
503
+ const reason = this.embedderRecovery.unavailableReason;
504
+ return reason === null ? { mode: 'vector' } : { mode: 'unavailable', reason };
505
+ }
459
506
  /**
460
507
  * Get guidance for a new task based on similar experiences
461
508
  *
@@ -465,9 +512,19 @@ export class ExperienceReplay {
465
512
  */
466
513
  async getGuidance(task, domain) {
467
514
  this.ensureInitialized();
515
+ // #1022: without an embedding of the query nothing measures relevance, so
516
+ // return no guidance rather than picks with a made-up similarity.
517
+ const queryEmbedding = await this.embedOrNull(scrubReasoningBlocks(task));
518
+ if (!queryEmbedding) {
519
+ return null;
520
+ }
468
521
  // Find similar experiences via HNSW
469
522
  const similar = await this.findSimilarExperiences(task, domain);
470
- // Blend in high-coherence experiences from reservoir buffer (R10, ADR-087)
523
+ // Blend in high-coherence experiences from reservoir buffer (R10, ADR-087).
524
+ // #1192: the buffer samples without looking at the query, so a sample is
525
+ // kept only when its similarity to the query embedding is measured and
526
+ // reaches the retrieval threshold. Samples without a comparable vector
527
+ // are skipped: every reported similarity is a measured one.
471
528
  if (this.reservoirBuffer && this.reservoirBuffer.size() > 0) {
472
529
  const reservoirSamples = this.reservoirBuffer.sample(Math.max(2, Math.floor(this.config.topK / 2)), 0.6);
473
530
  for (const entry of reservoirSamples) {
@@ -478,8 +535,12 @@ export class ExperienceReplay {
478
535
  // Skip if domain filter doesn't match
479
536
  if (domain && exp.domain !== domain)
480
537
  continue;
481
- // Add with a coherence-based similarity score
482
- similar.push({ experience: exp, similarity: entry.coherenceScore * 0.8 });
538
+ if (!exp.embedding || exp.embedding.length !== queryEmbedding.length)
539
+ continue;
540
+ const similarity = cosineSimilarity(queryEmbedding, exp.embedding);
541
+ if (similarity < this.config.similarityThreshold)
542
+ continue;
543
+ similar.push({ experience: exp, similarity });
483
544
  }
484
545
  }
485
546
  if (similar.length === 0) {
@@ -546,7 +607,10 @@ export class ExperienceReplay {
546
607
  // Generate embedding for the task
547
608
  // ADR-099: scrub so query embeddings match the scrubbed stored embeddings
548
609
  task = scrubReasoningBlocks(task);
549
- const taskEmbedding = await computeRealEmbedding(task, this.config.embedding);
610
+ const taskEmbedding = await this.embedOrNull(task);
611
+ if (!taskEmbedding) {
612
+ return [];
613
+ }
550
614
  // Create query embedding for HNSW search
551
615
  const queryEmbedding = {
552
616
  vector: taskEmbedding,
@@ -15,9 +15,9 @@
15
15
  * - Automatic strategy recommendations
16
16
  * - Pattern quality improvement over time
17
17
  */
18
- import { RealQEReasoningBank, type RealQEReasoningBankConfig, type RealQEPatternSearchResult, type RealQERoutingRequest, type RealQERoutingResult, type LearningOutcome } from '../../../learning/real-qe-reasoning-bank.js';
18
+ import { RealQEReasoningBank, type RealQEReasoningBankConfig, type RealQEPatternSearchResult, type PatternSearchStatus, type RealQERoutingRequest, type RealQERoutingResult, type LearningOutcome } from '../../../learning/real-qe-reasoning-bank.js';
19
19
  import { TrajectoryTracker, type Trajectory, type TrajectoryStep, type TrajectoryOptions, type TrajectoryTrackerConfig } from './trajectory-tracker.js';
20
- import { ExperienceReplay, type ExperienceGuidance, type ExperienceReplayConfig } from './experience-replay.js';
20
+ import { ExperienceReplay, type ExperienceGuidance, type ExperienceGuidanceStatus, type ExperienceReplayConfig } from './experience-replay.js';
21
21
  import { PatternEvolution, type PatternVersion, type DriftDetectionResult, type MergeCandidate, type PatternEvolutionConfig } from './pattern-evolution.js';
22
22
  import type { QEPattern, QEDomain, CreateQEPatternOptions } from '../../../learning/qe-patterns.js';
23
23
  export interface EnhancedReasoningBankAdapterStats {
@@ -32,7 +32,7 @@ export interface EnhancedReasoningBankAdapterStats {
32
32
  }
33
33
  import type { Result } from '../../../shared/types/index.js';
34
34
  export { TrajectoryTracker, createTrajectoryTracker, type Trajectory, type TrajectoryStep, type TrajectoryOptions, type TrajectoryTrackerConfig, } from './trajectory-tracker.js';
35
- export { ExperienceReplay, createExperienceReplay, type Experience, type ExperienceGuidance, type ExperienceReplayConfig, } from './experience-replay.js';
35
+ export { ExperienceReplay, createExperienceReplay, type Experience, type ExperienceGuidance, type ExperienceGuidanceStatus, type ExperienceReplayConfig, } from './experience-replay.js';
36
36
  export { PatternEvolution, createPatternEvolution, type PatternVersion, type DriftDetectionResult, type MergeCandidate, type PatternEvolutionConfig, } from './pattern-evolution.js';
37
37
  /**
38
38
  * Configuration for Enhanced ReasoningBank Adapter
@@ -183,6 +183,13 @@ export declare class EnhancedReasoningBankAdapter {
183
183
  domain?: QEDomain;
184
184
  minSimilarity?: number;
185
185
  }): Promise<Result<RealQEPatternSearchResult[]>>;
186
+ /** #1022: whether pattern search uses vectors or text matching only. */
187
+ getPatternSearchStatus(): PatternSearchStatus;
188
+ /**
189
+ * #1204: whether similar-experience guidance can use vectors; null when
190
+ * experience replay is disabled.
191
+ */
192
+ getExperienceGuidanceStatus(): ExperienceGuidanceStatus | null;
186
193
  /**
187
194
  * Record a pattern outcome with evolution tracking
188
195
  */
@@ -297,6 +297,19 @@ export class EnhancedReasoningBankAdapter {
297
297
  this.ensureInitialized();
298
298
  return this.reasoningBank.searchQEPatterns(query, options);
299
299
  }
300
+ /** #1022: whether pattern search uses vectors or text matching only. */
301
+ getPatternSearchStatus() {
302
+ this.ensureInitialized();
303
+ return this.reasoningBank.getPatternSearchStatus();
304
+ }
305
+ /**
306
+ * #1204: whether similar-experience guidance can use vectors; null when
307
+ * experience replay is disabled.
308
+ */
309
+ getExperienceGuidanceStatus() {
310
+ this.ensureInitialized();
311
+ return this.experienceReplay?.getEmbedderStatus() ?? null;
312
+ }
300
313
  /**
301
314
  * Record a pattern outcome with evolution tracking
302
315
  */
@@ -69,7 +69,8 @@ function resolveField(result, fieldPath) {
69
69
  for (const part of parts) {
70
70
  if (current === null || current === undefined)
71
71
  break;
72
- if (typeof current === 'object') {
72
+ // #1157: an inherited member such as `toString` is not a field.
73
+ if (typeof current === 'object' && Object.hasOwn(current, part)) {
73
74
  current = current[part];
74
75
  }
75
76
  else {
@@ -14,6 +14,7 @@
14
14
  * @module learning/dream/insight-generator
15
15
  */
16
16
  import { randomUUID } from 'crypto';
17
+ import { getOwn, setOwn } from '../../shared/utils/safe-record.js';
17
18
  /**
18
19
  * Default insight configuration
19
20
  */
@@ -320,10 +321,10 @@ export class InsightGenerator {
320
321
  };
321
322
  for (const node of activeNodes) {
322
323
  const typeKey = node.conceptType ?? 'pattern';
323
- if (!byType[typeKey]) {
324
- byType[typeKey] = [];
325
- }
326
- byType[typeKey].push(node);
324
+ // #1157: concept types come from stored nodes; own buckets only.
325
+ const bucket = getOwn(byType, typeKey) ?? [];
326
+ setOwn(byType, typeKey, bucket);
327
+ bucket.push(node);
327
328
  }
328
329
  // Gap: Error without resolution
329
330
  for (const errorNode of byType.error ?? []) {
@@ -121,6 +121,14 @@ export declare class EmbedderEndpointClient {
121
121
  failures: number;
122
122
  trippedAt: number | null;
123
123
  };
124
+ /**
125
+ * #1204: probe the endpoint while the circuit breaker is open, as its single
126
+ * half-open trial. Other callers keep fast-failing meanwhile. A success
127
+ * closes the breaker and refreshes the identity; a failure keeps the
128
+ * breaker open for another full window. Lets a caller that rate-limits its
129
+ * own retries recover without also waiting out the breaker window.
130
+ */
131
+ probeThroughOpenBreaker(): Promise<EndpointIdentity>;
124
132
  /**
125
133
  * Close the underlying keep-alive agent. Tests should call this in afterEach.
126
134
  */
@@ -125,6 +125,10 @@ class CircuitBreaker {
125
125
  }
126
126
  return true;
127
127
  }
128
+ /** #1204: open (or re-open) the breaker for a full window from now. */
129
+ trip() {
130
+ this.trippedAt = Date.now();
131
+ }
128
132
  /** For tests / observability */
129
133
  getState() {
130
134
  return { open: this.isOpen(), failures: this.failures.length, trippedAt: this.trippedAt };
@@ -266,6 +270,22 @@ export class EmbedderEndpointClient {
266
270
  getBreakerState() {
267
271
  return this.breaker.getState();
268
272
  }
273
+ /**
274
+ * #1204: probe the endpoint while the circuit breaker is open, as its single
275
+ * half-open trial. Other callers keep fast-failing meanwhile. A success
276
+ * closes the breaker and refreshes the identity; a failure keeps the
277
+ * breaker open for another full window. Lets a caller that rate-limits its
278
+ * own retries recover without also waiting out the breaker window.
279
+ */
280
+ async probeThroughOpenBreaker() {
281
+ try {
282
+ return await this.probe();
283
+ }
284
+ catch (err) {
285
+ this.breaker.trip();
286
+ throw err;
287
+ }
288
+ }
269
289
  /**
270
290
  * Close the underlying keep-alive agent. Tests should call this in afterEach.
271
291
  */