agentic-qe 3.15.10 → 3.15.11

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 (482) hide show
  1. package/.claude/skills/skills-manifest.json +1 -1
  2. package/CHANGELOG.md +114 -0
  3. package/README.md +8 -0
  4. package/assets/skills/skills-manifest.json +1 -1
  5. package/dist/adapters/a2a/agent-cards/generator.js +6 -3
  6. package/dist/adapters/a2a/tasks/task-router.js +3 -1
  7. package/dist/adapters/trajectory-adapter.js +1 -1
  8. package/dist/agents/claim-verifier/verifiers/output-verifier.d.ts +3 -1
  9. package/dist/agents/claim-verifier/verifiers/output-verifier.js +31 -2
  10. package/dist/agents/overlay-loader.js +26 -21
  11. package/dist/cli/bundle.js +6 -6
  12. package/dist/cli/chunks/adapter-V4GSGOOK.js +2 -0
  13. package/dist/cli/chunks/{agent-booster-wasm-H7ANGXW4.js → agent-booster-wasm-TIDSQ3ZK.js} +2 -2
  14. package/dist/cli/chunks/{agent-handler-SVXSHEET.js → agent-handler-G3EPBVA7.js} +2 -2
  15. package/dist/cli/chunks/{agent-memory-branch-WKQH36XL.js → agent-memory-branch-ARC5C7GW.js} +2 -2
  16. package/dist/cli/chunks/aqe-learning-engine-6WQTM5YR.js +2 -0
  17. package/dist/cli/chunks/{arena-OPS36NFZ.js → arena-36DTATJV.js} +4 -4
  18. package/dist/cli/chunks/{arena-EKOOFVST.js → arena-K4I4QDXB.js} +2 -2
  19. package/dist/cli/chunks/{audit-AO5NDZRI.js → audit-WQSJSJZF.js} +3 -3
  20. package/dist/cli/chunks/base-AK7BXBX2.js +2 -0
  21. package/dist/cli/chunks/{better-sqlite3-TFLVEMMY.js → better-sqlite3-BB4K67MT.js} +2 -2
  22. package/dist/cli/chunks/{brain-handler-ADBBJPYW.js → brain-handler-CU3GOIU3.js} +3 -3
  23. package/dist/cli/chunks/{branch-enumerator-HGHUYYL5.js → branch-enumerator-NJQX7ZNB.js} +2 -2
  24. package/dist/cli/chunks/{browser-5LU6P4SZ.js → browser-6YJF4FQW.js} +2 -2
  25. package/dist/cli/chunks/browser-workflow-VTDFBW7T.js +2 -0
  26. package/dist/cli/chunks/{chunk-LQEURY7C.js → chunk-25P77WA5.js} +1 -1
  27. package/dist/cli/chunks/{chunk-FFTPAWM6.js → chunk-2CW7VRPH.js} +8 -8
  28. package/dist/cli/chunks/chunk-2DTX7YAZ.js +6 -0
  29. package/dist/cli/chunks/{chunk-6KIL6CMD.js → chunk-2KFFEKSI.js} +2 -2
  30. package/dist/cli/chunks/{chunk-UARKIZAS.js → chunk-2VLYUF7U.js} +2 -2
  31. package/dist/cli/chunks/{chunk-A55QKKT2.js → chunk-325QCVDI.js} +2 -2
  32. package/dist/cli/chunks/{chunk-FBXTQNRH.js → chunk-35M2X3C5.js} +2 -2
  33. package/dist/cli/chunks/{chunk-S75EYIJG.js → chunk-3RHOPP7A.js} +1 -1
  34. package/dist/cli/chunks/{chunk-SY2IB442.js → chunk-4HJKQIX5.js} +2 -2
  35. package/dist/cli/chunks/chunk-4MUBW4RT.js +7 -0
  36. package/dist/cli/chunks/{chunk-KSIWGGJI.js → chunk-4RAQ7PJA.js} +2 -2
  37. package/dist/cli/chunks/{chunk-DT7SIJOA.js → chunk-4RH5I24Q.js} +2 -2
  38. package/dist/cli/chunks/{chunk-JHIY4VCC.js → chunk-4UBVAJFO.js} +3 -3
  39. package/dist/cli/chunks/{chunk-RPHY2DU6.js → chunk-4UX35V7P.js} +2 -2
  40. package/dist/cli/chunks/{chunk-7LFZ4CHM.js → chunk-4X4MWMHB.js} +2 -2
  41. package/dist/cli/chunks/{chunk-TNMBRDCA.js → chunk-55CH76ZO.js} +3 -3
  42. package/dist/cli/chunks/{chunk-6S3WJGUV.js → chunk-57LNKSW7.js} +2 -2
  43. package/dist/cli/chunks/chunk-5ERFHEEE.js +14 -0
  44. package/dist/cli/chunks/{chunk-KNQ2ERFX.js → chunk-5HQP4SLM.js} +2 -2
  45. package/dist/cli/chunks/{chunk-XFVTGAAJ.js → chunk-5MNASJOH.js} +2 -2
  46. package/dist/cli/chunks/{chunk-UCJMVXO4.js → chunk-5MTWCCZJ.js} +2 -2
  47. package/dist/cli/chunks/{chunk-GZLZCZ42.js → chunk-5N25I53C.js} +2 -2
  48. package/dist/cli/chunks/{chunk-NGKNYIQZ.js → chunk-5WYZHDIZ.js} +1 -1
  49. package/dist/cli/chunks/{chunk-GWZZ7DAO.js → chunk-5YLOLACR.js} +2 -2
  50. package/dist/cli/chunks/{chunk-B6LTH6YV.js → chunk-672XOJDG.js} +1 -1
  51. package/dist/cli/chunks/{chunk-DNRWGATA.js → chunk-6NA3KZZT.js} +3 -3
  52. package/dist/cli/chunks/chunk-72ZBJD2E.js +3 -0
  53. package/dist/cli/chunks/{chunk-XLZYRTNO.js → chunk-76SNL7GU.js} +2 -2
  54. package/dist/cli/chunks/{chunk-37OWRCUN.js → chunk-7HEMJHPP.js} +2 -2
  55. package/dist/cli/chunks/{chunk-WQ4PYWSW.js → chunk-7R5HC56U.js} +1 -1
  56. package/dist/cli/chunks/{chunk-EDLFX4ZB.js → chunk-AFFN6E6Q.js} +2 -2
  57. package/dist/cli/chunks/{chunk-YCGP5VFP.js → chunk-AMZKAJLJ.js} +2 -2
  58. package/dist/cli/chunks/{chunk-OEKP73MC.js → chunk-AP3ADWDK.js} +2 -2
  59. package/dist/cli/chunks/{chunk-DE4YJQJF.js → chunk-APPZATXA.js} +2 -2
  60. package/dist/cli/chunks/{chunk-RWWOHCMG.js → chunk-AUUJBXWX.js} +2 -2
  61. package/dist/cli/chunks/{chunk-LRZY4KS2.js → chunk-BTVWA35P.js} +2 -2
  62. package/dist/cli/chunks/{chunk-4G63WT4F.js → chunk-BZPE3LDO.js} +2 -2
  63. package/dist/cli/chunks/{chunk-OY2AHLSF.js → chunk-CFWGGRE7.js} +1 -1
  64. package/dist/cli/chunks/{chunk-7OZVZIBE.js → chunk-CIAL4YRY.js} +2 -2
  65. package/dist/cli/chunks/{chunk-TBLI254A.js → chunk-CO3DX2AX.js} +2 -2
  66. package/dist/cli/chunks/{chunk-GHBNRMSJ.js → chunk-DDEOZPWJ.js} +2 -2
  67. package/dist/cli/chunks/{chunk-62OAY5KJ.js → chunk-DOBZPSKE.js} +1 -1
  68. package/dist/cli/chunks/{chunk-NVYIZCSR.js → chunk-DOFREOPQ.js} +2 -2
  69. package/dist/cli/chunks/{chunk-SU5H66SD.js → chunk-E44NNCEU.js} +2 -2
  70. package/dist/cli/chunks/{chunk-MG27QY4D.js → chunk-E6PF35JZ.js} +2 -2
  71. package/dist/cli/chunks/{chunk-4SJYIX54.js → chunk-EBPJY4DI.js} +2 -2
  72. package/dist/cli/chunks/{chunk-EWFECZ2U.js → chunk-EH2S6AOR.js} +2 -2
  73. package/dist/cli/chunks/{chunk-Y76IAYQD.js → chunk-EIDJNT5C.js} +1 -1
  74. package/dist/cli/chunks/{chunk-6PX4OXQO.js → chunk-EJPK7OTR.js} +2 -2
  75. package/dist/cli/chunks/{chunk-EAU5KDFO.js → chunk-EK5GMOSO.js} +1 -1
  76. package/dist/cli/chunks/{chunk-ABFFWZPC.js → chunk-ERN43HOX.js} +151 -149
  77. package/dist/cli/chunks/{chunk-SO45NA4D.js → chunk-ETVAYGCB.js} +11 -11
  78. package/dist/cli/chunks/{chunk-RK73HB2F.js → chunk-EWPUQCN4.js} +2 -2
  79. package/dist/cli/chunks/{chunk-DMFTELBS.js → chunk-FL32MTKT.js} +2 -2
  80. package/dist/cli/chunks/chunk-FLU5FDSC.js +742 -0
  81. package/dist/cli/chunks/{chunk-NZYLNXT6.js → chunk-FUYOOKTH.js} +5 -5
  82. package/dist/cli/chunks/{chunk-NAXGWDVM.js → chunk-FWSGPE3V.js} +3 -3
  83. package/dist/cli/chunks/{chunk-ATHWDAXB.js → chunk-FZHSG75I.js} +2 -2
  84. package/dist/cli/chunks/{chunk-OBAREPDC.js → chunk-G2IJFNZS.js} +2 -2
  85. package/dist/cli/chunks/{chunk-H32EPIR2.js → chunk-G4CKPWF6.js} +1 -1
  86. package/dist/cli/chunks/{chunk-SKQUUE4F.js → chunk-G4FAPO57.js} +2 -2
  87. package/dist/cli/chunks/{chunk-KG336OV3.js → chunk-G77MLBDF.js} +2 -2
  88. package/dist/cli/chunks/{chunk-V6JBOIMX.js → chunk-GBFUANTC.js} +1 -1
  89. package/dist/cli/chunks/{chunk-YAKGBHO4.js → chunk-GVKVJJQX.js} +2 -2
  90. package/dist/cli/chunks/{chunk-GJHWY3ZX.js → chunk-GWJWSLDA.js} +2 -2
  91. package/dist/cli/chunks/{chunk-WDVRE6GN.js → chunk-H43AFUKL.js} +2 -2
  92. package/dist/cli/chunks/chunk-H7BLYMNU.js +59 -0
  93. package/dist/cli/chunks/{chunk-NW5JUCCG.js → chunk-HDJUYAZG.js} +1 -1
  94. package/dist/cli/chunks/{chunk-FKL3R5JQ.js → chunk-HDNWSKHA.js} +2 -2
  95. package/dist/cli/chunks/{chunk-Z2O2YJAF.js → chunk-HFFPYC4G.js} +2 -2
  96. package/dist/cli/chunks/{chunk-WSF24I3D.js → chunk-HJ3XNTTJ.js} +2 -2
  97. package/dist/cli/chunks/{chunk-YDAQK5UF.js → chunk-HYXUN7BW.js} +1 -1
  98. package/dist/cli/chunks/{chunk-2ZI5FKSF.js → chunk-I36CRDHF.js} +2 -2
  99. package/dist/cli/chunks/{chunk-OY3NJNP2.js → chunk-I4K2HTQU.js} +1 -1
  100. package/dist/cli/chunks/{chunk-2ZMF4NCF.js → chunk-IENZSO3K.js} +2 -2
  101. package/dist/cli/chunks/chunk-IO5537OM.js +2 -0
  102. package/dist/cli/chunks/{chunk-G3CZCUPM.js → chunk-IOZRKXR5.js} +2 -2
  103. package/dist/cli/chunks/{chunk-BQUAE3CP.js → chunk-ITL3IN2E.js} +2 -2
  104. package/dist/cli/chunks/{chunk-3P34JFQH.js → chunk-ITPGWGQS.js} +14 -14
  105. package/dist/cli/chunks/{chunk-NSHU347M.js → chunk-IW6WDGHM.js} +1 -1
  106. package/dist/cli/chunks/{chunk-KOBVYY6H.js → chunk-J4JMCZVA.js} +2 -2
  107. package/dist/cli/chunks/{chunk-ACWFKES2.js → chunk-JFLU7L3W.js} +2 -2
  108. package/dist/cli/chunks/{chunk-YK7JN5N7.js → chunk-JGJXXAS6.js} +4 -4
  109. package/dist/cli/chunks/{chunk-ESUO3GTJ.js → chunk-JUMICXM6.js} +2 -2
  110. package/dist/cli/chunks/{chunk-VKRTTFB6.js → chunk-K2HBNYAZ.js} +2 -2
  111. package/dist/cli/chunks/{chunk-6MVVSSID.js → chunk-K7V2WZNF.js} +1 -1
  112. package/dist/cli/chunks/{chunk-XEB3NLJR.js → chunk-KDI5JOYZ.js} +2 -2
  113. package/dist/cli/chunks/{chunk-YKMU4LBV.js → chunk-KJCIMNHS.js} +1 -1
  114. package/dist/cli/chunks/{chunk-IKISCIGH.js → chunk-KKYO2NKV.js} +2 -2
  115. package/dist/cli/chunks/{chunk-VFSYMOAL.js → chunk-KSE5TDM5.js} +2 -2
  116. package/dist/cli/chunks/{chunk-V2RSNVMW.js → chunk-KSLLHFVY.js} +1 -1
  117. package/dist/cli/chunks/{chunk-6C3II5OM.js → chunk-KXS3Y2AX.js} +2 -2
  118. package/dist/cli/chunks/{chunk-LMS3Y7JD.js → chunk-LBX7M4LW.js} +2 -2
  119. package/dist/cli/chunks/{chunk-2XGVTYVX.js → chunk-LCVEEII4.js} +2 -2
  120. package/dist/cli/chunks/{chunk-C522H7XR.js → chunk-LD5CFK53.js} +32 -32
  121. package/dist/cli/chunks/{chunk-FESZBPUB.js → chunk-LPU6PAJE.js} +2 -2
  122. package/dist/cli/chunks/{chunk-7ZCDZHDB.js → chunk-LQ4NUC6Q.js} +2 -2
  123. package/dist/cli/chunks/chunk-LRL56ZYL.js +21 -0
  124. package/dist/cli/chunks/{chunk-D6DA2KFD.js → chunk-LXQ3B4RY.js} +2 -2
  125. package/dist/cli/chunks/{chunk-I33O4BRQ.js → chunk-M5RQ6U3G.js} +2 -2
  126. package/dist/cli/chunks/{chunk-6GP6W46M.js → chunk-M5XYIQYZ.js} +2 -2
  127. package/dist/cli/chunks/chunk-M7XFBSIK.js +2 -0
  128. package/dist/cli/chunks/{chunk-IPJ7Q3AJ.js → chunk-MIK4RBEH.js} +1 -1
  129. package/dist/cli/chunks/{chunk-GRCIBCJ2.js → chunk-NC6K7SCQ.js} +2 -2
  130. package/dist/cli/chunks/{chunk-CESIR27V.js → chunk-NKTWKYHB.js} +2 -2
  131. package/dist/cli/chunks/{chunk-OPFGRS5S.js → chunk-NPZOBSAN.js} +2 -2
  132. package/dist/cli/chunks/{chunk-PGYMKGOE.js → chunk-NQZNMCZU.js} +2 -2
  133. package/dist/cli/chunks/{chunk-2T7RRL6G.js → chunk-NT7JRHMH.js} +1 -1
  134. package/dist/cli/chunks/{chunk-H2PYU7MN.js → chunk-NTB342NJ.js} +1 -1
  135. package/dist/cli/chunks/{chunk-NPPHWFA2.js → chunk-O4JAKWWM.js} +13 -13
  136. package/dist/cli/chunks/{chunk-APSRPR4W.js → chunk-OD5D4LSZ.js} +2 -2
  137. package/dist/cli/chunks/{chunk-UHTTW3IT.js → chunk-OH5V5EJW.js} +2 -2
  138. package/dist/cli/chunks/{chunk-PFG6VQ5Z.js → chunk-OHR7C777.js} +2 -2
  139. package/dist/cli/chunks/{chunk-U53ZB4IX.js → chunk-OURITHFV.js} +2 -2
  140. package/dist/cli/chunks/{chunk-DEF34AFL.js → chunk-OV5RPLKV.js} +2 -2
  141. package/dist/cli/chunks/{chunk-GJMLK5UT.js → chunk-OYJC3YON.js} +2 -2
  142. package/dist/cli/chunks/{chunk-AH3ZD3NJ.js → chunk-QDESWOZP.js} +2 -2
  143. package/dist/cli/chunks/chunk-R5GRABPQ.js +2 -0
  144. package/dist/cli/chunks/{chunk-CZGOSJQ4.js → chunk-R5LGV6GZ.js} +2 -2
  145. package/dist/cli/chunks/{chunk-MNN5J4GU.js → chunk-RBZCA7SD.js} +2 -2
  146. package/dist/cli/chunks/chunk-RQMCZQN2.js +2 -0
  147. package/dist/cli/chunks/chunk-RTFKTKSO.js +4 -0
  148. package/dist/cli/chunks/{chunk-FB6TI3BH.js → chunk-RTY7VSZB.js} +2 -2
  149. package/dist/cli/chunks/{chunk-2SXBBUM6.js → chunk-S6IYEBAI.js} +2 -2
  150. package/dist/cli/chunks/{chunk-YYTGXD3R.js → chunk-SMVVAVN2.js} +2 -2
  151. package/dist/cli/chunks/{chunk-MA7JIQ6U.js → chunk-T5KHJ3J7.js} +5 -5
  152. package/dist/cli/chunks/{chunk-FZOWULMH.js → chunk-TCYSBC7Y.js} +1 -1
  153. package/dist/cli/chunks/{chunk-IU2IV4NE.js → chunk-TFW7CCKS.js} +1 -1
  154. package/dist/cli/chunks/chunk-TL6OFMXF.js +6 -0
  155. package/dist/cli/chunks/{chunk-ERQKYIP7.js → chunk-U3LJNNVJ.js} +5 -5
  156. package/dist/cli/chunks/{chunk-5E6GHSTY.js → chunk-UKKYMW3S.js} +2 -2
  157. package/dist/cli/chunks/{chunk-YK3BVZY6.js → chunk-UMVSWQNB.js} +2 -2
  158. package/dist/cli/chunks/{chunk-CFBEBXLO.js → chunk-UTTSH4NH.js} +3 -3
  159. package/dist/cli/chunks/{chunk-6XCMKIZN.js → chunk-V5AADCBC.js} +1 -1
  160. package/dist/cli/chunks/{chunk-5LPYV3TK.js → chunk-V7DA4HAK.js} +1 -1
  161. package/dist/cli/chunks/{chunk-7PJIR4ST.js → chunk-VBK2YAYY.js} +2 -2
  162. package/dist/cli/chunks/{chunk-ODJNUMV3.js → chunk-VEEYL2CZ.js} +2 -2
  163. package/dist/cli/chunks/{chunk-PPSAMXYN.js → chunk-VLD7Z2ED.js} +3 -3
  164. package/dist/cli/chunks/{chunk-N6PIIK6G.js → chunk-VO3DRK4P.js} +2 -2
  165. package/dist/cli/chunks/{chunk-ZXPY654C.js → chunk-VWUZSNVC.js} +1 -1
  166. package/dist/cli/chunks/{chunk-WDQ7IEZY.js → chunk-VYTILW4R.js} +2 -2
  167. package/dist/cli/chunks/{chunk-CZ2IF6MC.js → chunk-WCAVIJ64.js} +1 -1
  168. package/dist/cli/chunks/{chunk-M2QV7PT7.js → chunk-WCVCOT4E.js} +2 -2
  169. package/dist/cli/chunks/{chunk-AI4VYSFS.js → chunk-WM3SRRA6.js} +2 -2
  170. package/dist/cli/chunks/{chunk-NNFZUTDH.js → chunk-X3PZCXWG.js} +1 -1
  171. package/dist/cli/chunks/{chunk-PCEW6Q2C.js → chunk-X4J73KP3.js} +1 -1
  172. package/dist/cli/chunks/{chunk-DBMNJSBV.js → chunk-XDI5X3FR.js} +1 -1
  173. package/dist/cli/chunks/{chunk-VJQYDYAJ.js → chunk-XGBU3KEM.js} +2 -2
  174. package/dist/cli/chunks/{chunk-3Y7SPD72.js → chunk-XGPTZUKQ.js} +2 -2
  175. package/dist/cli/chunks/{chunk-EN2QSKFF.js → chunk-XJKZ7FTR.js} +2 -2
  176. package/dist/cli/chunks/{chunk-VWNFAW2M.js → chunk-XNLIWQYE.js} +2 -2
  177. package/dist/cli/chunks/{chunk-FAUCT5KR.js → chunk-XS2XF3YG.js} +6 -5
  178. package/dist/cli/chunks/chunk-Y7B5EUIJ.js +180 -0
  179. package/dist/cli/chunks/{chunk-Z7IYW5U7.js → chunk-YBBT3YYG.js} +1 -1
  180. package/dist/cli/chunks/{chunk-6TB6YOCZ.js → chunk-YNOCQ2SL.js} +1 -1
  181. package/dist/cli/chunks/{chunk-7TB6FK4B.js → chunk-YOCULVHR.js} +1 -1
  182. package/dist/cli/chunks/{chunk-H74Q7TJN.js → chunk-YPX2TV3M.js} +1 -1
  183. package/dist/cli/chunks/{chunk-V2M2XCR5.js → chunk-Z2EA7A4Z.js} +1 -1
  184. package/dist/cli/chunks/{chunk-KI73QCR5.js → chunk-ZMC543GI.js} +2 -2
  185. package/dist/cli/chunks/chunk-ZMHCMJ4J.js +2 -0
  186. package/dist/cli/chunks/{chunk-WBM6N6IM.js → chunk-ZP75ASUU.js} +1 -1
  187. package/dist/cli/chunks/{chunk-VFKF2XO7.js → chunk-ZQHDA4O7.js} +1 -1
  188. package/dist/cli/chunks/{ci-MSKMVH5X.js → ci-6GUFAZMJ.js} +2 -2
  189. package/dist/cli/chunks/{ci-config-7ODMNAUM.js → ci-config-J665XNOX.js} +2 -2
  190. package/dist/cli/chunks/{ci-output-FXZ7ZZW3.js → ci-output-PEQQQWVD.js} +2 -2
  191. package/dist/cli/chunks/{circuit-breaker-4VOUEPOX.js → circuit-breaker-HHB2JSKH.js} +2 -2
  192. package/dist/cli/chunks/{claude-flow-setup-7D4SGLM4.js → claude-flow-setup-JKUJRWPN.js} +2 -2
  193. package/dist/cli/chunks/client-HL2COSFM.js +2 -0
  194. package/dist/cli/chunks/{cline-installer-WRRT7BGQ.js → cline-installer-Y77BWTAN.js} +2 -2
  195. package/dist/cli/chunks/{code-ZDJRIL3S.js → code-LV2HAGJY.js} +3 -3
  196. package/dist/cli/chunks/{code-index-extractor-4S4SHM56.js → code-index-extractor-4GKKSETB.js} +2 -2
  197. package/dist/cli/chunks/{codex-installer-YTRHNDWR.js → codex-installer-WMKBYE5Y.js} +2 -2
  198. package/dist/cli/chunks/{completions-6N64JUXJ.js → completions-SBGFAOIJ.js} +2 -2
  199. package/dist/cli/chunks/{complexity-analyzer-I4A26VCJ.js → complexity-analyzer-AQHFIJXC.js} +2 -2
  200. package/dist/cli/chunks/{continuedev-installer-IIDR66LB.js → continuedev-installer-26AYFS2E.js} +2 -2
  201. package/dist/cli/chunks/{copilot-installer-SVVFY3S2.js → copilot-installer-4UD3DK55.js} +2 -2
  202. package/dist/cli/chunks/core-handlers-IX7ATLM6.js +2 -0
  203. package/dist/cli/chunks/{cost-tracker-VGFS6IBX.js → cost-tracker-TP4NZCG4.js} +2 -2
  204. package/dist/cli/chunks/{coverage-B7MCGNTE.js → coverage-B2KIXHAI.js} +3 -3
  205. package/dist/cli/chunks/cross-domain-router-YYKLAPJO.js +2 -0
  206. package/dist/cli/chunks/{cursor-installer-UPETT57E.js → cursor-installer-AVZEQZ4W.js} +2 -2
  207. package/dist/cli/chunks/{daemon-7BDJHEIJ.js → daemon-P574WWBW.js} +4 -4
  208. package/dist/cli/chunks/{daemon-CQFNZLXU.js → daemon-XM2A7LQU.js} +3 -3
  209. package/dist/cli/chunks/{dag-attention-scheduler-PJVABHON.js → dag-attention-scheduler-MIWOZ6ET.js} +2 -2
  210. package/dist/cli/chunks/{detect-56SKAGWX.js → detect-TYR7HT23.js} +2 -2
  211. package/dist/cli/chunks/{dist-node-UYTYUMLN.js → dist-node-2DGVQGLS.js} +2 -2
  212. package/dist/cli/chunks/{domain-handler-YOYLBYJE.js → domain-handler-RRA4ZOMF.js} +2 -2
  213. package/dist/cli/chunks/{domain-plugins-7TARX2XF.js → domain-plugins-IVZEZ5RB.js} +2 -2
  214. package/dist/cli/chunks/{domain-transfer-AKVSBD6E.js → domain-transfer-DOBI67K6.js} +2 -2
  215. package/dist/cli/chunks/dream-T6EP7B3F.js +2 -0
  216. package/dist/cli/chunks/{embed-and-insert-pattern-IS6HSR66.js → embed-and-insert-pattern-VNIEOVPO.js} +2 -2
  217. package/dist/cli/chunks/{eval-GNB574IM.js → eval-QV4LVPUF.js} +2 -2
  218. package/dist/cli/chunks/{experience-capture-middleware-RCAOCKM7.js → experience-capture-middleware-DAPKT763.js} +3 -3
  219. package/dist/cli/chunks/{fast-paths-KTZ5SF54.js → fast-paths-WVRFPHX7.js} +2 -2
  220. package/dist/cli/chunks/{feature-flags-ITX5LQ57.js → feature-flags-DEFTUIYT.js} +2 -2
  221. package/dist/cli/chunks/{feature-flags-KFHSR5YF.js → feature-flags-O7ZXDDCD.js} +2 -2
  222. package/dist/cli/chunks/file-discovery-JYMVTDMU.js +2 -0
  223. package/dist/cli/chunks/{fleet-2Y3ZE6CE.js → fleet-FVAUMKUT.js} +22 -22
  224. package/dist/cli/chunks/{gnn-wrapper-RLFW3GSX.js → gnn-wrapper-LS4LZJDR.js} +2 -2
  225. package/dist/cli/chunks/{heartbeat-handler-EM2URCYZ.js → heartbeat-handler-RFTERD4K.js} +4 -4
  226. package/dist/cli/chunks/heartbeat-scheduler-4N5MUJ7S.js +2 -0
  227. package/dist/cli/chunks/hnsw-adapter-ZPAJDSLR.js +2 -0
  228. package/dist/cli/chunks/hnsw-index-4CTH6RHB.js +2 -0
  229. package/dist/cli/chunks/{hnsw-legacy-bridge-JMHEOIBH.js → hnsw-legacy-bridge-GPKGFFHY.js} +2 -2
  230. package/dist/cli/chunks/{hnswlib-node-CBP73QHY.js → hnswlib-node-PHL3F2PR.js} +2 -2
  231. package/dist/cli/chunks/{hooks-IP7XE34Z.js → hooks-GYJ6D4QM.js} +30 -30
  232. package/dist/cli/chunks/hybrid-backend-AW6UTXQS.js +2 -0
  233. package/dist/cli/chunks/{hypergraph-engine-ONAYHU25.js → hypergraph-engine-YGEQPCKJ.js} +2 -2
  234. package/dist/cli/chunks/{hypergraph-handler-VINJRAID.js → hypergraph-handler-ZIMM647V.js} +3 -3
  235. package/dist/cli/chunks/impact-analyzer-MZK3JMSV.js +2 -0
  236. package/dist/cli/chunks/{init-guard-RYVV5R3Z.js → init-guard-VOMBXJXG.js} +2 -2
  237. package/dist/cli/chunks/{init-handler-MPRGWMOE.js → init-handler-PSMUBWK5.js} +26 -25
  238. package/dist/cli/chunks/init-wizard-FUC7KDVX.js +2 -0
  239. package/dist/cli/chunks/kernel-ZCPMCVMW.js +2 -0
  240. package/dist/cli/chunks/{kilocode-installer-OPD7JBRL.js → kilocode-installer-2YNTFBWJ.js} +2 -2
  241. package/dist/cli/chunks/{kiro-installer-M4OPUNK2.js → kiro-installer-XHJDPVAZ.js} +2 -2
  242. package/dist/cli/chunks/knowledge-graph-NUJKEDNF.js +2 -0
  243. package/dist/cli/chunks/{learning-4UWTQLMF.js → learning-GNSIDRNG.js} +3 -3
  244. package/dist/cli/chunks/{llm-router-SQ56FF6Z.js → llm-router-LQDM7IU2.js} +4 -4
  245. package/dist/cli/chunks/llm-router-service-B2BFBQ76.js +2 -0
  246. package/dist/cli/chunks/{load-HPHKDGGL.js → load-YATHI72E.js} +2 -2
  247. package/dist/cli/chunks/load-test-ZHQ2MUGO.js +2 -0
  248. package/dist/cli/chunks/{mcp-TELMAC7Z.js → mcp-4Y6GDLYK.js} +2 -2
  249. package/dist/cli/chunks/{memory-PFQ3KPVJ.js → memory-OUW3L7H2.js} +5 -5
  250. package/dist/cli/chunks/memory-backend-AAMQG6WH.js +2 -0
  251. package/dist/cli/chunks/memory-handlers-G3LFF53U.js +2 -0
  252. package/dist/cli/chunks/{multi-model-executor-3VDRX6TZ.js → multi-model-executor-UBZJXAD2.js} +2 -2
  253. package/dist/cli/chunks/{opencode-installer-PJ576R63.js → opencode-installer-AMMNWVH5.js} +2 -2
  254. package/dist/cli/chunks/{orchestrator-72QP4UU7.js → orchestrator-Y44WDOER.js} +19 -19
  255. package/dist/cli/chunks/pattern-null-store-RFNVA46O.js +2 -0
  256. package/dist/cli/chunks/{pattern-usage-recorder-754YQW7C.js → pattern-usage-recorder-ESR42RME.js} +2 -2
  257. package/dist/cli/chunks/{pipeline-AVXY4MVB.js → pipeline-EDTS6OSC.js} +2 -2
  258. package/dist/cli/chunks/{platform-3E3DXLYB.js → platform-5WONJSUX.js} +2 -2
  259. package/dist/cli/chunks/{plugin-7FUQAKRE.js → plugin-IJXPCLD4.js} +2 -2
  260. package/dist/cli/chunks/{prime-radiant-advanced-wasm-NIB4F5NV.js → prime-radiant-advanced-wasm-5ECKGZK6.js} +2 -2
  261. package/dist/cli/chunks/project-root-7QL4KP5C.js +2 -0
  262. package/dist/cli/chunks/protocol-executor-2NW5BD4R.js +2 -0
  263. package/dist/cli/chunks/{protocol-handler-BQRYMUTG.js → protocol-handler-DRD3GVNW.js} +2 -2
  264. package/dist/cli/chunks/{prove-H52QGC6B.js → prove-KTGW2HMJ.js} +2 -2
  265. package/dist/cli/chunks/qe-reasoning-bank-G2JZOGKD.js +2 -0
  266. package/dist/cli/chunks/{quality-QO4XPAUM.js → quality-DV2WPRRS.js} +2 -2
  267. package/dist/cli/chunks/{quality-gate-FBKE5E6F.js → quality-gate-HFUAFVZC.js} +3 -3
  268. package/dist/cli/chunks/queen-coordinator-GRG5FT2A.js +2 -0
  269. package/dist/cli/chunks/{real-embeddings-RWGOVOXO.js → real-embeddings-RQRVOKVM.js} +2 -2
  270. package/dist/cli/chunks/{ref-validation-LF76ZOBD.js → ref-validation-QWSKS5OY.js} +2 -2
  271. package/dist/cli/chunks/{roocode-installer-3BYEBTQ7.js → roocode-installer-RBAYRCHX.js} +2 -2
  272. package/dist/cli/chunks/router-LQB5SWAF.js +2 -0
  273. package/dist/cli/chunks/routing-feedback-OEEXA55N.js +2 -0
  274. package/dist/cli/chunks/{routing-handler-DST7BVCU.js → routing-handler-FMPP3XKO.js} +2 -2
  275. package/dist/cli/chunks/{ruvector-commands-XE32PGKC.js → ruvector-commands-KZZT4HWF.js} +2 -2
  276. package/dist/cli/chunks/rvf-dual-writer-BZK4M7BO.js +2 -0
  277. package/dist/cli/chunks/rvf-migration-adapter-EZZUJL2E.js +2 -0
  278. package/dist/cli/chunks/{rvf-migration-coordinator-VP32XC75.js → rvf-migration-coordinator-7CHEV35N.js} +2 -2
  279. package/dist/cli/chunks/rvf-native-adapter-6COXTQZ3.js +2 -0
  280. package/dist/cli/chunks/{rvf-store-integrity-SH2AMVI7.js → rvf-store-integrity-Q2TH52SN.js} +2 -2
  281. package/dist/cli/chunks/safe-db-PE6G3L55.js +2 -0
  282. package/dist/cli/chunks/schedule-OLKQ6QYW.js +2 -0
  283. package/dist/cli/chunks/scheduler-LSGBDFAT.js +2 -0
  284. package/dist/cli/chunks/{security-VSPNKCDS.js → security-CUEA3UIM.js} +3 -3
  285. package/dist/cli/chunks/{shared-rvf-adapter-HX6AHL3P.js → shared-rvf-adapter-DROMBRV2.js} +2 -2
  286. package/dist/cli/chunks/{shared-rvf-dual-writer-MX4FC2JE.js → shared-rvf-dual-writer-DBNABOP7.js} +2 -2
  287. package/dist/cli/chunks/sqlite-persistence-HH4DNTYH.js +2 -0
  288. package/dist/cli/chunks/{standalone-memory-O4QUTK6L.js → standalone-memory-IAHA3M6B.js} +2 -2
  289. package/dist/cli/chunks/{status-handler-Z2BP6EOG.js → status-handler-AFUCASTX.js} +2 -2
  290. package/dist/cli/chunks/{structural-health-R36WNLQG.js → structural-health-AQRV6JJ6.js} +2 -2
  291. package/dist/cli/chunks/{sync-QF5Y3EMZ.js → sync-GX7FMJHL.js} +2 -2
  292. package/dist/cli/chunks/{sync-2ELWUFQU.js → sync-XW5TLZ7M.js} +2 -2
  293. package/dist/cli/chunks/{task-handler-43PYE75J.js → task-handler-TFKVUTNF.js} +2 -2
  294. package/dist/cli/chunks/task-handlers-SS4ZDXNF.js +9 -0
  295. package/dist/cli/chunks/{test-UWA377D4.js → test-D2XDJNDX.js} +11 -11
  296. package/dist/cli/chunks/test-runner-process-PSSBNNGR.js +2 -0
  297. package/dist/cli/chunks/{test-scheduling-YQZPJRRN.js → test-scheduling-TS6I2PR7.js} +3 -3
  298. package/dist/cli/chunks/{token-bootstrap-F7C6UKTC.js → token-bootstrap-HBBLPCZ3.js} +2 -2
  299. package/dist/cli/chunks/{token-usage-DO6WLMXP.js → token-usage-3MBUX4PR.js} +2 -2
  300. package/dist/cli/chunks/{transformers-H5RGFKVO.js → transformers-ZWMQO3L2.js} +2 -2
  301. package/dist/cli/chunks/tree-sitter-wasm-parser-TYRQRJ2W.js +2 -0
  302. package/dist/cli/chunks/{types-PJS2FGPF.js → types-5YEMGPSQ.js} +2 -2
  303. package/dist/cli/chunks/unified-memory-AGDZQ5XD.js +2 -0
  304. package/dist/cli/chunks/unified-memory-hnsw-X5TJ3JDE.js +2 -0
  305. package/dist/cli/chunks/unified-persistence-UCV7YETW.js +2 -0
  306. package/dist/cli/chunks/{upgrade-4IC4F6AB.js → upgrade-2TPBKIHI.js} +2 -2
  307. package/dist/cli/chunks/{validate-DHUWW7PF.js → validate-XRAXXFW6.js} +2 -2
  308. package/dist/cli/chunks/{validate-swarm-OERQNOX5.js → validate-swarm-IYSCS3BZ.js} +2 -2
  309. package/dist/cli/chunks/visual-security-ZLXRIQZV.js +2 -0
  310. package/dist/cli/chunks/{web-tree-sitter-TV7DMKES.js → web-tree-sitter-PZQ3ZG2P.js} +2 -2
  311. package/dist/cli/chunks/{windsurf-installer-QZPWSH37.js → windsurf-installer-U6XWFRVT.js} +2 -2
  312. package/dist/cli/chunks/witness-chain-CVIWYTD2.js +2 -0
  313. package/dist/cli/chunks/witness-chain-VBKORKOX.js +2 -0
  314. package/dist/cli/chunks/{witness-chain-repair-RUXIOE7F.js → witness-chain-repair-K7YX2AO6.js} +2 -2
  315. package/dist/cli/chunks/{witness-chain-verifier-YXENHB42.js → witness-chain-verifier-GUTC3W7N.js} +2 -2
  316. package/dist/cli/chunks/{witness-key-manager-HL26AGFO.js → witness-key-manager-YBNKMOP6.js} +2 -2
  317. package/dist/cli/chunks/{workflow-EOVVCN2E.js → workflow-UAJUILFQ.js} +4 -4
  318. package/dist/cli/chunks/workflow-orchestrator-3ZN7MVCE.js +2 -0
  319. package/dist/cli/chunks/{wrappers-AGODHBOO.js → wrappers-AVZ3GPAL.js} +2 -2
  320. package/dist/cli/commands/fleet.js +4 -1
  321. package/dist/cli/commands/hooks-handlers/tool-loop-guardrail.js +11 -6
  322. package/dist/cli/commands/test.js +5 -2
  323. package/dist/cli/handlers/init-handler.d.ts +12 -0
  324. package/dist/cli/handlers/init-handler.js +27 -12
  325. package/dist/cli/utils/ci-output.d.ts +2 -0
  326. package/dist/cli/utils/ci-output.js +2 -0
  327. package/dist/cli/utils/progress.d.ts +16 -2
  328. package/dist/cli/utils/progress.js +31 -14
  329. package/dist/coordination/consensus/consensus-engine.js +3 -1
  330. package/dist/coordination/handlers/code-intelligence-handlers.js +3 -2
  331. package/dist/coordination/handlers/coverage-collection.js +3 -1
  332. package/dist/coordination/handlers/coverage-runner.d.ts +3 -8
  333. package/dist/coordination/handlers/coverage-runner.js +6 -22
  334. package/dist/coordination/handlers/coverage-stderr.d.ts +23 -0
  335. package/dist/coordination/handlers/coverage-stderr.js +39 -0
  336. package/dist/coordination/handlers/coverage-target.js +6 -3
  337. package/dist/coordination/handlers/handler-utils.js +3 -1
  338. package/dist/coordination/handlers/requirements-handlers.js +3 -2
  339. package/dist/coordination/handlers/security-handlers.js +34 -20
  340. package/dist/coordination/queen-coordinator.js +8 -3
  341. package/dist/coordination/task-executability.d.ts +12 -0
  342. package/dist/coordination/task-executability.js +27 -0
  343. package/dist/coordination/workflow-orchestrator.d.ts +6 -0
  344. package/dist/coordination/workflow-orchestrator.js +22 -8
  345. package/dist/domains/code-intelligence/services/product-factors-bridge.js +7 -4
  346. package/dist/domains/coverage-analysis/services/coverage-parser.js +19 -10
  347. package/dist/domains/learning-optimization/interfaces.d.ts +2 -0
  348. package/dist/domains/learning-optimization/services/learning-coordinator.js +2 -1
  349. package/dist/domains/learning-optimization/services/metrics-optimizer.js +14 -4
  350. package/dist/domains/learning-optimization/services/production-intel.js +3 -1
  351. package/dist/domains/security-compliance/generic-finding-dedup.d.ts +40 -0
  352. package/dist/domains/security-compliance/generic-finding-dedup.js +63 -0
  353. package/dist/domains/security-compliance/services/scanners/dependency-resolver.js +14 -6
  354. package/dist/domains/security-compliance/services/scanners/sast-scanner.js +4 -2
  355. package/dist/domains/security-compliance/services/security-auditor-sast.js +2 -2
  356. package/dist/domains/security-compliance/services/security-auditor-secrets.js +2 -2
  357. package/dist/domains/security-compliance/services/security-auditor.js +3 -2
  358. package/dist/domains/test-execution/coordinator.d.ts +2 -1
  359. package/dist/domains/test-execution/coordinator.js +5 -14
  360. package/dist/domains/test-execution/interfaces.d.ts +11 -1
  361. package/dist/domains/test-execution/services/retry-outcome.d.ts +18 -0
  362. package/dist/domains/test-execution/services/retry-outcome.js +53 -0
  363. package/dist/domains/test-generation/coordinator.js +2 -2
  364. package/dist/domains/test-generation/services/pattern-matcher.js +4 -4
  365. package/dist/domains/test-generation/services/test-generator.js +2 -2
  366. package/dist/governance/evolution-pipeline-integration.js +3 -1
  367. package/dist/hooks/cross-phase-hooks.js +3 -1
  368. package/dist/init/init-wizard-steps.js +5 -1
  369. package/dist/init/phases/04-database.js +7 -0
  370. package/dist/init/phases/12-verification.js +14 -4
  371. package/dist/init/settings-merge.js +7 -4
  372. package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.d.ts +7 -0
  373. package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.js +31 -2
  374. package/dist/integrations/agentic-flow/reasoning-bank/index.d.ts +3 -1
  375. package/dist/integrations/agentic-flow/reasoning-bank/index.js +5 -0
  376. package/dist/integrations/ruvector/filter-adapter.js +2 -1
  377. package/dist/learning/dream/insight-generator.js +5 -4
  378. package/dist/learning/memory-auditor.js +3 -1
  379. package/dist/learning/qe-patterns.js +2 -1
  380. package/dist/learning/real-qe-reasoning-bank.d.ts +19 -0
  381. package/dist/learning/real-qe-reasoning-bank.js +70 -38
  382. package/dist/mcp/bundle.js +486 -481
  383. package/dist/mcp/handlers/domain-handler-configs.d.ts +2 -0
  384. package/dist/mcp/handlers/domain-handler-configs.js +8 -2
  385. package/dist/mcp/handlers/task-handlers.d.ts +13 -0
  386. package/dist/mcp/handlers/task-handlers.js +42 -16
  387. package/dist/mcp/handlers/validation-pipeline-handler.js +9 -9
  388. package/dist/mcp/protocol-server.js +8 -8
  389. package/dist/mcp/qe-tool-bridge.js +3 -0
  390. package/dist/mcp/services/reasoning-bank-service.d.ts +3 -1
  391. package/dist/mcp/services/reasoning-bank-service.js +4 -0
  392. package/dist/mcp/tool-annotations.js +4 -1
  393. package/dist/mcp/tools/coherence/check.js +1 -0
  394. package/dist/mcp/tools/coherence/consensus.js +4 -2
  395. package/dist/mcp/tools/learning-optimization/optimize.js +1 -2
  396. package/dist/mcp/tools/mincut/index.js +3 -0
  397. package/dist/mcp/tools/quality-assessment/gate.js +7 -0
  398. package/dist/mcp/tools/qx-analysis/analyze.js +1 -0
  399. package/dist/mcp/tools/requirements-validation/quality-criteria.js +10 -3
  400. package/dist/mcp/tools/security-compliance/scan.js +4 -2
  401. package/dist/mcp/tools/test-execution/e2e-execute.js +2 -2
  402. package/dist/mcp/tools/test-execution/execute.js +3 -2
  403. package/dist/memory/crdt/crdt-store.js +5 -0
  404. package/dist/memory/crdt/lww-register.js +12 -2
  405. package/dist/optimization/early-exit-token-optimizer.js +3 -1
  406. package/dist/planning/goap-planner.js +5 -0
  407. package/dist/planning/plan-executor.js +5 -0
  408. package/dist/shared/io/confined-read.d.ts +74 -0
  409. package/dist/shared/io/confined-read.js +256 -0
  410. package/dist/shared/io/file-reader.d.ts +6 -6
  411. package/dist/shared/io/file-reader.js +16 -42
  412. package/dist/shared/llm/providers/claude-code.js +4 -1
  413. package/dist/shared/native-module-errors.d.ts +51 -0
  414. package/dist/shared/native-module-errors.js +129 -0
  415. package/dist/shared/safe-db.js +14 -4
  416. package/dist/shared/security/osv-client.js +4 -1
  417. package/dist/shared/types/test-frameworks.js +2 -2
  418. package/dist/sync/readers/json-reader.js +2 -1
  419. package/dist/validation/anchor-set.d.ts +6 -0
  420. package/dist/validation/anchor-set.js +9 -1
  421. package/dist/validation/quality-gate-runner.d.ts +7 -1
  422. package/dist/validation/quality-gate-runner.js +3 -3
  423. package/package.json +1 -1
  424. package/dist/cli/chunks/adapter-TR5SLAZC.js +0 -2
  425. package/dist/cli/chunks/aqe-learning-engine-DXWKCHY2.js +0 -2
  426. package/dist/cli/chunks/base-GTB6POYE.js +0 -2
  427. package/dist/cli/chunks/browser-workflow-MSBOLYUY.js +0 -2
  428. package/dist/cli/chunks/chunk-6P7424AO.js +0 -21
  429. package/dist/cli/chunks/chunk-6X5DHU6Q.js +0 -14
  430. package/dist/cli/chunks/chunk-CMBLM26R.js +0 -2
  431. package/dist/cli/chunks/chunk-DKAC3E3B.js +0 -3
  432. package/dist/cli/chunks/chunk-DURHK377.js +0 -742
  433. package/dist/cli/chunks/chunk-FPUDRSFJ.js +0 -180
  434. package/dist/cli/chunks/chunk-G5I6KGMW.js +0 -59
  435. package/dist/cli/chunks/chunk-HOZUDE4C.js +0 -2
  436. package/dist/cli/chunks/chunk-TYFZXDGZ.js +0 -4
  437. package/dist/cli/chunks/chunk-U4OICXV2.js +0 -6
  438. package/dist/cli/chunks/chunk-XBVUVFJK.js +0 -4
  439. package/dist/cli/chunks/chunk-XUZDBQ5X.js +0 -6
  440. package/dist/cli/chunks/chunk-YBSBABOS.js +0 -2
  441. package/dist/cli/chunks/chunk-ZG5666GJ.js +0 -2
  442. package/dist/cli/chunks/client-POSVREVS.js +0 -2
  443. package/dist/cli/chunks/core-handlers-V243GY7X.js +0 -2
  444. package/dist/cli/chunks/cross-domain-router-N3AIEM3B.js +0 -2
  445. package/dist/cli/chunks/dream-UA7MKOPQ.js +0 -2
  446. package/dist/cli/chunks/file-discovery-YCMNKZAK.js +0 -2
  447. package/dist/cli/chunks/heartbeat-scheduler-QH5V6G2P.js +0 -2
  448. package/dist/cli/chunks/hnsw-adapter-OJNFAGJS.js +0 -2
  449. package/dist/cli/chunks/hnsw-index-DFUNARVD.js +0 -2
  450. package/dist/cli/chunks/hybrid-backend-SSGQQEQ2.js +0 -2
  451. package/dist/cli/chunks/impact-analyzer-CRGCA7ZD.js +0 -2
  452. package/dist/cli/chunks/init-wizard-NIMZ4J55.js +0 -2
  453. package/dist/cli/chunks/kernel-JQK7PRAI.js +0 -2
  454. package/dist/cli/chunks/knowledge-graph-YPVVIKEU.js +0 -2
  455. package/dist/cli/chunks/llm-router-service-5OGAUOXF.js +0 -2
  456. package/dist/cli/chunks/load-test-UKNV5MWW.js +0 -2
  457. package/dist/cli/chunks/memory-backend-ZW4BTRNK.js +0 -2
  458. package/dist/cli/chunks/memory-handlers-FCXN437E.js +0 -2
  459. package/dist/cli/chunks/pattern-null-store-4DUV6MQC.js +0 -2
  460. package/dist/cli/chunks/project-root-JCAUNL6O.js +0 -2
  461. package/dist/cli/chunks/protocol-executor-RNZNZP3A.js +0 -2
  462. package/dist/cli/chunks/qe-reasoning-bank-WK6TQOG2.js +0 -2
  463. package/dist/cli/chunks/queen-coordinator-4452SXZQ.js +0 -2
  464. package/dist/cli/chunks/router-3DIS5X4R.js +0 -2
  465. package/dist/cli/chunks/routing-feedback-OPXRCXM7.js +0 -2
  466. package/dist/cli/chunks/rvf-dual-writer-JL6T727I.js +0 -2
  467. package/dist/cli/chunks/rvf-migration-adapter-V7IBDUCS.js +0 -2
  468. package/dist/cli/chunks/rvf-native-adapter-O3UQTEBK.js +0 -2
  469. package/dist/cli/chunks/safe-db-EVB4ZC7T.js +0 -2
  470. package/dist/cli/chunks/schedule-ORDDXXY4.js +0 -2
  471. package/dist/cli/chunks/scheduler-XFLJSFIU.js +0 -2
  472. package/dist/cli/chunks/sqlite-persistence-Y7B42CJ3.js +0 -2
  473. package/dist/cli/chunks/task-handlers-KPWAEMKH.js +0 -9
  474. package/dist/cli/chunks/test-runner-process-3XZUYST2.js +0 -2
  475. package/dist/cli/chunks/tree-sitter-wasm-parser-YTBCBHUO.js +0 -2
  476. package/dist/cli/chunks/unified-memory-EHD4VNFW.js +0 -2
  477. package/dist/cli/chunks/unified-memory-hnsw-ZODGM4UK.js +0 -2
  478. package/dist/cli/chunks/unified-persistence-MHSI7ABK.js +0 -2
  479. package/dist/cli/chunks/visual-security-54MLFKWY.js +0 -2
  480. package/dist/cli/chunks/witness-chain-LC6Q2W27.js +0 -2
  481. package/dist/cli/chunks/witness-chain-QUIBAF3W.js +0 -2
  482. package/dist/cli/chunks/workflow-orchestrator-UKHEJVSK.js +0 -2
