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
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Caller-facing summary of a coverage runner's stderr.
3
+ *
4
+ * #1150: the summary reaches `provenance.notes` of a SUCCESS result, where the
5
+ * #1139 error backstop never sees it, so it is redacted here. Redaction runs
6
+ * BEFORE slicing: a slice boundary that cut a token or connection string in
7
+ * half would leave a fragment the redaction patterns no longer recognise.
8
+ * The collector therefore keeps a wide raw window at each end of the stream;
9
+ * each window is redacted whole, and only then are the short head and tail
10
+ * taken from it. A secret cut by a window edge lies far outside the part
11
+ * that is kept.
12
+ */
13
+ /** Raw stderr kept at each end of the stream, before redaction. */
14
+ export declare const STDERR_WINDOW_BYTES: number;
15
+ /**
16
+ * Summarise a runner's stderr for a caller: the FIRST error-looking line (or
17
+ * the first ~512 bytes) plus the last ~2 KB (#995 review NB-C). A tail alone
18
+ * loses the cause when a long stack follows it — a vitest config syntax error
19
+ * prints `[PARSE_ERROR] …` first and then kilobytes of frames. `head` and
20
+ * `tail` are the raw windows at each end; both are redacted before slicing.
21
+ */
22
+ export declare function summarizeStderr(head: string, tail: string, totalBytes: number): string;
23
+ //# sourceMappingURL=coverage-stderr.d.ts.map
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Caller-facing summary of a coverage runner's stderr.
3
+ *
4
+ * #1150: the summary reaches `provenance.notes` of a SUCCESS result, where the
5
+ * #1139 error backstop never sees it, so it is redacted here. Redaction runs
6
+ * BEFORE slicing: a slice boundary that cut a token or connection string in
7
+ * half would leave a fragment the redaction patterns no longer recognise.
8
+ * The collector therefore keeps a wide raw window at each end of the stream;
9
+ * each window is redacted whole, and only then are the short head and tail
10
+ * taken from it. A secret cut by a window edge lies far outside the part
11
+ * that is kept.
12
+ */
13
+ import { redactLogText } from '../../logging/redaction.js';
14
+ /** Raw stderr kept at each end of the stream, before redaction. */
15
+ export const STDERR_WINDOW_BYTES = 64 * 1024;
16
+ const STDERR_TAIL_BYTES = 2048;
17
+ const STDERR_HEAD_BYTES = 4096;
18
+ const STDERR_PREFIX_BYTES = 512;
19
+ const ERROR_LINE_RE = /^.*(?:error|\[[A-Z][A-Z_]{2,}\]|ERR_[A-Z_]+).*$/im;
20
+ /**
21
+ * Summarise a runner's stderr for a caller: the FIRST error-looking line (or
22
+ * the first ~512 bytes) plus the last ~2 KB (#995 review NB-C). A tail alone
23
+ * loses the cause when a long stack follows it — a vitest config syntax error
24
+ * prints `[PARSE_ERROR] …` first and then kilobytes of frames. `head` and
25
+ * `tail` are the raw windows at each end; both are redacted before slicing.
26
+ */
27
+ export function summarizeStderr(head, tail, totalBytes) {
28
+ const safeTail = redactLogText(tail, Number.POSITIVE_INFINITY);
29
+ if (totalBytes <= STDERR_TAIL_BYTES)
30
+ return safeTail.trim();
31
+ const safeHead = redactLogText(head, Number.POSITIVE_INFINITY).slice(0, STDERR_HEAD_BYTES);
32
+ const tailPart = safeTail.slice(-STDERR_TAIL_BYTES);
33
+ const errorLine = ERROR_LINE_RE.exec(safeHead)?.[0]?.trim();
34
+ const prefix = (errorLine ?? safeHead.slice(0, STDERR_PREFIX_BYTES)).trim();
35
+ if (prefix && tailPart.includes(prefix))
36
+ return tailPart.trim();
37
+ return `${prefix}\n…\n${tailPart.trim()}`;
38
+ }
39
+ //# sourceMappingURL=coverage-stderr.js.map
@@ -19,6 +19,7 @@
19
19
  * and the CLI `coverage` command can share it.
20
20
  */
21
21
  import * as fs from 'fs';
22
+ import { readConfinedText, readConfinedTextSync } from '../../shared/io/confined-read.js';
22
23
  import * as os from 'os';
23
24
  import * as path from 'path';
24
25
  import { loadCoverageData, parseCoberturaXml, parseCoverageJson, parseCoverageSummaryJson, parseLcovInfo, } from './handler-utils.js';
@@ -99,7 +100,7 @@ function packageCanUseRootRunner(pkgDir, rootDir) {
99
100
  }
