agentic-qe 3.15.10 → 3.15.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (536) hide show
  1. package/.claude/hooks/aqe-hook.cjs +38 -2
  2. package/.claude/skills/skills-manifest.json +1 -1
  3. package/CHANGELOG.md +263 -0
  4. package/README.md +8 -0
  5. package/assets/skills/skills-manifest.json +1 -1
  6. package/dist/adapters/a2a/agent-cards/generator.js +6 -3
  7. package/dist/adapters/a2a/tasks/task-router.js +3 -1
  8. package/dist/adapters/trajectory-adapter.js +1 -1
  9. package/dist/agents/claim-verifier/verifiers/output-verifier.d.ts +3 -1
  10. package/dist/agents/claim-verifier/verifiers/output-verifier.js +31 -2
  11. package/dist/agents/overlay-loader.js +26 -21
  12. package/dist/cli/bundle.js +6 -6
  13. package/dist/cli/chunks/adapter-HL7MOCQN.js +2 -0
  14. package/dist/cli/chunks/{agent-booster-wasm-H7ANGXW4.js → agent-booster-wasm-5VZCKTIJ.js} +2 -2
  15. package/dist/cli/chunks/{agent-handler-SVXSHEET.js → agent-handler-K3C6CQCD.js} +2 -2
  16. package/dist/cli/chunks/{agent-memory-branch-WKQH36XL.js → agent-memory-branch-NVFQ25WS.js} +2 -2
  17. package/dist/cli/chunks/aqe-learning-engine-OZ2DXB4G.js +2 -0
  18. package/dist/cli/chunks/{arena-EKOOFVST.js → arena-QGWIJADQ.js} +2 -2
  19. package/dist/cli/chunks/{arena-OPS36NFZ.js → arena-TSZVDSXS.js} +4 -4
  20. package/dist/cli/chunks/{audit-AO5NDZRI.js → audit-KIEE2SHJ.js} +3 -3
  21. package/dist/cli/chunks/base-WIM7G3HC.js +2 -0
  22. package/dist/cli/chunks/{better-sqlite3-TFLVEMMY.js → better-sqlite3-BNB32NW3.js} +2 -2
  23. package/dist/cli/chunks/{brain-handler-ADBBJPYW.js → brain-handler-MPC5SPYI.js} +3 -3
  24. package/dist/cli/chunks/{branch-enumerator-HGHUYYL5.js → branch-enumerator-LZ7UXKAY.js} +2 -2
  25. package/dist/cli/chunks/{browser-5LU6P4SZ.js → browser-VDHAW4RK.js} +2 -2
  26. package/dist/cli/chunks/browser-workflow-QRKCFVR3.js +2 -0
  27. package/dist/cli/chunks/{chunk-5LPYV3TK.js → chunk-23PQF7NN.js} +1 -1
  28. package/dist/cli/chunks/{chunk-2ZMF4NCF.js → chunk-26672ISV.js} +2 -2
  29. package/dist/cli/chunks/{chunk-U53ZB4IX.js → chunk-2ASQRBK2.js} +2 -2
  30. package/dist/cli/chunks/{chunk-7PJIR4ST.js → chunk-2E2QO44T.js} +2 -2
  31. package/dist/cli/chunks/{chunk-2T7RRL6G.js → chunk-2IVE5AR3.js} +1 -1
  32. package/dist/cli/chunks/{chunk-B6LTH6YV.js → chunk-2JYUA27M.js} +1 -1
  33. package/dist/cli/chunks/{chunk-PFG6VQ5Z.js → chunk-2PPSS4JD.js} +2 -2
  34. package/dist/cli/chunks/{chunk-NZYLNXT6.js → chunk-32UTHIY5.js} +5 -5
  35. package/dist/cli/chunks/{chunk-5E6GHSTY.js → chunk-33I2ZP6E.js} +2 -2
  36. package/dist/cli/chunks/{chunk-XLZYRTNO.js → chunk-35MIUSXQ.js} +2 -2
  37. package/dist/cli/chunks/{chunk-7LFZ4CHM.js → chunk-35NW676P.js} +2 -2
  38. package/dist/cli/chunks/{chunk-4G63WT4F.js → chunk-3EWQN37E.js} +2 -2
  39. package/dist/cli/chunks/{chunk-GZLZCZ42.js → chunk-3IU4LDZR.js} +2 -2
  40. package/dist/cli/chunks/{chunk-CESIR27V.js → chunk-47RMGDG4.js} +2 -2
  41. package/dist/cli/chunks/chunk-4A76VPU4.js +3 -0
  42. package/dist/cli/chunks/{chunk-DT7SIJOA.js → chunk-4CB3QPZM.js} +2 -2
  43. package/dist/cli/chunks/{chunk-ERQKYIP7.js → chunk-4HWUECVD.js} +5 -5
  44. package/dist/cli/chunks/{chunk-MA7JIQ6U.js → chunk-4KUOYDY2.js} +5 -5
  45. package/dist/cli/chunks/{chunk-VWNFAW2M.js → chunk-4LWMAAWK.js} +2 -2
  46. package/dist/cli/chunks/{chunk-IKISCIGH.js → chunk-4PU5GTZW.js} +2 -2
  47. package/dist/cli/chunks/{chunk-ZXPY654C.js → chunk-4SA7M34P.js} +1 -1
  48. package/dist/cli/chunks/{chunk-NGKNYIQZ.js → chunk-4Y6OEBJZ.js} +1 -1
  49. package/dist/cli/chunks/{chunk-KOBVYY6H.js → chunk-5A66EGEW.js} +2 -2
  50. package/dist/cli/chunks/{chunk-Z2O2YJAF.js → chunk-5ADXFUMO.js} +2 -2
  51. package/dist/cli/chunks/{chunk-YKMU4LBV.js → chunk-5S4UIDFK.js} +1 -1
  52. package/dist/cli/chunks/{chunk-Z7IYW5U7.js → chunk-5TAEW5OV.js} +1 -1
  53. package/dist/cli/chunks/chunk-5Z23ZMXZ.js +742 -0
  54. package/dist/cli/chunks/{chunk-6TB6YOCZ.js → chunk-65TH6RPD.js} +1 -1
  55. package/dist/cli/chunks/{chunk-3Y7SPD72.js → chunk-66PXR3NI.js} +2 -2
  56. package/dist/cli/chunks/{chunk-3P34JFQH.js → chunk-6E6HB4N4.js} +14 -14
  57. package/dist/cli/chunks/{chunk-6PX4OXQO.js → chunk-6QRI3JVE.js} +2 -2
  58. package/dist/cli/chunks/{chunk-WBM6N6IM.js → chunk-7DNR4KKR.js} +1 -1
  59. package/dist/cli/chunks/{chunk-6XCMKIZN.js → chunk-7JFDLL2F.js} +1 -1
  60. package/dist/cli/chunks/chunk-7OEFBWAG.js +5 -0
  61. package/dist/cli/chunks/{chunk-Y76IAYQD.js → chunk-7QEUHNKO.js} +1 -1
  62. package/dist/cli/chunks/{chunk-WQ4PYWSW.js → chunk-7TA5MUPW.js} +1 -1
  63. package/dist/cli/chunks/{chunk-2XGVTYVX.js → chunk-A2JCRXTK.js} +2 -2
  64. package/dist/cli/chunks/{chunk-ESUO3GTJ.js → chunk-A5Y7DAVQ.js} +2 -2
  65. package/dist/cli/chunks/{chunk-ATHWDAXB.js → chunk-ADUAJIAU.js} +2 -2
  66. package/dist/cli/chunks/{chunk-IU2IV4NE.js → chunk-AJEXPFAB.js} +1 -1
  67. package/dist/cli/chunks/{chunk-YK7JN5N7.js → chunk-BC4T6SCV.js} +4 -4
  68. package/dist/cli/chunks/{chunk-KSIWGGJI.js → chunk-BMG2JLSQ.js} +2 -2
  69. package/dist/cli/chunks/chunk-BOSMELJX.js +180 -0
  70. package/dist/cli/chunks/{chunk-7OZVZIBE.js → chunk-BYRCB5JT.js} +2 -2
  71. package/dist/cli/chunks/{chunk-FAUCT5KR.js → chunk-C3YOVASQ.js} +6 -5
  72. package/dist/cli/chunks/{chunk-DMFTELBS.js → chunk-C74M4WUI.js} +2 -2
  73. package/dist/cli/chunks/{chunk-2SXBBUM6.js → chunk-CA5UNWQF.js} +2 -2
  74. package/dist/cli/chunks/{chunk-UCJMVXO4.js → chunk-CDA5Z74H.js} +2 -2
  75. package/dist/cli/chunks/{chunk-NVYIZCSR.js → chunk-CPIBIR3X.js} +2 -2
  76. package/dist/cli/chunks/{chunk-YK3BVZY6.js → chunk-CU36D7TN.js} +2 -2
  77. package/dist/cli/chunks/{chunk-H32EPIR2.js → chunk-DAUEK66C.js} +1 -1
  78. package/dist/cli/chunks/{chunk-6KIL6CMD.js → chunk-DRCBRUGN.js} +2 -2
  79. package/dist/cli/chunks/{chunk-EWFECZ2U.js → chunk-DZGPUGUG.js} +2 -2
  80. package/dist/cli/chunks/{chunk-YDAQK5UF.js → chunk-EF6OERRR.js} +1 -1
  81. package/dist/cli/chunks/{chunk-KG336OV3.js → chunk-EN7GRVEQ.js} +2 -2
  82. package/dist/cli/chunks/{chunk-DBMNJSBV.js → chunk-ENGL7FIJ.js} +1 -1
  83. package/dist/cli/chunks/{chunk-FKL3R5JQ.js → chunk-FAGKBOX2.js} +2 -2
  84. package/dist/cli/chunks/{chunk-NAXGWDVM.js → chunk-FNUFTWEO.js} +3 -3
  85. package/dist/cli/chunks/{chunk-RWWOHCMG.js → chunk-FZJCBSN4.js} +2 -2
  86. package/dist/cli/chunks/{chunk-ABFFWZPC.js → chunk-G24SWTAX.js} +151 -149
  87. package/dist/cli/chunks/{chunk-ODJNUMV3.js → chunk-G3AABG4Q.js} +2 -2
  88. package/dist/cli/chunks/{chunk-FBXTQNRH.js → chunk-GJKZ7UQO.js} +2 -2
  89. package/dist/cli/chunks/{chunk-DEF34AFL.js → chunk-GKFV6CUD.js} +2 -2
  90. package/dist/cli/chunks/{chunk-SY2IB442.js → chunk-HLGFHHWV.js} +2 -2
  91. package/dist/cli/chunks/{chunk-CZGOSJQ4.js → chunk-HM3LSFTY.js} +2 -2
  92. package/dist/cli/chunks/chunk-HSA5IGGW.js +2 -0
  93. package/dist/cli/chunks/{chunk-GJHWY3ZX.js → chunk-HZBXJFGN.js} +2 -2
  94. package/dist/cli/chunks/chunk-IA55PFLG.js +7 -0
  95. package/dist/cli/chunks/{chunk-MNN5J4GU.js → chunk-ICKUINKD.js} +2 -2
  96. package/dist/cli/chunks/{chunk-XEB3NLJR.js → chunk-IETBWYHW.js} +2 -2
  97. package/dist/cli/chunks/{chunk-A55QKKT2.js → chunk-IL7GQNNE.js} +2 -2
  98. package/dist/cli/chunks/{chunk-LRZY4KS2.js → chunk-INZARYUD.js} +2 -2
  99. package/dist/cli/chunks/{chunk-OBAREPDC.js → chunk-IPA7K556.js} +2 -2
  100. package/dist/cli/chunks/{chunk-CFBEBXLO.js → chunk-IVTQF55W.js} +3 -3
  101. package/dist/cli/chunks/{chunk-FFTPAWM6.js → chunk-J7Y7ZBIT.js} +8 -8
  102. package/dist/cli/chunks/{chunk-I33O4BRQ.js → chunk-JGIJPDGD.js} +2 -2
  103. package/dist/cli/chunks/chunk-JNXK47OL.js +2 -0
  104. package/dist/cli/chunks/{chunk-PCEW6Q2C.js → chunk-JOWUS2X5.js} +1 -1
  105. package/dist/cli/chunks/{chunk-KI73QCR5.js → chunk-JR6CUKAI.js} +2 -2
  106. package/dist/cli/chunks/chunk-JRYWLOBD.js +21 -0
  107. package/dist/cli/chunks/{chunk-SO45NA4D.js → chunk-JW5PDJ5O.js} +11 -11
  108. package/dist/cli/chunks/{chunk-APSRPR4W.js → chunk-K3A3NWT3.js} +2 -2
  109. package/dist/cli/chunks/{chunk-FESZBPUB.js → chunk-KA5SHLMW.js} +2 -2
  110. package/dist/cli/chunks/{chunk-OPFGRS5S.js → chunk-KGA7VAI4.js} +2 -2
  111. package/dist/cli/chunks/chunk-KJDI5CHX.js +2 -0
  112. package/dist/cli/chunks/{chunk-V2RSNVMW.js → chunk-L3PV7VXK.js} +1 -1
  113. package/dist/cli/chunks/{chunk-C522H7XR.js → chunk-L7NGKANW.js} +32 -32
  114. package/dist/cli/chunks/{chunk-DNRWGATA.js → chunk-LFBA735S.js} +7 -7
  115. package/dist/cli/chunks/{chunk-V2M2XCR5.js → chunk-MAJXZYGK.js} +1 -1
  116. package/dist/cli/chunks/{chunk-FZOWULMH.js → chunk-MCPEC6OO.js} +1 -1
  117. package/dist/cli/chunks/{chunk-LMS3Y7JD.js → chunk-MCPXNUDK.js} +2 -2
  118. package/dist/cli/chunks/{chunk-GWZZ7DAO.js → chunk-MMEALJ4D.js} +2 -2
  119. package/dist/cli/chunks/{chunk-G3CZCUPM.js → chunk-MYF5CNGV.js} +2 -2
  120. package/dist/cli/chunks/{chunk-NNFZUTDH.js → chunk-MYUMJ2ZI.js} +1 -1
  121. package/dist/cli/chunks/{chunk-WDQ7IEZY.js → chunk-N7O3PF6Y.js} +2 -2
  122. package/dist/cli/chunks/{chunk-YAKGBHO4.js → chunk-NA3F6FEO.js} +2 -2
  123. package/dist/cli/chunks/chunk-NNBQZR73.js +6 -0
  124. package/dist/cli/chunks/{chunk-6C3II5OM.js → chunk-NV74SICL.js} +2 -2
  125. package/dist/cli/chunks/chunk-NVRYELCY.js +13 -0
  126. package/dist/cli/chunks/{chunk-UHTTW3IT.js → chunk-NX4BCSOZ.js} +2 -2
  127. package/dist/cli/chunks/{chunk-EN2QSKFF.js → chunk-O3IM4WRZ.js} +2 -2
  128. package/dist/cli/chunks/{chunk-S75EYIJG.js → chunk-O4QJMANM.js} +1 -1
  129. package/dist/cli/chunks/{chunk-NPPHWFA2.js → chunk-OHVYINGM.js} +18 -18
  130. package/dist/cli/chunks/{chunk-DE4YJQJF.js → chunk-P5E26N2X.js} +2 -2
  131. package/dist/cli/chunks/chunk-P7UFJ6DO.js +14 -0
  132. package/dist/cli/chunks/{chunk-XFVTGAAJ.js → chunk-PGSJBXTD.js} +2 -2
  133. package/dist/cli/chunks/{chunk-CZ2IF6MC.js → chunk-PT2NXS43.js} +1 -1
  134. package/dist/cli/chunks/{chunk-RK73HB2F.js → chunk-PTBOLBM4.js} +2 -2
  135. package/dist/cli/chunks/{chunk-EAU5KDFO.js → chunk-PX5OPXY6.js} +1 -1
  136. package/dist/cli/chunks/chunk-QCPVUNN3.js +2 -0
  137. package/dist/cli/chunks/{chunk-VKRTTFB6.js → chunk-QSGEBCDB.js} +2 -2
  138. package/dist/cli/chunks/{chunk-SKQUUE4F.js → chunk-QUJJYTJH.js} +2 -2
  139. package/dist/cli/chunks/chunk-QWG3SILX.js +59 -0
  140. package/dist/cli/chunks/{chunk-D6DA2KFD.js → chunk-RCOLPF3B.js} +2 -2
  141. package/dist/cli/chunks/{chunk-SU5H66SD.js → chunk-RYHG3I7J.js} +2 -2
  142. package/dist/cli/chunks/chunk-SBHM5X2S.js +4 -0
  143. package/dist/cli/chunks/{chunk-62OAY5KJ.js → chunk-SDRJJUPO.js} +1 -1
  144. package/dist/cli/chunks/{chunk-FB6TI3BH.js → chunk-SG2TX72G.js} +2 -2
  145. package/dist/cli/chunks/{chunk-H2PYU7MN.js → chunk-SITL5YZV.js} +4 -4
  146. package/dist/cli/chunks/{chunk-AI4VYSFS.js → chunk-SPC4RBLF.js} +2 -2
  147. package/dist/cli/chunks/{chunk-BQUAE3CP.js → chunk-SQVZ3TRU.js} +2 -2
  148. package/dist/cli/chunks/{chunk-TBLI254A.js → chunk-SUX5XB2Z.js} +2 -2
  149. package/dist/cli/chunks/{chunk-VFSYMOAL.js → chunk-T4EN5VVK.js} +2 -2
  150. package/dist/cli/chunks/{chunk-KNQ2ERFX.js → chunk-TGMXUZZC.js} +2 -2
  151. package/dist/cli/chunks/{chunk-7TB6FK4B.js → chunk-TLRHAMX5.js} +1 -1
  152. package/dist/cli/chunks/{chunk-V6JBOIMX.js → chunk-TOWOJGEI.js} +1 -1
  153. package/dist/cli/chunks/{chunk-JHIY4VCC.js → chunk-TSOQ2QLT.js} +3 -3
  154. package/dist/cli/chunks/{chunk-YYTGXD3R.js → chunk-TVA5GRIU.js} +2 -2
  155. package/dist/cli/chunks/{chunk-6MVVSSID.js → chunk-TXEUVUMO.js} +1 -1
  156. package/dist/cli/chunks/{chunk-7ZCDZHDB.js → chunk-U6IXYQO4.js} +2 -2
  157. package/dist/cli/chunks/{chunk-NW5JUCCG.js → chunk-U7ZHDGXG.js} +1 -1
  158. package/dist/cli/chunks/{chunk-UARKIZAS.js → chunk-UCSK2RMI.js} +2 -2
  159. package/dist/cli/chunks/{chunk-RPHY2DU6.js → chunk-UIKQPO4Y.js} +2 -2
  160. package/dist/cli/chunks/chunk-UJNGGFGX.js +2 -0
  161. package/dist/cli/chunks/{chunk-EDLFX4ZB.js → chunk-ULCW6IVQ.js} +2 -2
  162. package/dist/cli/chunks/{chunk-M2QV7PT7.js → chunk-UREDS662.js} +2 -2
  163. package/dist/cli/chunks/{chunk-MG27QY4D.js → chunk-URSTP3WI.js} +2 -2
  164. package/dist/cli/chunks/{chunk-2ZI5FKSF.js → chunk-UUZZXHUF.js} +2 -2
  165. package/dist/cli/chunks/{chunk-IPJ7Q3AJ.js → chunk-UZED4YZ5.js} +1 -1
  166. package/dist/cli/chunks/{chunk-VFKF2XO7.js → chunk-VF7FTD64.js} +1 -1
  167. package/dist/cli/chunks/{chunk-YCGP5VFP.js → chunk-VUR5THML.js} +2 -2
  168. package/dist/cli/chunks/{chunk-WDVRE6GN.js → chunk-VXVTFKRA.js} +2 -2
  169. package/dist/cli/chunks/chunk-VZBC6DP7.js +2 -0
  170. package/dist/cli/chunks/{chunk-GHBNRMSJ.js → chunk-W4II6SIH.js} +2 -2
  171. package/dist/cli/chunks/{chunk-TNMBRDCA.js → chunk-W5HQIYQU.js} +3 -3
  172. package/dist/cli/chunks/{chunk-H74Q7TJN.js → chunk-W7H55PY4.js} +1 -1
  173. package/dist/cli/chunks/{chunk-OY2AHLSF.js → chunk-WDEXOLK2.js} +1 -1
  174. package/dist/cli/chunks/{chunk-VJQYDYAJ.js → chunk-WGTEZT7G.js} +2 -2
  175. package/dist/cli/chunks/{chunk-GRCIBCJ2.js → chunk-WLRU6ESI.js} +2 -2
  176. package/dist/cli/chunks/{chunk-ACWFKES2.js → chunk-WTAUF6O4.js} +2 -2
  177. package/dist/cli/chunks/chunk-XCNSGSKV.js +3 -0
  178. package/dist/cli/chunks/{chunk-6S3WJGUV.js → chunk-XZOYKB22.js} +2 -2
  179. package/dist/cli/chunks/chunk-YIDAXOUX.js +8 -0
  180. package/dist/cli/chunks/{chunk-LQEURY7C.js → chunk-YLKIXEPP.js} +1 -1
  181. package/dist/cli/chunks/chunk-YNVEDFPQ.js +2 -0
  182. package/dist/cli/chunks/{chunk-PGYMKGOE.js → chunk-YUA6ZKKY.js} +2 -2
  183. package/dist/cli/chunks/{chunk-GJMLK5UT.js → chunk-YVJEUX3I.js} +2 -2
  184. package/dist/cli/chunks/{chunk-AH3ZD3NJ.js → chunk-YWWMNTBF.js} +2 -2
  185. package/dist/cli/chunks/{chunk-37OWRCUN.js → chunk-ZGROHCOW.js} +2 -2
  186. package/dist/cli/chunks/{chunk-OEKP73MC.js → chunk-ZPVGX4DI.js} +2 -2
  187. package/dist/cli/chunks/{chunk-6GP6W46M.js → chunk-ZROAMFX2.js} +2 -2
  188. package/dist/cli/chunks/{chunk-OY3NJNP2.js → chunk-ZYOYR3UR.js} +1 -1
  189. package/dist/cli/chunks/ci-BZNWW3I3.js +81 -0
  190. package/dist/cli/chunks/{ci-config-7ODMNAUM.js → ci-config-LOHNXOKV.js} +2 -2
  191. package/dist/cli/chunks/{ci-output-FXZ7ZZW3.js → ci-output-LCOQBSJL.js} +2 -2
  192. package/dist/cli/chunks/{circuit-breaker-4VOUEPOX.js → circuit-breaker-7LRXTLFE.js} +2 -2
  193. package/dist/cli/chunks/{claude-flow-setup-7D4SGLM4.js → claude-flow-setup-HBU4VWC3.js} +2 -2
  194. package/dist/cli/chunks/client-4PNYDFYS.js +2 -0
  195. package/dist/cli/chunks/{cline-installer-WRRT7BGQ.js → cline-installer-CO6MLH6X.js} +2 -2
  196. package/dist/cli/chunks/{code-ZDJRIL3S.js → code-SIXBS6JM.js} +3 -3
  197. package/dist/cli/chunks/{code-index-extractor-4S4SHM56.js → code-index-extractor-GWJKZ2IQ.js} +2 -2
  198. package/dist/cli/chunks/{codex-installer-YTRHNDWR.js → codex-installer-6NINVWXJ.js} +2 -2
  199. package/dist/cli/chunks/{completions-6N64JUXJ.js → completions-7VIX3GML.js} +2 -2
  200. package/dist/cli/chunks/{complexity-analyzer-I4A26VCJ.js → complexity-analyzer-FBQR6ZP2.js} +2 -2
  201. package/dist/cli/chunks/{continuedev-installer-IIDR66LB.js → continuedev-installer-VA7RIXW5.js} +2 -2
  202. package/dist/cli/chunks/{copilot-installer-SVVFY3S2.js → copilot-installer-4QEBC4MU.js} +2 -2
  203. package/dist/cli/chunks/core-handlers-ODO6LUWQ.js +2 -0
  204. package/dist/cli/chunks/{cost-tracker-VGFS6IBX.js → cost-tracker-GRYKHPWL.js} +2 -2
  205. package/dist/cli/chunks/coverage-USPMNKOU.js +50 -0
  206. package/dist/cli/chunks/cross-domain-router-DT4MHJKK.js +2 -0
  207. package/dist/cli/chunks/{cursor-installer-UPETT57E.js → cursor-installer-ZXIPSZVH.js} +2 -2
  208. package/dist/cli/chunks/{daemon-CQFNZLXU.js → daemon-D7F3RGI5.js} +3 -3
  209. package/dist/cli/chunks/{daemon-7BDJHEIJ.js → daemon-N2VRHPSJ.js} +4 -4
  210. package/dist/cli/chunks/{dag-attention-scheduler-PJVABHON.js → dag-attention-scheduler-NL6BA7BY.js} +2 -2
  211. package/dist/cli/chunks/{detect-56SKAGWX.js → detect-XC2HCIIT.js} +2 -2
  212. package/dist/cli/chunks/{dist-node-UYTYUMLN.js → dist-node-A3Y26MEI.js} +2 -2
  213. package/dist/cli/chunks/{domain-handler-YOYLBYJE.js → domain-handler-WV6SFXRB.js} +2 -2
  214. package/dist/cli/chunks/{domain-plugins-7TARX2XF.js → domain-plugins-KJIF6Z2B.js} +2 -2
  215. package/dist/cli/chunks/{domain-transfer-AKVSBD6E.js → domain-transfer-L3F6AES2.js} +2 -2
  216. package/dist/cli/chunks/dream-QOB3JCOM.js +2 -0
  217. package/dist/cli/chunks/{embed-and-insert-pattern-IS6HSR66.js → embed-and-insert-pattern-PA3Y4KGO.js} +2 -2
  218. package/dist/cli/chunks/{eval-GNB574IM.js → eval-YGEZNUVE.js} +2 -2
  219. package/dist/cli/chunks/{experience-capture-middleware-RCAOCKM7.js → experience-capture-middleware-D4T7NW6B.js} +3 -3
  220. package/dist/cli/chunks/{fast-paths-KTZ5SF54.js → fast-paths-6JYK7RYQ.js} +2 -2
  221. package/dist/cli/chunks/{feature-flags-KFHSR5YF.js → feature-flags-DKXMDVPE.js} +2 -2
  222. package/dist/cli/chunks/{feature-flags-ITX5LQ57.js → feature-flags-RBH2GDSR.js} +2 -2
  223. package/dist/cli/chunks/file-discovery-BN76S2PR.js +2 -0
  224. package/dist/cli/chunks/fleet-43YMXACN.js +46 -0
  225. package/dist/cli/chunks/{gnn-wrapper-RLFW3GSX.js → gnn-wrapper-MV54UC4C.js} +2 -2
  226. package/dist/cli/chunks/{heartbeat-handler-EM2URCYZ.js → heartbeat-handler-7DKMVQQH.js} +4 -4
  227. package/dist/cli/chunks/heartbeat-scheduler-3NNP4WCP.js +2 -0
  228. package/dist/cli/chunks/hnsw-adapter-MZR7Y4WF.js +2 -0
  229. package/dist/cli/chunks/hnsw-index-HE4AX22U.js +2 -0
  230. package/dist/cli/chunks/{hnsw-legacy-bridge-JMHEOIBH.js → hnsw-legacy-bridge-6IWREDQC.js} +2 -2
  231. package/dist/cli/chunks/{hnswlib-node-CBP73QHY.js → hnswlib-node-5BIESSCK.js} +2 -2
  232. package/dist/cli/chunks/{hooks-IP7XE34Z.js → hooks-3EETRM62.js} +30 -30
  233. package/dist/cli/chunks/hybrid-backend-IHUHB3Y2.js +2 -0
  234. package/dist/cli/chunks/{hypergraph-engine-ONAYHU25.js → hypergraph-engine-RSWCB2D3.js} +2 -2
  235. package/dist/cli/chunks/{hypergraph-handler-VINJRAID.js → hypergraph-handler-552LXKL3.js} +3 -3
  236. package/dist/cli/chunks/impact-analyzer-FI6GI6PD.js +2 -0
  237. package/dist/cli/chunks/{init-guard-RYVV5R3Z.js → init-guard-OTDBJ5HD.js} +2 -2
  238. package/dist/cli/chunks/{init-handler-MPRGWMOE.js → init-handler-3FK3TKEA.js} +26 -25
  239. package/dist/cli/chunks/init-wizard-WLQKH5Y5.js +2 -0
  240. package/dist/cli/chunks/kernel-2WZOQEZS.js +2 -0
  241. package/dist/cli/chunks/{kilocode-installer-OPD7JBRL.js → kilocode-installer-KZ2O4LF3.js} +2 -2
  242. package/dist/cli/chunks/{kiro-installer-M4OPUNK2.js → kiro-installer-MLCCXRF7.js} +2 -2
  243. package/dist/cli/chunks/knowledge-graph-G3LVKK6P.js +2 -0
  244. package/dist/cli/chunks/{learning-4UWTQLMF.js → learning-QUCMBD77.js} +3 -3
  245. package/dist/cli/chunks/{llm-router-SQ56FF6Z.js → llm-router-PDEV3UP2.js} +4 -4
  246. package/dist/cli/chunks/llm-router-service-MM75HKWJ.js +2 -0
  247. package/dist/cli/chunks/{load-HPHKDGGL.js → load-XFVVLO7E.js} +2 -2
  248. package/dist/cli/chunks/load-test-BEWEE44J.js +2 -0
  249. package/dist/cli/chunks/{mcp-TELMAC7Z.js → mcp-74G3CL2S.js} +2 -2
  250. package/dist/cli/chunks/{memory-PFQ3KPVJ.js → memory-XIFM6JNX.js} +5 -5
  251. package/dist/cli/chunks/memory-backend-NYKBBKZR.js +2 -0
  252. package/dist/cli/chunks/memory-handlers-ZCKURV6S.js +2 -0
  253. package/dist/cli/chunks/{multi-model-executor-3VDRX6TZ.js → multi-model-executor-7L4W3O2Q.js} +2 -2
  254. package/dist/cli/chunks/{opencode-installer-PJ576R63.js → opencode-installer-BPG422LF.js} +2 -2
  255. package/dist/cli/chunks/{orchestrator-72QP4UU7.js → orchestrator-OEAFLAEV.js} +61 -23
  256. package/dist/cli/chunks/pattern-null-store-QGPUIV6M.js +2 -0
  257. package/dist/cli/chunks/{pattern-usage-recorder-754YQW7C.js → pattern-usage-recorder-LOPNCULT.js} +2 -2
  258. package/dist/cli/chunks/{pipeline-AVXY4MVB.js → pipeline-VWTYUZB7.js} +2 -2
  259. package/dist/cli/chunks/{platform-3E3DXLYB.js → platform-WFJJ3X2E.js} +2 -2
  260. package/dist/cli/chunks/{plugin-7FUQAKRE.js → plugin-744TPUSG.js} +2 -2
  261. package/dist/cli/chunks/{prime-radiant-advanced-wasm-NIB4F5NV.js → prime-radiant-advanced-wasm-BD5BLNDR.js} +2 -2
  262. package/dist/cli/chunks/project-root-C7ELXZRK.js +2 -0
  263. package/dist/cli/chunks/protocol-executor-SUVE33BM.js +2 -0
  264. package/dist/cli/chunks/{protocol-handler-BQRYMUTG.js → protocol-handler-JIBILI74.js} +2 -2
  265. package/dist/cli/chunks/{prove-H52QGC6B.js → prove-MNOL5FYW.js} +2 -2
  266. package/dist/cli/chunks/qe-reasoning-bank-YWZMMGJB.js +2 -0
  267. package/dist/cli/chunks/{quality-QO4XPAUM.js → quality-JEGBDGGX.js} +2 -2
  268. package/dist/cli/chunks/{quality-gate-FBKE5E6F.js → quality-gate-SYJ6ROMI.js} +3 -3
  269. package/dist/cli/chunks/queen-coordinator-ZFAKXRN7.js +2 -0
  270. package/dist/cli/chunks/real-embeddings-ZWXS5ZFV.js +2 -0
  271. package/dist/cli/chunks/{ref-validation-LF76ZOBD.js → ref-validation-RRHUFW2N.js} +2 -2
  272. package/dist/cli/chunks/{roocode-installer-3BYEBTQ7.js → roocode-installer-XFO6JSVN.js} +2 -2
  273. package/dist/cli/chunks/router-4FTAVYLJ.js +2 -0
  274. package/dist/cli/chunks/routing-feedback-IO2KOWMJ.js +2 -0
  275. package/dist/cli/chunks/{routing-handler-DST7BVCU.js → routing-handler-L2K3JASE.js} +2 -2
  276. package/dist/cli/chunks/{ruvector-commands-XE32PGKC.js → ruvector-commands-A6CINHGM.js} +2 -2
  277. package/dist/cli/chunks/rvf-dual-writer-KCIRNE7C.js +2 -0
  278. package/dist/cli/chunks/rvf-migration-adapter-MFC5WTJU.js +2 -0
  279. package/dist/cli/chunks/{rvf-migration-coordinator-VP32XC75.js → rvf-migration-coordinator-T4RY7L53.js} +2 -2
  280. package/dist/cli/chunks/rvf-native-adapter-I3KWHE7X.js +2 -0
  281. package/dist/cli/chunks/{rvf-store-integrity-SH2AMVI7.js → rvf-store-integrity-IR33TGQS.js} +2 -2
  282. package/dist/cli/chunks/safe-db-QXDZ6QY3.js +2 -0
  283. package/dist/cli/chunks/schedule-CZKD6RIY.js +2 -0
  284. package/dist/cli/chunks/scheduler-BLA3Q4CH.js +2 -0
  285. package/dist/cli/chunks/{security-VSPNKCDS.js → security-Z5GDE2IH.js} +3 -3
  286. package/dist/cli/chunks/{shared-rvf-adapter-HX6AHL3P.js → shared-rvf-adapter-SIZMEHPM.js} +2 -2
  287. package/dist/cli/chunks/{shared-rvf-dual-writer-MX4FC2JE.js → shared-rvf-dual-writer-HLM65RDS.js} +2 -2
  288. package/dist/cli/chunks/sqlite-persistence-XIUYDJC4.js +2 -0
  289. package/dist/cli/chunks/{standalone-memory-O4QUTK6L.js → standalone-memory-SKSZG7P5.js} +2 -2
  290. package/dist/cli/chunks/{status-handler-Z2BP6EOG.js → status-handler-766YOOMJ.js} +2 -2
  291. package/dist/cli/chunks/{structural-health-R36WNLQG.js → structural-health-M45FNOLT.js} +2 -2
  292. package/dist/cli/chunks/{sync-QF5Y3EMZ.js → sync-6CJ24B5T.js} +2 -2
  293. package/dist/cli/chunks/{sync-2ELWUFQU.js → sync-B2U366I3.js} +2 -2
  294. package/dist/cli/chunks/{task-handler-43PYE75J.js → task-handler-P6IFLCKP.js} +17 -15
  295. package/dist/cli/chunks/task-handlers-DPWMUKFC.js +9 -0
  296. package/dist/cli/chunks/{test-UWA377D4.js → test-TODH7KRF.js} +11 -11
  297. package/dist/cli/chunks/test-runner-process-46IPK3GH.js +2 -0
  298. package/dist/cli/chunks/{test-scheduling-YQZPJRRN.js → test-scheduling-VMVMVRHT.js} +3 -3
  299. package/dist/cli/chunks/{token-bootstrap-F7C6UKTC.js → token-bootstrap-XQW7BMCK.js} +2 -2
  300. package/dist/cli/chunks/{token-usage-DO6WLMXP.js → token-usage-JCZEIRKO.js} +2 -2
  301. package/dist/cli/chunks/{transformers-H5RGFKVO.js → transformers-U2ML3OHE.js} +2 -2
  302. package/dist/cli/chunks/tree-sitter-wasm-parser-MOI2WWNJ.js +2 -0
  303. package/dist/cli/chunks/{types-PJS2FGPF.js → types-GGEPCHP6.js} +2 -2
  304. package/dist/cli/chunks/unified-memory-FL26RTV3.js +2 -0
  305. package/dist/cli/chunks/unified-memory-hnsw-E2BPTH3U.js +2 -0
  306. package/dist/cli/chunks/unified-persistence-5ZOUPKHF.js +2 -0
  307. package/dist/cli/chunks/{upgrade-4IC4F6AB.js → upgrade-T5GRM7HS.js} +2 -2
  308. package/dist/cli/chunks/{validate-DHUWW7PF.js → validate-XMUJPLP3.js} +2 -2
  309. package/dist/cli/chunks/{validate-swarm-OERQNOX5.js → validate-swarm-KJLF7JEH.js} +2 -2
  310. package/dist/cli/chunks/visual-security-IJVPO5FA.js +2 -0
  311. package/dist/cli/chunks/{web-tree-sitter-TV7DMKES.js → web-tree-sitter-LOHVZ7G5.js} +2 -2
  312. package/dist/cli/chunks/{windsurf-installer-QZPWSH37.js → windsurf-installer-33FBTXJU.js} +2 -2
  313. package/dist/cli/chunks/witness-chain-5FAFCQKP.js +2 -0
  314. package/dist/cli/chunks/witness-chain-V2M32W5D.js +2 -0
  315. package/dist/cli/chunks/{witness-chain-repair-RUXIOE7F.js → witness-chain-repair-VWBO4NXE.js} +2 -2
  316. package/dist/cli/chunks/{witness-chain-verifier-YXENHB42.js → witness-chain-verifier-BHJ3ZAEK.js} +2 -2
  317. package/dist/cli/chunks/{witness-key-manager-HL26AGFO.js → witness-key-manager-WNVPH2Z3.js} +2 -2
  318. package/dist/cli/chunks/{workflow-EOVVCN2E.js → workflow-6QR5MQTO.js} +4 -4
  319. package/dist/cli/chunks/workflow-orchestrator-3JLF3IX7.js +2 -0
  320. package/dist/cli/chunks/{wrappers-AGODHBOO.js → wrappers-EHOL62TS.js} +2 -2
  321. package/dist/cli/commands/ci.js +7 -0
  322. package/dist/cli/commands/coverage.js +7 -1
  323. package/dist/cli/commands/fleet.js +5 -2
  324. package/dist/cli/commands/hooks-handlers/stats-hooks.d.ts +4 -3
  325. package/dist/cli/commands/hooks-handlers/stats-hooks.js +22 -4
  326. package/dist/cli/commands/hooks-handlers/tool-loop-guardrail.js +11 -6
  327. package/dist/cli/commands/test.js +5 -2
  328. package/dist/cli/handlers/init-handler.d.ts +12 -0
  329. package/dist/cli/handlers/init-handler.js +27 -12
  330. package/dist/cli/handlers/task-handler.js +6 -0
  331. package/dist/cli/utils/ci-output.d.ts +2 -0
  332. package/dist/cli/utils/ci-output.js +2 -0
  333. package/dist/cli/utils/coverage-verdict.d.ts +11 -2
  334. package/dist/cli/utils/coverage-verdict.js +26 -6
  335. package/dist/cli/utils/fleet-operation.d.ts +5 -0
  336. package/dist/cli/utils/fleet-operation.js +7 -1
  337. package/dist/cli/utils/fleet-result.d.ts +5 -3
  338. package/dist/cli/utils/fleet-result.js +9 -3
  339. package/dist/cli/utils/progress.d.ts +16 -2
  340. package/dist/cli/utils/progress.js +31 -14
  341. package/dist/coordination/consensus/consensus-engine.js +3 -1
  342. package/dist/coordination/handlers/code-intelligence-handlers.js +3 -2
  343. package/dist/coordination/handlers/coverage-collection.d.ts +2 -0
  344. package/dist/coordination/handlers/coverage-collection.js +5 -2
  345. package/dist/coordination/handlers/coverage-evidence.d.ts +75 -0
  346. package/dist/coordination/handlers/coverage-evidence.js +159 -0
  347. package/dist/coordination/handlers/coverage-handlers.js +16 -3
  348. package/dist/coordination/handlers/coverage-runner.d.ts +3 -8
  349. package/dist/coordination/handlers/coverage-runner.js +6 -22
  350. package/dist/coordination/handlers/coverage-scope.d.ts +40 -0
  351. package/dist/coordination/handlers/coverage-scope.js +321 -0
  352. package/dist/coordination/handlers/coverage-stderr.d.ts +23 -0
  353. package/dist/coordination/handlers/coverage-stderr.js +39 -0
  354. package/dist/coordination/handlers/coverage-target.d.ts +9 -0
  355. package/dist/coordination/handlers/coverage-target.js +21 -8
  356. package/dist/coordination/handlers/handler-utils.d.ts +5 -0
  357. package/dist/coordination/handlers/handler-utils.js +11 -5
  358. package/dist/coordination/handlers/requirements-handlers.js +3 -2
  359. package/dist/coordination/handlers/security-handlers.js +34 -20
  360. package/dist/coordination/queen-coordinator.js +8 -3
  361. package/dist/coordination/task-executability.d.ts +12 -0
  362. package/dist/coordination/task-executability.js +27 -0
  363. package/dist/coordination/workflow-orchestrator.d.ts +6 -0
  364. package/dist/coordination/workflow-orchestrator.js +22 -8
  365. package/dist/domains/code-intelligence/services/metric-collector/listing-process-owner.js +4 -1
  366. package/dist/domains/code-intelligence/services/product-factors-bridge.js +7 -4
  367. package/dist/domains/code-intelligence/services/semantic-analyzer.d.ts +8 -0
  368. package/dist/domains/code-intelligence/services/semantic-analyzer.js +10 -7
  369. package/dist/domains/coverage-analysis/services/coverage-parser.js +19 -10
  370. package/dist/domains/learning-optimization/interfaces.d.ts +2 -0
  371. package/dist/domains/learning-optimization/services/learning-coordinator.js +2 -1
  372. package/dist/domains/learning-optimization/services/metrics-optimizer.js +14 -4
  373. package/dist/domains/learning-optimization/services/production-intel.js +3 -1
  374. package/dist/domains/security-compliance/generic-finding-dedup.d.ts +40 -0
  375. package/dist/domains/security-compliance/generic-finding-dedup.js +63 -0
  376. package/dist/domains/security-compliance/services/scanners/dependency-resolver.js +14 -6
  377. package/dist/domains/security-compliance/services/scanners/sast-scanner.js +4 -2
  378. package/dist/domains/security-compliance/services/security-auditor-sast.js +2 -2
  379. package/dist/domains/security-compliance/services/security-auditor-secrets.js +2 -2
  380. package/dist/domains/security-compliance/services/security-auditor.js +3 -2
  381. package/dist/domains/test-execution/coordinator.d.ts +2 -1
  382. package/dist/domains/test-execution/coordinator.js +5 -14
  383. package/dist/domains/test-execution/interfaces.d.ts +11 -1
  384. package/dist/domains/test-execution/services/retry-outcome.d.ts +18 -0
  385. package/dist/domains/test-execution/services/retry-outcome.js +53 -0
  386. package/dist/domains/test-generation/coordinator.js +2 -2
  387. package/dist/domains/test-generation/services/pattern-matcher.js +4 -4
  388. package/dist/domains/test-generation/services/test-generator.js +2 -2
  389. package/dist/governance/evolution-pipeline-integration.js +3 -1
  390. package/dist/hooks/cross-phase-hooks.js +3 -1
  391. package/dist/init/init-wizard-steps.js +5 -1
  392. package/dist/init/phases/04-database.js +7 -0
  393. package/dist/init/phases/10-workers.js +42 -4
  394. package/dist/init/phases/12-verification.js +14 -4
  395. package/dist/init/settings-merge.js +7 -4
  396. package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.d.ts +29 -0
  397. package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.js +70 -6
  398. package/dist/integrations/agentic-flow/reasoning-bank/index.d.ts +10 -3
  399. package/dist/integrations/agentic-flow/reasoning-bank/index.js +13 -0
  400. package/dist/integrations/ruvector/filter-adapter.js +2 -1
  401. package/dist/learning/dream/insight-generator.js +5 -4
  402. package/dist/learning/embedder-endpoint-client.d.ts +8 -0
  403. package/dist/learning/embedder-endpoint-client.js +20 -0
  404. package/dist/learning/embedder-recovery.d.ts +63 -0
  405. package/dist/learning/embedder-recovery.js +94 -0
  406. package/dist/learning/memory-auditor.js +3 -1
  407. package/dist/learning/qe-patterns.js +2 -1
  408. package/dist/learning/qe-reasoning-bank-types.d.ts +5 -0
  409. package/dist/learning/qe-reasoning-bank.d.ts +21 -0
  410. package/dist/learning/qe-reasoning-bank.js +54 -8
  411. package/dist/learning/real-embeddings.d.ts +23 -0
  412. package/dist/learning/real-embeddings.js +69 -2
  413. package/dist/learning/real-qe-reasoning-bank.d.ts +39 -0
  414. package/dist/learning/real-qe-reasoning-bank.js +108 -38
  415. package/dist/logging/redaction.js +142 -12
  416. package/dist/mcp/bundle.js +520 -503
  417. package/dist/mcp/daemon-mode.d.ts +126 -0
  418. package/dist/mcp/daemon-mode.js +257 -0
  419. package/dist/mcp/entry.d.ts +4 -0
  420. package/dist/mcp/entry.js +50 -2
  421. package/dist/mcp/handlers/domain-handler-configs.d.ts +2 -0
  422. package/dist/mcp/handlers/domain-handler-configs.js +13 -2
  423. package/dist/mcp/handlers/orchestrate-routes.d.ts +6 -1
  424. package/dist/mcp/handlers/orchestrate-routes.js +53 -0
  425. package/dist/mcp/handlers/task-handlers.d.ts +23 -1
  426. package/dist/mcp/handlers/task-handlers.js +90 -19
  427. package/dist/mcp/handlers/validation-pipeline-handler.js +9 -9
  428. package/dist/mcp/protocol-server.js +11 -8
  429. package/dist/mcp/qe-tool-bridge.js +3 -0
  430. package/dist/mcp/services/reasoning-bank-service.d.ts +9 -2
  431. package/dist/mcp/services/reasoning-bank-service.js +13 -0
  432. package/dist/mcp/tool-annotations.js +4 -1
  433. package/dist/mcp/tools/coherence/check.js +1 -0
  434. package/dist/mcp/tools/coherence/consensus.js +4 -2
  435. package/dist/mcp/tools/learning-optimization/optimize.js +1 -2
  436. package/dist/mcp/tools/mincut/index.js +3 -0
  437. package/dist/mcp/tools/quality-assessment/gate.js +7 -0
  438. package/dist/mcp/tools/qx-analysis/analyze.js +1 -0
  439. package/dist/mcp/tools/requirements-validation/quality-criteria.js +10 -3
  440. package/dist/mcp/tools/security-compliance/scan.js +4 -2
  441. package/dist/mcp/tools/test-execution/e2e-execute.js +2 -2
  442. package/dist/mcp/tools/test-execution/execute.js +3 -2
  443. package/dist/mcp/types.d.ts +14 -0
  444. package/dist/memory/crdt/crdt-store.js +5 -0
  445. package/dist/memory/crdt/lww-register.js +12 -2
  446. package/dist/optimization/early-exit-token-optimizer.js +3 -1
  447. package/dist/planning/goap-planner.js +5 -0
  448. package/dist/planning/plan-executor.js +5 -0
  449. package/dist/routing/advisor/redaction.js +22 -2
  450. package/dist/shared/io/confined-read.d.ts +74 -0
  451. package/dist/shared/io/confined-read.js +256 -0
  452. package/dist/shared/io/file-reader.d.ts +6 -6
  453. package/dist/shared/io/file-reader.js +16 -42
  454. package/dist/shared/llm/providers/claude-code.js +4 -1
  455. package/dist/shared/llm/providers/response-deadline.js +16 -2
  456. package/dist/shared/native-module-errors.d.ts +51 -0
  457. package/dist/shared/native-module-errors.js +129 -0
  458. package/dist/shared/safe-db.js +14 -4
  459. package/dist/shared/security/osv-client.js +4 -1
  460. package/dist/shared/types/index.js +3 -1
  461. package/dist/shared/types/test-frameworks.js +2 -2
  462. package/dist/strange-loop/infra-healing/infra-aware-agent-provider.js +8 -1
  463. package/dist/sync/readers/json-reader.js +2 -1
  464. package/dist/validation/anchor-set.d.ts +6 -0
  465. package/dist/validation/anchor-set.js +9 -1
  466. package/dist/validation/quality-gate-runner.d.ts +7 -1
  467. package/dist/validation/quality-gate-runner.js +3 -3
  468. package/package.json +3 -3
  469. package/dist/cli/chunks/adapter-TR5SLAZC.js +0 -2
  470. package/dist/cli/chunks/aqe-learning-engine-DXWKCHY2.js +0 -2
  471. package/dist/cli/chunks/base-GTB6POYE.js +0 -2
  472. package/dist/cli/chunks/browser-workflow-MSBOLYUY.js +0 -2
  473. package/dist/cli/chunks/chunk-4SJYIX54.js +0 -3
  474. package/dist/cli/chunks/chunk-6P7424AO.js +0 -21
  475. package/dist/cli/chunks/chunk-6X5DHU6Q.js +0 -14
  476. package/dist/cli/chunks/chunk-CMBLM26R.js +0 -2
  477. package/dist/cli/chunks/chunk-DKAC3E3B.js +0 -3
  478. package/dist/cli/chunks/chunk-DURHK377.js +0 -742
  479. package/dist/cli/chunks/chunk-FPUDRSFJ.js +0 -180
  480. package/dist/cli/chunks/chunk-G5I6KGMW.js +0 -59
  481. package/dist/cli/chunks/chunk-HOZUDE4C.js +0 -2
  482. package/dist/cli/chunks/chunk-N6PIIK6G.js +0 -3
  483. package/dist/cli/chunks/chunk-NSHU347M.js +0 -2
  484. package/dist/cli/chunks/chunk-PPSAMXYN.js +0 -13
  485. package/dist/cli/chunks/chunk-TYFZXDGZ.js +0 -4
  486. package/dist/cli/chunks/chunk-U4OICXV2.js +0 -6
  487. package/dist/cli/chunks/chunk-WSF24I3D.js +0 -2
  488. package/dist/cli/chunks/chunk-XBVUVFJK.js +0 -4
  489. package/dist/cli/chunks/chunk-XUZDBQ5X.js +0 -6
  490. package/dist/cli/chunks/chunk-YBSBABOS.js +0 -2
  491. package/dist/cli/chunks/chunk-ZG5666GJ.js +0 -2
  492. package/dist/cli/chunks/ci-MSKMVH5X.js +0 -81
  493. package/dist/cli/chunks/client-POSVREVS.js +0 -2
  494. package/dist/cli/chunks/core-handlers-V243GY7X.js +0 -2
  495. package/dist/cli/chunks/coverage-B7MCGNTE.js +0 -49
  496. package/dist/cli/chunks/cross-domain-router-N3AIEM3B.js +0 -2
  497. package/dist/cli/chunks/dream-UA7MKOPQ.js +0 -2
  498. package/dist/cli/chunks/file-discovery-YCMNKZAK.js +0 -2
  499. package/dist/cli/chunks/fleet-2Y3ZE6CE.js +0 -46
  500. package/dist/cli/chunks/heartbeat-scheduler-QH5V6G2P.js +0 -2
  501. package/dist/cli/chunks/hnsw-adapter-OJNFAGJS.js +0 -2
  502. package/dist/cli/chunks/hnsw-index-DFUNARVD.js +0 -2
  503. package/dist/cli/chunks/hybrid-backend-SSGQQEQ2.js +0 -2
  504. package/dist/cli/chunks/impact-analyzer-CRGCA7ZD.js +0 -2
  505. package/dist/cli/chunks/init-wizard-NIMZ4J55.js +0 -2
  506. package/dist/cli/chunks/kernel-JQK7PRAI.js +0 -2
  507. package/dist/cli/chunks/knowledge-graph-YPVVIKEU.js +0 -2
  508. package/dist/cli/chunks/llm-router-service-5OGAUOXF.js +0 -2
  509. package/dist/cli/chunks/load-test-UKNV5MWW.js +0 -2
  510. package/dist/cli/chunks/memory-backend-ZW4BTRNK.js +0 -2
  511. package/dist/cli/chunks/memory-handlers-FCXN437E.js +0 -2
  512. package/dist/cli/chunks/pattern-null-store-4DUV6MQC.js +0 -2
  513. package/dist/cli/chunks/project-root-JCAUNL6O.js +0 -2
  514. package/dist/cli/chunks/protocol-executor-RNZNZP3A.js +0 -2
  515. package/dist/cli/chunks/qe-reasoning-bank-WK6TQOG2.js +0 -2
  516. package/dist/cli/chunks/queen-coordinator-4452SXZQ.js +0 -2
  517. package/dist/cli/chunks/real-embeddings-RWGOVOXO.js +0 -2
  518. package/dist/cli/chunks/router-3DIS5X4R.js +0 -2
  519. package/dist/cli/chunks/routing-feedback-OPXRCXM7.js +0 -2
  520. package/dist/cli/chunks/rvf-dual-writer-JL6T727I.js +0 -2
  521. package/dist/cli/chunks/rvf-migration-adapter-V7IBDUCS.js +0 -2
  522. package/dist/cli/chunks/rvf-native-adapter-O3UQTEBK.js +0 -2
  523. package/dist/cli/chunks/safe-db-EVB4ZC7T.js +0 -2
  524. package/dist/cli/chunks/schedule-ORDDXXY4.js +0 -2
  525. package/dist/cli/chunks/scheduler-XFLJSFIU.js +0 -2
  526. package/dist/cli/chunks/sqlite-persistence-Y7B42CJ3.js +0 -2
  527. package/dist/cli/chunks/task-handlers-KPWAEMKH.js +0 -9
  528. package/dist/cli/chunks/test-runner-process-3XZUYST2.js +0 -2
  529. package/dist/cli/chunks/tree-sitter-wasm-parser-YTBCBHUO.js +0 -2
  530. package/dist/cli/chunks/unified-memory-EHD4VNFW.js +0 -2
  531. package/dist/cli/chunks/unified-memory-hnsw-ZODGM4UK.js +0 -2
  532. package/dist/cli/chunks/unified-persistence-MHSI7ABK.js +0 -2
  533. package/dist/cli/chunks/visual-security-54MLFKWY.js +0 -2
  534. package/dist/cli/chunks/witness-chain-LC6Q2W27.js +0 -2
  535. package/dist/cli/chunks/witness-chain-QUIBAF3W.js +0 -2
  536. package/dist/cli/chunks/workflow-orchestrator-UKHEJVSK.js +0 -2
