agentic-qe 3.15.8 → 3.15.10

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 (642) hide show
  1. package/.claude/skills/skills-manifest.json +1 -1
  2. package/CHANGELOG.md +434 -0
  3. package/assets/skills/skills-manifest.json +1 -1
  4. package/dist/adapters/a2ui/catalog/component-schemas.js +2 -1
  5. package/dist/adapters/a2ui/data/json-pointer-resolver.js +10 -5
  6. package/dist/adapters/a2ui/integration/agui-sync.js +10 -6
  7. package/dist/adapters/a2ui/integration/surface-state-bridge.js +9 -5
  8. package/dist/adapters/ag-ui/json-patch.js +10 -6
  9. package/dist/agents/claim-verifier/claim-verifier-service.js +13 -8
  10. package/dist/audit/witness-chain.d.ts +1 -1
  11. package/dist/bridge/captured-experience-bridge.js +12 -13
  12. package/dist/cli/bundle.js +6 -6
  13. package/dist/cli/chunks/adapter-TR5SLAZC.js +2 -0
  14. package/dist/cli/chunks/agent-booster-wasm-H7ANGXW4.js +2 -0
  15. package/dist/cli/chunks/{agent-handler-2NQFHAWE.js → agent-handler-SVXSHEET.js} +2 -2
  16. package/dist/cli/chunks/{agent-memory-branch-457ECHHK.js → agent-memory-branch-WKQH36XL.js} +2 -2
  17. package/dist/cli/chunks/aqe-learning-engine-DXWKCHY2.js +2 -0
  18. package/dist/cli/chunks/{arena-JV3WSEHU.js → arena-EKOOFVST.js} +2 -2
  19. package/dist/cli/chunks/{arena-IYBQ3GPY.js → arena-OPS36NFZ.js} +4 -4
  20. package/dist/cli/chunks/{audit-5OS3T3K6.js → audit-AO5NDZRI.js} +3 -3
  21. package/dist/cli/chunks/base-GTB6POYE.js +2 -0
  22. package/dist/cli/chunks/{better-sqlite3-IQKBFVAO.js → better-sqlite3-TFLVEMMY.js} +2 -2
  23. package/dist/cli/chunks/{brain-handler-KA3SGAFM.js → brain-handler-ADBBJPYW.js} +3 -3
  24. package/dist/cli/chunks/{branch-enumerator-QZDU2VOQ.js → branch-enumerator-HGHUYYL5.js} +2 -2
  25. package/dist/cli/chunks/browser-5LU6P4SZ.js +4 -0
  26. package/dist/cli/chunks/browser-workflow-MSBOLYUY.js +2 -0
  27. package/dist/cli/chunks/{chunk-CRUQ6RXU.js → chunk-2SXBBUM6.js} +2 -2
  28. package/dist/cli/chunks/{chunk-4GUVVGJX.js → chunk-2T7RRL6G.js} +1 -1
  29. package/dist/cli/chunks/{chunk-OJWEZYLR.js → chunk-2XGVTYVX.js} +2 -2
  30. package/dist/cli/chunks/{chunk-LVHZK7GW.js → chunk-2ZI5FKSF.js} +2 -2
  31. package/dist/cli/chunks/chunk-2ZMF4NCF.js +4 -0
  32. package/dist/cli/chunks/{chunk-62T7U25U.js → chunk-37OWRCUN.js} +1 -1
  33. package/dist/cli/chunks/{chunk-UQLAN5TX.js → chunk-3P34JFQH.js} +5 -5
  34. package/dist/cli/chunks/{chunk-UDCYQLTD.js → chunk-3Y7SPD72.js} +2 -2
  35. package/dist/cli/chunks/{chunk-PPIM7B5G.js → chunk-4G63WT4F.js} +2 -2
  36. package/dist/cli/chunks/chunk-4SJYIX54.js +3 -0
  37. package/dist/cli/chunks/chunk-5E6GHSTY.js +3 -0
  38. package/dist/cli/chunks/{chunk-4TZLZRZ4.js → chunk-5LPYV3TK.js} +1 -1
  39. package/dist/cli/chunks/{chunk-YUP3APSN.js → chunk-62OAY5KJ.js} +1 -1
  40. package/dist/cli/chunks/{chunk-VQRBBR27.js → chunk-6C3II5OM.js} +2 -2
  41. package/dist/cli/chunks/{chunk-RG42LDOB.js → chunk-6GP6W46M.js} +2 -2
  42. package/dist/cli/chunks/{chunk-KMZW2P3R.js → chunk-6KIL6CMD.js} +2 -2
  43. package/dist/cli/chunks/{chunk-UKKFZJME.js → chunk-6MVVSSID.js} +1 -1
  44. package/dist/cli/chunks/{chunk-VVK4ECVJ.js → chunk-6P7424AO.js} +2 -2
  45. package/dist/cli/chunks/{chunk-A2UGPKCS.js → chunk-6PX4OXQO.js} +2 -2
  46. package/dist/cli/chunks/{chunk-JLTGO5BB.js → chunk-6S3WJGUV.js} +2 -2
  47. package/dist/cli/chunks/{chunk-GSOK4M6V.js → chunk-6TB6YOCZ.js} +1 -1
  48. package/dist/cli/chunks/{chunk-VWRNG3UK.js → chunk-6X5DHU6Q.js} +1 -1
  49. package/dist/cli/chunks/{chunk-5YOO5QSE.js → chunk-6XCMKIZN.js} +1 -1
  50. package/dist/cli/chunks/{chunk-4C3RYBTT.js → chunk-7LFZ4CHM.js} +2 -2
  51. package/dist/cli/chunks/{chunk-O4RRVTXN.js → chunk-7OZVZIBE.js} +2 -2
  52. package/dist/cli/chunks/{chunk-2JCLACCS.js → chunk-7PJIR4ST.js} +2 -2
  53. package/dist/cli/chunks/{chunk-NWFBF3KT.js → chunk-7TB6FK4B.js} +1 -1
  54. package/dist/cli/chunks/{chunk-FJAO4UX2.js → chunk-7ZCDZHDB.js} +2 -2
  55. package/dist/cli/chunks/chunk-A55QKKT2.js +2 -0
  56. package/dist/cli/chunks/{chunk-ZOVAZTXE.js → chunk-ABFFWZPC.js} +273 -278
  57. package/dist/cli/chunks/{chunk-FWXNFPLS.js → chunk-ACWFKES2.js} +2 -2
  58. package/dist/cli/chunks/{chunk-IJSFZO7P.js → chunk-AH3ZD3NJ.js} +2 -2
  59. package/dist/cli/chunks/{chunk-7SLEUVPZ.js → chunk-AI4VYSFS.js} +2 -2
  60. package/dist/cli/chunks/chunk-APSRPR4W.js +2 -0
  61. package/dist/cli/chunks/chunk-ATHWDAXB.js +3 -0
  62. package/dist/cli/chunks/{chunk-2GSAAUW3.js → chunk-B6LTH6YV.js} +2 -2
  63. package/dist/cli/chunks/chunk-BQUAE3CP.js +3 -0
  64. package/dist/cli/chunks/{chunk-7XGM7Q2N.js → chunk-C522H7XR.js} +54 -33
  65. package/dist/cli/chunks/{chunk-7DHSHD5B.js → chunk-CESIR27V.js} +2 -2
  66. package/dist/cli/chunks/{chunk-V7VZSNDK.js → chunk-CFBEBXLO.js} +3 -3
  67. package/dist/cli/chunks/{chunk-NZATJ2C6.js → chunk-CMBLM26R.js} +2 -2
  68. package/dist/cli/chunks/{chunk-7CVMT64N.js → chunk-CZ2IF6MC.js} +1 -1
  69. package/dist/cli/chunks/{chunk-YVWMJZ6O.js → chunk-CZGOSJQ4.js} +2 -2
  70. package/dist/cli/chunks/{chunk-TMNEK7TP.js → chunk-D6DA2KFD.js} +2 -2
  71. package/dist/cli/chunks/{chunk-UTNKMPTC.js → chunk-DBMNJSBV.js} +1 -1
  72. package/dist/cli/chunks/{chunk-JFWQFB3S.js → chunk-DE4YJQJF.js} +2 -2
  73. package/dist/cli/chunks/{chunk-767SR7WH.js → chunk-DEF34AFL.js} +2 -2
  74. package/dist/cli/chunks/{chunk-ZWMFKZEQ.js → chunk-DKAC3E3B.js} +2 -2
  75. package/dist/cli/chunks/{chunk-CDLG3Q2O.js → chunk-DMFTELBS.js} +2 -2
  76. package/dist/cli/chunks/{chunk-P4UT4LBE.js → chunk-DNRWGATA.js} +10 -10
  77. package/dist/cli/chunks/{chunk-PUYQ6EKC.js → chunk-DT7SIJOA.js} +2 -2
  78. package/dist/cli/chunks/{chunk-ST7ASEJO.js → chunk-DURHK377.js} +69 -69
  79. package/dist/cli/chunks/{chunk-V4QJ3MMT.js → chunk-EAU5KDFO.js} +1 -1
  80. package/dist/cli/chunks/{chunk-BLZEOGQE.js → chunk-EDLFX4ZB.js} +2 -2
  81. package/dist/cli/chunks/{chunk-ZBI7PJFX.js → chunk-EN2QSKFF.js} +2 -2
  82. package/dist/cli/chunks/{chunk-U7CIY3YR.js → chunk-ERQKYIP7.js} +2 -2
  83. package/dist/cli/chunks/{chunk-X7ZQIFES.js → chunk-ESUO3GTJ.js} +2 -2
  84. package/dist/cli/chunks/{chunk-SHEVM5PF.js → chunk-EWFECZ2U.js} +2 -2
  85. package/dist/cli/chunks/{chunk-JWPYMRIX.js → chunk-FAUCT5KR.js} +3 -3
  86. package/dist/cli/chunks/{chunk-KMVFBYJO.js → chunk-FB6TI3BH.js} +2 -2
  87. package/dist/cli/chunks/{chunk-22DOS3PM.js → chunk-FBXTQNRH.js} +2 -2
  88. package/dist/cli/chunks/{chunk-W5A36V3Z.js → chunk-FESZBPUB.js} +2 -2
  89. package/dist/cli/chunks/chunk-FFTPAWM6.js +141 -0
  90. package/dist/cli/chunks/{chunk-VWSGWYRB.js → chunk-FKL3R5JQ.js} +2 -2
  91. package/dist/cli/chunks/{chunk-2DPHFCMW.js → chunk-FPUDRSFJ.js} +2 -2
  92. package/dist/cli/chunks/{chunk-VKFVJCIH.js → chunk-FZOWULMH.js} +1 -1
  93. package/dist/cli/chunks/{chunk-HXCGV5UJ.js → chunk-G3CZCUPM.js} +2 -2
  94. package/dist/cli/chunks/{chunk-GENNJRNK.js → chunk-G5I6KGMW.js} +22 -22
  95. package/dist/cli/chunks/{chunk-J7FLNP5L.js → chunk-GHBNRMSJ.js} +2 -2
  96. package/dist/cli/chunks/{chunk-I77D65X5.js → chunk-GJHWY3ZX.js} +2 -2
  97. package/dist/cli/chunks/{chunk-DKFSCJEF.js → chunk-GJMLK5UT.js} +2 -2
  98. package/dist/cli/chunks/{chunk-52YRSWPS.js → chunk-GRCIBCJ2.js} +2 -2
  99. package/dist/cli/chunks/{chunk-NW7HTOSN.js → chunk-GWZZ7DAO.js} +2 -2
  100. package/dist/cli/chunks/{chunk-D4IBIMWI.js → chunk-GZLZCZ42.js} +2 -2
  101. package/dist/cli/chunks/{chunk-FEN2DHFM.js → chunk-H2PYU7MN.js} +1 -1
  102. package/dist/cli/chunks/{chunk-4I35ARWW.js → chunk-H32EPIR2.js} +1 -1
  103. package/dist/cli/chunks/{chunk-MUDBF2JC.js → chunk-H74Q7TJN.js} +1 -1
  104. package/dist/cli/chunks/chunk-HOZUDE4C.js +2 -0
  105. package/dist/cli/chunks/{chunk-MMY52Y6R.js → chunk-I33O4BRQ.js} +2 -2
  106. package/dist/cli/chunks/{chunk-ZG7UKWBB.js → chunk-IKISCIGH.js} +2 -2
  107. package/dist/cli/chunks/{chunk-SFPGLUXS.js → chunk-IPJ7Q3AJ.js} +1 -1
  108. package/dist/cli/chunks/{chunk-2ZRNXEVI.js → chunk-IU2IV4NE.js} +1 -1
  109. package/dist/cli/chunks/{chunk-XOOBLZXR.js → chunk-JHIY4VCC.js} +2 -2
  110. package/dist/cli/chunks/{chunk-PJGQ2TKN.js → chunk-KG336OV3.js} +2 -2
  111. package/dist/cli/chunks/{chunk-YRH7KMTU.js → chunk-KI73QCR5.js} +2 -2
  112. package/dist/cli/chunks/{chunk-FAYXES7R.js → chunk-KNQ2ERFX.js} +2 -2
  113. package/dist/cli/chunks/{chunk-CQ3SBRDP.js → chunk-KOBVYY6H.js} +2 -2
  114. package/dist/cli/chunks/{chunk-3N627QRU.js → chunk-KSIWGGJI.js} +8 -8
  115. package/dist/cli/chunks/{chunk-2UN4JOTN.js → chunk-LMS3Y7JD.js} +2 -2
  116. package/dist/cli/chunks/{chunk-RSMPJWQH.js → chunk-LQEURY7C.js} +1 -1
  117. package/dist/cli/chunks/{chunk-NQDYOF35.js → chunk-LRZY4KS2.js} +2 -2
  118. package/dist/cli/chunks/{chunk-U3BWBP6B.js → chunk-M2QV7PT7.js} +2 -2
  119. package/dist/cli/chunks/{chunk-WLXGUQOZ.js → chunk-MA7JIQ6U.js} +2 -2
  120. package/dist/cli/chunks/{chunk-Y5ZBF7MA.js → chunk-MG27QY4D.js} +2 -2
  121. package/dist/cli/chunks/chunk-MNN5J4GU.js +12 -0
  122. package/dist/cli/chunks/chunk-N6PIIK6G.js +3 -0
  123. package/dist/cli/chunks/chunk-NAXGWDVM.js +12 -0
  124. package/dist/cli/chunks/{chunk-DCYUHCPK.js → chunk-NGKNYIQZ.js} +1 -1
  125. package/dist/cli/chunks/chunk-NNFZUTDH.js +2 -0
  126. package/dist/cli/chunks/{chunk-UTFMMZ57.js → chunk-NPPHWFA2.js} +3 -3
  127. package/dist/cli/chunks/chunk-NSHU347M.js +2 -0
  128. package/dist/cli/chunks/{chunk-NF63NHJH.js → chunk-NVYIZCSR.js} +2 -2
  129. package/dist/cli/chunks/{chunk-YNQPHRUZ.js → chunk-NW5JUCCG.js} +1 -1
  130. package/dist/cli/chunks/{chunk-G6CLO74Q.js → chunk-NZYLNXT6.js} +3 -3
  131. package/dist/cli/chunks/{chunk-R2NHGESM.js → chunk-OBAREPDC.js} +2 -2
  132. package/dist/cli/chunks/{chunk-X3HM7SV4.js → chunk-ODJNUMV3.js} +2 -2
  133. package/dist/cli/chunks/{chunk-OCLAMZJG.js → chunk-OEKP73MC.js} +2 -2
  134. package/dist/cli/chunks/{chunk-5MBNRTT5.js → chunk-OPFGRS5S.js} +2 -2
  135. package/dist/cli/chunks/{chunk-K5R3WUJP.js → chunk-OY2AHLSF.js} +1 -1
  136. package/dist/cli/chunks/{chunk-KJNUETCB.js → chunk-OY3NJNP2.js} +1 -1
  137. package/dist/cli/chunks/{chunk-P2EA62YS.js → chunk-PCEW6Q2C.js} +1 -1
  138. package/dist/cli/chunks/{chunk-HNGNRIZZ.js → chunk-PFG6VQ5Z.js} +2 -2
  139. package/dist/cli/chunks/{chunk-DN3AKAPY.js → chunk-PGYMKGOE.js} +2 -2
  140. package/dist/cli/chunks/{chunk-BEVWCF3Q.js → chunk-PPSAMXYN.js} +3 -3
  141. package/dist/cli/chunks/chunk-RK73HB2F.js +2 -0
  142. package/dist/cli/chunks/{chunk-6E7EOHMN.js → chunk-RPHY2DU6.js} +2 -2
  143. package/dist/cli/chunks/{chunk-7C6FMLQR.js → chunk-RWWOHCMG.js} +25 -20
  144. package/dist/cli/chunks/{chunk-5ONJ7AV6.js → chunk-S75EYIJG.js} +1 -1
  145. package/dist/cli/chunks/chunk-SKQUUE4F.js +5 -0
  146. package/dist/cli/chunks/chunk-SO45NA4D.js +180 -0
  147. package/dist/cli/chunks/{chunk-SWY6KGMF.js → chunk-SU5H66SD.js} +2 -2
  148. package/dist/cli/chunks/{chunk-ZOHS32SI.js → chunk-SY2IB442.js} +2 -2
  149. package/dist/cli/chunks/{chunk-MV4S3TEC.js → chunk-TBLI254A.js} +2 -2
  150. package/dist/cli/chunks/{chunk-5DZDLOY6.js → chunk-TNMBRDCA.js} +3 -3
  151. package/dist/cli/chunks/{chunk-FEPFXXI7.js → chunk-TYFZXDGZ.js} +2 -2
  152. package/dist/cli/chunks/{chunk-A6GCO6ZU.js → chunk-U4OICXV2.js} +2 -2
  153. package/dist/cli/chunks/{chunk-G77Q22EN.js → chunk-U53ZB4IX.js} +2 -2
  154. package/dist/cli/chunks/chunk-UARKIZAS.js +2 -0
  155. package/dist/cli/chunks/{chunk-6GIC2263.js → chunk-UCJMVXO4.js} +2 -2
  156. package/dist/cli/chunks/{chunk-DAFMHM64.js → chunk-UHTTW3IT.js} +2 -2
  157. package/dist/cli/chunks/{chunk-2QRGIEQV.js → chunk-V2M2XCR5.js} +1 -1
  158. package/dist/cli/chunks/{chunk-XZQVC3GD.js → chunk-V2RSNVMW.js} +1 -1
  159. package/dist/cli/chunks/{chunk-GGSTLKY5.js → chunk-V6JBOIMX.js} +1 -1
  160. package/dist/cli/chunks/{chunk-BTMEOZYY.js → chunk-VFKF2XO7.js} +1 -1
  161. package/dist/cli/chunks/{chunk-4C7KE2EL.js → chunk-VFSYMOAL.js} +2 -2
  162. package/dist/cli/chunks/{chunk-D4O3TJI7.js → chunk-VJQYDYAJ.js} +2 -2
  163. package/dist/cli/chunks/{chunk-PZ7FJ4UG.js → chunk-VKRTTFB6.js} +2 -2
  164. package/dist/cli/chunks/{chunk-CQ5G64EA.js → chunk-VWNFAW2M.js} +2 -2
  165. package/dist/cli/chunks/{chunk-DY37YMMQ.js → chunk-WBM6N6IM.js} +1 -1
  166. package/dist/cli/chunks/{chunk-K4N2MBCE.js → chunk-WDQ7IEZY.js} +2 -2
  167. package/dist/cli/chunks/{chunk-HI6OBDDY.js → chunk-WDVRE6GN.js} +2 -2
  168. package/dist/cli/chunks/{chunk-PICEGWGB.js → chunk-WQ4PYWSW.js} +1 -1
  169. package/dist/cli/chunks/{chunk-NHOMVBCI.js → chunk-WSF24I3D.js} +2 -2
  170. package/dist/cli/chunks/{chunk-LPSMVBB3.js → chunk-XBVUVFJK.js} +2 -2
  171. package/dist/cli/chunks/{chunk-J6LL25QJ.js → chunk-XEB3NLJR.js} +2 -2
  172. package/dist/cli/chunks/{chunk-SJMZZMHP.js → chunk-XFVTGAAJ.js} +2 -2
  173. package/dist/cli/chunks/{chunk-KVMKYUOE.js → chunk-XLZYRTNO.js} +2 -2
  174. package/dist/cli/chunks/chunk-XUZDBQ5X.js +6 -0
  175. package/dist/cli/chunks/{chunk-WAWKAYPY.js → chunk-Y76IAYQD.js} +1 -1
  176. package/dist/cli/chunks/{chunk-3LFLO2WK.js → chunk-YAKGBHO4.js} +2 -2
  177. package/dist/cli/chunks/{chunk-TC52M542.js → chunk-YBSBABOS.js} +2 -2
  178. package/dist/cli/chunks/{chunk-BQUIZ5QT.js → chunk-YCGP5VFP.js} +2 -2
  179. package/dist/cli/chunks/{chunk-T2TDTBFV.js → chunk-YDAQK5UF.js} +1 -1
  180. package/dist/cli/chunks/{chunk-LHRVSK44.js → chunk-YK3BVZY6.js} +2 -2
  181. package/dist/cli/chunks/{chunk-QFYUZYRA.js → chunk-YK7JN5N7.js} +4 -4
  182. package/dist/cli/chunks/{chunk-IMSRWNWF.js → chunk-YKMU4LBV.js} +1 -1
  183. package/dist/cli/chunks/{chunk-NLYUC63R.js → chunk-YYTGXD3R.js} +2 -2
  184. package/dist/cli/chunks/{chunk-OWBFVAEH.js → chunk-Z2O2YJAF.js} +2 -2
  185. package/dist/cli/chunks/{chunk-KITKQUBX.js → chunk-Z7IYW5U7.js} +1 -1
  186. package/dist/cli/chunks/{chunk-4NTLGGXO.js → chunk-ZG5666GJ.js} +1 -1
  187. package/dist/cli/chunks/{chunk-4YUBWU3E.js → chunk-ZXPY654C.js} +1 -1
  188. package/dist/cli/chunks/{ci-7NUCRGWO.js → ci-MSKMVH5X.js} +2 -2
  189. package/dist/cli/chunks/{ci-config-VQVECCFI.js → ci-config-7ODMNAUM.js} +2 -2
  190. package/dist/cli/chunks/{ci-output-P7GQ6TKF.js → ci-output-FXZ7ZZW3.js} +2 -2
  191. package/dist/cli/chunks/{circuit-breaker-5YP6N6HE.js → circuit-breaker-4VOUEPOX.js} +2 -2
  192. package/dist/cli/chunks/{claude-flow-setup-W5H7CMU6.js → claude-flow-setup-7D4SGLM4.js} +2 -2
  193. package/dist/cli/chunks/client-POSVREVS.js +2 -0
  194. package/dist/cli/chunks/{cline-installer-OYANSZ54.js → cline-installer-WRRT7BGQ.js} +2 -2
  195. package/dist/cli/chunks/{code-OMT4UEZI.js → code-ZDJRIL3S.js} +25 -24
  196. package/dist/cli/chunks/{code-index-extractor-M2JEWKNF.js → code-index-extractor-4S4SHM56.js} +2 -2
  197. package/dist/cli/chunks/{codex-installer-YBS6N5O3.js → codex-installer-YTRHNDWR.js} +2 -2
  198. package/dist/cli/chunks/{completions-U7GS5RG6.js → completions-6N64JUXJ.js} +2 -2
  199. package/dist/cli/chunks/{complexity-analyzer-QSXPIUIU.js → complexity-analyzer-I4A26VCJ.js} +2 -2
  200. package/dist/cli/chunks/{continuedev-installer-W5TTT743.js → continuedev-installer-IIDR66LB.js} +2 -2
  201. package/dist/cli/chunks/{copilot-installer-KC2RT24C.js → copilot-installer-SVVFY3S2.js} +2 -2
  202. package/dist/cli/chunks/core-handlers-V243GY7X.js +2 -0
  203. package/dist/cli/chunks/{cost-tracker-OQPVR6V4.js → cost-tracker-VGFS6IBX.js} +2 -2
  204. package/dist/cli/chunks/{coverage-TCO2A2NX.js → coverage-B7MCGNTE.js} +3 -3
  205. package/dist/cli/chunks/cross-domain-router-N3AIEM3B.js +2 -0
  206. package/dist/cli/chunks/{cursor-installer-MH7GWD4L.js → cursor-installer-UPETT57E.js} +2 -2
  207. package/dist/cli/chunks/daemon-7BDJHEIJ.js +18 -0
  208. package/dist/cli/chunks/{daemon-UJEARJZ2.js → daemon-CQFNZLXU.js} +7 -7
  209. package/dist/cli/chunks/{dag-attention-scheduler-F3SUJU5O.js → dag-attention-scheduler-PJVABHON.js} +2 -2
  210. package/dist/cli/chunks/{detect-5QTCRB32.js → detect-56SKAGWX.js} +2 -2
  211. package/dist/cli/chunks/{dist-node-XKZPHDBO.js → dist-node-UYTYUMLN.js} +2 -2
  212. package/dist/cli/chunks/{domain-handler-V3UEADKW.js → domain-handler-YOYLBYJE.js} +2 -2
  213. package/dist/cli/chunks/{domain-plugins-7PES4UHZ.js → domain-plugins-7TARX2XF.js} +2 -2
  214. package/dist/cli/chunks/domain-transfer-AKVSBD6E.js +2 -0
  215. package/dist/cli/chunks/dream-UA7MKOPQ.js +2 -0
  216. package/dist/cli/chunks/{embed-and-insert-pattern-D2HWORHF.js → embed-and-insert-pattern-IS6HSR66.js} +2 -2
  217. package/dist/cli/chunks/{eval-UF2UBAUC.js → eval-GNB574IM.js} +2 -2
  218. package/dist/cli/chunks/{experience-capture-middleware-2OUCEHHM.js → experience-capture-middleware-RCAOCKM7.js} +3 -3
  219. package/dist/cli/chunks/{fast-paths-KV5DKKHC.js → fast-paths-KTZ5SF54.js} +2 -2
  220. package/dist/cli/chunks/{feature-flags-MTW6NMR3.js → feature-flags-ITX5LQ57.js} +2 -2
  221. package/dist/cli/chunks/{feature-flags-6YWMTNO5.js → feature-flags-KFHSR5YF.js} +2 -2
  222. package/dist/cli/chunks/file-discovery-YCMNKZAK.js +2 -0
  223. package/dist/cli/chunks/fleet-2Y3ZE6CE.js +46 -0
  224. package/dist/cli/chunks/{gnn-wrapper-52V6ANOY.js → gnn-wrapper-RLFW3GSX.js} +2 -2
  225. package/dist/cli/chunks/{heartbeat-handler-X7NHNRC7.js → heartbeat-handler-EM2URCYZ.js} +4 -4
  226. package/dist/cli/chunks/heartbeat-scheduler-QH5V6G2P.js +2 -0
  227. package/dist/cli/chunks/hnsw-adapter-OJNFAGJS.js +2 -0
  228. package/dist/cli/chunks/hnsw-index-DFUNARVD.js +2 -0
  229. package/dist/cli/chunks/{hnsw-legacy-bridge-DZBE3KMK.js → hnsw-legacy-bridge-JMHEOIBH.js} +2 -2
  230. package/dist/cli/chunks/{hnswlib-node-2AWWUJAZ.js → hnswlib-node-CBP73QHY.js} +2 -2
  231. package/dist/cli/chunks/{hooks-XLPVROL3.js → hooks-IP7XE34Z.js} +34 -34
  232. package/dist/cli/chunks/hybrid-backend-SSGQQEQ2.js +2 -0
  233. package/dist/cli/chunks/{hypergraph-engine-6TI7YP6P.js → hypergraph-engine-ONAYHU25.js} +2 -2
  234. package/dist/cli/chunks/{hypergraph-handler-DBIBBOXS.js → hypergraph-handler-VINJRAID.js} +3 -3
  235. package/dist/cli/chunks/impact-analyzer-CRGCA7ZD.js +2 -0
  236. package/dist/cli/chunks/{init-guard-OSO6MIDD.js → init-guard-RYVV5R3Z.js} +2 -2
  237. package/dist/cli/chunks/{init-handler-7S7IHMUF.js → init-handler-MPRGWMOE.js} +6 -6
  238. package/dist/cli/chunks/init-wizard-NIMZ4J55.js +2 -0
  239. package/dist/cli/chunks/kernel-JQK7PRAI.js +2 -0
  240. package/dist/cli/chunks/{kilocode-installer-2KBRFXMA.js → kilocode-installer-OPD7JBRL.js} +2 -2
  241. package/dist/cli/chunks/{kiro-installer-5VFR4OQZ.js → kiro-installer-M4OPUNK2.js} +2 -2
  242. package/dist/cli/chunks/knowledge-graph-YPVVIKEU.js +2 -0
  243. package/dist/cli/chunks/{learning-G5NHL3DV.js → learning-4UWTQLMF.js} +24 -24
  244. package/dist/cli/chunks/{llm-router-4EAPPMHS.js → llm-router-SQ56FF6Z.js} +4 -4
  245. package/dist/cli/chunks/llm-router-service-5OGAUOXF.js +2 -0
  246. package/dist/cli/chunks/{load-UYMZPEY6.js → load-HPHKDGGL.js} +2 -2
  247. package/dist/cli/chunks/load-test-UKNV5MWW.js +2 -0
  248. package/dist/cli/chunks/mcp-TELMAC7Z.js +2 -0
  249. package/dist/cli/chunks/{memory-QL53YIHP.js → memory-PFQ3KPVJ.js} +5 -5
  250. package/dist/cli/chunks/memory-backend-ZW4BTRNK.js +2 -0
  251. package/dist/cli/chunks/memory-handlers-FCXN437E.js +2 -0
  252. package/dist/cli/chunks/{multi-model-executor-PDDDXF2B.js → multi-model-executor-3VDRX6TZ.js} +2 -2
  253. package/dist/cli/chunks/{opencode-installer-75D2SKOT.js → opencode-installer-PJ576R63.js} +2 -2
  254. package/dist/cli/chunks/{orchestrator-3WIZBV4T.js → orchestrator-72QP4UU7.js} +64 -19
  255. package/dist/cli/chunks/pattern-null-store-4DUV6MQC.js +2 -0
  256. package/dist/cli/chunks/{pattern-usage-recorder-TEX2JGHA.js → pattern-usage-recorder-754YQW7C.js} +2 -2
  257. package/dist/cli/chunks/pipeline-AVXY4MVB.js +19 -0
  258. package/dist/cli/chunks/{platform-WPSKRJE7.js → platform-3E3DXLYB.js} +2 -2
  259. package/dist/cli/chunks/{plugin-UUFOVVMU.js → plugin-7FUQAKRE.js} +2 -2
  260. package/dist/cli/chunks/{prime-radiant-advanced-wasm-PDFSYWKZ.js → prime-radiant-advanced-wasm-NIB4F5NV.js} +2 -2
  261. package/dist/cli/chunks/project-root-JCAUNL6O.js +2 -0
  262. package/dist/cli/chunks/protocol-executor-RNZNZP3A.js +2 -0
  263. package/dist/cli/chunks/{protocol-handler-3VRYRIQB.js → protocol-handler-BQRYMUTG.js} +2 -2
  264. package/dist/cli/chunks/{prove-2NAUROGF.js → prove-H52QGC6B.js} +2 -2
  265. package/dist/cli/chunks/qe-reasoning-bank-WK6TQOG2.js +2 -0
  266. package/dist/cli/chunks/{quality-ZIEI2WGA.js → quality-QO4XPAUM.js} +2 -2
  267. package/dist/cli/chunks/{quality-gate-KWJO4SWQ.js → quality-gate-FBKE5E6F.js} +3 -3
  268. package/dist/cli/chunks/queen-coordinator-4452SXZQ.js +2 -0
  269. package/dist/cli/chunks/{real-embeddings-TSZ4UIAE.js → real-embeddings-RWGOVOXO.js} +2 -2
  270. package/dist/cli/chunks/{ref-validation-DWFFRETJ.js → ref-validation-LF76ZOBD.js} +2 -2
  271. package/dist/cli/chunks/{roocode-installer-XTZHLUBO.js → roocode-installer-3BYEBTQ7.js} +2 -2
  272. package/dist/cli/chunks/router-3DIS5X4R.js +2 -0
  273. package/dist/cli/chunks/routing-feedback-OPXRCXM7.js +2 -0
  274. package/dist/cli/chunks/{routing-handler-GG525TDM.js → routing-handler-DST7BVCU.js} +2 -2
  275. package/dist/cli/chunks/{ruvector-commands-QKRJDM7Z.js → ruvector-commands-XE32PGKC.js} +2 -2
  276. package/dist/cli/chunks/rvf-dual-writer-JL6T727I.js +2 -0
  277. package/dist/cli/chunks/rvf-migration-adapter-V7IBDUCS.js +2 -0
  278. package/dist/cli/chunks/{rvf-migration-coordinator-FF52OS6Q.js → rvf-migration-coordinator-VP32XC75.js} +2 -2
  279. package/dist/cli/chunks/rvf-native-adapter-O3UQTEBK.js +2 -0
  280. package/dist/cli/chunks/{rvf-store-integrity-M6DXTAZ4.js → rvf-store-integrity-SH2AMVI7.js} +2 -2
  281. package/dist/cli/chunks/safe-db-EVB4ZC7T.js +2 -0
  282. package/dist/cli/chunks/schedule-ORDDXXY4.js +2 -0
  283. package/dist/cli/chunks/scheduler-XFLJSFIU.js +2 -0
  284. package/dist/cli/chunks/{security-EHXSW22U.js → security-VSPNKCDS.js} +3 -3
  285. package/dist/cli/chunks/{shared-rvf-adapter-6EH7UVJL.js → shared-rvf-adapter-HX6AHL3P.js} +2 -2
  286. package/dist/cli/chunks/{shared-rvf-dual-writer-WML274E7.js → shared-rvf-dual-writer-MX4FC2JE.js} +2 -2
  287. package/dist/cli/chunks/sqlite-persistence-Y7B42CJ3.js +2 -0
  288. package/dist/cli/chunks/{standalone-memory-C7QKAXS4.js → standalone-memory-O4QUTK6L.js} +2 -2
  289. package/dist/cli/chunks/{status-handler-VLI7MRLM.js → status-handler-Z2BP6EOG.js} +2 -2
  290. package/dist/cli/chunks/{structural-health-3LPG6MQN.js → structural-health-R36WNLQG.js} +2 -2
  291. package/dist/cli/chunks/sync-2ELWUFQU.js +2 -0
  292. package/dist/cli/chunks/{sync-JFJEJBVK.js → sync-QF5Y3EMZ.js} +2 -2
  293. package/dist/cli/chunks/{task-handler-IED3K6E4.js → task-handler-43PYE75J.js} +13 -7
  294. package/dist/cli/chunks/task-handlers-KPWAEMKH.js +9 -0
  295. package/dist/cli/chunks/{test-GPKT3CKZ.js → test-UWA377D4.js} +16 -16
  296. package/dist/cli/chunks/test-runner-process-3XZUYST2.js +2 -0
  297. package/dist/cli/chunks/{test-scheduling-Z42XXZP6.js → test-scheduling-YQZPJRRN.js} +3 -3
  298. package/dist/cli/chunks/token-bootstrap-F7C6UKTC.js +2 -0
  299. package/dist/cli/chunks/{token-usage-6Y2ERYIY.js → token-usage-DO6WLMXP.js} +2 -2
  300. package/dist/cli/chunks/{transformers-MB63T2XO.js → transformers-H5RGFKVO.js} +2 -2
  301. package/dist/cli/chunks/tree-sitter-wasm-parser-YTBCBHUO.js +2 -0
  302. package/dist/cli/chunks/{types-J4J6QV3I.js → types-PJS2FGPF.js} +2 -2
  303. package/dist/cli/chunks/unified-memory-EHD4VNFW.js +2 -0
  304. package/dist/cli/chunks/unified-memory-hnsw-ZODGM4UK.js +2 -0
  305. package/dist/cli/chunks/unified-persistence-MHSI7ABK.js +2 -0
  306. package/dist/cli/chunks/{upgrade-U4XU7LFM.js → upgrade-4IC4F6AB.js} +2 -2
  307. package/dist/cli/chunks/{validate-B57HA4YK.js → validate-DHUWW7PF.js} +2 -2
  308. package/dist/cli/chunks/{validate-swarm-UPPA4M6T.js → validate-swarm-OERQNOX5.js} +2 -2
  309. package/dist/cli/chunks/visual-security-54MLFKWY.js +2 -0
  310. package/dist/cli/chunks/{web-tree-sitter-GDZMUKOZ.js → web-tree-sitter-TV7DMKES.js} +2 -2
  311. package/dist/cli/chunks/{windsurf-installer-VJRWCHXP.js → windsurf-installer-QZPWSH37.js} +2 -2
  312. package/dist/cli/chunks/witness-chain-LC6Q2W27.js +2 -0
  313. package/dist/cli/chunks/witness-chain-QUIBAF3W.js +2 -0
  314. package/dist/cli/chunks/witness-chain-repair-RUXIOE7F.js +2 -0
  315. package/dist/cli/chunks/{witness-chain-verifier-Z23FVABW.js → witness-chain-verifier-YXENHB42.js} +2 -2
  316. package/dist/cli/chunks/{witness-key-manager-745MJ7WO.js → witness-key-manager-HL26AGFO.js} +2 -2
  317. package/dist/cli/chunks/{workflow-T245QNQM.js → workflow-EOVVCN2E.js} +4 -4
  318. package/dist/cli/chunks/workflow-orchestrator-UKHEJVSK.js +2 -0
  319. package/dist/cli/chunks/wrappers-AGODHBOO.js +2 -0
  320. package/dist/cli/commands/code.js +8 -0
  321. package/dist/cli/commands/daemon.js +8 -0
  322. package/dist/cli/commands/fleet.js +27 -15
  323. package/dist/cli/commands/hooks-handlers/hooks-dream-learning.js +9 -2
  324. package/dist/cli/commands/hooks-handlers/session-hooks.js +2 -2
  325. package/dist/cli/commands/hooks-handlers/stats-hooks.js +3 -2
  326. package/dist/cli/commands/learning.js +5 -3
  327. package/dist/cli/commands/ruvector-commands.js +2 -1
  328. package/dist/cli/commands/test.js +6 -0
  329. package/dist/cli/handlers/task-handler.js +21 -1
  330. package/dist/cli/utils/ci-output.d.ts +9 -0
  331. package/dist/cli/utils/fleet-operation.d.ts +32 -0
  332. package/dist/cli/utils/fleet-operation.js +71 -0
  333. package/dist/cli/utils/fleet-result.d.ts +31 -0
  334. package/dist/cli/utils/fleet-result.js +124 -0
  335. package/dist/context/sources/git-source.js +6 -2
  336. package/dist/coordination/handlers/code-intelligence-handlers.js +74 -7
  337. package/dist/coordination/handlers/coverage-collection.js +9 -10
  338. package/dist/coordination/handlers/coverage-handlers.js +31 -4
  339. package/dist/coordination/handlers/coverage-runner.d.ts +2 -1
  340. package/dist/coordination/handlers/coverage-runner.js +9 -2
  341. package/dist/coordination/handlers/coverage-target.d.ts +13 -3
  342. package/dist/coordination/handlers/coverage-target.js +224 -7
  343. package/dist/coordination/handlers/handler-types.d.ts +2 -0
  344. package/dist/coordination/handlers/requirements-handlers.js +16 -2
  345. package/dist/coordination/handlers/security-handlers.js +11 -1
  346. package/dist/coordination/handlers/test-execution-handlers.js +57 -12
  347. package/dist/coordination/index.d.ts +2 -2
  348. package/dist/coordination/index.js +1 -1
  349. package/dist/coordination/mincut/queen-integration.d.ts +39 -1
  350. package/dist/coordination/mincut/queen-integration.js +83 -6
  351. package/dist/coordination/protocols/learning-consolidation-archive.d.ts +35 -0
  352. package/dist/coordination/protocols/learning-consolidation-archive.js +34 -0
  353. package/dist/coordination/protocols/learning-consolidation.d.ts +62 -3
  354. package/dist/coordination/protocols/learning-consolidation.js +187 -60
  355. package/dist/coordination/queen-coordinator.d.ts +13 -2
  356. package/dist/coordination/queen-coordinator.js +43 -8
  357. package/dist/coordination/queen-event-handlers.js +15 -1
  358. package/dist/coordination/queen-lifecycle.js +9 -0
  359. package/dist/coordination/queen-task-management.d.ts +18 -24
  360. package/dist/coordination/queen-task-management.js +94 -127
  361. package/dist/coordination/queen-task-queue.d.ts +41 -0
  362. package/dist/coordination/queen-task-queue.js +194 -0
  363. package/dist/coordination/queen-types.d.ts +11 -1
  364. package/dist/coordination/queen-types.js +8 -0
  365. package/dist/coordination/queen-work-stealing.d.ts +6 -1
  366. package/dist/coordination/queen-work-stealing.js +7 -4
  367. package/dist/coordination/result-saver-adapters.d.ts +15 -0
  368. package/dist/coordination/result-saver-adapters.js +57 -0
  369. package/dist/coordination/result-saver.d.ts +1 -1
  370. package/dist/coordination/result-saver.js +8 -5
  371. package/dist/coordination/task-dag/dag-algorithms.d.ts +33 -0
  372. package/dist/coordination/task-dag/dag-algorithms.js +162 -0
  373. package/dist/coordination/task-dag/dag-obligations.d.ts +21 -0
  374. package/dist/coordination/task-dag/dag-obligations.js +83 -0
  375. package/dist/coordination/task-dag/dag.d.ts +69 -19
  376. package/dist/coordination/task-dag/dag.js +215 -269
  377. package/dist/coordination/task-dag/index.d.ts +12 -4
  378. package/dist/coordination/task-dag/index.js +11 -3
  379. package/dist/coordination/task-dag/prerequisite-ledger.d.ts +84 -0
  380. package/dist/coordination/task-dag/prerequisite-ledger.js +252 -0
  381. package/dist/coordination/task-dag/scheduler.d.ts +19 -9
  382. package/dist/coordination/task-dag/scheduler.js +36 -12
  383. package/dist/coordination/task-dag/types.d.ts +160 -1
  384. package/dist/coordination/task-dag/types.js +2 -1
  385. package/dist/coordination/task-executability.d.ts +18 -0
  386. package/dist/coordination/task-executability.js +31 -0
  387. package/dist/coordination/task-executor.d.ts +1 -0
  388. package/dist/coordination/task-executor.js +5 -0
  389. package/dist/coordination/yaml-pipeline-loader.js +5 -2
  390. package/dist/domains/code-intelligence/coordinator.js +35 -9
  391. package/dist/domains/code-intelligence/index-path-guard.d.ts +52 -0
  392. package/dist/domains/code-intelligence/index-path-guard.js +95 -0
  393. package/dist/domains/code-intelligence/interfaces.d.ts +12 -0
  394. package/dist/domains/code-intelligence/plugin.js +5 -1
  395. package/dist/domains/code-intelligence/services/knowledge-graph.d.ts +6 -0
  396. package/dist/domains/code-intelligence/services/knowledge-graph.js +42 -5
  397. package/dist/domains/code-intelligence/services/metric-collector/index.d.ts +2 -2
  398. package/dist/domains/code-intelligence/services/metric-collector/index.js +2 -3
  399. package/dist/domains/code-intelligence/services/metric-collector/loc-counter.d.ts +1 -1
  400. package/dist/domains/code-intelligence/services/metric-collector/loc-counter.js +11 -36
  401. package/dist/domains/code-intelligence/services/metric-collector/test-counter.d.ts +1 -1
  402. package/dist/domains/code-intelligence/services/metric-collector/test-counter.js +45 -103
  403. package/dist/domains/contract-testing/coordinator.js +3 -1
  404. package/dist/domains/contract-testing/services/api-compatibility.js +7 -6
  405. package/dist/domains/contract-testing/services/contract-validator.js +6 -4
  406. package/dist/domains/contract-testing/services/schema-validator.js +8 -5
  407. package/dist/domains/defect-intelligence/interfaces.d.ts +2 -0
  408. package/dist/domains/defect-intelligence/plugin.js +11 -2
  409. package/dist/domains/defect-intelligence/prediction-history.d.ts +27 -0
  410. package/dist/domains/defect-intelligence/prediction-history.js +68 -0
  411. package/dist/domains/defect-intelligence/services/defect-predictor.js +29 -12
  412. package/dist/domains/enterprise-integration/services/message-broker-service.js +3 -2
  413. package/dist/domains/enterprise-integration/services/odata-service.js +2 -1
  414. package/dist/domains/enterprise-integration/services/sap-integration-service.js +3 -2
  415. package/dist/domains/learning-optimization/active-patterns.d.ts +14 -14
  416. package/dist/domains/learning-optimization/active-patterns.js +17 -14
  417. package/dist/domains/learning-optimization/coordinator-helpers.js +2 -3
  418. package/dist/domains/learning-optimization/coordinator.d.ts +0 -3
  419. package/dist/domains/learning-optimization/coordinator.js +52 -107
  420. package/dist/domains/learning-optimization/index.d.ts +1 -1
  421. package/dist/domains/learning-optimization/interfaces.d.ts +62 -6
  422. package/dist/domains/learning-optimization/pattern-archive.d.ts +31 -0
  423. package/dist/domains/learning-optimization/pattern-archive.js +56 -0
  424. package/dist/domains/learning-optimization/pattern-consolidation.d.ts +12 -0
  425. package/dist/domains/learning-optimization/pattern-consolidation.js +41 -0
  426. package/dist/domains/learning-optimization/plugin.js +11 -1
  427. package/dist/domains/learning-optimization/reward-source.d.ts +50 -0
  428. package/dist/domains/learning-optimization/reward-source.js +65 -0
  429. package/dist/domains/learning-optimization/services/learning-coordinator.d.ts +7 -5
  430. package/dist/domains/learning-optimization/services/learning-coordinator.js +98 -75
  431. package/dist/domains/learning-optimization/services/metrics-optimizer.d.ts +14 -4
  432. package/dist/domains/learning-optimization/services/metrics-optimizer.js +129 -63
  433. package/dist/domains/learning-optimization/services/transfer-specialist.js +25 -15
  434. package/dist/domains/security-compliance/plugin.js +17 -3
  435. package/dist/domains/security-compliance/sast-path-guard.d.ts +9 -0
  436. package/dist/domains/security-compliance/sast-path-guard.js +17 -0
  437. package/dist/domains/security-compliance/services/scanners/dast-auth-testing.js +46 -56
  438. package/dist/domains/security-compliance/services/scanners/dast-helpers.js +76 -91
  439. package/dist/domains/security-compliance/services/scanners/dast-injection-testing.js +52 -62
  440. package/dist/domains/security-compliance/services/scanners/dast-scanner.d.ts +21 -1
  441. package/dist/domains/security-compliance/services/scanners/dast-scanner.js +29 -24
  442. package/dist/domains/security-compliance/services/scanners/scanner-orchestrator.js +4 -1
  443. package/dist/domains/test-execution/coordinator.d.ts +5 -0
  444. package/dist/domains/test-execution/coordinator.js +35 -20
  445. package/dist/domains/test-execution/interfaces.d.ts +41 -0
  446. package/dist/domains/test-execution/plugin.js +19 -4
  447. package/dist/domains/test-execution/services/flaky-detector.js +9 -7
  448. package/dist/domains/test-execution/services/retry-handler.js +46 -7
  449. package/dist/domains/test-execution/services/runner-test-cases.d.ts +32 -0
  450. package/dist/domains/test-execution/services/runner-test-cases.js +87 -0
  451. package/dist/domains/test-execution/services/test-executor.d.ts +5 -0
  452. package/dist/domains/test-execution/services/test-executor.js +31 -9
  453. package/dist/domains/test-generation/plugin.js +7 -2
  454. package/dist/domains/test-generation/services/test-data-generator.js +3 -1
  455. package/dist/domains/visual-accessibility/services/axe-core-audit.js +1 -1
  456. package/dist/hooks/cross-phase-hooks.js +2 -1
  457. package/dist/init/fleet-integration.js +2 -0
  458. package/dist/init/init-wizard-steps.js +2 -0
  459. package/dist/init/phases/06-code-intelligence.js +2 -0
  460. package/dist/init/phases/10-workers.js +51 -6
  461. package/dist/integrations/browser/agent-browser/client.js +37 -52
  462. package/dist/integrations/browser/agent-browser/command-executor.d.ts +33 -27
  463. package/dist/integrations/browser/agent-browser/command-executor.js +53 -54
  464. package/dist/integrations/browser/agent-browser/session-manager.d.ts +1 -1
  465. package/dist/integrations/browser/agent-browser/session-manager.js +8 -9
  466. package/dist/integrations/browser/web-content-fetcher.js +9 -3
  467. package/dist/integrations/vibium/client.js +2 -2
  468. package/dist/integrations/vibium/runtime.d.ts +1 -1
  469. package/dist/integrations/vibium/runtime.js +14 -11
  470. package/dist/kernel/anti-drift-middleware.d.ts +44 -5
  471. package/dist/kernel/anti-drift-middleware.js +147 -11
  472. package/dist/kernel/interfaces.d.ts +5 -0
  473. package/dist/kernel/unified-memory-schemas.d.ts +3 -2
  474. package/dist/kernel/unified-memory-schemas.js +3 -2
  475. package/dist/kernel/unified-memory.js +25 -6
  476. package/dist/learning/dream/dream-commit.d.ts +65 -0
  477. package/dist/learning/dream/dream-commit.js +104 -0
  478. package/dist/learning/dream/dream-engine.d.ts +81 -31
  479. package/dist/learning/dream/dream-engine.js +225 -168
  480. package/dist/learning/dream/dream-insights-pruner.d.ts +24 -4
  481. package/dist/learning/dream/dream-insights-pruner.js +85 -11
  482. package/dist/learning/dream/index.d.ts +3 -2
  483. package/dist/learning/dream/index.js +3 -1
  484. package/dist/learning/dream/rvcow-branch-manager.d.ts +8 -1
  485. package/dist/learning/dream/rvcow-branch-manager.js +8 -1
  486. package/dist/learning/dream/speculative-dreamer.d.ts +50 -74
  487. package/dist/learning/dream/speculative-dreamer.js +64 -111
  488. package/dist/learning/dream/spreading-activation.d.ts +2 -1
  489. package/dist/learning/dream/spreading-activation.js +15 -6
  490. package/dist/learning/experience-capture.d.ts +9 -0
  491. package/dist/learning/experience-capture.js +18 -4
  492. package/dist/learning/qe-reasoning-bank-types.d.ts +17 -2
  493. package/dist/learning/qe-reasoning-bank.js +22 -11
  494. package/dist/learning/skill-validation-learner.d.ts +2 -0
  495. package/dist/learning/skill-validation-learner.js +29 -21
  496. package/dist/learning/sqlite-persistence.d.ts +6 -0
  497. package/dist/learning/sqlite-persistence.js +16 -2
  498. package/dist/learning/usage-outcome.d.ts +68 -0
  499. package/dist/learning/usage-outcome.js +84 -0
  500. package/dist/mcp/background-workers.d.ts +13 -1
  501. package/dist/mcp/background-workers.js +23 -3
  502. package/dist/mcp/bundle.js +602 -551
  503. package/dist/mcp/handlers/core-handlers.js +11 -0
  504. package/dist/mcp/handlers/domain-handler-configs.d.ts +19 -0
  505. package/dist/mcp/handlers/domain-handler-configs.js +76 -30
  506. package/dist/mcp/handlers/handler-factory.d.ts +2 -1
  507. package/dist/mcp/handlers/handler-factory.js +37 -15
  508. package/dist/mcp/handlers/orchestrate-routes.d.ts +36 -0
  509. package/dist/mcp/handlers/orchestrate-routes.js +88 -0
  510. package/dist/mcp/handlers/task-handlers.d.ts +3 -0
  511. package/dist/mcp/handlers/task-handlers.js +69 -6
  512. package/dist/mcp/handlers/validation-pipeline-handler.js +6 -2
  513. package/dist/mcp/metrics/metrics-collector.d.ts +11 -9
  514. package/dist/mcp/metrics/metrics-collector.js +13 -26
  515. package/dist/mcp/protocol-server.js +10 -3
  516. package/dist/mcp/security/schema-validator.js +3 -2
  517. package/dist/mcp/tools/code-intelligence/c4.js +11 -1
  518. package/dist/mcp/tools/coverage-analysis/index.js +31 -2
  519. package/dist/mcp/tools/learning-optimization/dream.d.ts +8 -8
  520. package/dist/mcp/tools/learning-optimization/dream.js +38 -34
  521. package/dist/mcp/tools/learning-optimization/optimize.d.ts +52 -5
  522. package/dist/mcp/tools/learning-optimization/optimize.js +164 -80
  523. package/dist/mcp/tools/quality-assessment/gate.js +12 -1
  524. package/dist/mcp/tools/requirements-validation/quality-criteria.js +9 -2
  525. package/dist/memory/crdt/lww-register.js +11 -1
  526. package/dist/migration/agent-compat.js +7 -5
  527. package/dist/migrations/20261018_add_dream_insights_archive.d.ts +27 -0
  528. package/dist/migrations/20261018_add_dream_insights_archive.js +57 -0
  529. package/dist/routing/calibration/ema-calibrator.js +3 -1
  530. package/dist/shared/base-domain-plugin.d.ts +4 -0
  531. package/dist/shared/base-domain-plugin.js +6 -0
  532. package/dist/shared/git/git-analyzer.d.ts +49 -0
  533. package/dist/shared/git/git-analyzer.js +159 -319
  534. package/dist/shared/git/git-process.d.ts +22 -0
  535. package/dist/shared/git/git-process.js +37 -0
  536. package/dist/shared/git/index.d.ts +1 -0
  537. package/dist/shared/git/index.js +1 -0
  538. package/dist/shared/io/payload-path-guard.d.ts +75 -0
  539. package/dist/shared/io/payload-path-guard.js +190 -0
  540. package/dist/shared/llm/cache.js +4 -1
  541. package/dist/shared/llm/router/agent-router-config.js +2 -1
  542. package/dist/shared/llm/translation/tool-translator.js +2 -1
  543. package/dist/shared/security/compliance-patterns.js +3 -1
  544. package/dist/shared/test-runner-args.d.ts +5 -0
  545. package/dist/shared/test-runner-args.js +6 -1
  546. package/dist/shared/test-runner-process.d.ts +32 -0
  547. package/dist/shared/test-runner-process.js +105 -0
  548. package/dist/shared/test-runner-verdict.d.ts +9 -1
  549. package/dist/shared/test-runner-verdict.js +15 -4
  550. package/dist/shared/types/index.d.ts +9 -0
  551. package/dist/shared/types/index.js +13 -0
  552. package/dist/shared/utils/namespaced-search.d.ts +56 -0
  553. package/dist/shared/utils/namespaced-search.js +71 -0
  554. package/dist/shared/utils/safe-expression-evaluator.js +4 -3
  555. package/dist/strange-loop/infra-healing/infra-action-executor.js +7 -3
  556. package/dist/strange-loop/infra-healing/infra-healing-orchestrator.js +10 -9
  557. package/dist/strange-loop/infra-healing/recovery-playbook.js +13 -3
  558. package/dist/validation/gate-reexecute.js +7 -4
  559. package/dist/workers/daemon.d.ts +2 -0
  560. package/dist/workers/daemon.js +23 -6
  561. package/dist/workers/namespaced-keys.d.ts +4 -7
  562. package/dist/workers/namespaced-keys.js +4 -15
  563. package/dist/workers/quality-daemon/ci-monitor.js +9 -5
  564. package/dist/workers/quality-daemon/git-watcher.js +9 -9
  565. package/dist/workers/worker-env.d.ts +16 -8
  566. package/dist/workers/worker-env.js +25 -12
  567. package/dist/workers/worker-manager.js +4 -0
  568. package/dist/workers/workers/defect-predictor.d.ts +8 -3
  569. package/dist/workers/workers/defect-predictor.js +48 -49
  570. package/dist/workers/workers/learning-consolidation.d.ts +3 -1
  571. package/dist/workers/workers/learning-consolidation.js +22 -8
  572. package/dist/workflows/browser/workflow-loader.js +8 -5
  573. package/package.json +1 -1
  574. package/dist/cli/chunks/adapter-FC4EY447.js +0 -2
  575. package/dist/cli/chunks/agent-booster-wasm-W3V5P7LE.js +0 -2
  576. package/dist/cli/chunks/aqe-learning-engine-AUAL6UBL.js +0 -2
  577. package/dist/cli/chunks/base-2XML4WH7.js +0 -2
  578. package/dist/cli/chunks/browser-ZL7OLKJQ.js +0 -4
  579. package/dist/cli/chunks/browser-workflow-2IFEUAAK.js +0 -2
  580. package/dist/cli/chunks/chunk-4GYFONJB.js +0 -4
  581. package/dist/cli/chunks/chunk-6CKTLVYV.js +0 -2
  582. package/dist/cli/chunks/chunk-7H3GNRNA.js +0 -4
  583. package/dist/cli/chunks/chunk-EUVSSIGR.js +0 -12
  584. package/dist/cli/chunks/chunk-I4U7YCXG.js +0 -180
  585. package/dist/cli/chunks/chunk-J7RCI25Q.js +0 -2
  586. package/dist/cli/chunks/chunk-KNHLOANK.js +0 -4
  587. package/dist/cli/chunks/chunk-KNQUHGNY.js +0 -2
  588. package/dist/cli/chunks/chunk-LZWBUVCK.js +0 -5
  589. package/dist/cli/chunks/chunk-PIEKGKW6.js +0 -12
  590. package/dist/cli/chunks/chunk-PWA6XBW4.js +0 -120
  591. package/dist/cli/chunks/chunk-X6VYQVUM.js +0 -2
  592. package/dist/cli/chunks/chunk-YTYS2XSY.js +0 -2
  593. package/dist/cli/chunks/chunk-Z3LDUPLQ.js +0 -6
  594. package/dist/cli/chunks/client-RFUSQRUZ.js +0 -2
  595. package/dist/cli/chunks/core-handlers-ZC7QB432.js +0 -2
  596. package/dist/cli/chunks/cross-domain-router-GRBK7YFZ.js +0 -2
  597. package/dist/cli/chunks/daemon-JER6HE2J.js +0 -12
  598. package/dist/cli/chunks/domain-transfer-NF7UJW7B.js +0 -2
  599. package/dist/cli/chunks/dream-VALD726W.js +0 -2
  600. package/dist/cli/chunks/file-discovery-VL73ASNI.js +0 -2
  601. package/dist/cli/chunks/fleet-GJ66QFXK.js +0 -43
  602. package/dist/cli/chunks/heartbeat-scheduler-FSX7A3ZA.js +0 -2
  603. package/dist/cli/chunks/hnsw-adapter-UX2QT6RL.js +0 -2
  604. package/dist/cli/chunks/hnsw-index-WRDDAMXH.js +0 -2
  605. package/dist/cli/chunks/hybrid-backend-O67NGIB5.js +0 -2
  606. package/dist/cli/chunks/impact-analyzer-6VXWWYWM.js +0 -2
  607. package/dist/cli/chunks/init-wizard-VH34J4TL.js +0 -2
  608. package/dist/cli/chunks/kernel-KJD24NO7.js +0 -2
  609. package/dist/cli/chunks/knowledge-graph-343O2HEZ.js +0 -2
  610. package/dist/cli/chunks/llm-router-service-2M4BT2AO.js +0 -2
  611. package/dist/cli/chunks/load-test-OTQ2JQ5F.js +0 -2
  612. package/dist/cli/chunks/mcp-NOTDZBW5.js +0 -2
  613. package/dist/cli/chunks/memory-backend-4QSNRRV6.js +0 -2
  614. package/dist/cli/chunks/memory-handlers-YFFYRSM6.js +0 -2
  615. package/dist/cli/chunks/pattern-null-store-5USH5MNR.js +0 -2
  616. package/dist/cli/chunks/pipeline-7ATPA6LU.js +0 -19
  617. package/dist/cli/chunks/project-root-SRTA6TBL.js +0 -2
  618. package/dist/cli/chunks/protocol-executor-4WYPCNBS.js +0 -2
  619. package/dist/cli/chunks/qe-reasoning-bank-I4D6SFS4.js +0 -2
  620. package/dist/cli/chunks/queen-coordinator-24UMTZTE.js +0 -2
  621. package/dist/cli/chunks/router-AUD4GATI.js +0 -2
  622. package/dist/cli/chunks/routing-feedback-2FE6SIKQ.js +0 -2
  623. package/dist/cli/chunks/rvf-dual-writer-P5LEUF25.js +0 -2
  624. package/dist/cli/chunks/rvf-migration-adapter-ZCYD5YJS.js +0 -2
  625. package/dist/cli/chunks/rvf-native-adapter-QGV6BW2W.js +0 -2
  626. package/dist/cli/chunks/safe-db-Q6JUKG2A.js +0 -2
  627. package/dist/cli/chunks/schedule-44OSMGE5.js +0 -2
  628. package/dist/cli/chunks/scheduler-V3HO2QQT.js +0 -2
  629. package/dist/cli/chunks/sqlite-persistence-N5T7DWMR.js +0 -2
  630. package/dist/cli/chunks/sync-4IMMQEPT.js +0 -2
  631. package/dist/cli/chunks/task-handlers-FH6DNTHW.js +0 -9
  632. package/dist/cli/chunks/token-bootstrap-HMM3AHXM.js +0 -2
  633. package/dist/cli/chunks/tree-sitter-wasm-parser-56GDQCMR.js +0 -2
  634. package/dist/cli/chunks/unified-memory-RQ3Q4CU3.js +0 -2
  635. package/dist/cli/chunks/unified-memory-hnsw-ZOP5FEYX.js +0 -2
  636. package/dist/cli/chunks/unified-persistence-72OCJJKK.js +0 -2
  637. package/dist/cli/chunks/visual-security-7F5UV23J.js +0 -2
  638. package/dist/cli/chunks/witness-chain-KZ57QUFE.js +0 -2
  639. package/dist/cli/chunks/witness-chain-LFASSMZK.js +0 -2
  640. package/dist/cli/chunks/witness-chain-repair-TPHN4DXN.js +0 -2
  641. package/dist/cli/chunks/workflow-orchestrator-ZNWEUYBN.js +0 -2
  642. package/dist/cli/chunks/wrappers-WCAYIQUX.js +0 -2
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Git Source - Recent commit context for target files
3
3
  */