@@ -186,11 +186,21 @@ export class MetricsOptimizerService {
186
186
  async recommendStrategy(context) {
187
187
  try {
188
188
  // Search for strategies that worked well in similar contexts
189
- const keys = await this.memory.search('learning:strategy:optimized:*', 100);
189
+ const keys = await this.memory.search('learning:strategy:optimized:*', 100, { namespace: 'learning-optimization' });
190
190
  const candidates = [];
191
- for (const key of keys) {
192
- const optimized = await this.memory.get(key);
193
- if (optimized && optimized.confidence > 0.6) {
191
+ for (const found of keys) {
192
+ // SQLite returns bare keys; in-memory search includes the namespace.
193
+ // get() applies that namespace separately, as storeOptimizationResult does.
194
+ const prefix = 'learning-optimization:';
195
+ const key = found.startsWith(prefix) ? found.slice(prefix.length) : found;
196
+ const optimized = await this.memory.get(key, { namespace: 'learning-optimization' });
197
+ if (optimized
198
+ && context.tags.includes(optimized.domain)
199
+ && context.tags.includes(optimized.objective.metric)
200
+ && (!context.objective || (context.tags.includes(context.objective.metric)
201
+ && optimized.objective.metric === context.objective.metric
202
+ && optimized.objective.direction === context.objective.direction))
203
+ && optimized.confidence > 0.6) {
194
204
  const contextScore = this.scoreContextMatch(optimized, context);
195
205
  const performanceScore = optimized.improvement * optimized.confidence;
196
206
  candidates.push({
@@ -7,6 +7,7 @@ import { ok, err } from '../../../shared/types/index.js';
7
7
  import { TimeRange } from '../../../shared/value-objects/index.js';
8
8
  import { toError } from '../../../shared/error-utils.js';
9
9
  import { rehydrateDates } from '../../../shared/utils/kv-date-rehydrate.js';
10
+ import { createSafeRecord } from '../../../shared/utils/safe-record.js';
10
11
  const DEFAULT_CONFIG = {
11
12
  metricsRetentionDays: 90,
12
13
  anomalyThreshold: 2.5,
@@ -268,7 +269,8 @@ export class ProductionIntelService {
268
269
  async getDomainHealth(domain) {
269
270
  const timeRange = TimeRange.lastNDays(1);
270
271
  const metricsResult = await this.getMetricsHistory('*', timeRange, domain);
271
- const metrics = {};
272
+ // #1157: metric names come from stored production metrics.
273
+ const metrics = createSafeRecord();
272
274
  if (metricsResult.success) {
273
275
  for (const metric of metricsResult.value) {
274
276
  if (!metrics[metric.name]) {
@@ -0,0 +1,40 @@
1
+ /**
2
+ * #1170: drop the generic eval/exec finding that language-specific SAST
3
+ * already reported as code injection on the same line.
4
+ *
5
+ * The scan-security task runs text patterns over every file and SAST over
6
+ * JS/TS files, so one `eval()` was counted twice: once by SAST (critical,
7
+ * CWE-95) and once by the generic eval/exec pattern (high). Only that pair is
8
+ * the same finding. Other generic rules (secrets, CORS, debug mode) can flag
9
+ * a different value or a higher severity on a line SAST also matched, so
10
+ * they are always kept.
11
+ */
12
+ /** Title of the generic-pattern eval/exec finding in the scan-security handler. */
13
+ export declare const GENERIC_EVAL_EXEC_TITLE = "Dangerous eval/exec usage";
14
+ interface LocatedFinding {
15
+ title: string;
16
+ severity?: string;
17
+ location: {
18
+ file: string;
19
+ line?: number;
20
+ };
21
+ }
22
+ interface SastFinding {
23
+ severity?: string;
24
+ description?: string;
25
+ references?: readonly string[];
26
+ location: {
27
+ file: string;
28
+ line?: number;
29
+ };
30
+ }
31
+ /**
32
+ * Generic findings without the eval/exec matches SAST already reported as
33
+ * CWE-95 on the same real file and line, at the same or a higher severity, so
34
+ * dropping one never lowers what the scan reports. `isEvalOnly` says whether a generic
35
+ * eval/exec match is eval alone; a line that also calls exec() is kept,
36
+ * since SAST's eval rule does not report the exec call.
37
+ */
38
+ export declare function dropGenericEvalCoveredBySast<T extends LocatedFinding>(generic: readonly T[], sast: readonly SastFinding[], isEvalOnly: (finding: T) => boolean): Promise<T[]>;
39
+ export {};
40
+ //# sourceMappingURL=generic-finding-dedup.d.ts.map
@@ -0,0 +1,63 @@
1
+ /**
2
+ * #1170: drop the generic eval/exec finding that language-specific SAST
3
+ * already reported as code injection on the same line.
4
+ *
5
+ * The scan-security task runs text patterns over every file and SAST over
6
+ * JS/TS files, so one `eval()` was counted twice: once by SAST (critical,
7
+ * CWE-95) and once by the generic eval/exec pattern (high). Only that pair is
8
+ * the same finding. Other generic rules (secrets, CORS, debug mode) can flag
9
+ * a different value or a higher severity on a line SAST also matched, so
10
+ * they are always kept.
11
+ */
12
+ import { realpath } from 'node:fs/promises';
13
+ import * as path from 'node:path';
14
+ /** Title of the generic-pattern eval/exec finding in the scan-security handler. */
15
+ export const GENERIC_EVAL_EXEC_TITLE = 'Dangerous eval/exec usage';
16
+ /** CWE-95 (eval injection): SAST's eval() and Function-constructor rules. */
17
+ function isEvalInjection(finding) {
18
+ return /\[CWE-95\]/.test(finding.description ?? '') ||
19
+ (finding.references ?? []).some(ref => /\/definitions\/95\.html$/.test(ref));
20
+ }
21
+ const SEVERITY_RANK = {
22
+ informational: 0, low: 1, medium: 2, high: 3, critical: 4,
23
+ };
24
+ const rank = (severity) => SEVERITY_RANK[severity ?? ''] ?? -1;
25
+ async function realPathOf(file, cache) {
26
+ const resolved = path.resolve(file);
27
+ let real = cache.get(resolved);
28
+ if (real === undefined) {
29
+ real = await realpath(resolved).catch(() => resolved);
30
+ cache.set(resolved, real);
31
+ }
32
+ return real;
33
+ }
34
+ /**
35
+ * Generic findings without the eval/exec matches SAST already reported as
36
+ * CWE-95 on the same real file and line, at the same or a higher severity, so
37
+ * dropping one never lowers what the scan reports. `isEvalOnly` says whether a generic
38
+ * eval/exec match is eval alone; a line that also calls exec() is kept,
39
+ * since SAST's eval rule does not report the exec call.
40
+ */
41
+ export async function dropGenericEvalCoveredBySast(generic, sast, isEvalOnly) {
42
+ const evalSast = sast.filter(isEvalInjection);
43
+ if (evalSast.length === 0)
44
+ return [...generic];
45
+ const cache = new Map();
46
+ // Highest SAST CWE-95 severity per real file and line.
47
+ const covered = new Map();
48
+ for (const finding of evalSast) {
49
+ const key = `${await realPathOf(finding.location.file, cache)}:${finding.location.line ?? 0}`;
50
+ covered.set(key, Math.max(covered.get(key) ?? -1, rank(finding.severity)));
51
+ }
52
+ const kept = [];
53
+ for (const finding of generic) {
54
+ const key = `${await realPathOf(finding.location.file, cache)}:${finding.location.line ?? 0}`;
55
+ const sastRank = covered.get(key);
56
+ const duplicate = finding.title === GENERIC_EVAL_EXEC_TITLE && isEvalOnly(finding) &&
57
+ sastRank !== undefined && sastRank >= rank(finding.severity);
58
+ if (!duplicate)
59
+ kept.push(finding);
60
+ }
61
+ return kept;
62
+ }
63
+ //# sourceMappingURL=generic-finding-dedup.js.map
@@ -22,28 +22,33 @@
22
22
  * complete, with a reason; each member can be scanned directly.
23
23
  */
24
24
  import * as fs from 'fs/promises';
25
+ // #1161: manifests and lockfiles are read from a validated descriptor; one
26
+ // linked out of the project, or to a device, is refused instead of read.
27
+ import { readConfinedText } from '../../../../shared/io/confined-read.js';
25
28
  import * as path from 'path';
26
29
  import semver from 'semver';
27
30
  import { parse as parseYaml } from 'yaml';
28
31
  import { safeJsonParse } from '../../../../shared/safe-json.js';
29
32
  import { classifyNpmSpec, exactNpmVersion } from '../../../../shared/security/osv-lookup.js';
33
+ import { createSafeRecord, getOwn, setOwn } from '../../../../shared/utils/safe-record.js';
30
34
  import { LOCKFILES, parseLockfile } from './lockfile-versions.js';
31
35
  /** The reason a workspace root's scan is not complete (#1057). */
32
36
  export const WORKSPACE_NOT_SCANNED = 'workspace member dependencies are not scanned yet (#1057); scan each member directory separately';
33
37
  const OUT_OF_SYNC = 'lockfile out of sync with package.json';
34
38
  /** All declared dependencies of a manifest (later fields win, as npm resolves them). */
35
39
  export function declaredDependencies(manifest) {
36
- const out = {};
40
+ // #1157: a dependency named `__proto__` is kept as an own entry, not dropped.
41
+ const out = createSafeRecord();
37
42
  for (const field of ['peerDependencies', 'optionalDependencies', 'devDependencies', 'dependencies']) {
38
43
  for (const [name, spec] of Object.entries(manifest[field] ?? {})) {
39
44
  if (typeof spec === 'string')
40
- out[name] = spec;
45
+ setOwn(out, name, spec);
41
46
  }
42
47
  }
43
48
  return out;
44
49
  }
45
50
  async function readManifest(file) {
46
- return safeJsonParse(await fs.readFile(file, 'utf-8'));
51
+ return safeJsonParse(await readConfinedText(file, { outsideRoot: 'allow' }));
47
52
  }
48
53
  async function exists(file) {
49
54
  try {
@@ -123,7 +128,7 @@ async function pnpmDeclaresPackages(file) {
123
128
  const st = await fs.stat(file); // follows a link; a dangling one throws
124
129
  if (!st.isFile() || st.size > MAX_PNPM_WORKSPACE_BYTES)
125
130
  return true;
126
- const text = await fs.readFile(file, 'utf-8');
131
+ const text = await readConfinedText(file, { outsideRoot: 'allow', maxBytes: MAX_PNPM_WORKSPACE_BYTES });
127
132
  doc = parseYaml(text, { uniqueKeys: false, merge: true, maxAliasCount: 100 });
128
133
  }
129
134
  catch {
@@ -182,7 +187,10 @@ export function resolveFromRecord(dependencies, lockedVersions = {}) {
182
187
  members: () => [],
183
188
  hasImporter: () => true,
184
189
  recordedSpec: () => null,
185
- resolve: (_importer, name) => (lockedVersions[name] !== undefined ? { version: lockedVersions[name] } : undefined),
190
+ resolve: (_importer, name) => {
191
+ const version = getOwn(lockedVersions, name);
192
+ return version !== undefined ? { version } : undefined;
193
+ },
186
194
  };
187
195
  return Object.entries(dependencies).map(([name, spec]) => resolveOne(name, spec, '', index, new Set()));
188
196
  }
@@ -202,7 +210,7 @@ export async function resolveDependencies(manifestPath) {
202
210
  if (found) {
203
211
  const member = path.relative(found.dir, realManifestDir).split(path.sep).join('/');
204
212
  try {
205
- const parsed = parseLockfile(found.file, await fs.readFile(path.join(found.dir, found.file), 'utf-8'));
213
+ const parsed = parseLockfile(found.file, await readConfinedText(path.join(found.dir, found.file), { outsideRoot: 'allow' }));
206
214
  const rootManifest = member ? await readManifest(path.join(found.dir, 'package.json')).catch(() => ({})) : manifest;
207
215
  // A member scanned directly: the root lockfile covers it if it lists the
208
216
  // importer (npm/pnpm) or, for yarn, if the root declares workspaces.
@@ -11,6 +11,7 @@ import { ok, err } from '../../../../shared/types/index.js';
11
11
  import { ALL_SECURITY_PATTERNS, BUILT_IN_RULE_SETS } from './security-patterns.js';
12
12
  import { toError } from '../../../../shared/error-utils.js';
13
13
  import { safeJsonParse } from '../../../../shared/safe-json.js';
14
+ import { readConfinedFile } from '../../../../shared/io/confined-read.js';
14
15
  import { CLAUDE_TIER_MODELS, DEFAULT_OPUS_MODEL } from '../../../../shared/llm/model-registry.js';
15
16
  import { isSemgrepAvailable, runSemgrepWithRules, convertSemgrepFindings, } from '../semgrep-integration.js';
16
17
  // ============================================================================
@@ -303,8 +304,9 @@ export class SASTScanner {
303
304
  let content;
304
305
  let sourceDigest;
305
306
  try {
306
- const fs = await import('fs/promises');
307
- const bytes = await fs.readFile(filePath);
307
+ // #1161: open once and validate the opened descriptor, so a file swapped
308
+ // after the sast-scan path check cannot redirect the read.
309
+ const bytes = await readConfinedFile(filePath, { outsideRoot: 'allow' });
308
310
  sourceDigest = createHash('sha256').update(bytes).digest('hex');
309
311
  content = bytes.toString('utf8');
310
312
  }
@@ -4,7 +4,7 @@
4
4
  */
5
5
  import { LoggerFactory } from '../../../logging/index.js';
6
6
  import { v4 as uuidv4 } from 'uuid';
7
- import * as fs from 'fs/promises';
7
+ import { readConfinedText } from '../../../shared/io/confined-read.js';
8
8
  import * as path from 'path';
9
9
  /**
10
10
  * Get the default SAST vulnerability patterns for JS/TS analysis
@@ -173,7 +173,7 @@ export async function performSASTScan(findSourceFiles, shouldExclude) {
173
173
  continue;
174
174
  }
175
175
  try {
176
- const content = await fs.readFile(filePath, 'utf-8');
176
+ const content = await readConfinedText(filePath, { outsideRoot: 'allow' }); // #1161
177
177
  const lines = content.split('\n');
178
178
  filesScanned++;
179
179
  linesScanned += lines.length;
@@ -3,7 +3,7 @@
3
3
  * Extracted from security-auditor.ts - Secret/credential detection
4
4
  */
5
5
  import { LoggerFactory } from '../../../logging/index.js';
6
- import * as fs from 'fs/promises';
6
+ import { readConfinedText } from '../../../shared/io/confined-read.js';
7
7
  /**
8
8
  * Get the comprehensive set of secret detection patterns
9
9
  */
@@ -198,7 +198,7 @@ export function validateSecret(type, value) {
198
198
  export async function scanFileForSecrets(file) {
199
199
  const secrets = [];
200
200
  try {
201
- const content = await fs.readFile(file.value, 'utf-8');
201
+ const content = await readConfinedText(file.value, { outsideRoot: 'allow' }); // #1161
202
202
  const lines = content.split('\n');
203
203
  const secretPatterns = getSecretPatterns();
204
204
  for (let lineIndex = 0; lineIndex < lines.length; lineIndex++) {
@@ -12,6 +12,7 @@
12
12
  import { LoggerFactory } from '../../../logging/index.js';
13
13
  import { v4 as uuidv4 } from 'uuid';
14
14
  import * as fs from 'fs/promises';
15
+ import { readConfinedText } from '../../../shared/io/confined-read.js';
15
16
  import * as path from 'path';
16
17
  import { ok, err } from '../../../shared/types/index.js';
17
18
  import { toError } from '../../../shared/error-utils.js';
@@ -249,7 +250,7 @@ export class SecurityAuditorService {
249
250
  const dependencies = [];
250
251
  try {
251
252
  if (ecosystem === 'npm') {
252
- const content = await fs.readFile(manifest, 'utf-8');
253
+ const content = await readConfinedText(manifest, { outsideRoot: 'allow' }); // #1161
253
254
  const packageJson = safeJsonParse(content);
254
255
  const allDeps = {
255
256
  ...packageJson.dependencies,
@@ -263,7 +264,7 @@ export class SecurityAuditorService {
263
264
  }
264
265
  }
265
266
  else if (ecosystem === 'pip') {
266
- const content = await fs.readFile(manifest, 'utf-8');
267
+ const content = await readConfinedText(manifest, { outsideRoot: 'allow' }); // #1161
267
268
  const lines = content.split('\n');
268
269
  for (const line of lines) {
269
270
  const trimmed = line.trim();
@@ -125,7 +125,8 @@ export declare class TestExecutionCoordinator extends BaseDomainCoordinator<Test
125
125
  runTests(request: SimpleTestRequest): Promise<Result<TestRunResult, Error>>;
126
126
  /**
127
127
  * Retry a run's failed tests when retries were requested, and attach what
128
- * the retries did to the run (#1130). The run's own counts are unchanged.
128
+ * the retries did to the run (#1130). A test that passed on a retry counts
129
+ * as passed and flaky in the run's own counts (#1170).
129
130
  */
130
131
  private retryFailures;
131
132
  /**
@@ -9,6 +9,7 @@ import { TestExecutionEvents, createEvent, } from '../../shared/events/index.js'
9
9
  import { TestExecutorService } from './services/test-executor.js';
10
10
  import { FlakyDetectorService } from './services/flaky-detector.js';
11
11
  import { RetryHandlerService } from './services/retry-handler.js';
12
+ import { applyRetryOutcome } from './services/retry-outcome.js';
12
13
  import { TestPrioritizerService } from './services/test-prioritizer.js';
13
14
  import { createE2ETestRunnerService, } from './services/e2e-runner.js';
14
15
  import { createDomainFinding, } from '../../coordination/consensus/domain-findings.js';
@@ -162,7 +163,8 @@ export class TestExecutionCoordinator extends BaseDomainCoordinator {
162
163
  }
163
164
  /**
164
165
  * Retry a run's failed tests when retries were requested, and attach what
165
- * the retries did to the run (#1130). The run's own counts are unchanged.
166
+ * the retries did to the run (#1130). A test that passed on a retry counts
167
+ * as passed and flaky in the run's own counts (#1170).
166
168
  */
167
169
  async retryFailures(run, retryCount) {
168
170
  if (!retryCount || retryCount <= 0)
@@ -179,17 +181,7 @@ export class TestExecutionCoordinator extends BaseDomainCoordinator {
179
181
  });
180
182
  if (!retried.success)
181
183
  return;
182
- const byId = new Map(run.failedTests.map(t => [t.testId, t]));
183
- run.retries = {
184
- totalRetries: retried.value.retried,
185
- nowPassing: retried.value.nowPassing,
186
- stillFailing: retried.value.stillFailing,
187
- tests: (retried.value.tests ?? []).map(({ testId, ...outcome }) => ({
188
- name: byId.get(testId)?.testName ?? testId,
189
- file: byId.get(testId)?.file ?? '',
190
- ...outcome,
191
- })),
192
- };
184
+ applyRetryOutcome(run, retried.value);
193
185
  }
194
186
  /**
195
187
  * Detect test framework from file patterns and project configuration
@@ -686,11 +678,10 @@ export class TestExecutionCoordinator extends BaseDomainCoordinator {
686
678
  /**
687
679
  * Record execution results for DT learning
688
680
  */
689
- async recordExecutionResults(runId, testFiles, result, prioritizationInfo) {
681
+ async recordExecutionResults(runId, testFiles, result, _prioritizationInfo) {
690
682
  // Record each test execution for learning
691
683
  for (let i = 0; i < testFiles.length; i++) {
692
684
  const testId = this.generateTestId(testFiles[i]);
693
- const info = prioritizationInfo;
694
685
  // Find if this test failed (check if it's in failed tests)
695
686
  const failedTest = result.failedTests.find(t => t.file === testFiles[i]);
696
687
  const passed = !failedTest;
@@ -80,6 +80,11 @@ export interface ITestRunResult {
80
80
  fileCoverages?: IFileCoverageData[];
81
81
  /** #1130: what the requested retries of failed tests did. Absent when none were requested. */
82
82
  retries?: IRunRetrySummary;
83
+ /**
84
+ * #1170: tests that failed and then passed on a retry. They are counted in
85
+ * `passed`, not `failed`. Absent when no test passed on a retry.
86
+ */
87
+ flaky?: number;
83
88
  }
84
89
  /** #1130: the measured outcome of a run's retries, per failed test. */
85
90
  export interface IRunRetrySummary {
@@ -102,8 +107,13 @@ export interface ITestCaseResult {
102
107
  status: 'passed' | 'failed' | 'skipped';
103
108
  /** Runner-reported duration in ms; omitted when the runner reported none. */
104
109
  duration?: number;
105
- /** The runner's failure message for a failed test, when it reported one. */
110
+ /**
111
+ * The runner's failure message for a failed test, or for the failed first
112
+ * attempt of a flaky test, when it reported one.
113
+ */
106
114
  failureMessage?: string;
115
+ /** #1170: the test failed and then passed on a retry, so it is `passed`. */
116
+ flaky?: true;
107
117
  }
108
118
  export interface IFileCoverageData {
109
119
  path: string;
@@ -0,0 +1,18 @@
1
+ /**
2
+ * #1170: a run's final outcome after its failed tests were retried.
3
+ *
4
+ * A test that failed and then passed on a retry is passed, and flaky: it
5
+ * leaves `failed`/`failedTests`, its runner test case reads `passed` with
6
+ * `flaky: true`, and the run counts it in `flaky`. A test whose retries all
7
+ * failed, or whose retry matched no test, stays failed.
8
+ */
9
+ import type { IRetryResult, ITestRunResult } from '../interfaces';
10
+ /**
11
+ * Default retries of a failed test, shared by `aqe test execute` and MCP
12
+ * `test_execute_parallel` so both surfaces rerun a failure the same number of
13
+ * times (#1170).
14
+ */
15
+ export declare const DEFAULT_TEST_RETRY_COUNT = 2;
16
+ /** Attach the retry outcome to `run` and move tests that passed on retry from failed to passed. */
17
+ export declare function applyRetryOutcome(run: ITestRunResult, retried: IRetryResult): void;
18
+ //# sourceMappingURL=retry-outcome.d.ts.map
@@ -0,0 +1,53 @@
1
+ /**
2
+ * #1170: a run's final outcome after its failed tests were retried.
3
+ *
4
+ * A test that failed and then passed on a retry is passed, and flaky: it
5
+ * leaves `failed`/`failedTests`, its runner test case reads `passed` with
6
+ * `flaky: true`, and the run counts it in `flaky`. A test whose retries all
7
+ * failed, or whose retry matched no test, stays failed.
8
+ */
9
+ /**
10
+ * Default retries of a failed test, shared by `aqe test execute` and MCP
11
+ * `test_execute_parallel` so both surfaces rerun a failure the same number of
12
+ * times (#1170).
13
+ */
14
+ export const DEFAULT_TEST_RETRY_COUNT = 2;
15
+ /** Attach the retry outcome to `run` and move tests that passed on retry from failed to passed. */
16
+ export function applyRetryOutcome(run, retried) {
17
+ const byId = new Map(run.failedTests.map(t => [t.testId, t]));
18
+ const outcomes = retried.tests ?? [];
19
+ const summary = {
20
+ totalRetries: retried.retried,
21
+ nowPassing: retried.nowPassing,
22
+ stillFailing: retried.stillFailing,
23
+ tests: outcomes.map(({ testId, ...outcome }) => ({
24
+ name: byId.get(testId)?.testName ?? testId,
25
+ file: byId.get(testId)?.file ?? '',
26
+ ...outcome,
27
+ })),
28
+ };
29
+ run.retries = summary;
30
+ const passedOnRetry = new Set(outcomes.filter(o => o.passed && !o.unmatched).map(o => o.testId));
31
+ const recovered = run.failedTests.filter(t => passedOnRetry.has(t.testId));
32
+ if (recovered.length === 0)
33
+ return;
34
+ run.failedTests = run.failedTests.filter(t => !passedOnRetry.has(t.testId));
35
+ run.failed = Math.max(0, run.failed - recovered.length);
36
+ run.passed += recovered.length;
37
+ run.flaky = (run.flaky ?? 0) + recovered.length;
38
+ if (run.failed === 0 && run.status === 'failed')
39
+ run.status = 'passed';
40
+ if (run.testCases) {
41
+ const pending = [...recovered];
42
+ run.testCases = run.testCases.map(testCase => {
43
+ if (testCase.status !== 'failed')
44
+ return testCase;
45
+ const index = pending.findIndex(t => t.testName === testCase.name && t.file === testCase.file);
46
+ if (index < 0)
47
+ return testCase;
48
+ pending.splice(index, 1);
49
+ return { ...testCase, status: 'passed', flaky: true };
50
+ });
51
+ }
52
+ }
53
+ //# sourceMappingURL=retry-outcome.js.map
@@ -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.');