@@ -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 type { CoverageData, FileCoverage } from '../../domains/coverage-analysis/interfaces';
22
+ import { type CoverageEvidence } from './coverage-evidence';
22
23
  /**
23
24
  * Walk up from a target to the nearest directory that holds a project marker.
24
25
  *
@@ -75,6 +76,7 @@ export type NoDataReason =
75
76
  export type CoverageEvaluation = {
76
77
  status: 'measured';
77
78
  files: FileCoverage[];
79
+ evidence: CoverageEvidence;
78
80
  } | {
79
81
  status: 'no-data';
80
82
  reason: NoDataReason;
@@ -88,9 +90,16 @@ export type CoverageEvaluation = {
88
90
  * - the report has no entry under the target.
89
91
  * Hit counts are never used: a file listed with 0 hits is a measured 0%,
90
92
  * whether the report came from our run or from the user (#995 review B3).
93
+ *
94
+ * A measured result carries its evidence (#1154): the target's source files
95
+ * the report has no entry for (UNMEASURED), and whether the report at
96
+ * `reportPath` is older than the sources. Insufficient evidence keeps the
97
+ * figures for the measured files, but no caller may pass a verdict on it.
91
98
  */
92
99
  export declare function evaluateCoverageForTarget(report: CoverageData, projectRoot: string, target: string, options?: {
93
100
  numTotalTests?: number | null;
101
+ reportPath?: string;
102
+ checkCompleteness?: boolean;
94
103
  }): CoverageEvaluation;