4
- import { execFileSync } from 'node:child_process';
4
+ import { runGit } from '../../shared/git/git-process.js';
5
5
  export class GitContextSource {
6
6
  cwd;
7
7
  id = 'git';
@@ -18,7 +18,11 @@ export class GitContextSource {
18
18
  // filePaths can originate from MCP tool arguments. Pass each path as
19
19
  // one argv element; interpolating it into a shell command would allow
20
20
  // command execution via quotes or shell metacharacters.
21
- const log = execFileSync('git', ['log', '--oneline', '-5', '--', file], { cwd: this.cwd ?? process.cwd(), encoding: 'utf-8', timeout: 5000, stdio: ['ignore', 'pipe', 'ignore'] }).trim();
21
+ // Async, in its own process group, so a slow git can neither stall
22
+ // the MCP server's event loop nor outlive its timeout (#1115).
23
+ const log = (await runGit(['log', '--oneline', '-5', '--', file], {
24
+ cwd: this.cwd ?? process.cwd(), timeout: 5000,
25
+ })).trim();
22
26
  if (log) {
23
27
  const content = `Recent commits for ${file}:\n${log}`;
24
28
  fragments.push({
@@ -5,12 +5,16 @@
5
5
  * Covers: index-code, predict-defects
6
6
  */
7
7
  import * as fs from 'fs/promises';
8
+ import { randomUUID } from 'node:crypto';
9
+ import { prunePredictionHistory } from '../../domains/defect-intelligence/prediction-history.js';
8
10
  import * as path from 'path';
9
11
  import { ok, err } from '../../shared/types/index.js';
10
12
  import { toError } from '../../shared/error-utils.js';
11
13
  import { discoverSourceFiles } from './handler-utils.js';
12
14
  import { resolveProjectRootFromPaths } from '../../domains/code-intelligence/project-root-resolver.js';
15
+ import { nothingIndexedError } from '../../domains/code-intelligence/index-path-guard.js';
13
16
  import { createLogger } from '../../logging/logger-factory.js';
17
+ import { requirePayloadPath } from '../../shared/io/payload-path-guard.js';
14
18
  const logger = createLogger('CodeIntelligenceHandlers');
15
19
  async function collectProjectMetricsForTarget(ctx, targetPath, indexedFiles) {
16
20
  if (!ctx.getCodeIntelligenceCoordinator)
@@ -42,13 +46,24 @@ async function collectProjectMetricsForTarget(ctx, targetPath, indexedFiles) {
42
46
  return undefined;
43
47
  }
44
48
  }
49
+ /** #1126: a caller-named target must be a file or directory inside the project. */
50
+ async function confineTarget(taskType, target) {
51
+ if (!target || target === '.')
52
+ return ok(undefined);
53
+ return requirePayloadPath(taskType, 'target', target, { allowDirectory: true, allowMissing: true });
54
+ }
45
55
  export function registerCodeIntelligenceHandlers(ctx) {
46
56
  // Register code indexing handler - REAL IMPLEMENTATION
47
57
  ctx.registerHandler('index-code', async (task) => {
48
58
  const payload = task.payload;
49
59
  try {
60
+ // #1126: refuse an outside target before listing it, so the error
61
+ // cannot name the files in an outside directory.
62
+ const confined = await confineTarget('index-code', payload.target);
63
+ if (!confined.success)
64
+ return confined;
50
65
  const kg = ctx.getKnowledgeGraph();
51
- const targetPath = payload.target || process.cwd();
66
+ const targetPath = confined.value ?? (payload.target || process.cwd());
52
67
  const startTime = Date.now();
53
68
  // Discover files to index
54
69
  const filesToIndex = await discoverSourceFiles(targetPath, {
@@ -78,11 +93,21 @@ export function registerCodeIntelligenceHandlers(ctx) {
78
93
  return result;
79
94
  }
80
95
  const indexResult = result.value;
96
+ // #1096: files were found but none was indexed (e.g. the target is a
97
+ // symlink out of the project) - fail like the coordinator does.
98
+ if (indexResult.filesIndexed === 0) {
99
+ return err(nothingIndexedError(filesToIndex.length, indexResult.skipped ?? [], indexResult.errors));
100
+ }
101
+ const notIndexed = new Set([
102
+ ...(indexResult.skipped ?? []).map((s) => s.path),
103
+ ...indexResult.errors.map((e) => e.file),
104
+ ]);
105
+ const indexedFiles = filesToIndex.filter((file) => !notIndexed.has(file));
81
106
  // #999 MCP-CLI parity: `aqe code index` runs the coordinator's project
82
107
  // metric step (LOC, tests, tools); run the same step here, rooted at the
83
108
  // caller's target the way #997 resolves it. Best-effort: indexing has
84
109
  // already succeeded, so a metric failure only omits projectMetrics.
85
- const projectMetrics = await collectProjectMetricsForTarget(ctx, targetPath, filesToIndex);
110
+ const projectMetrics = await collectProjectMetricsForTarget(ctx, targetPath, indexedFiles);
86
111
  // Detect languages from files
87
112
  const detectedLanguages = new Set();
88
113
  const extToLang = {
@@ -95,7 +120,7 @@ export function registerCodeIntelligenceHandlers(ctx) {
95
120
  c: 'c', h: 'c', cpp: 'cpp', hpp: 'cpp', cc: 'cpp',
96
121
  scala: 'scala',
97
122
  };
98
- for (const file of filesToIndex) {
123
+ for (const file of indexedFiles) {
99
124
  const ext = path.extname(file).slice(1);
100
125
  const lang = extToLang[ext];
101
126
  if (lang)
@@ -116,6 +141,7 @@ export function registerCodeIntelligenceHandlers(ctx) {
116
141
  duration: indexResult.duration,
117
142
  errors: indexResult.errors,
118
143
  warnings: indexResult.warnings,
144
+ skipped: indexResult.skipped ?? [],
119
145
  ...(projectMetrics ? { projectMetrics } : {}),
120
146
  });
121
147
  }
@@ -127,7 +153,10 @@ export function registerCodeIntelligenceHandlers(ctx) {
127
153
  ctx.registerHandler('predict-defects', async (task) => {
128
154
  const payload = task.payload;
129
155
  try {
130
- const targetPath = payload.target || process.cwd();
156
+ const confined = await confineTarget('predict-defects', payload.target);
157
+ if (!confined.success)
158
+ return confined;
159
+ const targetPath = confined.value ?? path.resolve(payload.target || process.cwd());
131
160
  const minConfidence = payload.minConfidence || 0.5;
132
161
  // Discover actual source files in the target directory
133
162
  const sourceFiles = await discoverSourceFiles(targetPath, { includeTests: false });
@@ -144,6 +173,8 @@ export function registerCodeIntelligenceHandlers(ctx) {
144
173
  }
145
174
  // Analyze each file for defect indicators based on real metrics
146
175
  const predictedDefects = [];
176
+ const predictions = [];
177
+ let filesSkipped = 0;
147
178
  for (const filePath of sourceFiles) {
148
179
  try {
149
180
  const content = await fs.readFile(filePath, 'utf-8');
@@ -194,6 +225,18 @@ export function registerCodeIntelligenceHandlers(ctx) {
194
225
  reasons.push('Potentially long functions');
195
226
  }
196
227
  probability = Math.min(probability, 0.95);
228
+ // Keep every analyzed file, including a clean reanalysis below the
229
+ // display threshold. Absolute paths retain the project-relative
230
+ // identity when the caller targeted a nested directory (#1050).
231
+ const roundedProbability = Math.round(probability * 100) / 100;
232
+ predictions.push({
233
+ file: path.resolve(filePath),
234
+ probability: roundedProbability,
235
+ riskLevel: probability >= 0.8 ? 'critical' : probability >= 0.6 ? 'high'
236
+ : probability >= 0.4 ? 'medium' : probability >= 0.2 ? 'low' : 'info',
237
+ factors: [{ name: 'staticCodeIndicators', contribution: roundedProbability }],
238
+ recommendations: reasons,
239
+ });
197
240
  if (probability >= minConfidence) {
198
241
  // Use relative path for readability
199
242
  const relativePath = filePath.startsWith(targetPath)
@@ -207,9 +250,27 @@ export function registerCodeIntelligenceHandlers(ctx) {
207
250
  }
208
251
  }
209
252
  catch {
253
+ filesSkipped++;
210
254
  // Skip files that can't be read
211
255
  }
212
256
  }
257
+ if (predictions.length === 0) {
258
+ return err(new Error(`Defect prediction could not read any of ${sourceFiles.length} source files`));
259
+ }
260
+ // Record the run in the schema consumed by the background worker.
261
+ // These are static risk estimates from files actually read, not an
262
+ // empirically calibrated likelihood of future production defects.
263
+ const id = randomUUID();
264
+ await ctx.memory.set(`defect-intelligence:predictor:prediction:${id}`, {
265
+ id,
266
+ timestamp: new Date().toISOString(),
267
+ predictions,
268
+ predictionMethod: 'static-code-indicators',
269
+ estimated: true,
270
+ filesSkipped,
271
+ scanStatus: filesSkipped > 0 ? 'partial' : 'complete',
272
+ }, { namespace: 'defect-intelligence', ttl: 86400 * 7 });
273
+ await prunePredictionHistory(ctx.memory);
213
274
  // Sort by probability descending
214
275
  predictedDefects.sort((a, b) => b.probability - a.probability);
215
276
  // Calculate overall risk score
@@ -220,7 +281,7 @@ export function registerCodeIntelligenceHandlers(ctx) {
220
281
  // Generate recommendations from actual findings
221
282
  const recommendations = [];
222
283
  if (predictedDefects.length > 0) {
223
- recommendations.push(`${predictedDefects.length} files flagged for potential defects out of ${sourceFiles.length} analyzed`);
284
+ recommendations.push(`${predictedDefects.length} files flagged for potential defects out of ${predictions.length} analyzed`);
224
285
  const topFile = predictedDefects[0];
225
286
  recommendations.push(`Highest risk: ${topFile.file} (${Math.round(topFile.probability * 100)}%) — ${topFile.reason}`);
226
287
  }
@@ -231,13 +292,19 @@ export function registerCodeIntelligenceHandlers(ctx) {
231
292
  recommendations.push('Address TODO/FIXME comments to reduce technical debt');
232
293
  }
233
294
  if (predictedDefects.length === 0) {
234
- recommendations.push('No files exceeded the defect probability threshold — code looks healthy');
295
+ recommendations.push(filesSkipped > 0
296
+ ? `No analyzed files exceeded the threshold; ${filesSkipped} unreadable source files remain unassessed`
297
+ : 'No files exceeded the defect probability threshold — code looks healthy');
235
298
  }
236
299
  return ok({
237
300
  predictedDefects: predictedDefects.slice(0, 20), // Top 20
238
301
  riskScore,
239
302
  recommendations,
240
- filesAnalyzed: sourceFiles.length,
303
+ filesAnalyzed: predictions.length,
304
+ filesSkipped,
305
+ scanStatus: filesSkipped > 0 ? 'partial' : 'complete',
306
+ predictionMethod: 'static-code-indicators',
307
+ estimated: true,
241
308
  });
242
309
  }
243
310
  catch (error) {
@@ -22,6 +22,7 @@ import * as fs from 'fs';
22
22
  import * as os from 'os';
23
23
  import * as path from 'path';
24
24
  import { parseLcovInfo } from './handler-utils.js';
25
+ import { runTestRunnerProcess } from '../../shared/test-runner-process.js';
25
26
  /**
26
27
  * Is the "never execute build tooling" kill-switch set?
27
28
  *
@@ -402,26 +403,24 @@ export async function collectRustCoverage(targetPath, options = {}) {
402
403
  // Honor the opt-out before doing any of that.
403
404
  if (isCoverageExecDisabled())
404
405
  return null;
405
- const { execSync } = await import('child_process');
406
406
  const timeout = options.timeoutMs ?? 300000;
407
407
  // cargo must run from the crate root, not from whatever subdirectory the
408
408
  // caller happened to point at.
409
409
  const crateRoot = findCargoRoot(targetPath);
410
410
  if (!crateRoot)
411
411
  return null;
412
- try {
413
- execSync('cargo llvm-cov --version', {
414
- cwd: crateRoot, timeout: 30000, stdio: ['pipe', 'pipe', 'pipe'],
415
- });
416
- }
417
- catch {
412
+ // #1074: run cargo asynchronously. The coverage run executes the crate's
413
+ // whole test suite, and a synchronous call would stop the MCP server
414
+ // answering any other request for up to `timeout`.
415
+ const version = await runTestRunnerProcess('cargo', ['llvm-cov', '--version'], { cwd: crateRoot, timeout: 30000 });
416
+ if (version.error || version.status !== 0) {
418
417
  return null; // cargo-llvm-cov not installed — not an error, just unavailable.
419
418
  }
420
419
  const outPath = path.join(fs.mkdtempSync(path.join(os.tmpdir(), 'aqe-rust-cov-')), 'lcov.info');
421
420
  try {
422
- execSync(`cargo llvm-cov --lcov --output-path ${JSON.stringify(outPath)}`, {
423
- cwd: crateRoot, timeout, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'],
424
- });
421
+ const run = await runTestRunnerProcess('cargo', ['llvm-cov', '--lcov', '--output-path', outPath], { cwd: crateRoot, timeout });
422
+ if (run.error || run.status !== 0)
423
+ return null;
425
424
  if (!fs.existsSync(outPath))
426
425
  return null;
427
426
  const parsed = parseLcovInfo(fs.readFileSync(outPath, 'utf-8'));
@@ -6,9 +6,11 @@
6
6
  */
7
7
  import { ok, err } from '../../shared/types/index.js';
8
8
  import { toError } from '../../shared/error-utils.js';
9
+ import { requirePayloadPath } from '../../shared/io/payload-path-guard.js';
9
10
  import { buildEstimatedCoverage, collectRustCoverage, findCargoRoot, isCoverageExecDisabled, isRustProject, } from './coverage-collection.js';
10
- import { describeNoData, evaluateCoverageForTarget, isUnmeasured, resolveExistingCoverage, scopeCoverageToTarget, reconcileRecommendations, thresholdVerdict, } from './coverage-target.js';
11
+ import { describeNoData, evaluateCoverageForTarget, isUnmeasured, packageFilterForTarget, resolveExistingCoverage, scopeCoverageToTarget, reconcileRecommendations, thresholdVerdict, } from './coverage-target.js';
11
12
  import { randomUUID } from 'crypto';
13
+ import * as path from 'path';
12
14
  import { describeRunFailure, runJsCoverage, testRunStatus } from './coverage-runner.js';
13
15
  import { collectedMetrics } from '../../domains/coverage-analysis/collected-metrics.js';
14
16
  /**
@@ -80,7 +82,8 @@ async function collectCoverage(targetPath) {
80
82
  if (existing.status === 'evaluated') {
81
83
  return fromEvaluation(existing.evaluation, false, existing.projectRoot);
82
84
  }
83
- const { target, projectRoot } = existing;
85
+ const { target } = existing;
86
+ let projectRoot = existing.projectRoot;
84
87
  // #569 work item 1: delegate to real instrumentation where available.
85
88
  if (isRustProject(target)) {
86
89
  const rust = await collectRustCoverage(target);
@@ -109,7 +112,23 @@ async function collectCoverage(targetPath) {
109
112
  if (isCoverageExecDisabled()) {
110
113
  return { collected: buildEstimatedCoverage(target), ranTests: false, projectRoot };
111
114
  }
112
- const run = await runJsCoverage(projectRoot, { timeoutMs: coverageTimeoutMs() });
115
+ const pathFilter = packageFilterForTarget(target, projectRoot);
116
+ let run = await runJsCoverage(projectRoot, {
117
+ timeoutMs: coverageTimeoutMs(),
118
+ pathFilter,
119
+ });
120
+ // A workspace config may deliberately include only root-level tests. If it
121
+ // found no tests for this package, restore the nearest-package behavior. The
122
+ // same fallback permits isolated package installs with no runner at the root.
123
+ // Do not retry timeouts, crashes or nonempty failing suites: their failures
124
+ // must remain visible. Only the fallback run's actual report can be measured.
125
+ const rootRunnerMissing = run.missing && run.numTotalTests === null;
126
+ const rootHadNoTests = !run.missing && run.numTotalTests === 0
127
+ && testRunStatus(run) === 'passed' && (run.exitCode === 0 || run.exitCode === 1);
128
+ if (pathFilter && !run.timedOut && (rootRunnerMissing || rootHadNoTests)) {
129
+ projectRoot = path.resolve(projectRoot, pathFilter);
130
+ run = await runJsCoverage(projectRoot, { timeoutMs: coverageTimeoutMs() });
131
+ }
113
132
  // An EMPTY report (`{}`) from a run that reported its tests means "the run
114
133
  // instrumented nothing under the target" → unmeasured, never an estimate
115
134
  // (#995 review BL2). An empty report from a run that crashed before
@@ -182,8 +201,16 @@ export function registerCoverageHandlers(ctx) {
182
201
  ctx.registerHandler('analyze-coverage', async (task) => {
183
202
  const payload = task.payload;
184
203
  try {
204
+ // #1126: collect coverage (which may run the tests) only inside the
205
+ // project. A missing target keeps its own message below.
206
+ let targetPath = payload.target || process.cwd();
207
+ if (payload.target && payload.target !== '.') {
208
+ const confined = await requirePayloadPath('analyze-coverage', 'target', payload.target, { allowDirectory: true, allowMissing: true });
209
+ if (!confined.success)
210
+ return confined;
211
+ targetPath = confined.value;
212
+ }
185
213
  const analyzer = ctx.getCoverageAnalyzer();
186
- const targetPath = payload.target || process.cwd();
187
214
  const threshold = payload.threshold || 80;
188
215
  const { collected, ranTests, noData, projectRoot, notes, runStatus, testRun } = await collectCoverage(targetPath);
189
216
  // #995 review N5: say so plainly instead of "no coverage data found".
@@ -96,7 +96,7 @@ export declare function runnerBinDirs(projectRoot: string): string[];
96
96
  * Pick the runner and its argv. No shell is involved: `command` is the Node
97
97
  * binary and `args[0]` the runner's JS entry, so paths are passed verbatim.
98
98
  */
99
- export declare function buildJsCoverageInvocation(projectRoot: string, reportDir: string): JsCoverageInvocation;
99
+ export declare function buildJsCoverageInvocation(projectRoot: string, reportDir: string, pathFilter?: string | null): JsCoverageInvocation;
100
100
  /**
101
101
  * Synchronously kill every live coverage run and remove its temp dir. Runs from
102
102
  * `process.on('exit')`, where only synchronous work is possible.
@@ -134,6 +134,7 @@ export declare function runProcessTree(command: string, args: string[], options:
134
134
  */
135
135
  export declare function runJsCoverage(projectRoot: string, options?: {
136
136
  timeoutMs?: number;
137
+ pathFilter?: string | null;
137
138
  }): Promise<JsCoverageRun>;
138
139
  /**
139
140
  * One-line, caller-facing explanation of why a run produced no usable report.
@@ -174,7 +174,7 @@ function usesPlugNPlay(projectRoot) {
174
174
  * Pick the runner and its argv. No shell is involved: `command` is the Node
175
175
  * binary and `args[0]` the runner's JS entry, so paths are passed verbatim.
176
176
  */
177
- export function buildJsCoverageInvocation(projectRoot, reportDir) {
177
+ export function buildJsCoverageInvocation(projectRoot, reportDir, pathFilter) {
178
178
  const resultsFile = path.join(reportDir, RESULTS_FILE);
179
179
  const deps = readRunnerDeps(projectRoot);
180
180
  let runner = 'vitest';
@@ -200,6 +200,13 @@ export function buildJsCoverageInvocation(projectRoot, reportDir) {
200
200
  runnerArgs = ['run', '--coverage', `--coverage.reportsDirectory=${reportDir}`,
201
201
  '--coverage.reporter=json', '--coverage.reportOnFailure=true', '--reporter=json', `--outputFile=${resultsFile}`];
202
202
  }
203
+ // A package target run from the workspace root: restrict the run to that
204
+ // package's tests (vitest/jest positional filter) so a slow sibling cannot
205
+ // time the run out. nyc/mocha take no such filter.
206
+ // jest reads the positional as a regex, so escape the directory's metacharacters.
207
+ if (pathFilter && runner !== 'nyc') {
208
+ runnerArgs.push(runner === 'jest' ? pathFilter.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') : pathFilter);
209
+ }
203
210
  const bin = findPackageBin(projectRoot, runner === 'jest' ? 'jest' : runner);
204
211
  return {
205
212
  runner,
@@ -392,7 +399,7 @@ export async function runJsCoverage(projectRoot, options = {}) {
392
399
  const timeoutMs = options.timeoutMs ?? 120000;
393
400
  const reportDir = fs.mkdtempSync(path.join(os.tmpdir(), 'aqe-js-cov-'));
394
401
  try {
395
- const inv = buildJsCoverageInvocation(projectRoot, reportDir);
402
+ const inv = buildJsCoverageInvocation(projectRoot, reportDir, options.pathFilter);
396
403
  if (!inv.command) {
397
404
  return {
398
405
  runner: inv.runner, missing: true, exitCode: null, exitedCleanly: false, timedOut: false,
@@ -22,9 +22,11 @@ import type { CoverageData, FileCoverage } from '../../domains/coverage-analysis
22
22
  /**
23
23
  * Walk up from a target to the nearest directory that holds a project marker.
24
24
  *
25
- * NEAREST rather than topmost: in a monorepo, `packages/core/src` belongs to
26
- * `packages/core` (its own package.json and test config), not the workspace
27
- * root. This intentionally differs from `kernel/findProjectRoot`, which locates
25
+ * Normally NEAREST rather than topmost: in a monorepo, `packages/core/src`
26
+ * belongs to `packages/core` when it has its own runner config. When only the
27
+ * enclosing workspace has a runner config, use that workspace so test execution
28
+ * and existing coverage reports use the same configured root (#1005). This
29
+ * intentionally differs from `kernel/findProjectRoot`, which locates
28
30
  * the AQE data root (honouring AQE_PROJECT_ROOT and `.agentic-qe`).
29
31
  *
30
32
  * Returns `null` when the target does not exist (a typo must not silently
@@ -32,6 +34,14 @@ import type { CoverageData, FileCoverage } from '../../domains/coverage-analysis
32
34
  * found below the home directory / filesystem root within `maxDepth` levels.
33
35
  */
34
36
  export declare function findCoverageProjectRoot(target: string, maxDepth?: number): string | null;
37
+ /**
38
+ * When `projectRoot` was adopted as a workspace root for a target inside a
39
+ * nested package, the directory (relative to the root, with a trailing `/`) of
40
+ * that package, for use as a test-runner path filter so sibling packages' tests
41
+ * are not run too. `null` when the target is the root itself or no nested
42
+ * package manifest sits between the target and the root.
43
+ */
44
+ export declare function packageFilterForTarget(target: string, projectRoot: string): string | null;
35
45
  /** Is this path (by name) a coverage report rather than source code? */
36
46
  export declare function isCoverageReportFile(filePath: string): boolean;
37
47
  /**
@@ -23,6 +23,7 @@ import * as os from 'os';
23
23
  import * as path from 'path';
24
24
  import { loadCoverageData, parseCoberturaXml, parseCoverageJson, parseCoverageSummaryJson, parseLcovInfo, } from './handler-utils.js';
25
25
  import { isTestPath } from './coverage-collection.js';
26
+ import { findProjectRoot } from '../../kernel/project-root.js';
26
27
  // ============================================================================
27
28
  // Project root
28
29
  // ============================================================================
@@ -38,12 +39,180 @@ const PROJECT_ROOT_MARKERS = [
38
39
  'pom.xml', 'build.gradle', 'build.gradle.kts',
39
40
  '.git',
40
41
  ];
42
+ const JS_RUNNER_CONFIGS = [
43
+ 'vitest.config.ts', 'vitest.config.js', 'vitest.config.mts', 'vitest.config.mjs',
44
+ 'vitest.config.cts', 'vitest.config.cjs',
45
+ 'vitest.workspace.ts', 'vitest.workspace.js', 'vitest.workspace.mts',
46
+ 'vitest.workspace.mjs', 'vitest.workspace.json',
47
+ 'vite.config.ts', 'vite.config.js', 'vite.config.mts', 'vite.config.mjs',
48
+ 'jest.config.ts', 'jest.config.js', 'jest.config.mts', 'jest.config.mjs',
49
+ 'jest.config.cts', 'jest.config.cjs', 'jest.config.json',
50
+ ];
51
+ function hasJsRunnerConfig(dir) {
52
+ if (JS_RUNNER_CONFIGS.some(name => fs.existsSync(path.join(dir, name))))
53
+ return true;
54
+ // Jest also accepts inline configuration: `"jest": { ... }` in package.json.
55
+ return readPackageJson(dir)?.jest !== undefined;
56
+ }
57
+ /**
58
+ * The runner a package.json declares through its dependencies, mirroring the
59
+ * precedence of the coverage runner (jest, then mocha/nyc, then vitest).
60
+ * `null` when it declares none. Jest and vitest run with no config file at all,
61
+ * so a dependency is as good a declaration as a config.
62
+ */
63
+ function declaredRunner(dir) {
64
+ const pkg = readPackageJson(dir);
65
+ if (!pkg)
66
+ return null;
67
+ const deps = {
68
+ ...pkg.devDependencies,
69
+ ...pkg.dependencies,
70
+ };
71
+ if (deps['jest'] || deps['@jest/core'])
72
+ return 'jest';
73
+ if (deps['mocha'] || deps['nyc'])
74
+ return 'nyc';
75
+ if (deps['vitest'])
76
+ return 'vitest';
77
+ return null;
78
+ }
79
+ /** mocha/nyc are configured by dotfiles rather than a runner config module. */
80
+ function hasMochaOrNycConfig(dir) {
81
+ try {
82
+ return fs.readdirSync(dir).some(name => /^\.(mocharc|nycrc)(\.|$)/.test(name));
83
+ }
84
+ catch {
85
+ return false;
86
+ }
87
+ }
88
+ /**
89
+ * May a package inherit the runner config of workspace `rootDir`? Only when it
90
+ * does not bring its own runner: a package that declares a different runner
91
+ * (e.g. jest under a vitest root) must keep running that one, from its own
92
+ * directory. With no runner declared at the root the runner defaults to vitest.
93
+ */
94
+ function packageCanUseRootRunner(pkgDir, rootDir) {
95
+ if (hasMochaOrNycConfig(pkgDir))
96
+ return (declaredRunner(rootDir) ?? 'vitest') === 'nyc';
97
+ const own = declaredRunner(pkgDir);
98
+ return own === null || own === (declaredRunner(rootDir) ?? 'vitest');
99
+ }
100
+ function readPackageJson(dir) {
101
+ try {
102
+ const parsed = JSON.parse(fs.readFileSync(path.join(dir, 'package.json'), 'utf-8'));
103
+ return typeof parsed === 'object' && parsed !== null ? parsed : null;
104
+ }
105
+ catch {
106
+ return null;
107
+ }
108
+ }
109
+ /**
110
+ * The workspace patterns a root declares: npm/yarn `workspaces` (array or
111
+ * `{ packages: [...] }`) or pnpm's `packages:` list. `null` = not a workspace
112
+ * root. Patterns are returned as written (negations keep their `!`).
113
+ */
114
+ function readWorkspacePatterns(dir) {
115
+ const patterns = [];
116
+ let isRoot = false;
117
+ const pkg = readPackageJson(dir);
118
+ const ws = pkg?.workspaces;
119
+ const fromPkg = Array.isArray(ws)
120
+ ? ws
121
+ : (typeof ws === 'object' && ws !== null && Array.isArray(ws.packages)
122
+ ? ws.packages
123
+ : null);
124
+ if (ws !== undefined && ws !== null && typeof ws === 'object')
125
+ isRoot = true;
126
+ if (fromPkg)
127
+ patterns.push(...fromPkg.filter((p) => typeof p === 'string'));
128
+ // Only the block-list `packages:` form is read; the flow form gives no
129
+ // patterns, so the root is not adopted (fails safe).
130
+ try {
131
+ const yaml = fs.readFileSync(path.join(dir, 'pnpm-workspace.yaml'), 'utf-8');
132
+ isRoot = true;
133
+ let inPackages = false;
134
+ for (const raw of yaml.split(/\r?\n/)) {
135
+ const line = raw.replace(/\s+#.*$/, '').trimEnd();
136
+ if (/^packages\s*:/.test(line)) {
137
+ inPackages = true;
138
+ continue;
139
+ }
140
+ if (inPackages) {
141
+ const m = /^\s+-\s+(.+)$/.exec(line);
142
+ if (m)
143
+ patterns.push(m[1].trim().replace(/^['"]|['"]$/g, ''));
144
+ else if (/^\S/.test(line))
145
+ inPackages = false;
146
+ }
147
+ }
148
+ }
149
+ catch { /* no pnpm-workspace.yaml */ }
150
+ return isRoot ? patterns : null;
151
+ }
152
+ function workspaceGlobToRegExp(pattern) {
153
+ const DEEP_DIR = '\u0000';
154
+ const DEEP_ANY = '\u0001';
155
+ const body = pattern.replace(/^\.\//, '').replace(/\/+$/, '')
156
+ .replace(/[.+^${}()|[\]\\]/g, '\\$&')
157
+ .replace(/\*\*\//g, DEEP_DIR)
158
+ .replace(/\*\*/g, DEEP_ANY)
159
+ .replace(/\*/g, '[^/]*')
160
+ .replace(/\?/g, '[^/]')
161
+ .split(DEEP_DIR).join('(?:.*/)?')
162
+ .split(DEEP_ANY).join('.*');
163
+ return new RegExp(`^${body}$`);
164
+ }
165
+ /**
166
+ * Is `pkgDir` a member of the workspace declared at `rootDir`? Patterns are
167
+ * resolved relative to the root; a pattern containing a `..` segment or an
168
+ * absolute path is ignored (it could point outside the root), and `!`
169
+ * patterns exclude.
170
+ */
171
+ function isWorkspaceMember(rootDir, pkgDir) {
172
+ const patterns = readWorkspacePatterns(rootDir);
173
+ if (!patterns)
174
+ return false;
175
+ const rel = path.relative(rootDir, pkgDir).split(path.sep).join('/');
176
+ if (rel === '' || rel.startsWith('..') || path.isAbsolute(rel))
177
+ return false;
178
+ let member = false;
179
+ for (const raw of patterns) {
180
+ const negated = raw.startsWith('!');
181
+ const pattern = negated ? raw.slice(1) : raw;
182
+ if (path.isAbsolute(pattern) || /^[A-Za-z]:/.test(pattern) || pattern.split(/[\\/]/).includes('..'))
183
+ continue;
184
+ if (workspaceGlobToRegExp(pattern).test(rel))
185
+ member = !negated;
186
+ }
187
+ return member;
188
+ }
189
+ /** True when `child` is `parent` or inside it (path-segment aware). */
190
+ function within(child, parent) {
191
+ const rel = path.relative(parent, child);
192
+ return rel === '' || (!rel.startsWith('..') && !path.isAbsolute(rel));
193
+ }
194
+ /**
195
+ * The AQE project root, as the ceiling for workspace-root adoption. Runner
196
+ * configuration is code that gets executed, so it must never be picked up from
197
+ * above the project (`AQE_PROJECT_ROOT` or the discovered root). `null` when it
198
+ * cannot be resolved, which disables adoption.
199
+ */
200
+ function aqeProjectCeiling(start) {
201
+ try {
202
+ return fs.realpathSync(path.resolve(findProjectRoot(start)));
203
+ }
204
+ catch {
205
+ return null;
206
+ }
207
+ }
41
208
  /**
42
209
  * Walk up from a target to the nearest directory that holds a project marker.
43
210
  *
44
- * NEAREST rather than topmost: in a monorepo, `packages/core/src` belongs to
45
- * `packages/core` (its own package.json and test config), not the workspace
46
- * root. This intentionally differs from `kernel/findProjectRoot`, which locates
211
+ * Normally NEAREST rather than topmost: in a monorepo, `packages/core/src`
212
+ * belongs to `packages/core` when it has its own runner config. When only the
213
+ * enclosing workspace has a runner config, use that workspace so test execution
214
+ * and existing coverage reports use the same configured root (#1005). This
215
+ * intentionally differs from `kernel/findProjectRoot`, which locates
47
216
  * the AQE data root (honouring AQE_PROJECT_ROOT and `.agentic-qe`).
48
217
  *
49
218
  * Returns `null` when the target does not exist (a typo must not silently
@@ -70,18 +239,66 @@ export function findCoverageProjectRoot(target, maxDepth = 12) {
70
239
  home = null;
71
240
  }
72
241
  const start = dir;
242
+ let nearestRoot = null;
243
+ let ceiling = null;
73
244
  for (let depth = 0; depth <= maxDepth; depth++) {
74
245
  // A stray manifest in $HOME must not claim every directory beneath it.
75
246
  // $HOME is still a valid root when it is the target itself.
76
247
  if (home !== null && dir === home && dir !== start)
77
- return null;
78
- if (PROJECT_ROOT_MARKERS.some(m => fs.existsSync(path.join(dir, m))))
79
- return dir;
248
+ return nearestRoot;
249
+ if (!nearestRoot && PROJECT_ROOT_MARKERS.some(m => fs.existsSync(path.join(dir, m)))) {
250
+ nearestRoot = dir;
251
+ if (hasJsRunnerConfig(dir))
252
+ return dir;
253
+ // Only a nested JS package can inherit the workspace's runner config.
254
+ // Other project types keep the nearest-marker semantics.
255
+ if (!fs.existsSync(path.join(dir, 'package.json')))
256
+ return dir;
257
+ }
258
+ else if (nearestRoot && readWorkspacePatterns(dir) !== null) {
259
+ // Adopt this workspace root (and run its config) only when it is inside
260
+ // the AQE project and actually lists the nearest package as a member.
261
+ ceiling ??= aqeProjectCeiling(start) ?? '';
262
+ if (ceiling && within(dir, ceiling) && within(nearestRoot, ceiling)
263
+ && isWorkspaceMember(dir, nearestRoot) && hasJsRunnerConfig(dir)
264
+ && packageCanUseRootRunner(nearestRoot, dir)) {
265
+ return dir;
266
+ }
267
+ return nearestRoot;
268
+ }
269
+ // Do not adopt configuration from a different repository.
270
+ if (nearestRoot && fs.existsSync(path.join(dir, '.git')))
271
+ return nearestRoot;
80
272
  const parent = path.dirname(dir);
81
273
  if (parent === dir)
82
- return null;
274
+ return nearestRoot;
83
275
  dir = parent;
84
276
  }
277
+ return nearestRoot;
278
+ }
279
+ /**
280
+ * When `projectRoot` was adopted as a workspace root for a target inside a
281
+ * nested package, the directory (relative to the root, with a trailing `/`) of
282
+ * that package, for use as a test-runner path filter so sibling packages' tests
283
+ * are not run too. `null` when the target is the root itself or no nested
284
+ * package manifest sits between the target and the root.
285
+ */
286
+ export function packageFilterForTarget(target, projectRoot) {
287
+ try {
288
+ const root = fs.realpathSync(projectRoot);
289
+ const real = fs.realpathSync(path.resolve(target));
290
+ let dir = fs.statSync(real).isDirectory() ? real : path.dirname(real);
291
+ while (dir !== root && within(dir, root)) {
292
+ if (fs.existsSync(path.join(dir, 'package.json'))) {
293
+ return `${path.relative(root, dir).split(path.sep).join('/')}/`;
294
+ }
295
+ const parent = path.dirname(dir);
296
+ if (parent === dir)
297
+ break;
298
+ dir = parent;
299
+ }
300
+ }
301
+ catch { /* fall through */ }
85
302
  return null;
86
303
  }
87
304
  // ============================================================================