100
101
  function readPackageJson(dir) {
101
102
  try {
102
- const parsed = JSON.parse(fs.readFileSync(path.join(dir, 'package.json'), 'utf-8'));
103
+ const parsed = JSON.parse(readConfinedTextSync(path.join(dir, 'package.json'), { outsideRoot: 'allow' }));
103
104
  return typeof parsed === 'object' && parsed !== null ? parsed : null;
104
105
  }
105
106
  catch {
@@ -128,7 +129,7 @@ function readWorkspacePatterns(dir) {
128
129
  // Only the block-list `packages:` form is read; the flow form gives no
129
130
  // patterns, so the root is not adopted (fails safe).
130
131
  try {
131
- const yaml = fs.readFileSync(path.join(dir, 'pnpm-workspace.yaml'), 'utf-8');
132
+ const yaml = readConfinedTextSync(path.join(dir, 'pnpm-workspace.yaml'), { outsideRoot: 'allow' });
132
133
  isRoot = true;
133
134
  let inPackages = false;
134
135
  for (const raw of yaml.split(/\r?\n/)) {
@@ -326,7 +327,9 @@ export function isCoverageReportFile(filePath) {
326
327
  export async function loadCoverageReportFile(filePath) {
327
328
  let content;
328
329
  try {
329
- content = await fs.promises.readFile(filePath, 'utf-8');
330
+ // #1161: read from the validated descriptor, not the name checked earlier;
331
+ // a report linked out of the project, or to a device, is not read.
332
+ content = await readConfinedText(filePath, { outsideRoot: 'allow' });
330
333
  }
331
334
  catch {
332
335
  return null;
@@ -5,6 +5,7 @@
5
5
  * now co-located with the handlers that use them.
6
6
  */
7
7
  import * as fs from 'fs/promises';
8
+ import { readConfinedText } from '../../shared/io/confined-read.js';
8
9
  import * as path from 'path';
9
10
  import { isAqeManagedDir } from '../../shared/aqe-managed-dirs.js';
10
11
  import { safeJsonParse } from '../../shared/safe-json.js';
@@ -32,7 +33,8 @@ export async function loadCoverageData(targetPath) {
32
33
  ];
33
34
  for (const coveragePath of coverageLocations) {
34
35
  try {
35
- const content = await fs.readFile(coveragePath, 'utf-8');
36
+ // #1161: a report linked out of the project, or to a device, is not read.
37
+ const content = await readConfinedText(coveragePath, { outsideRoot: 'allow' });
36
38
  if (coveragePath.endsWith('coverage-summary.json')) {
37
39
  return parseCoverageSummaryJson(content);
38
40
  }
@@ -4,7 +4,7 @@
4
4
  * Extracted from task-executor.ts registerHandlers().
5
5
  * Covers: validate-requirements, validate-contracts
6
6
  */
7
- import * as fs from 'fs/promises';
7
+ import { readConfinedText } from '../../shared/io/confined-read.js';
8
8
  import { ok, err } from '../../shared/types/index.js';
9
9
  import { toError, toErrorMessage } from '../../shared/error-utils.js';
10
10
  import { discoverSourceFiles } from './handler-utils.js';
@@ -74,7 +74,8 @@ export function registerRequirementsHandlers(ctx) {
74
74
  return confined;
75
75
  // Check if the contract file exists
76
76
  try {
77
- const content = await fs.readFile(confined.value, 'utf-8');
77
+ // #1161: read from the descriptor that was validated, not the name.
78
+ const content = await readConfinedText(confined.value, { maxBytes: MAX_PAYLOAD_FILE_BYTES });
78
79
  const isJson = payload.contractPath.endsWith('.json');
79
80
  const isYaml = payload.contractPath.endsWith('.yaml') || payload.contractPath.endsWith('.yml');
80
81
  // Basic structural validation
@@ -4,7 +4,6 @@
4
4
  * Extracted from task-executor.ts registerHandlers().
5
5
  * Covers: scan-security
6
6
  */
7
- import * as fs from 'fs/promises';
8
7
  import * as path from 'path';
9
8
  import { ok, err } from '../../shared/types/index.js';
10
9
  import { createHash } from 'node:crypto';
@@ -14,6 +13,8 @@ import { generateSecurityRecommendations } from './handler-utils.js';
14
13
  import { discoverSecurityFiles, isSecuritySourceFile } from '../../domains/security-compliance/scan-discovery.js';
15
14
  import { runDependencyAdvisoryScan } from '../../domains/security-compliance/dependency-advisory-engine.js';
16
15
  import { MAX_PAYLOAD_FILE_BYTES, requirePayloadPath } from '../../shared/io/payload-path-guard.js';
16
+ import { dropGenericEvalCoveredBySast, GENERIC_EVAL_EXEC_TITLE } from '../../domains/security-compliance/generic-finding-dedup.js';
17
+ import { readConfinedFile } from '../../shared/io/confined-read.js';
17
18
  export function registerSecurityHandlers(ctx) {
18
19
  // Register security scan handler - REAL IMPLEMENTATION
19
20
  ctx.registerHandler('scan-security', async (task) => {
@@ -44,6 +45,8 @@ export function registerSecurityHandlers(ctx) {
44
45
  const otherFiles = filesToScan.filter(f => !/\.(ts|tsx|js|jsx|mjs|cjs)$/i.test(f));
45
46
  // Run basic cross-language security patterns on non-JS/TS files
46
47
  const crossLangVulns = [];
48
+ // Generic eval/exec matches whose line calls eval() and not exec() (#1170).
49
+ const evalOnlyFindings = new Set();
47
50
  // Run secret/CORS patterns on ALL files (not just otherFiles) to catch JS/TS secrets too
48
51
  for (const filePath of filesToScan) {
49
52
  if (!isSecuritySourceFile(filePath)) {
@@ -52,13 +55,15 @@ export function registerSecurityHandlers(ctx) {
52
55
  continue;
53
56
  }
54
57
  try {
55
- const source = await fs.readFile(filePath);
58
+ // #1161: validate the opened descriptor, not the name checked earlier.
59
+ const source = await readConfinedFile(filePath, { outsideRoot: 'allow' });
56
60
  const content = source.toString('utf-8');
57
61
  const lines = content.split('\n');
58
62
  fileEvidence.push({ path: filePath, engineId: 'generic-patterns', status: 'analyzed',
59
63
  sourceDigest: createHash('sha256').update(source).digest('hex'),
60
64
  readLines: lines.length, analyzedLines: lines.length });
61
- const relPath = path.relative(targetPath, filePath) || path.basename(filePath);
65
+ // #1170: report the scanned path, as SAST does, so a finding names the
66
+ // real file and the same line from both engines can be matched.
62
67
  // Pattern: Hardcoded secrets/keys
63
68
  // Fix #287: Use \w* around keywords to match SECRET_KEY, JWT_SECRET, API_TOKEN, etc.
64
69
  const secretPatterns = [
@@ -75,7 +80,7 @@ export function registerSecurityHandlers(ctx) {
75
80
  crossLangVulns.push({
76
81
  title: pattern.title,
77
82
  severity: pattern.severity,
78
- location: { file: relPath, line: i + 1 },
83
+ location: { file: filePath, line: i + 1 },
79
84
  description: `Potential hardcoded secret found at line ${i + 1}`,
80
85
  category: 'sensitive-data',
81
86
  });
@@ -90,7 +95,7 @@ export function registerSecurityHandlers(ctx) {
90
95
  crossLangVulns.push({
91
96
  title: 'Potential SQL injection',
92
97
  severity: 'high',
93
- location: { file: relPath, line: i + 1 },
98
+ location: { file: filePath, line: i + 1 },
94
99
  description: 'String interpolation in SQL query — use parameterized queries',
95
100
  category: 'injection',
96
101
  });
@@ -111,7 +116,7 @@ export function registerSecurityHandlers(ctx) {
111
116
  crossLangVulns.push({
112
117
  title: 'CORS wildcard origin',
113
118
  severity: 'high',
114
- location: { file: relPath, line: lines.findIndex(l => corsPattern.test(l)) + 1 },
119
+ location: { file: filePath, line: lines.findIndex(l => corsPattern.test(l)) + 1 },
115
120
  description: 'CORS configured with wildcard (*) origin — restrict to specific domains',
116
121
  category: 'security-misconfiguration',
117
122
  });
@@ -124,21 +129,26 @@ export function registerSecurityHandlers(ctx) {
124
129
  crossLangVulns.push({
125
130
  title: 'Debug mode enabled',
126
131
  severity: 'medium',
127
- location: { file: relPath, line: lines.findIndex(l => /DEBUG\s*[=:]\s*(?:True|true|1)/i.test(l)) + 1 },
132
+ location: { file: filePath, line: lines.findIndex(l => /DEBUG\s*[=:]\s*(?:True|true|1)/i.test(l)) + 1 },
128
133
  description: 'Debug mode should be disabled in production',
129
134
  category: 'security-misconfiguration',
130
135
  });
131
136
  }
132
- // Pattern: Eval/exec usage
137
+ // Pattern: Eval/exec usage, one finding per matching line (#1170)
133
138
  genericRules.set('eval-exec', /\b(?:eval|exec)\s*\(/i.toString());
134
- if (/\b(?:eval|exec)\s*\(/i.test(content)) {
135
- crossLangVulns.push({
136
- title: 'Dangerous eval/exec usage',
139
+ for (let i = 0; i < lines.length; i++) {
140
+ if (!/\b(?:eval|exec)\s*\(/i.test(lines[i]))
141
+ continue;
142
+ const finding = {
143
+ title: GENERIC_EVAL_EXEC_TITLE,
137
144
  severity: 'high',
138
- location: { file: relPath, line: lines.findIndex(l => /\b(?:eval|exec)\s*\(/.test(l)) + 1 },
145
+ location: { file: filePath, line: i + 1 },
139
146
  description: 'eval/exec can lead to code injection — avoid using with user input',
140
147
  category: 'injection',
141
- });
148
+ };
149
+ crossLangVulns.push(finding);
150
+ if (!/\bexec\s*\(/i.test(lines[i]))
151
+ evalOnlyFindings.add(finding);
142
152
  }
143
153
  }
144
154
  catch (error) {
@@ -153,7 +163,8 @@ export function registerSecurityHandlers(ctx) {
153
163
  for (const manifest of sastRequested ? depManifests : []) {
154
164
  const manifestPath = path.join(targetPath, manifest);
155
165
  try {
156
- const manifestSource = await fs.readFile(manifestPath);
166
+ // #1161: a manifest linked out of the project is not read.
167
+ const manifestSource = await readConfinedFile(manifestPath, { outsideRoot: 'allow' });
157
168
  const manifestContent = manifestSource.toString('utf-8');
158
169
  const manifestLines = manifestContent.split('\n').length;
159
170
  fileEvidence.push({ path: manifestPath, engineId: 'dependency-manifest-patterns', status: 'analyzed',
@@ -296,13 +307,16 @@ export function registerSecurityHandlers(ctx) {
296
307
  };
297
308
  const deepAnalysisPerformed = Boolean(sastResult?.evidence?.engines.some(engine => engine.id === 'patterns' && (engine.status === 'completed' || engine.status === 'partial') &&
298
309
  (engine.analyzedFiles ?? 0) > 0));
310
+ // #1170: a generic eval() match on a line SAST reported as CWE-95 is the
311
+ // same finding, so it is counted once, as SAST reported it.
312
+ const genericVulns = await dropGenericEvalCoveredBySast(crossLangVulns, sastResult?.vulnerabilities ?? [], finding => evalOnlyFindings.has(finding));
299
313
  // Combine results from all scan sources - SAST, DAST, and cross-language patterns
300
314
  const crossLangSeverityCounts = {
301
- critical: crossLangVulns.filter(v => v.severity === 'critical').length,
302
- high: crossLangVulns.filter(v => v.severity === 'high').length,
303
- medium: crossLangVulns.filter(v => v.severity === 'medium').length,
304
- low: crossLangVulns.filter(v => v.severity === 'low').length,
305
- informational: crossLangVulns.filter(v => v.severity === 'informational').length,
315
+ critical: genericVulns.filter(v => v.severity === 'critical').length,
316
+ high: genericVulns.filter(v => v.severity === 'high').length,
317
+ medium: genericVulns.filter(v => v.severity === 'medium').length,
318
+ low: genericVulns.filter(v => v.severity === 'low').length,
319
+ informational: genericVulns.filter(v => v.severity === 'informational').length,
306
320
  };
307
321
  const depVulns = dependencyScan?.vulnerabilities ?? [];
308
322
  const depCount = (severity) => depVulns.filter(v => v.severity === severity).length;
@@ -317,7 +331,7 @@ export function registerSecurityHandlers(ctx) {
317
331
  const allVulns = [
318
332
  ...(sastResult?.vulnerabilities || []),
319
333
  ...(dastResult?.vulnerabilities || []),
320
- ...crossLangVulns,
334
+ ...genericVulns,
321
335
  ...depVulns,
322
336
  ];
323
337
  const topVulnerabilities = allVulns
@@ -51,7 +51,7 @@ import { DEFAULT_QUEEN_CONFIG, getTaskDomains, initializeTaskDomainMap, } from '
51
51
  export { DOMAIN_GROUPS, TASK_DOMAIN_MAP } from './queen-types.js';
52
52
  // Extracted modules
53
53
  import { subscribeToEvents, computeDomainHealthFromAgents } from './queen-event-handlers.js';
54
- import { findDomainsWithoutHandler, describeMissingHandler } from './task-executability.js';
54
+ import { findDomainsWithoutHandler, resolveTaskDomains, describeMissingHandler } from './task-executability.js';
55
55
  import { enqueueTask, removeFromQueues, getQueuePosition, processQueue, listTasks as listTasksImpl, assignTask, dispatchStolenTask, canDomainExecuteTask, } from './queen-task-management.js';
56
56
  import { triggerWorkStealing as triggerWorkStealingImpl, startWorkStealingTimer } from './queen-work-stealing.js';
57
57
  import { isMinCutAwarePlugin, injectMinCutBridgeIntoPlugins, loadState, saveState, startMetricsCollectionTimer, cleanupCompletedTasks as cleanupCompletedTasksImpl, getEnabledDomains, } from './queen-lifecycle.js';
@@ -296,9 +296,9 @@ export class QueenCoordinator {
296
296
  * accept the type unchanged.
297
297
  */
298
298
  validateTaskExecutable(type, targetDomains = []) {
299
- const candidates = targetDomains.length > 0 ? targetDomains : getTaskDomains(type);
299
+ const candidates = resolveTaskDomains(type, targetDomains, this.domainPlugins);
300
300
  if (candidates.length === 0) {
301
- return err(new Error(`Unknown task type '${type}': no domain is configured for it. Pass a target domain.`));
301
+ return err(new Error(`Unknown task type '${type}': no domain is configured for it and no loaded domain handles it. Pass a target domain.`));
302
302
  }
303
303
  if (!this.domainPlugins)
304
304
  return ok(undefined);
@@ -314,6 +314,11 @@ export class QueenCoordinator {
314
314
  const taskId = `task_${uuidv4()}`;
315
315
  const task = {
316
316
  ...taskInput,
317
+ // #1170: a plugin task type with no configured domain (e.g. sast-scan)
318
+ // runs in the domains that handle it, so routing and queueing see them.
319
+ targetDomains: getTaskDomains(taskInput.type).length > 0
320
+ ? taskInput.targetDomains
321
+ : [...resolveTaskDomains(taskInput.type, taskInput.targetDomains, this.domainPlugins)],
317
322
  id: taskId,
318
323
  createdAt: new Date(),
319
324
  timeout: taskInput.timeout || this.config.defaultTaskTimeout,
@@ -14,5 +14,17 @@ import type { DomainPlugin } from '../kernel/interfaces';
14
14
  * every domain can run the task.
15
15
  */
16
16
  export declare function findDomainsWithoutHandler(domainPlugins: ReadonlyMap<DomainName, DomainPlugin>, type: string, domains: readonly DomainName[]): string[];
17
+ /**
18
+ * #1170: the loaded domains whose plugin executes `type`. A plugin task type
19
+ * such as `sast-scan` has no entry in TASK_DOMAIN_MAP, so a caller that names
20
+ * no target domain is routed to the domains that handle it.
21
+ */
22
+ export declare function findDomainsWithHandler(domainPlugins: ReadonlyMap<DomainName, DomainPlugin>, type: string): DomainName[];
23
+ /**
24
+ * The domains a task may run in: the caller's target domains, else the
25
+ * domains configured for its type, else (#1170) the loaded domains whose
26
+ * plugin handles the type.
27
+ */
28
+ export declare function resolveTaskDomains(type: string, targetDomains: readonly DomainName[], domainPlugins?: ReadonlyMap<DomainName, DomainPlugin>): readonly DomainName[];
17
29
  export declare function describeMissingHandler(type: string, gaps: readonly string[]): string;
18
30
  //# sourceMappingURL=task-executability.d.ts.map
@@ -6,6 +6,7 @@
6
6
  * the `TaskAssigned` event fallback, which nothing answers, so the task stayed
7
7
  * `running` and held a concurrency slot for good.
8
8
  */
9
+ import { getTaskDomains } from './queen-types.js';
9
10
  /**
10
11
  * List the domains among `domains` that cannot execute `type`, each with the
11
12
  * reason and, where known, the types it does support. An empty list means
@@ -25,6 +26,32 @@ export function findDomainsWithoutHandler(domainPlugins, type, domains) {
25
26
  }
26
27
  return gaps;
27
28
  }
29
+ /**
30
+ * #1170: the loaded domains whose plugin executes `type`. A plugin task type
31
+ * such as `sast-scan` has no entry in TASK_DOMAIN_MAP, so a caller that names
32
+ * no target domain is routed to the domains that handle it.
33
+ */
34
+ export function findDomainsWithHandler(domainPlugins, type) {
35
+ const domains = [];
36
+ for (const [domain, plugin] of domainPlugins) {
37
+ if (plugin.executeTask && plugin.canHandleTask?.(type))
38
+ domains.push(domain);
39
+ }
40
+ return domains;
41
+ }
42
+ /**
43
+ * The domains a task may run in: the caller's target domains, else the
44
+ * domains configured for its type, else (#1170) the loaded domains whose
45
+ * plugin handles the type.
46
+ */
47
+ export function resolveTaskDomains(type, targetDomains, domainPlugins) {
48
+ if (targetDomains.length > 0)
49
+ return targetDomains;
50
+ const configured = getTaskDomains(type);
51
+ if (configured.length > 0 || !domainPlugins)
52
+ return configured;
53
+ return findDomainsWithHandler(domainPlugins, type);
54
+ }
28
55
  export function describeMissingHandler(type, gaps) {
29
56
  return `No handler for task type '${type}' in domain ${gaps.join('; ')}`;
30
57
  }
@@ -49,6 +49,12 @@ export declare class WorkflowOrchestrator implements IWorkflowOrchestrator {
49
49
  */
50
50
  rejectStep(executionId: string, stepId: string, reason?: string): boolean;
51
51
  isActionRegistered(domain: DomainName, action: string): boolean;
52
+ /**
53
+ * #1157: a registered action by domain and action name. Both names come from
54
+ * pipeline YAML, so only own registry entries count: `toString` or
55
+ * `constructor` is an unregistered action, not an Object.prototype member.
56
+ */
57
+ private lookupAction;
52
58
  getRegisteredActions(domain: DomainName): string[];
53
59
  getDomainsWithActions(): DomainName[];
54
60
  spawnWorkflowAgent(workflowId: string, stepId: string, domain: DomainName): Promise<Result<string, Error>>;
@@ -209,7 +209,18 @@ export class WorkflowOrchestrator {
209
209
  // Public Utility Methods
210
210
  // ============================================================================
211
211
  isActionRegistered(domain, action) {
212
- return !!this.actionRegistry[domain]?.[action];
212
+ return this.lookupAction(domain, action) !== undefined;
213
+ }
214
+ /**
215
+ * #1157: a registered action by domain and action name. Both names come from
216
+ * pipeline YAML, so only own registry entries count: `toString` or
217
+ * `constructor` is an unregistered action, not an Object.prototype member.
218
+ */
219
+ lookupAction(domain, action) {
220
+ const actions = Object.hasOwn(this.actionRegistry, domain)
221
+ ? this.actionRegistry[domain]
222
+ : undefined;
223
+ return actions && Object.hasOwn(actions, action) ? actions[action] : undefined;
213
224
  }
214
225
  getRegisteredActions(domain) {
215
226
  return Object.keys(this.actionRegistry[domain] || {});
@@ -612,9 +623,9 @@ export class WorkflowOrchestrator {
612
623
  return actionResult.value;
613
624
  }
614
625
  // Fall back to registered domain actions
615
- const domainActions = this.actionRegistry[step.domain];
616
- if (domainActions?.[step.action]) {
617
- const actionResult = await Promise.race([domainActions[step.action](input, context), timeoutPromise]);
626
+ const domainAction = this.lookupAction(step.domain, step.action);
627
+ if (domainAction) {
628
+ const actionResult = await Promise.race([domainAction(input, context), timeoutPromise]);
618
629
  if (!actionResult.success)
619
630
  throw actionResult.error;
620
631
  return actionResult.value;
@@ -624,12 +635,12 @@ export class WorkflowOrchestrator {
624
635
  }
625
636
  async executeRollback(rollback, context) {
626
637
  try {
627
- const domainActions = this.actionRegistry[rollback.domain];
628
- if (!domainActions?.[rollback.action]) {
638
+ const domainAction = this.lookupAction(rollback.domain, rollback.action);
639
+ if (!domainAction) {
629
640
  console.warn(`Rollback action '${rollback.action}' not registered for domain '${rollback.domain}'. Skipping rollback.`);
630
641
  return;
631
642
  }
632
- const result = await domainActions[rollback.action](rollback.input || {}, context);
643
+ const result = await domainAction(rollback.input || {}, context);
633
644
  if (!result.success)
634
645
  console.error(`Rollback failed for ${rollback.domain}.${rollback.action}:`, result.error);
635
646
  }
@@ -669,8 +680,11 @@ export class WorkflowOrchestrator {
669
680
  for (const part of parts) {
670
681
  if (current === null || current === undefined)
671
682
  return undefined;
672
- if (typeof current === 'object')
683
+ // #1157: paths come from pipeline YAML (conditions, input/output
684
+ // mappings); an inherited member such as `constructor` is absent.
685
+ if (typeof current === 'object' && Object.hasOwn(current, part)) {
673
686
  current = current[part];
687
+ }
674
688
  else
675
689
  return undefined;
676
690
  }
@@ -15,6 +15,7 @@ import { LoggerFactory } from '../../../logging/index.js';
15
15
  import { v4 as uuidv4 } from 'uuid';
16
16
  import * as path from 'path';
17
17
  import * as fs from 'fs/promises';
18
+ import { readConfinedText } from '../../../shared/io/confined-read.js';
18
19
  import { ok, err } from '../../../shared/types/index.js';
19
20
  import { CodeIntelligenceEvents, createEvent, } from '../../../shared/events/domain-events.js';
20
21
  import { toError } from '../../../shared/error-utils.js';
@@ -319,7 +320,7 @@ export class ProductFactorsBridgeService {
319
320
  async getProjectMetadata(projectPath) {
320
321
  try {
321
322
  const packageJsonPath = path.join(projectPath, 'package.json');
322
- const content = await fs.readFile(packageJsonPath, 'utf-8');
323
+ const content = await readConfinedText(packageJsonPath, { outsideRoot: 'allow' }); // #1161
323
324
  const pkg = safeJsonParse(content);
324
325
  return {
325
326
  name: pkg.name || 'Project',
@@ -344,14 +345,16 @@ export class ProductFactorsBridgeService {
344
345
  catch {
345
346
  return systems;
346
347
  }
347
- const content = await fs.readFile(packageJsonPath, 'utf-8');
348
+ const content = await readConfinedText(packageJsonPath, { outsideRoot: 'allow' }); // #1161
348
349
  const pkg = safeJsonParse(content);
349
350
  const allDeps = {
350
351
  ...pkg.dependencies,
351
352
  ...pkg.devDependencies,
352
353
  };
353
354
  for (const [depName] of Object.entries(allDeps)) {
354
- const pattern = EXTERNAL_SYSTEM_PATTERNS[depName];
355
+ // #1157: dependency names come from package.json; a package named
356
+ // `constructor` is not a known external system.
357
+ const pattern = Object.hasOwn(EXTERNAL_SYSTEM_PATTERNS, depName) ? EXTERNAL_SYSTEM_PATTERNS[depName] : undefined;
355
358
  if (pattern) {
356
359
  systems.push({
357
360
  id: sanitizeId(depName),
@@ -636,7 +639,7 @@ export class ProductFactorsBridgeService {
636
639
  // Simple hash based on package.json and file count
637
640
  try {
638
641
  const packageJsonPath = path.join(projectPath, 'package.json');
639
- const content = await fs.readFile(packageJsonPath, 'utf-8');
642
+ const content = await readConfinedText(packageJsonPath, { outsideRoot: 'allow' }); // #1161
640
643
  return this.hashString(content);
641
644
  }
642
645
  catch {
@@ -19,6 +19,15 @@
19
19
  import * as fs from 'fs/promises';
20
20
  import * as path from 'path';
21
21
  import { safeJsonParse } from '../../../shared/safe-json.js';
22
+ import { readConfinedText } from '../../../shared/io/confined-read.js';
23
+ /**
24
+ * #1161: coverage reports are found under caller-named directories, so read
25
+ * them from a validated descriptor: a report linked out of the project, or to
26
+ * a device such as /dev/zero, is refused instead of read.
27
+ */
28
+ function readCoverageFile(file) {
29
+ return readConfinedText(file, { outsideRoot: 'allow' });
30
+ }
22
31
  // ============================================================================
23
32
  // LCOV Parser
24
33
  // ============================================================================
@@ -28,7 +37,7 @@ import { safeJsonParse } from '../../../shared/safe-json.js';
28
37
  * LCOV format is the most common output from Istanbul, nyc, c8, etc.
29
38
  */
30
39
  export async function parseLCOV(lcovPath, projectRoot) {
31
- const content = await fs.readFile(lcovPath, 'utf-8');
40
+ const content = await readCoverageFile(lcovPath);
32
41
  return parseLCOVContent(content, projectRoot || path.dirname(lcovPath));
33
42
  }
34
43
  /**
@@ -221,7 +230,7 @@ export function parseLCOVContent(content, projectRoot) {
221
230
  * Parse JSON coverage data (Istanbul/Vitest format)
222
231
  */
223
232
  export async function parseJSONCoverage(jsonPath, projectRoot) {
224
- const content = await fs.readFile(jsonPath, 'utf-8');
233
+ const content = await readCoverageFile(jsonPath);
225
234
  const data = safeJsonParse(content);
226
235
  const root = projectRoot || path.dirname(jsonPath);
227
236
  const files = new Map();
@@ -334,7 +343,7 @@ export async function parseJSONCoverage(jsonPath, projectRoot) {
334
343
  * <report><package><class><method><counter type="LINE" missed="X" covered="Y"/></method></class></package></report>
335
344
  */
336
345
  export async function parseJaCoCo(xmlPath, projectRoot) {
337
- const content = await fs.readFile(xmlPath, 'utf-8');
346
+ const content = await readCoverageFile(xmlPath);
338
347
  return parseJaCoCoContent(content, projectRoot || path.dirname(xmlPath));
339
348
  }
340
349
  export function parseJaCoCoContent(content, projectRoot) {
@@ -437,7 +446,7 @@ function parseJaCoCoCounters(xml) {
437
446
  * <Root CoveredStatements="X" TotalStatements="Y"><Assembly><Namespace><Type><Member Statement="..."/></Type></Namespace></Assembly></Root>
438
447
  */
439
448
  export async function parseDotcover(xmlPath, projectRoot) {
440
- const content = await fs.readFile(xmlPath, 'utf-8');
449
+ const content = await readCoverageFile(xmlPath);
441
450
  return parseDotcoverContent(content, projectRoot || path.dirname(xmlPath));
442
451
  }
443
452
  export function parseDotcoverContent(content, projectRoot) {
@@ -531,7 +540,7 @@ export function parseDotcoverContent(content, projectRoot) {
531
540
  * Also handles tarpaulin LCOV output by delegating to parseLCOVContent.
532
541
  */
533
542
  export async function parseTarpaulin(filePath, projectRoot) {
534
- const content = await fs.readFile(filePath, 'utf-8');
543
+ const content = await readCoverageFile(filePath);
535
544
  const root = projectRoot || path.dirname(filePath);
536
545
  // If it looks like LCOV, delegate
537
546
  if (content.includes('SF:') && content.includes('end_of_record')) {
@@ -603,7 +612,7 @@ export function parseTarpaulinContent(content, projectRoot) {
603
612
  * pkg/file.go:startLine.startCol,endLine.endCol numStatements count
604
613
  */
605
614
  export async function parseGoCover(coverPath, projectRoot) {
606
- const content = await fs.readFile(coverPath, 'utf-8');
615
+ const content = await readCoverageFile(coverPath);
607
616
  return parseGoCoverContent(content, projectRoot || path.dirname(coverPath));
608
617
  }
609
618
  export function parseGoCoverContent(content, projectRoot) {
@@ -681,7 +690,7 @@ export function parseGoCoverContent(content, projectRoot) {
681
690
  * but sets the format and language appropriately.
682
691
  */
683
692
  export async function parseKover(xmlPath, projectRoot) {
684
- const content = await fs.readFile(xmlPath, 'utf-8');
693
+ const content = await readCoverageFile(xmlPath);
685
694
  const report = parseJaCoCoContent(content, projectRoot || path.dirname(xmlPath));
686
695
  report.format = 'kover';
687
696
  report.language = 'kotlin';
@@ -698,7 +707,7 @@ export async function parseKover(xmlPath, projectRoot) {
698
707
  * { "targets": [ { "files": [ { "path": "...", "lineCoverage": 0.85, "coveredLines": N, "executableLines": N, "functions": [...] } ] } ] }
699
708
  */
700
709
  export async function parseXcresult(jsonPath, projectRoot) {
701
- const content = await fs.readFile(jsonPath, 'utf-8');
710
+ const content = await readCoverageFile(jsonPath);
702
711
  return parseXcresultContent(content, projectRoot || path.dirname(jsonPath));
703
712
  }
704
713
  export function parseXcresultContent(content, projectRoot) {
@@ -830,7 +839,7 @@ export async function parseCoverage(coveragePath, projectRoot, format, language)
830
839
  return parseXcresult(coveragePath, projectRoot);
831
840
  }
832
841
  // Content-based detection
833
- const content = await fs.readFile(coveragePath, 'utf-8');
842
+ const content = await readCoverageFile(coveragePath);
834
843
  const trimmed = content.trim();
835
844
  if (trimmed.startsWith('{')) {
836
845
  // Check for tarpaulin JSON structure
@@ -869,7 +878,7 @@ export async function parseCoverage(coveragePath, projectRoot, format, language)
869
878
  // Language-based fallback: try the first format associated with the language
870
879
  if (language) {
871
880
  const langLower = language.toLowerCase();
872
- const hints = LANGUAGE_FORMAT_HINTS[langLower];
881
+ const hints = Object.hasOwn(LANGUAGE_FORMAT_HINTS, langLower) ? LANGUAGE_FORMAT_HINTS[langLower] : undefined; // #1157
873
882
  if (hints && hints.length > 0) {
874
883
  try {
875
884
  return await parseCoverage(coveragePath, projectRoot, hints[0]);
@@ -36,6 +36,8 @@ export interface PatternContext {
36
36
  readonly testType?: string;
37
37
  readonly codeContext?: string;
38
38
  readonly tags: string[];
39
+ /** Explicit strategy objective; absent means no requested direction. */
40
+ readonly objective?: Pick<OptimizationObjective, 'metric' | 'direction'>;
39
41
  }
40
42
  export interface PatternTemplate {
41
43
  readonly type: 'code' | 'prompt' | 'workflow' | 'config';
@@ -290,7 +290,8 @@ Provide:
290
290
  let output = pattern.template.content;
291
291
  // Replace template variables
292
292
  for (const variable of pattern.template.variables) {
293
- const value = variables[variable.name] ?? variable.defaultValue;
293
+ // #1157: the variable name comes from a stored pattern; read own values only.
294
+ const value = (Object.hasOwn(variables, variable.name) ? variables[variable.name] : undefined) ?? variable.defaultValue;
294
295
  if (variable.required && value === undefined) {
295
296
  return err(new Error(`Required variable ${variable.name} not provided`));
296
297
  }