agentic-qe 3.15.8 → 3.15.9

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 (479) hide show
  1. package/.claude/skills/skills-manifest.json +1 -1
  2. package/CHANGELOG.md +183 -0
  3. package/assets/skills/skills-manifest.json +1 -1
  4. package/dist/agents/claim-verifier/claim-verifier-service.js +13 -8
  5. package/dist/bridge/captured-experience-bridge.js +12 -13
  6. package/dist/cli/bundle.js +6 -6
  7. package/dist/cli/chunks/adapter-R2Q4QGXQ.js +2 -0
  8. package/dist/cli/chunks/{agent-booster-wasm-W3V5P7LE.js → agent-booster-wasm-427FRKWG.js} +2 -2
  9. package/dist/cli/chunks/{agent-handler-2NQFHAWE.js → agent-handler-RIYHTHVZ.js} +2 -2
  10. package/dist/cli/chunks/{agent-memory-branch-457ECHHK.js → agent-memory-branch-WSUCUHOO.js} +2 -2
  11. package/dist/cli/chunks/aqe-learning-engine-3RENLQWP.js +2 -0
  12. package/dist/cli/chunks/{arena-JV3WSEHU.js → arena-KRIBMIXX.js} +2 -2
  13. package/dist/cli/chunks/{arena-IYBQ3GPY.js → arena-YAJZX6MC.js} +4 -4
  14. package/dist/cli/chunks/{audit-5OS3T3K6.js → audit-7ZNOXWP3.js} +3 -3
  15. package/dist/cli/chunks/base-67DXSAYM.js +2 -0
  16. package/dist/cli/chunks/{better-sqlite3-IQKBFVAO.js → better-sqlite3-ZQAT4I6H.js} +2 -2
  17. package/dist/cli/chunks/{brain-handler-KA3SGAFM.js → brain-handler-452WCPZC.js} +3 -3
  18. package/dist/cli/chunks/{branch-enumerator-QZDU2VOQ.js → branch-enumerator-IJFXJRPN.js} +2 -2
  19. package/dist/cli/chunks/{browser-ZL7OLKJQ.js → browser-CT3MTV6G.js} +2 -2
  20. package/dist/cli/chunks/browser-workflow-NDXRROWZ.js +2 -0
  21. package/dist/cli/chunks/{chunk-IJSFZO7P.js → chunk-2BA45H64.js} +2 -2
  22. package/dist/cli/chunks/{chunk-6GIC2263.js → chunk-2HL3UM5P.js} +2 -2
  23. package/dist/cli/chunks/{chunk-KVMKYUOE.js → chunk-2I2UPJS7.js} +2 -2
  24. package/dist/cli/chunks/{chunk-22DOS3PM.js → chunk-2TDIS6YK.js} +2 -2
  25. package/dist/cli/chunks/{chunk-5MBNRTT5.js → chunk-2URBI52G.js} +2 -2
  26. package/dist/cli/chunks/{chunk-A6GCO6ZU.js → chunk-2XITOPYV.js} +2 -2
  27. package/dist/cli/chunks/{chunk-I77D65X5.js → chunk-2YH62JCN.js} +2 -2
  28. package/dist/cli/chunks/{chunk-2JCLACCS.js → chunk-32UTLDNY.js} +2 -2
  29. package/dist/cli/chunks/{chunk-UTNKMPTC.js → chunk-37BIGMJI.js} +1 -1
  30. package/dist/cli/chunks/{chunk-767SR7WH.js → chunk-3CJCROMW.js} +2 -2
  31. package/dist/cli/chunks/{chunk-LVHZK7GW.js → chunk-3LYU7BLY.js} +2 -2
  32. package/dist/cli/chunks/{chunk-5DZDLOY6.js → chunk-47TYABPD.js} +3 -3
  33. package/dist/cli/chunks/{chunk-SWY6KGMF.js → chunk-47V7FQGX.js} +2 -2
  34. package/dist/cli/chunks/{chunk-KMZW2P3R.js → chunk-4JCY45KV.js} +2 -2
  35. package/dist/cli/chunks/{chunk-D4IBIMWI.js → chunk-4SUOVLJ6.js} +2 -2
  36. package/dist/cli/chunks/{chunk-J7RCI25Q.js → chunk-4URT6JO2.js} +1 -1
  37. package/dist/cli/chunks/{chunk-SHEVM5PF.js → chunk-4V27J6YN.js} +2 -2
  38. package/dist/cli/chunks/{chunk-JWPYMRIX.js → chunk-4W4DYVSH.js} +1 -1
  39. package/dist/cli/chunks/chunk-55HRSNGN.js +2 -0
  40. package/dist/cli/chunks/{chunk-R2NHGESM.js → chunk-5D2I7JUP.js} +2 -2
  41. package/dist/cli/chunks/{chunk-GGSTLKY5.js → chunk-5JWGCIQW.js} +1 -1
  42. package/dist/cli/chunks/chunk-5LAAZLUC.js +4 -0
  43. package/dist/cli/chunks/{chunk-YNQPHRUZ.js → chunk-5NS3USRW.js} +1 -1
  44. package/dist/cli/chunks/{chunk-4YUBWU3E.js → chunk-6EPHNJTL.js} +1 -1
  45. package/dist/cli/chunks/{chunk-ZBI7PJFX.js → chunk-6OOYIO3W.js} +2 -2
  46. package/dist/cli/chunks/{chunk-ST7ASEJO.js → chunk-6PXA2BQJ.js} +58 -58
  47. package/dist/cli/chunks/{chunk-LPSMVBB3.js → chunk-6YL6JOQB.js} +2 -2
  48. package/dist/cli/chunks/{chunk-DY37YMMQ.js → chunk-72AMFDC7.js} +1 -1
  49. package/dist/cli/chunks/{chunk-OWBFVAEH.js → chunk-763SUL4B.js} +2 -2
  50. package/dist/cli/chunks/{chunk-4GYFONJB.js → chunk-7DMA5NYL.js} +1 -1
  51. package/dist/cli/chunks/{chunk-4GUVVGJX.js → chunk-7JKB3Q7O.js} +1 -1
  52. package/dist/cli/chunks/{chunk-DN3AKAPY.js → chunk-7KII4CQG.js} +2 -2
  53. package/dist/cli/chunks/{chunk-VKFVJCIH.js → chunk-7QGYJ5OY.js} +1 -1
  54. package/dist/cli/chunks/{chunk-HNGNRIZZ.js → chunk-7QTB5VJZ.js} +2 -2
  55. package/dist/cli/chunks/{chunk-GSOK4M6V.js → chunk-7X2Y727E.js} +1 -1
  56. package/dist/cli/chunks/{chunk-PZ7FJ4UG.js → chunk-A4RU67VX.js} +2 -2
  57. package/dist/cli/chunks/{chunk-VWSGWYRB.js → chunk-A6YIH4C4.js} +2 -2
  58. package/dist/cli/chunks/{chunk-4I35ARWW.js → chunk-ABFDB4X3.js} +1 -1
  59. package/dist/cli/chunks/{chunk-NQDYOF35.js → chunk-AJ4YDSOI.js} +2 -2
  60. package/dist/cli/chunks/{chunk-CDLG3Q2O.js → chunk-AOFO4N32.js} +2 -2
  61. package/dist/cli/chunks/{chunk-WAWKAYPY.js → chunk-AQTVVLNP.js} +1 -1
  62. package/dist/cli/chunks/chunk-AR2E4B7K.js +6 -0
  63. package/dist/cli/chunks/{chunk-HXCGV5UJ.js → chunk-AVB5QY2Q.js} +2 -2
  64. package/dist/cli/chunks/{chunk-JFWQFB3S.js → chunk-BHKXMIWX.js} +2 -2
  65. package/dist/cli/chunks/{chunk-BEVWCF3Q.js → chunk-BXO536GT.js} +3 -3
  66. package/dist/cli/chunks/{chunk-IMSRWNWF.js → chunk-C6RTMTEH.js} +1 -1
  67. package/dist/cli/chunks/{chunk-UKKFZJME.js → chunk-CTZJUV5I.js} +1 -1
  68. package/dist/cli/chunks/{chunk-MV4S3TEC.js → chunk-D6XVGFTI.js} +2 -2
  69. package/dist/cli/chunks/{chunk-5YOO5QSE.js → chunk-DDPPSSHW.js} +1 -1
  70. package/dist/cli/chunks/{chunk-NHOMVBCI.js → chunk-DGTLJNJH.js} +2 -2
  71. package/dist/cli/chunks/{chunk-NWFBF3KT.js → chunk-DINZR5CF.js} +1 -1
  72. package/dist/cli/chunks/{chunk-RG42LDOB.js → chunk-EFBLP43U.js} +2 -2
  73. package/dist/cli/chunks/chunk-ETG7O5E5.js +5 -0
  74. package/dist/cli/chunks/{chunk-KNHLOANK.js → chunk-F2SQPP6U.js} +2 -2
  75. package/dist/cli/chunks/{chunk-62T7U25U.js → chunk-F3PQZX44.js} +1 -1
  76. package/dist/cli/chunks/{chunk-X3HM7SV4.js → chunk-F4JYIRW2.js} +2 -2
  77. package/dist/cli/chunks/{chunk-NZATJ2C6.js → chunk-FJ4VTLLK.js} +2 -2
  78. package/dist/cli/chunks/{chunk-TMNEK7TP.js → chunk-FL3OYGCS.js} +2 -2
  79. package/dist/cli/chunks/{chunk-HI6OBDDY.js → chunk-FLASM2XB.js} +2 -2
  80. package/dist/cli/chunks/{chunk-GENNJRNK.js → chunk-FV3NHVC7.js} +22 -22
  81. package/dist/cli/chunks/{chunk-PICEGWGB.js → chunk-FV7VAG74.js} +1 -1
  82. package/dist/cli/chunks/{chunk-PWA6XBW4.js → chunk-G3BKZNFL.js} +5 -5
  83. package/dist/cli/chunks/{chunk-T2TDTBFV.js → chunk-GBUIG3FS.js} +1 -1
  84. package/dist/cli/chunks/{chunk-QFYUZYRA.js → chunk-GCWSX2NY.js} +4 -4
  85. package/dist/cli/chunks/{chunk-KJNUETCB.js → chunk-GII5WVAK.js} +1 -1
  86. package/dist/cli/chunks/{chunk-YVWMJZ6O.js → chunk-GKPQ2GRR.js} +2 -2
  87. package/dist/cli/chunks/chunk-GR3JYE5A.js +2 -0
  88. package/dist/cli/chunks/{chunk-CQ5G64EA.js → chunk-H3KBIWTO.js} +2 -2
  89. package/dist/cli/chunks/{chunk-V4QJ3MMT.js → chunk-HAROIAJE.js} +1 -1
  90. package/dist/cli/chunks/{chunk-OJWEZYLR.js → chunk-HCYQHWI2.js} +2 -2
  91. package/dist/cli/chunks/{chunk-FAYXES7R.js → chunk-HGTWAZWU.js} +2 -2
  92. package/dist/cli/chunks/{chunk-LHRVSK44.js → chunk-HTZJSQ3C.js} +2 -2
  93. package/dist/cli/chunks/{chunk-DAFMHM64.js → chunk-HWK5L7IJ.js} +2 -2
  94. package/dist/cli/chunks/{chunk-K5R3WUJP.js → chunk-HZ5NC6U5.js} +1 -1
  95. package/dist/cli/chunks/{chunk-Y5ZBF7MA.js → chunk-I6S35FRO.js} +2 -2
  96. package/dist/cli/chunks/{chunk-UDCYQLTD.js → chunk-ICP2ORGI.js} +2 -2
  97. package/dist/cli/chunks/{chunk-KMVFBYJO.js → chunk-IFEIY3NQ.js} +2 -2
  98. package/dist/cli/chunks/{chunk-NW7HTOSN.js → chunk-J3DTDJDT.js} +2 -2
  99. package/dist/cli/chunks/chunk-J3WGK22W.js +2 -0
  100. package/dist/cli/chunks/{chunk-5ONJ7AV6.js → chunk-J5KNRVXR.js} +1 -1
  101. package/dist/cli/chunks/{chunk-G77Q22EN.js → chunk-JAV5WPSY.js} +2 -2
  102. package/dist/cli/chunks/{chunk-VVK4ECVJ.js → chunk-JEP4ULR6.js} +2 -2
  103. package/dist/cli/chunks/{chunk-TC52M542.js → chunk-JK2ME6IT.js} +2 -2
  104. package/dist/cli/chunks/chunk-JNNZK7KH.js +2 -0
  105. package/dist/cli/chunks/{chunk-NLYUC63R.js → chunk-JP4P3P3D.js} +2 -2
  106. package/dist/cli/chunks/{chunk-BTMEOZYY.js → chunk-JUVHZG7I.js} +1 -1
  107. package/dist/cli/chunks/{chunk-PUYQ6EKC.js → chunk-JWGRWMZP.js} +2 -2
  108. package/dist/cli/chunks/{chunk-OCLAMZJG.js → chunk-K5DJXMAA.js} +2 -2
  109. package/dist/cli/chunks/{chunk-X7ZQIFES.js → chunk-KFUUIAR4.js} +2 -2
  110. package/dist/cli/chunks/chunk-KHSRIPBP.js +180 -0
  111. package/dist/cli/chunks/{chunk-U3BWBP6B.js → chunk-KIKWJM6J.js} +2 -2
  112. package/dist/cli/chunks/{chunk-MUDBF2JC.js → chunk-KIXYKUCI.js} +1 -1
  113. package/dist/cli/chunks/{chunk-P4UT4LBE.js → chunk-KLGYIEJK.js} +3 -3
  114. package/dist/cli/chunks/{chunk-G6CLO74Q.js → chunk-KR3M44CF.js} +3 -3
  115. package/dist/cli/chunks/chunk-KTSLTZSG.js +2 -0
  116. package/dist/cli/chunks/{chunk-FJAO4UX2.js → chunk-KVBEGOJE.js} +2 -2
  117. package/dist/cli/chunks/{chunk-BLZEOGQE.js → chunk-L42JPFCC.js} +2 -2
  118. package/dist/cli/chunks/{chunk-ZOVAZTXE.js → chunk-LCJTEUDC.js} +370 -370
  119. package/dist/cli/chunks/{chunk-JLTGO5BB.js → chunk-LEAKYZ37.js} +2 -2
  120. package/dist/cli/chunks/{chunk-RSMPJWQH.js → chunk-LMU5DUDK.js} +1 -1
  121. package/dist/cli/chunks/{chunk-FEN2DHFM.js → chunk-MZS32SYS.js} +1 -1
  122. package/dist/cli/chunks/{chunk-J7FLNP5L.js → chunk-N3KEY4XJ.js} +2 -2
  123. package/dist/cli/chunks/{chunk-ZG7UKWBB.js → chunk-N3NP6PTT.js} +2 -2
  124. package/dist/cli/chunks/{chunk-2DPHFCMW.js → chunk-N5PDFGCQ.js} +2 -2
  125. package/dist/cli/chunks/{chunk-BQUIZ5QT.js → chunk-NDKLQW6N.js} +2 -2
  126. package/dist/cli/chunks/{chunk-52YRSWPS.js → chunk-NHZIWIQZ.js} +2 -2
  127. package/dist/cli/chunks/{chunk-ZOHS32SI.js → chunk-NTAD5UX4.js} +2 -2
  128. package/dist/cli/chunks/{chunk-7H3GNRNA.js → chunk-O3JLOVZX.js} +2 -2
  129. package/dist/cli/chunks/{chunk-7XGM7Q2N.js → chunk-OCESWNAZ.js} +3 -3
  130. package/dist/cli/chunks/{chunk-7SLEUVPZ.js → chunk-OG2UI6A3.js} +2 -2
  131. package/dist/cli/chunks/{chunk-4TZLZRZ4.js → chunk-OXTFSIGN.js} +1 -1
  132. package/dist/cli/chunks/{chunk-2QRGIEQV.js → chunk-OXZLKP6C.js} +1 -1
  133. package/dist/cli/chunks/{chunk-FEPFXXI7.js → chunk-P2CXVNKK.js} +2 -2
  134. package/dist/cli/chunks/{chunk-P2EA62YS.js → chunk-P73W2K7T.js} +1 -1
  135. package/dist/cli/chunks/{chunk-V7VZSNDK.js → chunk-PBZI2ZPV.js} +3 -3
  136. package/dist/cli/chunks/{chunk-MMY52Y6R.js → chunk-PMCRCEW5.js} +2 -2
  137. package/dist/cli/chunks/{chunk-FWXNFPLS.js → chunk-PVIA2FPD.js} +2 -2
  138. package/dist/cli/chunks/{chunk-NF63NHJH.js → chunk-PX2B5TS2.js} +2 -2
  139. package/dist/cli/chunks/{chunk-SFPGLUXS.js → chunk-Q3JVJRVJ.js} +1 -1
  140. package/dist/cli/chunks/{chunk-XOOBLZXR.js → chunk-QQ5SZH4D.js} +2 -2
  141. package/dist/cli/chunks/{chunk-KITKQUBX.js → chunk-QTVWUQTB.js} +1 -1
  142. package/dist/cli/chunks/{chunk-2UN4JOTN.js → chunk-REUFWGMA.js} +2 -2
  143. package/dist/cli/chunks/{chunk-CQ3SBRDP.js → chunk-SNBYYO6F.js} +2 -2
  144. package/dist/cli/chunks/{chunk-A2UGPKCS.js → chunk-SVHUYVUR.js} +2 -2
  145. package/dist/cli/chunks/{chunk-PIEKGKW6.js → chunk-THAY7WHO.js} +2 -2
  146. package/dist/cli/chunks/{chunk-WLXGUQOZ.js → chunk-TNMQVG4A.js} +2 -2
  147. package/dist/cli/chunks/{chunk-2GSAAUW3.js → chunk-TSYQDRNK.js} +1 -1
  148. package/dist/cli/chunks/{chunk-7DHSHD5B.js → chunk-TUYJ53V4.js} +2 -2
  149. package/dist/cli/chunks/{chunk-U7CIY3YR.js → chunk-UNUTC6TX.js} +2 -2
  150. package/dist/cli/chunks/{chunk-CRUQ6RXU.js → chunk-UOJBR4J3.js} +2 -2
  151. package/dist/cli/chunks/{chunk-3LFLO2WK.js → chunk-UOWHE77F.js} +2 -2
  152. package/dist/cli/chunks/{chunk-O4RRVTXN.js → chunk-UYLYMWV5.js} +2 -2
  153. package/dist/cli/chunks/{chunk-D4O3TJI7.js → chunk-V5PXQSFS.js} +2 -2
  154. package/dist/cli/chunks/{chunk-VQRBBR27.js → chunk-VCMINU7K.js} +2 -2
  155. package/dist/cli/chunks/{chunk-3N627QRU.js → chunk-VQHVHVSF.js} +2 -2
  156. package/dist/cli/chunks/{chunk-J6LL25QJ.js → chunk-VRGCKBF7.js} +2 -2
  157. package/dist/cli/chunks/{chunk-VWRNG3UK.js → chunk-VU2EL424.js} +1 -1
  158. package/dist/cli/chunks/{chunk-KNQUHGNY.js → chunk-VXZJOKOX.js} +2 -2
  159. package/dist/cli/chunks/{chunk-EUVSSIGR.js → chunk-VYLM2YV5.js} +3 -3
  160. package/dist/cli/chunks/{chunk-PJGQ2TKN.js → chunk-W32YU3VI.js} +2 -2
  161. package/dist/cli/chunks/{chunk-YRH7KMTU.js → chunk-W5VJRDDG.js} +2 -2
  162. package/dist/cli/chunks/{chunk-PPIM7B5G.js → chunk-WGDR2KIR.js} +2 -2
  163. package/dist/cli/chunks/{chunk-2ZRNXEVI.js → chunk-WRRCQ2UE.js} +1 -1
  164. package/dist/cli/chunks/{chunk-7C6FMLQR.js → chunk-XDBD4GXO.js} +2 -2
  165. package/dist/cli/chunks/{chunk-W5A36V3Z.js → chunk-XOLDMK23.js} +2 -2
  166. package/dist/cli/chunks/{chunk-DCYUHCPK.js → chunk-XOVNZT7F.js} +1 -1
  167. package/dist/cli/chunks/{chunk-4C7KE2EL.js → chunk-XQ3DDY7X.js} +2 -2
  168. package/dist/cli/chunks/{chunk-K4N2MBCE.js → chunk-XUIA5KMS.js} +2 -2
  169. package/dist/cli/chunks/{chunk-YUP3APSN.js → chunk-XWIUFYM3.js} +1 -1
  170. package/dist/cli/chunks/{chunk-SJMZZMHP.js → chunk-XYCKHYBM.js} +2 -2
  171. package/dist/cli/chunks/{chunk-4NTLGGXO.js → chunk-XZJ2O3VC.js} +1 -1
  172. package/dist/cli/chunks/{chunk-UQLAN5TX.js → chunk-YRBBBUJX.js} +5 -5
  173. package/dist/cli/chunks/{chunk-XZQVC3GD.js → chunk-YZGSJG34.js} +1 -1
  174. package/dist/cli/chunks/{chunk-7CVMT64N.js → chunk-YZYDTABJ.js} +1 -1
  175. package/dist/cli/chunks/{chunk-4C3RYBTT.js → chunk-ZANDSVCK.js} +2 -2
  176. package/dist/cli/chunks/{chunk-6E7EOHMN.js → chunk-ZBDRLF43.js} +2 -2
  177. package/dist/cli/chunks/{chunk-UTFMMZ57.js → chunk-ZVSLCEVC.js} +3 -3
  178. package/dist/cli/chunks/{chunk-DKFSCJEF.js → chunk-ZXBCCO2H.js} +2 -2
  179. package/dist/cli/chunks/{ci-7NUCRGWO.js → ci-7SGRCFPS.js} +2 -2
  180. package/dist/cli/chunks/{ci-config-VQVECCFI.js → ci-config-MX3URPZA.js} +2 -2
  181. package/dist/cli/chunks/{ci-output-P7GQ6TKF.js → ci-output-M47NJY6D.js} +2 -2
  182. package/dist/cli/chunks/{circuit-breaker-5YP6N6HE.js → circuit-breaker-5GAK45SW.js} +2 -2
  183. package/dist/cli/chunks/{claude-flow-setup-W5H7CMU6.js → claude-flow-setup-YXYSRH4Y.js} +2 -2
  184. package/dist/cli/chunks/client-ZP3CTVRF.js +2 -0
  185. package/dist/cli/chunks/{cline-installer-OYANSZ54.js → cline-installer-DLJ5QD5N.js} +2 -2
  186. package/dist/cli/chunks/{code-OMT4UEZI.js → code-ONKLMVQ2.js} +25 -24
  187. package/dist/cli/chunks/{code-index-extractor-M2JEWKNF.js → code-index-extractor-2232LGZN.js} +2 -2
  188. package/dist/cli/chunks/{codex-installer-YBS6N5O3.js → codex-installer-UOWLYCMH.js} +2 -2
  189. package/dist/cli/chunks/{completions-U7GS5RG6.js → completions-MHX7GCC7.js} +2 -2
  190. package/dist/cli/chunks/{complexity-analyzer-QSXPIUIU.js → complexity-analyzer-43ZUJKZU.js} +2 -2
  191. package/dist/cli/chunks/{continuedev-installer-W5TTT743.js → continuedev-installer-6Q5JR4FF.js} +2 -2
  192. package/dist/cli/chunks/{copilot-installer-KC2RT24C.js → copilot-installer-CZUMVHSI.js} +2 -2
  193. package/dist/cli/chunks/core-handlers-JSRXQWPE.js +2 -0
  194. package/dist/cli/chunks/{cost-tracker-OQPVR6V4.js → cost-tracker-VS5ZW3XN.js} +2 -2
  195. package/dist/cli/chunks/{coverage-TCO2A2NX.js → coverage-VWKTWZ6D.js} +3 -3
  196. package/dist/cli/chunks/cross-domain-router-7UKODQWG.js +2 -0
  197. package/dist/cli/chunks/{cursor-installer-MH7GWD4L.js → cursor-installer-YIFEMORH.js} +2 -2
  198. package/dist/cli/chunks/{daemon-UJEARJZ2.js → daemon-SHWJSJW5.js} +7 -7
  199. package/dist/cli/chunks/daemon-YIFT46FH.js +34 -0
  200. package/dist/cli/chunks/{dag-attention-scheduler-F3SUJU5O.js → dag-attention-scheduler-TCC2WM46.js} +2 -2
  201. package/dist/cli/chunks/{detect-5QTCRB32.js → detect-IGTWSQMA.js} +2 -2
  202. package/dist/cli/chunks/{dist-node-XKZPHDBO.js → dist-node-TCOTJVQX.js} +2 -2
  203. package/dist/cli/chunks/{domain-handler-V3UEADKW.js → domain-handler-55ZVYODR.js} +2 -2
  204. package/dist/cli/chunks/{domain-plugins-7PES4UHZ.js → domain-plugins-GJRWOHQP.js} +2 -2
  205. package/dist/cli/chunks/{domain-transfer-NF7UJW7B.js → domain-transfer-6EF75EKU.js} +2 -2
  206. package/dist/cli/chunks/dream-UDLM6M55.js +2 -0
  207. package/dist/cli/chunks/{embed-and-insert-pattern-D2HWORHF.js → embed-and-insert-pattern-XAMNIKQL.js} +2 -2
  208. package/dist/cli/chunks/{eval-UF2UBAUC.js → eval-GO22R4OZ.js} +2 -2
  209. package/dist/cli/chunks/{experience-capture-middleware-2OUCEHHM.js → experience-capture-middleware-F2BRMJ3Y.js} +3 -3
  210. package/dist/cli/chunks/{fast-paths-KV5DKKHC.js → fast-paths-6RGPYALD.js} +2 -2
  211. package/dist/cli/chunks/{feature-flags-6YWMTNO5.js → feature-flags-MIWQIOHU.js} +2 -2
  212. package/dist/cli/chunks/{feature-flags-MTW6NMR3.js → feature-flags-ZGS3KLPH.js} +2 -2
  213. package/dist/cli/chunks/file-discovery-THWOUQ7Z.js +2 -0
  214. package/dist/cli/chunks/fleet-ADL57COA.js +44 -0
  215. package/dist/cli/chunks/{gnn-wrapper-52V6ANOY.js → gnn-wrapper-ALBJVW6T.js} +2 -2
  216. package/dist/cli/chunks/{heartbeat-handler-X7NHNRC7.js → heartbeat-handler-ZMM53NDY.js} +4 -4
  217. package/dist/cli/chunks/heartbeat-scheduler-HGOC5KH3.js +2 -0
  218. package/dist/cli/chunks/hnsw-adapter-EPSA6AP7.js +2 -0
  219. package/dist/cli/chunks/hnsw-index-RMFOPYGY.js +2 -0
  220. package/dist/cli/chunks/{hnsw-legacy-bridge-DZBE3KMK.js → hnsw-legacy-bridge-RYUJPA7B.js} +2 -2
  221. package/dist/cli/chunks/{hnswlib-node-2AWWUJAZ.js → hnswlib-node-XM6XF3YV.js} +2 -2
  222. package/dist/cli/chunks/{hooks-XLPVROL3.js → hooks-X62O7TJO.js} +10 -10
  223. package/dist/cli/chunks/hybrid-backend-NZ3G4WBX.js +2 -0
  224. package/dist/cli/chunks/{hypergraph-engine-6TI7YP6P.js → hypergraph-engine-ZBWUPTVD.js} +2 -2
  225. package/dist/cli/chunks/{hypergraph-handler-DBIBBOXS.js → hypergraph-handler-DUMF6SJV.js} +3 -3
  226. package/dist/cli/chunks/impact-analyzer-WZC6NHFP.js +2 -0
  227. package/dist/cli/chunks/{init-guard-OSO6MIDD.js → init-guard-S4I2R46S.js} +2 -2
  228. package/dist/cli/chunks/{init-handler-7S7IHMUF.js → init-handler-L4KJHVWS.js} +6 -6
  229. package/dist/cli/chunks/init-wizard-422UZYQ5.js +2 -0
  230. package/dist/cli/chunks/kernel-N7PJ6FCE.js +2 -0
  231. package/dist/cli/chunks/{kilocode-installer-2KBRFXMA.js → kilocode-installer-GNNB5FCZ.js} +2 -2
  232. package/dist/cli/chunks/{kiro-installer-5VFR4OQZ.js → kiro-installer-HR6ZAH7T.js} +2 -2
  233. package/dist/cli/chunks/knowledge-graph-SZCVQF37.js +2 -0
  234. package/dist/cli/chunks/{learning-G5NHL3DV.js → learning-4IEEOHJS.js} +3 -3
  235. package/dist/cli/chunks/{llm-router-4EAPPMHS.js → llm-router-ZFMORP36.js} +4 -4
  236. package/dist/cli/chunks/llm-router-service-4DE5WDUZ.js +2 -0
  237. package/dist/cli/chunks/{load-UYMZPEY6.js → load-ZM43WGDO.js} +2 -2
  238. package/dist/cli/chunks/load-test-POMIF4Q4.js +2 -0
  239. package/dist/cli/chunks/{mcp-NOTDZBW5.js → mcp-CRZKZE37.js} +2 -2
  240. package/dist/cli/chunks/{memory-QL53YIHP.js → memory-W5FZGVAD.js} +5 -5
  241. package/dist/cli/chunks/memory-backend-4P6AHSOY.js +2 -0
  242. package/dist/cli/chunks/memory-handlers-NK6NV3GE.js +2 -0
  243. package/dist/cli/chunks/{multi-model-executor-PDDDXF2B.js → multi-model-executor-SXXGAQ2G.js} +2 -2
  244. package/dist/cli/chunks/{opencode-installer-75D2SKOT.js → opencode-installer-PIRBUAB5.js} +2 -2
  245. package/dist/cli/chunks/{orchestrator-3WIZBV4T.js → orchestrator-H5SQCQTB.js} +11 -10
  246. package/dist/cli/chunks/pattern-null-store-CCHQHGQG.js +2 -0
  247. package/dist/cli/chunks/{pattern-usage-recorder-TEX2JGHA.js → pattern-usage-recorder-XZTWDI2T.js} +2 -2
  248. package/dist/cli/chunks/{pipeline-7ATPA6LU.js → pipeline-5LMLBIJ7.js} +2 -2
  249. package/dist/cli/chunks/{platform-WPSKRJE7.js → platform-KJDABL5C.js} +2 -2
  250. package/dist/cli/chunks/{plugin-UUFOVVMU.js → plugin-V4KSBVVM.js} +2 -2
  251. package/dist/cli/chunks/{prime-radiant-advanced-wasm-PDFSYWKZ.js → prime-radiant-advanced-wasm-JDHTKQAT.js} +2 -2
  252. package/dist/cli/chunks/project-root-X72FSM2F.js +2 -0
  253. package/dist/cli/chunks/protocol-executor-QW6XN6QN.js +2 -0
  254. package/dist/cli/chunks/{protocol-handler-3VRYRIQB.js → protocol-handler-BNRONTQV.js} +2 -2
  255. package/dist/cli/chunks/{prove-2NAUROGF.js → prove-ELLL6XMX.js} +2 -2
  256. package/dist/cli/chunks/qe-reasoning-bank-ZD3WF647.js +2 -0
  257. package/dist/cli/chunks/{quality-ZIEI2WGA.js → quality-NH2QA4D4.js} +2 -2
  258. package/dist/cli/chunks/{quality-gate-KWJO4SWQ.js → quality-gate-JTKLF7GW.js} +3 -3
  259. package/dist/cli/chunks/queen-coordinator-S4U4MKK2.js +2 -0
  260. package/dist/cli/chunks/{real-embeddings-TSZ4UIAE.js → real-embeddings-J3KCKLPB.js} +2 -2
  261. package/dist/cli/chunks/{ref-validation-DWFFRETJ.js → ref-validation-HNXQRP4F.js} +2 -2
  262. package/dist/cli/chunks/{roocode-installer-XTZHLUBO.js → roocode-installer-COJ6CX6S.js} +2 -2
  263. package/dist/cli/chunks/router-CXZKOOTR.js +2 -0
  264. package/dist/cli/chunks/routing-feedback-IYFANYY5.js +2 -0
  265. package/dist/cli/chunks/{routing-handler-GG525TDM.js → routing-handler-WM33ZILE.js} +2 -2
  266. package/dist/cli/chunks/{ruvector-commands-QKRJDM7Z.js → ruvector-commands-BBLXEA7A.js} +2 -2
  267. package/dist/cli/chunks/rvf-dual-writer-HCLQ5WUQ.js +2 -0
  268. package/dist/cli/chunks/rvf-migration-adapter-XCLUWOO3.js +2 -0
  269. package/dist/cli/chunks/{rvf-migration-coordinator-FF52OS6Q.js → rvf-migration-coordinator-P7H6HCAG.js} +2 -2
  270. package/dist/cli/chunks/rvf-native-adapter-MRT5H3IP.js +2 -0
  271. package/dist/cli/chunks/{rvf-store-integrity-M6DXTAZ4.js → rvf-store-integrity-R5SPVRFP.js} +2 -2
  272. package/dist/cli/chunks/safe-db-WFODRGVZ.js +2 -0
  273. package/dist/cli/chunks/schedule-RO55OQXG.js +2 -0
  274. package/dist/cli/chunks/scheduler-XXMJCH24.js +2 -0
  275. package/dist/cli/chunks/{security-EHXSW22U.js → security-AUDTRX3I.js} +3 -3
  276. package/dist/cli/chunks/{shared-rvf-adapter-6EH7UVJL.js → shared-rvf-adapter-PVDGBGI2.js} +2 -2
  277. package/dist/cli/chunks/{shared-rvf-dual-writer-WML274E7.js → shared-rvf-dual-writer-LZ2GMSS2.js} +2 -2
  278. package/dist/cli/chunks/sqlite-persistence-AWRIS4MK.js +2 -0
  279. package/dist/cli/chunks/{standalone-memory-C7QKAXS4.js → standalone-memory-XNOAI4G4.js} +2 -2
  280. package/dist/cli/chunks/{status-handler-VLI7MRLM.js → status-handler-K72XZE4T.js} +2 -2
  281. package/dist/cli/chunks/{structural-health-3LPG6MQN.js → structural-health-NF3YY7U5.js} +2 -2
  282. package/dist/cli/chunks/{sync-4IMMQEPT.js → sync-UVXA6CT2.js} +2 -2
  283. package/dist/cli/chunks/{sync-JFJEJBVK.js → sync-VBD5Y3E2.js} +2 -2
  284. package/dist/cli/chunks/{task-handler-IED3K6E4.js → task-handler-24S3WFVJ.js} +13 -7
  285. package/dist/cli/chunks/task-handlers-GUYW2EPJ.js +9 -0
  286. package/dist/cli/chunks/{test-GPKT3CKZ.js → test-XFSGQELD.js} +4 -4
  287. package/dist/cli/chunks/{test-scheduling-Z42XXZP6.js → test-scheduling-VYUQ4CDE.js} +3 -3
  288. package/dist/cli/chunks/{token-bootstrap-HMM3AHXM.js → token-bootstrap-EDK6FNQ3.js} +2 -2
  289. package/dist/cli/chunks/{token-usage-6Y2ERYIY.js → token-usage-VLQ6WO2L.js} +2 -2
  290. package/dist/cli/chunks/{transformers-MB63T2XO.js → transformers-TOFMWWNM.js} +2 -2
  291. package/dist/cli/chunks/{tree-sitter-wasm-parser-56GDQCMR.js → tree-sitter-wasm-parser-MI3NZKUD.js} +2 -2
  292. package/dist/cli/chunks/{types-J4J6QV3I.js → types-JTWLBAZJ.js} +2 -2
  293. package/dist/cli/chunks/unified-memory-6JWHV6EF.js +2 -0
  294. package/dist/cli/chunks/unified-memory-hnsw-4UANU6NU.js +2 -0
  295. package/dist/cli/chunks/unified-persistence-KGGNA46H.js +2 -0
  296. package/dist/cli/chunks/{upgrade-U4XU7LFM.js → upgrade-4ABM72T4.js} +2 -2
  297. package/dist/cli/chunks/{validate-B57HA4YK.js → validate-UDJCWKXI.js} +2 -2
  298. package/dist/cli/chunks/{validate-swarm-UPPA4M6T.js → validate-swarm-TODOUWNN.js} +2 -2
  299. package/dist/cli/chunks/visual-security-6VZNQLH7.js +2 -0
  300. package/dist/cli/chunks/{web-tree-sitter-GDZMUKOZ.js → web-tree-sitter-WBMAJPM5.js} +2 -2
  301. package/dist/cli/chunks/{windsurf-installer-VJRWCHXP.js → windsurf-installer-BTT53TUL.js} +2 -2
  302. package/dist/cli/chunks/witness-chain-AKKHWEWU.js +2 -0
  303. package/dist/cli/chunks/{witness-chain-LFASSMZK.js → witness-chain-TATPXQRK.js} +2 -2
  304. package/dist/cli/chunks/{witness-chain-repair-TPHN4DXN.js → witness-chain-repair-2HGJGE7O.js} +2 -2
  305. package/dist/cli/chunks/{witness-chain-verifier-Z23FVABW.js → witness-chain-verifier-FRY3LMGH.js} +2 -2
  306. package/dist/cli/chunks/{witness-key-manager-745MJ7WO.js → witness-key-manager-X7QHQQWL.js} +2 -2
  307. package/dist/cli/chunks/{workflow-T245QNQM.js → workflow-QMZPAWQW.js} +4 -4
  308. package/dist/cli/chunks/workflow-orchestrator-4GAW7HNZ.js +2 -0
  309. package/dist/cli/chunks/{wrappers-WCAYIQUX.js → wrappers-ZD5NBHYI.js} +2 -2
  310. package/dist/cli/commands/code.js +8 -0
  311. package/dist/cli/commands/daemon.js +8 -0
  312. package/dist/cli/commands/fleet.js +14 -9
  313. package/dist/cli/handlers/task-handler.js +21 -1
  314. package/dist/coordination/handlers/code-intelligence-handlers.js +14 -2
  315. package/dist/coordination/handlers/coverage-collection.js +9 -10
  316. package/dist/coordination/handlers/coverage-handlers.js +21 -3
  317. package/dist/coordination/handlers/coverage-runner.d.ts +2 -1
  318. package/dist/coordination/handlers/coverage-runner.js +9 -2
  319. package/dist/coordination/handlers/coverage-target.d.ts +13 -3
  320. package/dist/coordination/handlers/coverage-target.js +224 -7
  321. package/dist/coordination/handlers/handler-types.d.ts +2 -0
  322. package/dist/coordination/handlers/test-execution-handlers.js +32 -5
  323. package/dist/coordination/index.d.ts +2 -2
  324. package/dist/coordination/index.js +1 -1
  325. package/dist/coordination/protocols/learning-consolidation-archive.d.ts +39 -0
  326. package/dist/coordination/protocols/learning-consolidation-archive.js +57 -0
  327. package/dist/coordination/protocols/learning-consolidation.d.ts +38 -3
  328. package/dist/coordination/protocols/learning-consolidation.js +128 -50
  329. package/dist/coordination/queen-coordinator.d.ts +12 -1
  330. package/dist/coordination/queen-coordinator.js +24 -1
  331. package/dist/coordination/queen-event-handlers.js +2 -1
  332. package/dist/coordination/queen-lifecycle.js +9 -0
  333. package/dist/coordination/queen-task-management.js +113 -40
  334. package/dist/coordination/queen-types.d.ts +10 -0
  335. package/dist/coordination/queen-types.js +8 -0
  336. package/dist/coordination/task-dag/dag-algorithms.d.ts +33 -0
  337. package/dist/coordination/task-dag/dag-algorithms.js +162 -0
  338. package/dist/coordination/task-dag/dag-obligations.d.ts +21 -0
  339. package/dist/coordination/task-dag/dag-obligations.js +83 -0
  340. package/dist/coordination/task-dag/dag.d.ts +69 -19
  341. package/dist/coordination/task-dag/dag.js +215 -269
  342. package/dist/coordination/task-dag/index.d.ts +12 -4
  343. package/dist/coordination/task-dag/index.js +11 -3
  344. package/dist/coordination/task-dag/prerequisite-ledger.d.ts +84 -0
  345. package/dist/coordination/task-dag/prerequisite-ledger.js +252 -0
  346. package/dist/coordination/task-dag/scheduler.d.ts +19 -9
  347. package/dist/coordination/task-dag/scheduler.js +36 -12
  348. package/dist/coordination/task-dag/types.d.ts +160 -1
  349. package/dist/coordination/task-dag/types.js +2 -1
  350. package/dist/coordination/task-executability.d.ts +18 -0
  351. package/dist/coordination/task-executability.js +31 -0
  352. package/dist/coordination/task-executor.d.ts +1 -0
  353. package/dist/coordination/task-executor.js +5 -0
  354. package/dist/domains/code-intelligence/coordinator.js +35 -9
  355. package/dist/domains/code-intelligence/index-path-guard.d.ts +49 -0
  356. package/dist/domains/code-intelligence/index-path-guard.js +125 -0
  357. package/dist/domains/code-intelligence/interfaces.d.ts +12 -0
  358. package/dist/domains/code-intelligence/services/knowledge-graph.d.ts +6 -0
  359. package/dist/domains/code-intelligence/services/knowledge-graph.js +42 -5
  360. package/dist/domains/contract-testing/coordinator.js +3 -1
  361. package/dist/domains/defect-intelligence/services/defect-predictor.js +4 -2
  362. package/dist/domains/learning-optimization/active-patterns.d.ts +12 -12
  363. package/dist/domains/learning-optimization/active-patterns.js +15 -12
  364. package/dist/domains/learning-optimization/coordinator-helpers.js +2 -3
  365. package/dist/domains/learning-optimization/coordinator.d.ts +0 -3
  366. package/dist/domains/learning-optimization/coordinator.js +43 -102
  367. package/dist/domains/learning-optimization/index.d.ts +1 -1
  368. package/dist/domains/learning-optimization/interfaces.d.ts +56 -4
  369. package/dist/domains/learning-optimization/plugin.js +11 -1
  370. package/dist/domains/learning-optimization/reward-source.d.ts +37 -0
  371. package/dist/domains/learning-optimization/reward-source.js +58 -0
  372. package/dist/domains/learning-optimization/services/learning-coordinator.d.ts +4 -4
  373. package/dist/domains/learning-optimization/services/learning-coordinator.js +59 -23
  374. package/dist/domains/learning-optimization/services/metrics-optimizer.d.ts +14 -4
  375. package/dist/domains/learning-optimization/services/metrics-optimizer.js +129 -63
  376. package/dist/domains/learning-optimization/services/transfer-specialist.js +25 -15
  377. package/dist/domains/test-execution/interfaces.d.ts +16 -0
  378. package/dist/domains/test-execution/services/runner-test-cases.d.ts +21 -0
  379. package/dist/domains/test-execution/services/runner-test-cases.js +69 -0
  380. package/dist/domains/test-execution/services/test-executor.d.ts +5 -0
  381. package/dist/domains/test-execution/services/test-executor.js +24 -2
  382. package/dist/init/fleet-integration.js +2 -0
  383. package/dist/init/init-wizard-steps.js +2 -0
  384. package/dist/init/phases/06-code-intelligence.js +2 -0
  385. package/dist/init/phases/10-workers.js +2 -1
  386. package/dist/kernel/anti-drift-middleware.d.ts +44 -5
  387. package/dist/kernel/anti-drift-middleware.js +147 -11
  388. package/dist/kernel/interfaces.d.ts +5 -0
  389. package/dist/learning/dream/dream-insights-pruner.d.ts +18 -4
  390. package/dist/learning/dream/dream-insights-pruner.js +99 -11
  391. package/dist/learning/skill-validation-learner.d.ts +2 -0
  392. package/dist/learning/skill-validation-learner.js +29 -21
  393. package/dist/mcp/background-workers.js +8 -2
  394. package/dist/mcp/bundle.js +507 -483
  395. package/dist/mcp/handlers/domain-handler-configs.d.ts +14 -0
  396. package/dist/mcp/handlers/domain-handler-configs.js +68 -30
  397. package/dist/mcp/handlers/handler-factory.js +1 -0
  398. package/dist/mcp/handlers/task-handlers.js +37 -1
  399. package/dist/mcp/metrics/metrics-collector.d.ts +11 -9
  400. package/dist/mcp/metrics/metrics-collector.js +13 -26
  401. package/dist/mcp/protocol-server.js +8 -3
  402. package/dist/mcp/tools/learning-optimization/optimize.d.ts +34 -3
  403. package/dist/mcp/tools/learning-optimization/optimize.js +106 -70
  404. package/dist/memory/crdt/lww-register.js +11 -1
  405. package/dist/routing/calibration/ema-calibrator.js +3 -1
  406. package/dist/shared/base-domain-plugin.d.ts +4 -0
  407. package/dist/shared/base-domain-plugin.js +6 -0
  408. package/dist/shared/llm/cache.js +4 -1
  409. package/dist/shared/security/compliance-patterns.js +3 -1
  410. package/dist/shared/test-runner-process.d.ts +26 -0
  411. package/dist/shared/test-runner-process.js +91 -0
  412. package/dist/shared/types/index.d.ts +9 -0
  413. package/dist/shared/types/index.js +13 -0
  414. package/dist/shared/utils/namespaced-search.d.ts +42 -0
  415. package/dist/shared/utils/namespaced-search.js +53 -0
  416. package/dist/strange-loop/infra-healing/infra-action-executor.js +7 -3
  417. package/dist/strange-loop/infra-healing/infra-healing-orchestrator.js +10 -9
  418. package/dist/workers/daemon.d.ts +2 -0
  419. package/dist/workers/daemon.js +10 -5
  420. package/dist/workers/namespaced-keys.d.ts +4 -7
  421. package/dist/workers/namespaced-keys.js +4 -15
  422. package/dist/workers/quality-daemon/ci-monitor.js +9 -5
  423. package/dist/workers/worker-env.d.ts +16 -8
  424. package/dist/workers/worker-env.js +25 -12
  425. package/dist/workers/worker-manager.js +4 -0
  426. package/dist/workers/workers/learning-consolidation.d.ts +1 -1
  427. package/dist/workers/workers/learning-consolidation.js +11 -8
  428. package/package.json +1 -1
  429. package/dist/cli/chunks/adapter-FC4EY447.js +0 -2
  430. package/dist/cli/chunks/aqe-learning-engine-AUAL6UBL.js +0 -2
  431. package/dist/cli/chunks/base-2XML4WH7.js +0 -2
  432. package/dist/cli/chunks/browser-workflow-2IFEUAAK.js +0 -2
  433. package/dist/cli/chunks/chunk-6CKTLVYV.js +0 -2
  434. package/dist/cli/chunks/chunk-I4U7YCXG.js +0 -180
  435. package/dist/cli/chunks/chunk-LZWBUVCK.js +0 -5
  436. package/dist/cli/chunks/chunk-X6VYQVUM.js +0 -2
  437. package/dist/cli/chunks/chunk-YTYS2XSY.js +0 -2
  438. package/dist/cli/chunks/chunk-Z3LDUPLQ.js +0 -6
  439. package/dist/cli/chunks/chunk-ZWMFKZEQ.js +0 -3
  440. package/dist/cli/chunks/client-RFUSQRUZ.js +0 -2
  441. package/dist/cli/chunks/core-handlers-ZC7QB432.js +0 -2
  442. package/dist/cli/chunks/cross-domain-router-GRBK7YFZ.js +0 -2
  443. package/dist/cli/chunks/daemon-JER6HE2J.js +0 -12
  444. package/dist/cli/chunks/dream-VALD726W.js +0 -2
  445. package/dist/cli/chunks/file-discovery-VL73ASNI.js +0 -2
  446. package/dist/cli/chunks/fleet-GJ66QFXK.js +0 -43
  447. package/dist/cli/chunks/heartbeat-scheduler-FSX7A3ZA.js +0 -2
  448. package/dist/cli/chunks/hnsw-adapter-UX2QT6RL.js +0 -2
  449. package/dist/cli/chunks/hnsw-index-WRDDAMXH.js +0 -2
  450. package/dist/cli/chunks/hybrid-backend-O67NGIB5.js +0 -2
  451. package/dist/cli/chunks/impact-analyzer-6VXWWYWM.js +0 -2
  452. package/dist/cli/chunks/init-wizard-VH34J4TL.js +0 -2
  453. package/dist/cli/chunks/kernel-KJD24NO7.js +0 -2
  454. package/dist/cli/chunks/knowledge-graph-343O2HEZ.js +0 -2
  455. package/dist/cli/chunks/llm-router-service-2M4BT2AO.js +0 -2
  456. package/dist/cli/chunks/load-test-OTQ2JQ5F.js +0 -2
  457. package/dist/cli/chunks/memory-backend-4QSNRRV6.js +0 -2
  458. package/dist/cli/chunks/memory-handlers-YFFYRSM6.js +0 -2
  459. package/dist/cli/chunks/pattern-null-store-5USH5MNR.js +0 -2
  460. package/dist/cli/chunks/project-root-SRTA6TBL.js +0 -2
  461. package/dist/cli/chunks/protocol-executor-4WYPCNBS.js +0 -2
  462. package/dist/cli/chunks/qe-reasoning-bank-I4D6SFS4.js +0 -2
  463. package/dist/cli/chunks/queen-coordinator-24UMTZTE.js +0 -2
  464. package/dist/cli/chunks/router-AUD4GATI.js +0 -2
  465. package/dist/cli/chunks/routing-feedback-2FE6SIKQ.js +0 -2
  466. package/dist/cli/chunks/rvf-dual-writer-P5LEUF25.js +0 -2
  467. package/dist/cli/chunks/rvf-migration-adapter-ZCYD5YJS.js +0 -2
  468. package/dist/cli/chunks/rvf-native-adapter-QGV6BW2W.js +0 -2
  469. package/dist/cli/chunks/safe-db-Q6JUKG2A.js +0 -2
  470. package/dist/cli/chunks/schedule-44OSMGE5.js +0 -2
  471. package/dist/cli/chunks/scheduler-V3HO2QQT.js +0 -2
  472. package/dist/cli/chunks/sqlite-persistence-N5T7DWMR.js +0 -2
  473. package/dist/cli/chunks/task-handlers-FH6DNTHW.js +0 -9
  474. package/dist/cli/chunks/unified-memory-RQ3Q4CU3.js +0 -2
  475. package/dist/cli/chunks/unified-memory-hnsw-ZOP5FEYX.js +0 -2
  476. package/dist/cli/chunks/unified-persistence-72OCJJKK.js +0 -2
  477. package/dist/cli/chunks/visual-security-7F5UV23J.js +0 -2
  478. package/dist/cli/chunks/witness-chain-KZ57QUFE.js +0 -2
  479. package/dist/cli/chunks/workflow-orchestrator-ZNWEUYBN.js +0 -2