95
104
  export type ExistingCoverage = {
96
105
  status: 'target-missing';
@@ -19,10 +19,12 @@
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
- import { loadCoverageData, parseCoberturaXml, parseCoverageJson, parseCoverageSummaryJson, parseLcovInfo, } from './handler-utils.js';
25
+ import { loadCoverageReport, parseCoberturaXml, parseCoverageJson, parseCoverageSummaryJson, parseLcovInfo, } from './handler-utils.js';
25
26
  import { isTestPath } from './coverage-collection.js';
27
+ import { assessCoverageEvidence } from './coverage-evidence.js';
26
28
  import { findProjectRoot } from '../../kernel/project-root.js';
27
29
  // ============================================================================
28
30
  // Project root
@@ -99,7 +101,7 @@ function packageCanUseRootRunner(pkgDir, rootDir) {
99
101
  }
100
102
  function readPackageJson(dir) {
101
103
  try {
102
- const parsed = JSON.parse(fs.readFileSync(path.join(dir, 'package.json'), 'utf-8'));
104
+ const parsed = JSON.parse(readConfinedTextSync(path.join(dir, 'package.json'), { outsideRoot: 'allow' }));
103
105
  return typeof parsed === 'object' && parsed !== null ? parsed : null;
104
106
  }
105
107
  catch {
@@ -128,7 +130,7 @@ function readWorkspacePatterns(dir) {
128
130
  // Only the block-list `packages:` form is read; the flow form gives no
129
131
  // patterns, so the root is not adopted (fails safe).
130
132
  try {
131
- const yaml = fs.readFileSync(path.join(dir, 'pnpm-workspace.yaml'), 'utf-8');
133
+ const yaml = readConfinedTextSync(path.join(dir, 'pnpm-workspace.yaml'), { outsideRoot: 'allow' });
132
134
  isRoot = true;
133
135
  let inPackages = false;
134
136
  for (const raw of yaml.split(/\r?\n/)) {
@@ -326,7 +328,9 @@ export function isCoverageReportFile(filePath) {
326
328
  export async function loadCoverageReportFile(filePath) {
327
329
  let content;
328
330
  try {
329
- content = await fs.promises.readFile(filePath, 'utf-8');
331
+ // #1161: read from the validated descriptor, not the name checked earlier;
332
+ // a report linked out of the project, or to a device, is not read.
333
+ content = await readConfinedText(filePath, { outsideRoot: 'allow' });
330
334
  }
331
335
  catch {
332
336
  return null;
@@ -415,6 +419,11 @@ export function scopeCoverageToTarget(data, root, target) {
415
419
  * - the report has no entry under the target.
416
420
  * Hit counts are never used: a file listed with 0 hits is a measured 0%,
417
421
  * whether the report came from our run or from the user (#995 review B3).
422
+ *
423
+ * A measured result carries its evidence (#1154): the target's source files
424
+ * the report has no entry for (UNMEASURED), and whether the report at
425
+ * `reportPath` is older than the sources. Insufficient evidence keeps the
426
+ * figures for the measured files, but no caller may pass a verdict on it.
418
427
  */
419
428
  export function evaluateCoverageForTarget(report, projectRoot, target, options = {}) {
420
429
  if (options.numTotalTests === 0)
@@ -427,7 +436,10 @@ export function evaluateCoverageForTarget(report, projectRoot, target, options =
427
436
  const production = scoped.filter(f => !isTestPath(f.path, projectRoot));
428
437
  if (production.length === 0)
429
438
  return { status: 'no-data', reason: 'test-only-report' };
430
- return { status: 'measured', files: production };
439
+ const evidence = assessCoverageEvidence(report, production, projectRoot, target, {
440
+ reportPath: options.reportPath, checkCompleteness: options.checkCompleteness,
441
+ });
442
+ return { status: 'measured', files: production, evidence };
431
443
  }
432
444
  /**
433
445
  * Resolve a target to coverage that already exists on disk, without running
@@ -451,18 +463,19 @@ export async function resolveExistingCoverage(targetPath) {
451
463
  const projectRoot = findCoverageProjectRoot(reportDir)
452
464
  ?? (path.basename(reportDir) === 'coverage' ? path.dirname(reportDir) : reportDir);
453
465
  const report = await loadCoverageReportFile(target);
466
+ // The report itself is the target: judged whole, but still checked for staleness.
454
467
  const evaluation = report
455
- ? evaluateCoverageForTarget(report, projectRoot, projectRoot)
468
+ ? evaluateCoverageForTarget(report, projectRoot, projectRoot, { reportPath: target, checkCompleteness: false })
456
469
  : { status: 'no-data', reason: 'unreadable-report' };
457
470
  return { status: 'evaluated', target, projectRoot, source: 'report-file', evaluation };
458
471
  }
459
472
  const projectRoot = findCoverageProjectRoot(target) ?? (stat.isDirectory() ? target : path.dirname(target));
460
- const existing = await loadCoverageData(projectRoot);
473
+ const existing = await loadCoverageReport(projectRoot);
461
474
  if (!existing)
462
475
  return { status: 'no-report', target, projectRoot };
463
476
  return {
464
477
  status: 'evaluated', target, projectRoot, source: 'project-report',
465
- evaluation: evaluateCoverageForTarget(existing, projectRoot, target),
478
+ evaluation: evaluateCoverageForTarget(existing.data, projectRoot, target, { reportPath: existing.path }),
466
479
  };
467
480
  }
468
481
  /**
@@ -74,6 +74,11 @@ export interface IstanbulFileCoverage {
74
74
  * Load coverage data from common coverage file formats
75
75
  */
76
76
  export declare function loadCoverageData(targetPath: string): Promise<CoverageData | null>;
77
+ /** `loadCoverageData` plus the path of the report it read (#1154: staleness needs it). */
78
+ export declare function loadCoverageReport(targetPath: string): Promise<{
79
+ data: CoverageData;
80
+ path: string;
81
+ } | null>;
77
82
  /**
78
83
  * Per-line hit counts of one istanbul file entry, computed the way istanbul's
79
84
  * own `FileCoverage#getLineCoverage` (and therefore coverage-summary.json
@@ -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';
@@ -15,6 +16,10 @@ import { safeJsonParse } from '../../shared/safe-json.js';
15
16
  * Load coverage data from common coverage file formats
16
17
  */
17
18
  export async function loadCoverageData(targetPath) {
19
+ return (await loadCoverageReport(targetPath))?.data ?? null;
20
+ }
21
+ /** `loadCoverageData` plus the path of the report it read (#1154: staleness needs it). */
22
+ export async function loadCoverageReport(targetPath) {
18
23
  // Try various coverage file locations (JS, Python, Java, etc.)
19
24
  const coverageLocations = [
20
25
  // JavaScript/TypeScript (Istanbul/nyc/vitest)
@@ -32,18 +37,19 @@ export async function loadCoverageData(targetPath) {
32
37
  ];
33
38
  for (const coveragePath of coverageLocations) {
34
39
  try {
35
- const content = await fs.readFile(coveragePath, 'utf-8');
40
+ // #1161: a report linked out of the project, or to a device, is not read.
41
+ const content = await readConfinedText(coveragePath, { outsideRoot: 'allow' });
36
42
  if (coveragePath.endsWith('coverage-summary.json')) {
37
- return parseCoverageSummaryJson(content);
43
+ return { data: parseCoverageSummaryJson(content), path: coveragePath };
38
44
  }
39
45
  else if (coveragePath.endsWith('.json')) {
40
- return parseCoverageJson(content);
46
+ return { data: parseCoverageJson(content), path: coveragePath };
41
47
  }
42
48
  else if (coveragePath.endsWith('.info')) {
43
- return parseLcovInfo(content);
49
+ return { data: parseLcovInfo(content), path: coveragePath };
44
50
  }
45
51
  else if (coveragePath.endsWith('.xml')) {
46
- return parseCoberturaXml(content);
52
+ return { data: parseCoberturaXml(content), path: coveragePath };
47
53
  }
48
54
  }
49
55
  catch {
@@ -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
  }
@@ -32,7 +32,10 @@ function interrupted(signal) {
32
32
  removeHandlers();
33
33
  // Restore signal termination (including its exit status) instead of swallowing
34
34
  // Ctrl-C or converting a requested shutdown into a successful metrics result.
35
- process.kill(process.pid, signal);
35
+ // An embedding host with its own listener already received this signal, so
36
+ // re-raising would deliver it twice; the host decides how to shut down (#992).
37
+ if (process.listenerCount(signal) === 0)
38
+ process.kill(process.pid, signal);
36
39
  }
37
40
  const signalHandlers = {
38
41
  SIGINT: () => interrupted('SIGINT'),
@@ -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 {