@@ -230,18 +230,25 @@ export function createFleetCommand(context, cleanupAndExit, ensureInitialized, r
230
230
  if (!['test', 'analyze', 'scan'].includes(operation)) {
231
231
  throw new Error(`Unsupported operation: ${operation}`);
232
232
  }
233
+ const operationTasks = {
234
+ test: ['test-generation', 'generate-tests'],
235
+ analyze: ['coverage-analysis', 'analyze-coverage'],
236
+ scan: ['security-compliance', 'scan-security'],
237
+ };
238
+ const [domain, taskType] = operationTasks[operation];
239
+ // #1081: refuse an operation whose task no domain plugin executes,
240
+ // instead of submitting work that can only fail at dispatch.
241
+ const executable = context.queen.validateTaskExecutable(taskType, [domain]);
242
+ if (!executable.success) {
243
+ console.error(chalk.red(`\n Operation '${operation}' cannot run: ${executable.error.message}`));
244
+ return cleanupAndExit(1);
245
+ }
233
246
  console.log(chalk.blue(`\n Fleet Operation: ${operation}\n`));
234
247
  const progress = new FleetProgressManager({
235
248
  title: `${operation.charAt(0).toUpperCase() + operation.slice(1)} Progress`,
236
249
  showEta: true,
237
250
  });
238
251
  progress.start(parallelCount);
239
- const domainMap = {
240
- test: 'test-generation',
241
- analyze: 'coverage-analysis',
242
- scan: 'security-compliance',
243
- };
244
- const domain = domainMap[operation];
245
252
  const agentOperations = Array.from({ length: parallelCount }, (_, i) => {
246
253
  const agentId = `${operation}-agent-${i + 1}`;
247
254
  return {
@@ -262,9 +269,7 @@ export function createFleetCommand(context, cleanupAndExit, ensureInitialized, r
262
269
  progress.updateAgent(op.id, 0, { status: 'running' });
263
270
  try {
264
271
  const taskResult = await context.queen.submitTask({
265
- type: operation === 'test' ? 'generate-tests' :
266
- operation === 'analyze' ? 'analyze-coverage' :
267
- 'scan-security',
272
+ type: taskType,
268
273
  priority: 'p1',
269
274
  targetDomains: [domain],
270
275
  payload: { target: options.target, workerId: op.id },
@@ -5,9 +5,10 @@
5
5
  */
6
6
  import chalk from 'chalk';
7
7
  import { getStatusColor, formatDuration, } from './interfaces.js';
8
- import { ALL_DOMAINS, isDomainName } from '../../shared/types/index.js';
8
+ import { ALL_DOMAINS, invalidPriorityMessage, isDomainName, isPriority } from '../../shared/types/index.js';
9
9
  import { createTimedSpinner } from '../utils/progress.js';
10
10
  import { parseJsonOption } from '../helpers/safe-json.js';
11
+ import { validateIndexTaskPayload } from '../../domains/code-intelligence/index-path-guard.js';
11
12
  import { writeOutput, toJSON } from '../utils/ci-output.js';
12
13
  // ============================================================================
13
14
  // Task Handler
@@ -75,6 +76,12 @@ export class TaskHandler {
75
76
  console.error(chalk.gray(` Valid domains: ${ALL_DOMAINS.join(', ')}\n`));
76
77
  return this.cleanupAndExit(1);
77
78
  }
79
+ // #1108: reject a priority outside the allowed set. Parity with MCP
80
+ // `task_submit`.
81
+ if (!isPriority(options.priority)) {
82
+ console.error(chalk.red(`\n ${invalidPriorityMessage(options.priority)}\n`));
83
+ return this.cleanupAndExit(1);
84
+ }
78
85
  // #734 C: a CLI-submitted task runs inside this process and is not
79
86
  // persisted, so a detached submit would report an ID for work that is
80
87
  // abandoned when the command exits. Refuse it rather than claim success.
@@ -93,6 +100,19 @@ export class TaskHandler {
93
100
  const taskType = type;
94
101
  const payload = parseJsonOption(options.payload, 'payload');
95
102
  const targetDomains = options.domain ? [options.domain] : [];
103
+ // #1075: reject a type that no domain plugin executes instead of waiting
104
+ // out the timeout on a task that can never finish.
105
+ const executable = context.queen.validateTaskExecutable(taskType, targetDomains);
106
+ if (!executable.success) {
107
+ console.error(chalk.red(`\n ${executable.error.message}\n`));
108
+ return this.cleanupAndExit(1);
109
+ }
110
+ // #1096: same boundary check as MCP task_submit.
111
+ const payloadError = validateIndexTaskPayload(taskType, payload);
112
+ if (payloadError) {
113
+ console.error(chalk.red(`\n ${payloadError.message}\n`));
114
+ return this.cleanupAndExit(1);
115
+ }
96
116
  console.log(chalk.blue(`\n Submitting task: ${taskType}\n`));
97
117
  // Use spinner for submit operation
98
118
  const spinner = options.progress !== false
@@ -10,6 +10,7 @@ import { ok, err } from '../../shared/types/index.js';
10
10
  import { toError } from '../../shared/error-utils.js';
11
11
  import { discoverSourceFiles } from './handler-utils.js';
12
12
  import { resolveProjectRootFromPaths } from '../../domains/code-intelligence/project-root-resolver.js';
13
+ import { nothingIndexedError } from '../../domains/code-intelligence/index-path-guard.js';
13
14
  import { createLogger } from '../../logging/logger-factory.js';
14
15
  const logger = createLogger('CodeIntelligenceHandlers');
15
16
  async function collectProjectMetricsForTarget(ctx, targetPath, indexedFiles) {
@@ -78,11 +79,21 @@ export function registerCodeIntelligenceHandlers(ctx) {
78
79
  return result;
79
80
  }
80
81
  const indexResult = result.value;
82
+ // #1096: files were found but none was indexed (e.g. the target is a
83
+ // symlink out of the project) - fail like the coordinator does.
84
+ if (indexResult.filesIndexed === 0) {
85
+ return err(nothingIndexedError(filesToIndex.length, indexResult.skipped ?? [], indexResult.errors));
86
+ }
87
+ const notIndexed = new Set([
88
+ ...(indexResult.skipped ?? []).map((s) => s.path),
89
+ ...indexResult.errors.map((e) => e.file),
90
+ ]);
91
+ const indexedFiles = filesToIndex.filter((file) => !notIndexed.has(file));
81
92
  // #999 MCP-CLI parity: `aqe code index` runs the coordinator's project
82
93
  // metric step (LOC, tests, tools); run the same step here, rooted at the
83
94
  // caller's target the way #997 resolves it. Best-effort: indexing has
84
95
  // already succeeded, so a metric failure only omits projectMetrics.
85
- const projectMetrics = await collectProjectMetricsForTarget(ctx, targetPath, filesToIndex);
96
+ const projectMetrics = await collectProjectMetricsForTarget(ctx, targetPath, indexedFiles);
86
97
  // Detect languages from files
87
98
  const detectedLanguages = new Set();
88
99
  const extToLang = {
@@ -95,7 +106,7 @@ export function registerCodeIntelligenceHandlers(ctx) {
95
106
  c: 'c', h: 'c', cpp: 'cpp', hpp: 'cpp', cc: 'cpp',
96
107
  scala: 'scala',
97
108
  };
98
- for (const file of filesToIndex) {
109
+ for (const file of indexedFiles) {
99
110
  const ext = path.extname(file).slice(1);
100
111
  const lang = extToLang[ext];
101
112
  if (lang)
@@ -116,6 +127,7 @@ export function registerCodeIntelligenceHandlers(ctx) {
116
127
  duration: indexResult.duration,
117
128
  errors: indexResult.errors,
118
129
  warnings: indexResult.warnings,
130
+ skipped: indexResult.skipped ?? [],
119
131
  ...(projectMetrics ? { projectMetrics } : {}),
120
132
  });
121
133
  }
@@ -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'));
@@ -7,8 +7,9 @@
7
7
  import { ok, err } from '../../shared/types/index.js';
8
8
  import { toError } from '../../shared/error-utils.js';
9
9
  import { buildEstimatedCoverage, collectRustCoverage, findCargoRoot, isCoverageExecDisabled, isRustProject, } from './coverage-collection.js';
10
- import { describeNoData, evaluateCoverageForTarget, isUnmeasured, resolveExistingCoverage, scopeCoverageToTarget, reconcileRecommendations, thresholdVerdict, } from './coverage-target.js';
10
+ import { describeNoData, evaluateCoverageForTarget, isUnmeasured, packageFilterForTarget, resolveExistingCoverage, scopeCoverageToTarget, reconcileRecommendations, thresholdVerdict, } from './coverage-target.js';
11
11
  import { randomUUID } from 'crypto';
12
+ import * as path from 'path';
12
13
  import { describeRunFailure, runJsCoverage, testRunStatus } from './coverage-runner.js';
13
14
  import { collectedMetrics } from '../../domains/coverage-analysis/collected-metrics.js';
14
15
  /**
@@ -80,7 +81,8 @@ async function collectCoverage(targetPath) {
80
81
  if (existing.status === 'evaluated') {
81
82
  return fromEvaluation(existing.evaluation, false, existing.projectRoot);
82
83
  }
83
- const { target, projectRoot } = existing;
84
+ const { target } = existing;
85
+ let projectRoot = existing.projectRoot;
84
86
  // #569 work item 1: delegate to real instrumentation where available.
85
87
  if (isRustProject(target)) {
86
88
  const rust = await collectRustCoverage(target);
@@ -109,7 +111,23 @@ async function collectCoverage(targetPath) {
109
111
  if (isCoverageExecDisabled()) {
110
112
  return { collected: buildEstimatedCoverage(target), ranTests: false, projectRoot };
111
113
  }
112
- const run = await runJsCoverage(projectRoot, { timeoutMs: coverageTimeoutMs() });
114
+ const pathFilter = packageFilterForTarget(target, projectRoot);
115
+ let run = await runJsCoverage(projectRoot, {
116
+ timeoutMs: coverageTimeoutMs(),
117
+ pathFilter,
118
+ });
119
+ // A workspace config may deliberately include only root-level tests. If it
120
+ // found no tests for this package, restore the nearest-package behavior. The
121
+ // same fallback permits isolated package installs with no runner at the root.
122
+ // Do not retry timeouts, crashes or nonempty failing suites: their failures
123
+ // must remain visible. Only the fallback run's actual report can be measured.
124
+ const rootRunnerMissing = run.missing && run.numTotalTests === null;
125
+ const rootHadNoTests = !run.missing && run.numTotalTests === 0
126
+ && testRunStatus(run) === 'passed' && (run.exitCode === 0 || run.exitCode === 1);
127
+ if (pathFilter && !run.timedOut && (rootRunnerMissing || rootHadNoTests)) {
128
+ projectRoot = path.resolve(projectRoot, pathFilter);
129
+ run = await runJsCoverage(projectRoot, { timeoutMs: coverageTimeoutMs() });
130
+ }
113
131
  // An EMPTY report (`{}`) from a run that reported its tests means "the run
114
132
  // instrumented nothing under the target" → unmeasured, never an estimate
115
133
  // (#995 review BL2). An empty report from a run that crashed before
@@ -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
  // ============================================================================
@@ -43,6 +43,8 @@ export interface TaskHandlerContext {
43
43
  */
44
44
  getCodeIntelligenceCoordinator?(): Promise<ProjectMetricsCollector | undefined>;
45
45
  getQualityAnalyzer(): QualityAnalyzerService;
46
+ /** The domain execution owner also records run evidence and lifecycle events. */
47
+ getTestExecutionAPI?(): Promise<import('../../domains/test-execution/interfaces').ITestExecutionAPI | undefined>;
46
48
  /** Executor configuration */
47
49
  readonly config: {
48
50
  defaultLanguage: string;
@@ -11,6 +11,8 @@ import { toError } from '../../shared/error-utils.js';
11
11
  import { getTestRunnerExecutionError, TestRunnerExecutionError } from '../../shared/test-runner-verdict.js';
12
12
  import { createVitestJsonReport } from '../../shared/vitest-json-report.js';
13
13
  import { jestExactPathPattern, runnerFilePath } from '../../shared/test-runner-args.js';
14
+ import { testCasesFromRunnerReport } from '../../domains/test-execution/services/runner-test-cases.js';
15
+ import { runTestRunnerProcess } from '../../shared/test-runner-process.js';
14
16
  function escapeRegExp(s) {
15
17
  return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
16
18
  }
@@ -182,8 +184,28 @@ export function registerTestExecutionHandlers(ctx) {
182
184
  if (testFiles.some(file => !safePathPattern.test(file))) {
183
185
  return err(new TestRunnerExecutionError('Some test file paths contain invalid characters and were rejected. Provide concrete paths; expand glob patterns before calling.'));
184
186
  }
185
- const { spawnSync } = await import('child_process');
186
- const options = { cwd: process.cwd(), timeout: 120000, encoding: 'utf-8' };
187
+ // A caller-owned MCP task skips the Queen's plugin dispatch. Run through
188
+ // that same domain API here: it owns persistence, measured quality evidence
189
+ // and TestRunStarted/Completed events as well as the runner itself.
190
+ if (task.executionOwner === 'caller') {
191
+ const api = await ctx.getTestExecutionAPI?.();
192
+ if (!api)
193
+ return err(new TestRunnerExecutionError('Test-execution domain is unavailable.'));
194
+ const result = await api.runTests({
195
+ testFiles,
196
+ parallel: payload.parallel,
197
+ timeout: payload.timeout,
198
+ workers: payload.parallelism,
199
+ // The domain owns requested retries; Queen dispatch must not replay it.
200
+ retryCount: payload.retryCount ?? 0,
201
+ });
202
+ if (!result.success)
203
+ return result;
204
+ return ok({ ...result.value, coverage: result.value.coverage?.line ?? null });
205
+ }
206
+ // #1074: run the runner asynchronously so the MCP server keeps serving
207
+ // other requests (task_status, task_cancel, ...) during the test run.
208
+ const options = { cwd: process.cwd(), timeout: 120000 };
187
209
  let runner = 'vitest';
188
210
  // Vitest 5 writes the JSON report to a file rather than stdout; an explicit
189
211
  // --outputFile gives Vitest 4 and 5 the same contract.
@@ -192,7 +214,7 @@ export function registerTestExecutionHandlers(ctx) {
192
214
  let output;
193
215
  try {
194
216
  // #909: absolute paths cannot be read as flags (e.g. a "--watch" entry).
195
- execution = spawnSync('npx', ['vitest', 'run', ...testFiles.map(file => runnerFilePath(file, options.cwd)), '--reporter=json', ...report.args], options);
217
+ execution = await runTestRunnerProcess('npx', ['vitest', 'run', ...testFiles.map(file => runnerFilePath(file, options.cwd)), '--reporter=json', ...report.args], options);
196
218
  output = execution.error || execution.signal
197
219
  ? ''
198
220
  : report.read(execution.stdout || '') ?? '';
@@ -203,7 +225,7 @@ export function registerTestExecutionHandlers(ctx) {
203
225
  // Preserve the existing Jest fallback when Vitest cannot produce a report.
204
226
  if (!output.includes('{') && execution.status !== 0 && !execution.error && !execution.signal) {
205
227
  runner = 'jest';
206
- execution = spawnSync('npx', ['jest', ...testFiles.map(file => jestExactPathPattern(file, options.cwd)), '--json'], options);
228
+ execution = await runTestRunnerProcess('npx', ['jest', ...testFiles.map(file => jestExactPathPattern(file, options.cwd)), '--json'], options);
207
229
  output = execution.stdout || '';
208
230
  }
209
231
  const diagnostics = [execution.error?.message, execution.signal && `Terminated by ${execution.signal}`, execution.stderr, output].filter(Boolean).join('\n');
@@ -225,7 +247,12 @@ export function registerTestExecutionHandlers(ctx) {
225
247
  // #1027 N5/NB5: this handler runs the tests without --coverage, so it has no
226
248
  // coverage figure to return (null, never 0%). For test_execute_parallel the
227
249
  // measured coverage + testsPassing are recorded by TestExecutorService.
228
- return ok({ total, passed, failed, skipped, duration: 0, coverage: null, failedTests: [] });
250
+ // #1110: per-test entries come from the runner report itself, or are left out.
251
+ const testCases = testCasesFromRunnerReport(json, testFiles.join(', '));
252
+ return ok({
253
+ total, passed, failed, skipped, duration: 0, coverage: null, failedTests: [],
254
+ ...(testCases && testCases.length === total ? { testCases } : {}),
255
+ });
229
256
  }
230
257
  }
231
258
  }