agentic-qe 3.15.9 → 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 (568) hide show
  1. package/.claude/skills/skills-manifest.json +1 -1
  2. package/CHANGELOG.md +251 -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/audit/witness-chain.d.ts +1 -1
  10. package/dist/cli/bundle.js +6 -6
  11. package/dist/cli/chunks/adapter-TR5SLAZC.js +2 -0
  12. package/dist/cli/chunks/agent-booster-wasm-H7ANGXW4.js +2 -0
  13. package/dist/cli/chunks/{agent-handler-RIYHTHVZ.js → agent-handler-SVXSHEET.js} +2 -2
  14. package/dist/cli/chunks/{agent-memory-branch-WSUCUHOO.js → agent-memory-branch-WKQH36XL.js} +2 -2
  15. package/dist/cli/chunks/aqe-learning-engine-DXWKCHY2.js +2 -0
  16. package/dist/cli/chunks/{arena-KRIBMIXX.js → arena-EKOOFVST.js} +2 -2
  17. package/dist/cli/chunks/{arena-YAJZX6MC.js → arena-OPS36NFZ.js} +4 -4
  18. package/dist/cli/chunks/{audit-7ZNOXWP3.js → audit-AO5NDZRI.js} +3 -3
  19. package/dist/cli/chunks/base-GTB6POYE.js +2 -0
  20. package/dist/cli/chunks/{better-sqlite3-ZQAT4I6H.js → better-sqlite3-TFLVEMMY.js} +2 -2
  21. package/dist/cli/chunks/{brain-handler-452WCPZC.js → brain-handler-ADBBJPYW.js} +3 -3
  22. package/dist/cli/chunks/{branch-enumerator-IJFXJRPN.js → branch-enumerator-HGHUYYL5.js} +2 -2
  23. package/dist/cli/chunks/browser-5LU6P4SZ.js +4 -0
  24. package/dist/cli/chunks/browser-workflow-MSBOLYUY.js +2 -0
  25. package/dist/cli/chunks/{chunk-UOJBR4J3.js → chunk-2SXBBUM6.js} +2 -2
  26. package/dist/cli/chunks/{chunk-7JKB3Q7O.js → chunk-2T7RRL6G.js} +1 -1
  27. package/dist/cli/chunks/{chunk-HCYQHWI2.js → chunk-2XGVTYVX.js} +2 -2
  28. package/dist/cli/chunks/{chunk-3LYU7BLY.js → chunk-2ZI5FKSF.js} +2 -2
  29. package/dist/cli/chunks/chunk-2ZMF4NCF.js +4 -0
  30. package/dist/cli/chunks/{chunk-F3PQZX44.js → chunk-37OWRCUN.js} +1 -1
  31. package/dist/cli/chunks/{chunk-YRBBBUJX.js → chunk-3P34JFQH.js} +4 -4
  32. package/dist/cli/chunks/{chunk-ICP2ORGI.js → chunk-3Y7SPD72.js} +2 -2
  33. package/dist/cli/chunks/{chunk-WGDR2KIR.js → chunk-4G63WT4F.js} +2 -2
  34. package/dist/cli/chunks/chunk-4SJYIX54.js +3 -0
  35. package/dist/cli/chunks/chunk-5E6GHSTY.js +3 -0
  36. package/dist/cli/chunks/{chunk-OXTFSIGN.js → chunk-5LPYV3TK.js} +1 -1
  37. package/dist/cli/chunks/{chunk-XWIUFYM3.js → chunk-62OAY5KJ.js} +1 -1
  38. package/dist/cli/chunks/{chunk-VCMINU7K.js → chunk-6C3II5OM.js} +2 -2
  39. package/dist/cli/chunks/{chunk-EFBLP43U.js → chunk-6GP6W46M.js} +2 -2
  40. package/dist/cli/chunks/{chunk-4JCY45KV.js → chunk-6KIL6CMD.js} +2 -2
  41. package/dist/cli/chunks/{chunk-CTZJUV5I.js → chunk-6MVVSSID.js} +1 -1
  42. package/dist/cli/chunks/{chunk-JEP4ULR6.js → chunk-6P7424AO.js} +2 -2
  43. package/dist/cli/chunks/{chunk-SVHUYVUR.js → chunk-6PX4OXQO.js} +2 -2
  44. package/dist/cli/chunks/{chunk-LEAKYZ37.js → chunk-6S3WJGUV.js} +2 -2
  45. package/dist/cli/chunks/{chunk-7X2Y727E.js → chunk-6TB6YOCZ.js} +1 -1
  46. package/dist/cli/chunks/{chunk-VU2EL424.js → chunk-6X5DHU6Q.js} +1 -1
  47. package/dist/cli/chunks/{chunk-DDPPSSHW.js → chunk-6XCMKIZN.js} +1 -1
  48. package/dist/cli/chunks/{chunk-ZANDSVCK.js → chunk-7LFZ4CHM.js} +2 -2
  49. package/dist/cli/chunks/{chunk-UYLYMWV5.js → chunk-7OZVZIBE.js} +2 -2
  50. package/dist/cli/chunks/{chunk-32UTLDNY.js → chunk-7PJIR4ST.js} +2 -2
  51. package/dist/cli/chunks/{chunk-DINZR5CF.js → chunk-7TB6FK4B.js} +1 -1
  52. package/dist/cli/chunks/{chunk-KVBEGOJE.js → chunk-7ZCDZHDB.js} +2 -2
  53. package/dist/cli/chunks/{chunk-55HRSNGN.js → chunk-A55QKKT2.js} +2 -2
  54. package/dist/cli/chunks/{chunk-LCJTEUDC.js → chunk-ABFFWZPC.js} +428 -433
  55. package/dist/cli/chunks/{chunk-PVIA2FPD.js → chunk-ACWFKES2.js} +2 -2
  56. package/dist/cli/chunks/{chunk-2BA45H64.js → chunk-AH3ZD3NJ.js} +2 -2
  57. package/dist/cli/chunks/{chunk-OG2UI6A3.js → chunk-AI4VYSFS.js} +2 -2
  58. package/dist/cli/chunks/chunk-APSRPR4W.js +2 -0
  59. package/dist/cli/chunks/chunk-ATHWDAXB.js +3 -0
  60. package/dist/cli/chunks/{chunk-TSYQDRNK.js → chunk-B6LTH6YV.js} +2 -2
  61. package/dist/cli/chunks/chunk-BQUAE3CP.js +3 -0
  62. package/dist/cli/chunks/{chunk-OCESWNAZ.js → chunk-C522H7XR.js} +54 -33
  63. package/dist/cli/chunks/{chunk-TUYJ53V4.js → chunk-CESIR27V.js} +2 -2
  64. package/dist/cli/chunks/{chunk-PBZI2ZPV.js → chunk-CFBEBXLO.js} +3 -3
  65. package/dist/cli/chunks/{chunk-FJ4VTLLK.js → chunk-CMBLM26R.js} +2 -2
  66. package/dist/cli/chunks/{chunk-YZYDTABJ.js → chunk-CZ2IF6MC.js} +1 -1
  67. package/dist/cli/chunks/{chunk-GKPQ2GRR.js → chunk-CZGOSJQ4.js} +2 -2
  68. package/dist/cli/chunks/{chunk-FL3OYGCS.js → chunk-D6DA2KFD.js} +2 -2
  69. package/dist/cli/chunks/{chunk-37BIGMJI.js → chunk-DBMNJSBV.js} +1 -1
  70. package/dist/cli/chunks/{chunk-BHKXMIWX.js → chunk-DE4YJQJF.js} +2 -2
  71. package/dist/cli/chunks/{chunk-3CJCROMW.js → chunk-DEF34AFL.js} +2 -2
  72. package/dist/cli/chunks/chunk-DKAC3E3B.js +3 -0
  73. package/dist/cli/chunks/{chunk-AOFO4N32.js → chunk-DMFTELBS.js} +2 -2
  74. package/dist/cli/chunks/{chunk-KLGYIEJK.js → chunk-DNRWGATA.js} +10 -10
  75. package/dist/cli/chunks/{chunk-JWGRWMZP.js → chunk-DT7SIJOA.js} +2 -2
  76. package/dist/cli/chunks/{chunk-6PXA2BQJ.js → chunk-DURHK377.js} +67 -67
  77. package/dist/cli/chunks/{chunk-HAROIAJE.js → chunk-EAU5KDFO.js} +1 -1
  78. package/dist/cli/chunks/{chunk-L42JPFCC.js → chunk-EDLFX4ZB.js} +2 -2
  79. package/dist/cli/chunks/{chunk-6OOYIO3W.js → chunk-EN2QSKFF.js} +2 -2
  80. package/dist/cli/chunks/{chunk-UNUTC6TX.js → chunk-ERQKYIP7.js} +2 -2
  81. package/dist/cli/chunks/{chunk-KFUUIAR4.js → chunk-ESUO3GTJ.js} +2 -2
  82. package/dist/cli/chunks/{chunk-4V27J6YN.js → chunk-EWFECZ2U.js} +2 -2
  83. package/dist/cli/chunks/{chunk-4W4DYVSH.js → chunk-FAUCT5KR.js} +3 -3
  84. package/dist/cli/chunks/{chunk-IFEIY3NQ.js → chunk-FB6TI3BH.js} +2 -2
  85. package/dist/cli/chunks/{chunk-2TDIS6YK.js → chunk-FBXTQNRH.js} +2 -2
  86. package/dist/cli/chunks/{chunk-XOLDMK23.js → chunk-FESZBPUB.js} +2 -2
  87. package/dist/cli/chunks/chunk-FFTPAWM6.js +141 -0
  88. package/dist/cli/chunks/{chunk-A6YIH4C4.js → chunk-FKL3R5JQ.js} +2 -2
  89. package/dist/cli/chunks/{chunk-N5PDFGCQ.js → chunk-FPUDRSFJ.js} +2 -2
  90. package/dist/cli/chunks/{chunk-7QGYJ5OY.js → chunk-FZOWULMH.js} +1 -1
  91. package/dist/cli/chunks/{chunk-AVB5QY2Q.js → chunk-G3CZCUPM.js} +2 -2
  92. package/dist/cli/chunks/{chunk-FV3NHVC7.js → chunk-G5I6KGMW.js} +3 -3
  93. package/dist/cli/chunks/{chunk-N3KEY4XJ.js → chunk-GHBNRMSJ.js} +2 -2
  94. package/dist/cli/chunks/{chunk-2YH62JCN.js → chunk-GJHWY3ZX.js} +2 -2
  95. package/dist/cli/chunks/{chunk-ZXBCCO2H.js → chunk-GJMLK5UT.js} +2 -2
  96. package/dist/cli/chunks/{chunk-NHZIWIQZ.js → chunk-GRCIBCJ2.js} +2 -2
  97. package/dist/cli/chunks/{chunk-J3DTDJDT.js → chunk-GWZZ7DAO.js} +2 -2
  98. package/dist/cli/chunks/{chunk-4SUOVLJ6.js → chunk-GZLZCZ42.js} +2 -2
  99. package/dist/cli/chunks/{chunk-MZS32SYS.js → chunk-H2PYU7MN.js} +1 -1
  100. package/dist/cli/chunks/{chunk-ABFDB4X3.js → chunk-H32EPIR2.js} +1 -1
  101. package/dist/cli/chunks/{chunk-KIXYKUCI.js → chunk-H74Q7TJN.js} +1 -1
  102. package/dist/cli/chunks/chunk-HOZUDE4C.js +2 -0
  103. package/dist/cli/chunks/{chunk-PMCRCEW5.js → chunk-I33O4BRQ.js} +2 -2
  104. package/dist/cli/chunks/{chunk-N3NP6PTT.js → chunk-IKISCIGH.js} +2 -2
  105. package/dist/cli/chunks/{chunk-Q3JVJRVJ.js → chunk-IPJ7Q3AJ.js} +1 -1
  106. package/dist/cli/chunks/{chunk-WRRCQ2UE.js → chunk-IU2IV4NE.js} +1 -1
  107. package/dist/cli/chunks/{chunk-QQ5SZH4D.js → chunk-JHIY4VCC.js} +2 -2
  108. package/dist/cli/chunks/{chunk-W32YU3VI.js → chunk-KG336OV3.js} +2 -2
  109. package/dist/cli/chunks/{chunk-W5VJRDDG.js → chunk-KI73QCR5.js} +2 -2
  110. package/dist/cli/chunks/{chunk-HGTWAZWU.js → chunk-KNQ2ERFX.js} +2 -2
  111. package/dist/cli/chunks/{chunk-SNBYYO6F.js → chunk-KOBVYY6H.js} +2 -2
  112. package/dist/cli/chunks/{chunk-VQHVHVSF.js → chunk-KSIWGGJI.js} +8 -8
  113. package/dist/cli/chunks/{chunk-REUFWGMA.js → chunk-LMS3Y7JD.js} +2 -2
  114. package/dist/cli/chunks/{chunk-LMU5DUDK.js → chunk-LQEURY7C.js} +1 -1
  115. package/dist/cli/chunks/{chunk-AJ4YDSOI.js → chunk-LRZY4KS2.js} +2 -2
  116. package/dist/cli/chunks/{chunk-KIKWJM6J.js → chunk-M2QV7PT7.js} +2 -2
  117. package/dist/cli/chunks/{chunk-TNMQVG4A.js → chunk-MA7JIQ6U.js} +2 -2
  118. package/dist/cli/chunks/{chunk-I6S35FRO.js → chunk-MG27QY4D.js} +2 -2
  119. package/dist/cli/chunks/chunk-MNN5J4GU.js +12 -0
  120. package/dist/cli/chunks/chunk-N6PIIK6G.js +3 -0
  121. package/dist/cli/chunks/chunk-NAXGWDVM.js +12 -0
  122. package/dist/cli/chunks/{chunk-XOVNZT7F.js → chunk-NGKNYIQZ.js} +1 -1
  123. package/dist/cli/chunks/chunk-NNFZUTDH.js +2 -0
  124. package/dist/cli/chunks/{chunk-ZVSLCEVC.js → chunk-NPPHWFA2.js} +3 -3
  125. package/dist/cli/chunks/{chunk-JNNZK7KH.js → chunk-NSHU347M.js} +1 -1
  126. package/dist/cli/chunks/{chunk-PX2B5TS2.js → chunk-NVYIZCSR.js} +2 -2
  127. package/dist/cli/chunks/{chunk-5NS3USRW.js → chunk-NW5JUCCG.js} +1 -1
  128. package/dist/cli/chunks/{chunk-KR3M44CF.js → chunk-NZYLNXT6.js} +3 -3
  129. package/dist/cli/chunks/{chunk-5D2I7JUP.js → chunk-OBAREPDC.js} +2 -2
  130. package/dist/cli/chunks/{chunk-F4JYIRW2.js → chunk-ODJNUMV3.js} +2 -2
  131. package/dist/cli/chunks/{chunk-K5DJXMAA.js → chunk-OEKP73MC.js} +2 -2
  132. package/dist/cli/chunks/{chunk-2URBI52G.js → chunk-OPFGRS5S.js} +2 -2
  133. package/dist/cli/chunks/{chunk-HZ5NC6U5.js → chunk-OY2AHLSF.js} +1 -1
  134. package/dist/cli/chunks/{chunk-GII5WVAK.js → chunk-OY3NJNP2.js} +1 -1
  135. package/dist/cli/chunks/{chunk-P73W2K7T.js → chunk-PCEW6Q2C.js} +1 -1
  136. package/dist/cli/chunks/{chunk-7QTB5VJZ.js → chunk-PFG6VQ5Z.js} +2 -2
  137. package/dist/cli/chunks/{chunk-7KII4CQG.js → chunk-PGYMKGOE.js} +2 -2
  138. package/dist/cli/chunks/{chunk-BXO536GT.js → chunk-PPSAMXYN.js} +3 -3
  139. package/dist/cli/chunks/chunk-RK73HB2F.js +2 -0
  140. package/dist/cli/chunks/{chunk-ZBDRLF43.js → chunk-RPHY2DU6.js} +2 -2
  141. package/dist/cli/chunks/{chunk-XDBD4GXO.js → chunk-RWWOHCMG.js} +25 -20
  142. package/dist/cli/chunks/{chunk-J5KNRVXR.js → chunk-S75EYIJG.js} +1 -1
  143. package/dist/cli/chunks/{chunk-ETG7O5E5.js → chunk-SKQUUE4F.js} +5 -5
  144. package/dist/cli/chunks/chunk-SO45NA4D.js +180 -0
  145. package/dist/cli/chunks/{chunk-47V7FQGX.js → chunk-SU5H66SD.js} +2 -2
  146. package/dist/cli/chunks/{chunk-NTAD5UX4.js → chunk-SY2IB442.js} +2 -2
  147. package/dist/cli/chunks/{chunk-D6XVGFTI.js → chunk-TBLI254A.js} +2 -2
  148. package/dist/cli/chunks/{chunk-47TYABPD.js → chunk-TNMBRDCA.js} +3 -3
  149. package/dist/cli/chunks/{chunk-P2CXVNKK.js → chunk-TYFZXDGZ.js} +2 -2
  150. package/dist/cli/chunks/{chunk-2XITOPYV.js → chunk-U4OICXV2.js} +2 -2
  151. package/dist/cli/chunks/{chunk-JAV5WPSY.js → chunk-U53ZB4IX.js} +2 -2
  152. package/dist/cli/chunks/chunk-UARKIZAS.js +2 -0
  153. package/dist/cli/chunks/{chunk-2HL3UM5P.js → chunk-UCJMVXO4.js} +2 -2
  154. package/dist/cli/chunks/{chunk-HWK5L7IJ.js → chunk-UHTTW3IT.js} +2 -2
  155. package/dist/cli/chunks/{chunk-OXZLKP6C.js → chunk-V2M2XCR5.js} +1 -1
  156. package/dist/cli/chunks/{chunk-YZGSJG34.js → chunk-V2RSNVMW.js} +1 -1
  157. package/dist/cli/chunks/{chunk-5JWGCIQW.js → chunk-V6JBOIMX.js} +1 -1
  158. package/dist/cli/chunks/{chunk-JUVHZG7I.js → chunk-VFKF2XO7.js} +1 -1
  159. package/dist/cli/chunks/{chunk-XQ3DDY7X.js → chunk-VFSYMOAL.js} +2 -2
  160. package/dist/cli/chunks/{chunk-V5PXQSFS.js → chunk-VJQYDYAJ.js} +2 -2
  161. package/dist/cli/chunks/{chunk-A4RU67VX.js → chunk-VKRTTFB6.js} +2 -2
  162. package/dist/cli/chunks/{chunk-H3KBIWTO.js → chunk-VWNFAW2M.js} +2 -2
  163. package/dist/cli/chunks/{chunk-72AMFDC7.js → chunk-WBM6N6IM.js} +1 -1
  164. package/dist/cli/chunks/{chunk-XUIA5KMS.js → chunk-WDQ7IEZY.js} +2 -2
  165. package/dist/cli/chunks/{chunk-FLASM2XB.js → chunk-WDVRE6GN.js} +2 -2
  166. package/dist/cli/chunks/{chunk-FV7VAG74.js → chunk-WQ4PYWSW.js} +1 -1
  167. package/dist/cli/chunks/{chunk-DGTLJNJH.js → chunk-WSF24I3D.js} +2 -2
  168. package/dist/cli/chunks/{chunk-6YL6JOQB.js → chunk-XBVUVFJK.js} +2 -2
  169. package/dist/cli/chunks/{chunk-VRGCKBF7.js → chunk-XEB3NLJR.js} +2 -2
  170. package/dist/cli/chunks/{chunk-XYCKHYBM.js → chunk-XFVTGAAJ.js} +2 -2
  171. package/dist/cli/chunks/{chunk-2I2UPJS7.js → chunk-XLZYRTNO.js} +2 -2
  172. package/dist/cli/chunks/{chunk-AR2E4B7K.js → chunk-XUZDBQ5X.js} +5 -5
  173. package/dist/cli/chunks/{chunk-AQTVVLNP.js → chunk-Y76IAYQD.js} +1 -1
  174. package/dist/cli/chunks/{chunk-UOWHE77F.js → chunk-YAKGBHO4.js} +2 -2
  175. package/dist/cli/chunks/{chunk-JK2ME6IT.js → chunk-YBSBABOS.js} +2 -2
  176. package/dist/cli/chunks/{chunk-NDKLQW6N.js → chunk-YCGP5VFP.js} +2 -2
  177. package/dist/cli/chunks/{chunk-GBUIG3FS.js → chunk-YDAQK5UF.js} +1 -1
  178. package/dist/cli/chunks/{chunk-HTZJSQ3C.js → chunk-YK3BVZY6.js} +2 -2
  179. package/dist/cli/chunks/{chunk-GCWSX2NY.js → chunk-YK7JN5N7.js} +4 -4
  180. package/dist/cli/chunks/{chunk-C6RTMTEH.js → chunk-YKMU4LBV.js} +1 -1
  181. package/dist/cli/chunks/{chunk-JP4P3P3D.js → chunk-YYTGXD3R.js} +2 -2
  182. package/dist/cli/chunks/{chunk-763SUL4B.js → chunk-Z2O2YJAF.js} +2 -2
  183. package/dist/cli/chunks/{chunk-QTVWUQTB.js → chunk-Z7IYW5U7.js} +1 -1
  184. package/dist/cli/chunks/{chunk-XZJ2O3VC.js → chunk-ZG5666GJ.js} +1 -1
  185. package/dist/cli/chunks/{chunk-6EPHNJTL.js → chunk-ZXPY654C.js} +1 -1
  186. package/dist/cli/chunks/{ci-7SGRCFPS.js → ci-MSKMVH5X.js} +2 -2
  187. package/dist/cli/chunks/{ci-config-MX3URPZA.js → ci-config-7ODMNAUM.js} +2 -2
  188. package/dist/cli/chunks/{ci-output-M47NJY6D.js → ci-output-FXZ7ZZW3.js} +2 -2
  189. package/dist/cli/chunks/{circuit-breaker-5GAK45SW.js → circuit-breaker-4VOUEPOX.js} +2 -2
  190. package/dist/cli/chunks/{claude-flow-setup-YXYSRH4Y.js → claude-flow-setup-7D4SGLM4.js} +2 -2
  191. package/dist/cli/chunks/client-POSVREVS.js +2 -0
  192. package/dist/cli/chunks/{cline-installer-DLJ5QD5N.js → cline-installer-WRRT7BGQ.js} +2 -2
  193. package/dist/cli/chunks/{code-ONKLMVQ2.js → code-ZDJRIL3S.js} +3 -3
  194. package/dist/cli/chunks/{code-index-extractor-2232LGZN.js → code-index-extractor-4S4SHM56.js} +2 -2
  195. package/dist/cli/chunks/{codex-installer-UOWLYCMH.js → codex-installer-YTRHNDWR.js} +2 -2
  196. package/dist/cli/chunks/{completions-MHX7GCC7.js → completions-6N64JUXJ.js} +2 -2
  197. package/dist/cli/chunks/{complexity-analyzer-43ZUJKZU.js → complexity-analyzer-I4A26VCJ.js} +2 -2
  198. package/dist/cli/chunks/{continuedev-installer-6Q5JR4FF.js → continuedev-installer-IIDR66LB.js} +2 -2
  199. package/dist/cli/chunks/{copilot-installer-CZUMVHSI.js → copilot-installer-SVVFY3S2.js} +2 -2
  200. package/dist/cli/chunks/core-handlers-V243GY7X.js +2 -0
  201. package/dist/cli/chunks/{cost-tracker-VS5ZW3XN.js → cost-tracker-VGFS6IBX.js} +2 -2
  202. package/dist/cli/chunks/{coverage-VWKTWZ6D.js → coverage-B7MCGNTE.js} +3 -3
  203. package/dist/cli/chunks/cross-domain-router-N3AIEM3B.js +2 -0
  204. package/dist/cli/chunks/{cursor-installer-YIFEMORH.js → cursor-installer-UPETT57E.js} +2 -2
  205. package/dist/cli/chunks/daemon-7BDJHEIJ.js +18 -0
  206. package/dist/cli/chunks/{daemon-SHWJSJW5.js → daemon-CQFNZLXU.js} +3 -3
  207. package/dist/cli/chunks/{dag-attention-scheduler-TCC2WM46.js → dag-attention-scheduler-PJVABHON.js} +2 -2
  208. package/dist/cli/chunks/{detect-IGTWSQMA.js → detect-56SKAGWX.js} +2 -2
  209. package/dist/cli/chunks/{dist-node-TCOTJVQX.js → dist-node-UYTYUMLN.js} +2 -2
  210. package/dist/cli/chunks/{domain-handler-55ZVYODR.js → domain-handler-YOYLBYJE.js} +2 -2
  211. package/dist/cli/chunks/{domain-plugins-GJRWOHQP.js → domain-plugins-7TARX2XF.js} +2 -2
  212. package/dist/cli/chunks/domain-transfer-AKVSBD6E.js +2 -0
  213. package/dist/cli/chunks/dream-UA7MKOPQ.js +2 -0
  214. package/dist/cli/chunks/{embed-and-insert-pattern-XAMNIKQL.js → embed-and-insert-pattern-IS6HSR66.js} +2 -2
  215. package/dist/cli/chunks/{eval-GO22R4OZ.js → eval-GNB574IM.js} +2 -2
  216. package/dist/cli/chunks/{experience-capture-middleware-F2BRMJ3Y.js → experience-capture-middleware-RCAOCKM7.js} +3 -3
  217. package/dist/cli/chunks/{fast-paths-6RGPYALD.js → fast-paths-KTZ5SF54.js} +2 -2
  218. package/dist/cli/chunks/{feature-flags-ZGS3KLPH.js → feature-flags-ITX5LQ57.js} +2 -2
  219. package/dist/cli/chunks/{feature-flags-MIWQIOHU.js → feature-flags-KFHSR5YF.js} +2 -2
  220. package/dist/cli/chunks/file-discovery-YCMNKZAK.js +2 -0
  221. package/dist/cli/chunks/fleet-2Y3ZE6CE.js +46 -0
  222. package/dist/cli/chunks/{gnn-wrapper-ALBJVW6T.js → gnn-wrapper-RLFW3GSX.js} +2 -2
  223. package/dist/cli/chunks/{heartbeat-handler-ZMM53NDY.js → heartbeat-handler-EM2URCYZ.js} +4 -4
  224. package/dist/cli/chunks/heartbeat-scheduler-QH5V6G2P.js +2 -0
  225. package/dist/cli/chunks/hnsw-adapter-OJNFAGJS.js +2 -0
  226. package/dist/cli/chunks/hnsw-index-DFUNARVD.js +2 -0
  227. package/dist/cli/chunks/{hnsw-legacy-bridge-RYUJPA7B.js → hnsw-legacy-bridge-JMHEOIBH.js} +2 -2
  228. package/dist/cli/chunks/{hnswlib-node-XM6XF3YV.js → hnswlib-node-CBP73QHY.js} +2 -2
  229. package/dist/cli/chunks/{hooks-X62O7TJO.js → hooks-IP7XE34Z.js} +34 -34
  230. package/dist/cli/chunks/hybrid-backend-SSGQQEQ2.js +2 -0
  231. package/dist/cli/chunks/{hypergraph-engine-ZBWUPTVD.js → hypergraph-engine-ONAYHU25.js} +2 -2
  232. package/dist/cli/chunks/{hypergraph-handler-DUMF6SJV.js → hypergraph-handler-VINJRAID.js} +3 -3
  233. package/dist/cli/chunks/impact-analyzer-CRGCA7ZD.js +2 -0
  234. package/dist/cli/chunks/{init-guard-S4I2R46S.js → init-guard-RYVV5R3Z.js} +2 -2
  235. package/dist/cli/chunks/{init-handler-L4KJHVWS.js → init-handler-MPRGWMOE.js} +6 -6
  236. package/dist/cli/chunks/init-wizard-NIMZ4J55.js +2 -0
  237. package/dist/cli/chunks/kernel-JQK7PRAI.js +2 -0
  238. package/dist/cli/chunks/{kilocode-installer-GNNB5FCZ.js → kilocode-installer-OPD7JBRL.js} +2 -2
  239. package/dist/cli/chunks/{kiro-installer-HR6ZAH7T.js → kiro-installer-M4OPUNK2.js} +2 -2
  240. package/dist/cli/chunks/knowledge-graph-YPVVIKEU.js +2 -0
  241. package/dist/cli/chunks/{learning-4IEEOHJS.js → learning-4UWTQLMF.js} +24 -24
  242. package/dist/cli/chunks/{llm-router-ZFMORP36.js → llm-router-SQ56FF6Z.js} +4 -4
  243. package/dist/cli/chunks/llm-router-service-5OGAUOXF.js +2 -0
  244. package/dist/cli/chunks/{load-ZM43WGDO.js → load-HPHKDGGL.js} +2 -2
  245. package/dist/cli/chunks/load-test-UKNV5MWW.js +2 -0
  246. package/dist/cli/chunks/mcp-TELMAC7Z.js +2 -0
  247. package/dist/cli/chunks/{memory-W5FZGVAD.js → memory-PFQ3KPVJ.js} +5 -5
  248. package/dist/cli/chunks/memory-backend-ZW4BTRNK.js +2 -0
  249. package/dist/cli/chunks/memory-handlers-FCXN437E.js +2 -0
  250. package/dist/cli/chunks/{multi-model-executor-SXXGAQ2G.js → multi-model-executor-3VDRX6TZ.js} +2 -2
  251. package/dist/cli/chunks/{opencode-installer-PIRBUAB5.js → opencode-installer-PJ576R63.js} +2 -2
  252. package/dist/cli/chunks/{orchestrator-H5SQCQTB.js → orchestrator-72QP4UU7.js} +63 -19
  253. package/dist/cli/chunks/pattern-null-store-4DUV6MQC.js +2 -0
  254. package/dist/cli/chunks/{pattern-usage-recorder-XZTWDI2T.js → pattern-usage-recorder-754YQW7C.js} +2 -2
  255. package/dist/cli/chunks/pipeline-AVXY4MVB.js +19 -0
  256. package/dist/cli/chunks/{platform-KJDABL5C.js → platform-3E3DXLYB.js} +2 -2
  257. package/dist/cli/chunks/{plugin-V4KSBVVM.js → plugin-7FUQAKRE.js} +2 -2
  258. package/dist/cli/chunks/{prime-radiant-advanced-wasm-JDHTKQAT.js → prime-radiant-advanced-wasm-NIB4F5NV.js} +2 -2
  259. package/dist/cli/chunks/project-root-JCAUNL6O.js +2 -0
  260. package/dist/cli/chunks/protocol-executor-RNZNZP3A.js +2 -0
  261. package/dist/cli/chunks/{protocol-handler-BNRONTQV.js → protocol-handler-BQRYMUTG.js} +2 -2
  262. package/dist/cli/chunks/{prove-ELLL6XMX.js → prove-H52QGC6B.js} +2 -2
  263. package/dist/cli/chunks/qe-reasoning-bank-WK6TQOG2.js +2 -0
  264. package/dist/cli/chunks/{quality-NH2QA4D4.js → quality-QO4XPAUM.js} +2 -2
  265. package/dist/cli/chunks/{quality-gate-JTKLF7GW.js → quality-gate-FBKE5E6F.js} +3 -3
  266. package/dist/cli/chunks/queen-coordinator-4452SXZQ.js +2 -0
  267. package/dist/cli/chunks/{real-embeddings-J3KCKLPB.js → real-embeddings-RWGOVOXO.js} +2 -2
  268. package/dist/cli/chunks/{ref-validation-HNXQRP4F.js → ref-validation-LF76ZOBD.js} +2 -2
  269. package/dist/cli/chunks/{roocode-installer-COJ6CX6S.js → roocode-installer-3BYEBTQ7.js} +2 -2
  270. package/dist/cli/chunks/router-3DIS5X4R.js +2 -0
  271. package/dist/cli/chunks/routing-feedback-OPXRCXM7.js +2 -0
  272. package/dist/cli/chunks/{routing-handler-WM33ZILE.js → routing-handler-DST7BVCU.js} +2 -2
  273. package/dist/cli/chunks/{ruvector-commands-BBLXEA7A.js → ruvector-commands-XE32PGKC.js} +2 -2
  274. package/dist/cli/chunks/rvf-dual-writer-JL6T727I.js +2 -0
  275. package/dist/cli/chunks/rvf-migration-adapter-V7IBDUCS.js +2 -0
  276. package/dist/cli/chunks/{rvf-migration-coordinator-P7H6HCAG.js → rvf-migration-coordinator-VP32XC75.js} +2 -2
  277. package/dist/cli/chunks/rvf-native-adapter-O3UQTEBK.js +2 -0
  278. package/dist/cli/chunks/{rvf-store-integrity-R5SPVRFP.js → rvf-store-integrity-SH2AMVI7.js} +2 -2
  279. package/dist/cli/chunks/safe-db-EVB4ZC7T.js +2 -0
  280. package/dist/cli/chunks/schedule-ORDDXXY4.js +2 -0
  281. package/dist/cli/chunks/scheduler-XFLJSFIU.js +2 -0
  282. package/dist/cli/chunks/{security-AUDTRX3I.js → security-VSPNKCDS.js} +3 -3
  283. package/dist/cli/chunks/{shared-rvf-adapter-PVDGBGI2.js → shared-rvf-adapter-HX6AHL3P.js} +2 -2
  284. package/dist/cli/chunks/{shared-rvf-dual-writer-LZ2GMSS2.js → shared-rvf-dual-writer-MX4FC2JE.js} +2 -2
  285. package/dist/cli/chunks/sqlite-persistence-Y7B42CJ3.js +2 -0
  286. package/dist/cli/chunks/{standalone-memory-XNOAI4G4.js → standalone-memory-O4QUTK6L.js} +2 -2
  287. package/dist/cli/chunks/{status-handler-K72XZE4T.js → status-handler-Z2BP6EOG.js} +2 -2
  288. package/dist/cli/chunks/{structural-health-NF3YY7U5.js → structural-health-R36WNLQG.js} +2 -2
  289. package/dist/cli/chunks/sync-2ELWUFQU.js +2 -0
  290. package/dist/cli/chunks/{sync-VBD5Y3E2.js → sync-QF5Y3EMZ.js} +2 -2
  291. package/dist/cli/chunks/{task-handler-24S3WFVJ.js → task-handler-43PYE75J.js} +2 -2
  292. package/dist/cli/chunks/task-handlers-KPWAEMKH.js +9 -0
  293. package/dist/cli/chunks/{test-XFSGQELD.js → test-UWA377D4.js} +16 -16
  294. package/dist/cli/chunks/test-runner-process-3XZUYST2.js +2 -0
  295. package/dist/cli/chunks/{test-scheduling-VYUQ4CDE.js → test-scheduling-YQZPJRRN.js} +3 -3
  296. package/dist/cli/chunks/token-bootstrap-F7C6UKTC.js +2 -0
  297. package/dist/cli/chunks/{token-usage-VLQ6WO2L.js → token-usage-DO6WLMXP.js} +2 -2
  298. package/dist/cli/chunks/{transformers-TOFMWWNM.js → transformers-H5RGFKVO.js} +2 -2
  299. package/dist/cli/chunks/tree-sitter-wasm-parser-YTBCBHUO.js +2 -0
  300. package/dist/cli/chunks/{types-JTWLBAZJ.js → types-PJS2FGPF.js} +2 -2
  301. package/dist/cli/chunks/unified-memory-EHD4VNFW.js +2 -0
  302. package/dist/cli/chunks/unified-memory-hnsw-ZODGM4UK.js +2 -0
  303. package/dist/cli/chunks/unified-persistence-MHSI7ABK.js +2 -0
  304. package/dist/cli/chunks/{upgrade-4ABM72T4.js → upgrade-4IC4F6AB.js} +2 -2
  305. package/dist/cli/chunks/{validate-UDJCWKXI.js → validate-DHUWW7PF.js} +2 -2
  306. package/dist/cli/chunks/{validate-swarm-TODOUWNN.js → validate-swarm-OERQNOX5.js} +2 -2
  307. package/dist/cli/chunks/visual-security-54MLFKWY.js +2 -0
  308. package/dist/cli/chunks/{web-tree-sitter-WBMAJPM5.js → web-tree-sitter-TV7DMKES.js} +2 -2
  309. package/dist/cli/chunks/{windsurf-installer-BTT53TUL.js → windsurf-installer-QZPWSH37.js} +2 -2
  310. package/dist/cli/chunks/witness-chain-LC6Q2W27.js +2 -0
  311. package/dist/cli/chunks/witness-chain-QUIBAF3W.js +2 -0
  312. package/dist/cli/chunks/witness-chain-repair-RUXIOE7F.js +2 -0
  313. package/dist/cli/chunks/{witness-chain-verifier-FRY3LMGH.js → witness-chain-verifier-YXENHB42.js} +2 -2
  314. package/dist/cli/chunks/{witness-key-manager-X7QHQQWL.js → witness-key-manager-HL26AGFO.js} +2 -2
  315. package/dist/cli/chunks/{workflow-QMZPAWQW.js → workflow-EOVVCN2E.js} +4 -4
  316. package/dist/cli/chunks/workflow-orchestrator-UKHEJVSK.js +2 -0
  317. package/dist/cli/chunks/wrappers-AGODHBOO.js +2 -0
  318. package/dist/cli/commands/fleet.js +19 -12
  319. package/dist/cli/commands/hooks-handlers/hooks-dream-learning.js +9 -2
  320. package/dist/cli/commands/hooks-handlers/session-hooks.js +2 -2
  321. package/dist/cli/commands/hooks-handlers/stats-hooks.js +3 -2
  322. package/dist/cli/commands/learning.js +5 -3
  323. package/dist/cli/commands/ruvector-commands.js +2 -1
  324. package/dist/cli/commands/test.js +6 -0
  325. package/dist/cli/utils/ci-output.d.ts +9 -0
  326. package/dist/cli/utils/fleet-operation.d.ts +32 -0
  327. package/dist/cli/utils/fleet-operation.js +71 -0
  328. package/dist/cli/utils/fleet-result.d.ts +31 -0
  329. package/dist/cli/utils/fleet-result.js +124 -0
  330. package/dist/context/sources/git-source.js +6 -2
  331. package/dist/coordination/handlers/code-intelligence-handlers.js +60 -5
  332. package/dist/coordination/handlers/coverage-handlers.js +10 -1
  333. package/dist/coordination/handlers/requirements-handlers.js +16 -2
  334. package/dist/coordination/handlers/security-handlers.js +11 -1
  335. package/dist/coordination/handlers/test-execution-handlers.js +25 -7
  336. package/dist/coordination/mincut/queen-integration.d.ts +39 -1
  337. package/dist/coordination/mincut/queen-integration.js +83 -6
  338. package/dist/coordination/protocols/learning-consolidation-archive.d.ts +2 -6
  339. package/dist/coordination/protocols/learning-consolidation-archive.js +4 -27
  340. package/dist/coordination/protocols/learning-consolidation.d.ts +24 -0
  341. package/dist/coordination/protocols/learning-consolidation.js +71 -22
  342. package/dist/coordination/queen-coordinator.d.ts +1 -1
  343. package/dist/coordination/queen-coordinator.js +19 -7
  344. package/dist/coordination/queen-event-handlers.js +13 -0
  345. package/dist/coordination/queen-task-management.d.ts +18 -24
  346. package/dist/coordination/queen-task-management.js +62 -168
  347. package/dist/coordination/queen-task-queue.d.ts +41 -0
  348. package/dist/coordination/queen-task-queue.js +194 -0
  349. package/dist/coordination/queen-types.d.ts +1 -1
  350. package/dist/coordination/queen-work-stealing.d.ts +6 -1
  351. package/dist/coordination/queen-work-stealing.js +7 -4
  352. package/dist/coordination/result-saver-adapters.d.ts +15 -0
  353. package/dist/coordination/result-saver-adapters.js +57 -0
  354. package/dist/coordination/result-saver.d.ts +1 -1
  355. package/dist/coordination/result-saver.js +8 -5
  356. package/dist/coordination/yaml-pipeline-loader.js +5 -2
  357. package/dist/domains/code-intelligence/index-path-guard.d.ts +5 -2
  358. package/dist/domains/code-intelligence/index-path-guard.js +20 -50
  359. package/dist/domains/code-intelligence/plugin.js +5 -1
  360. package/dist/domains/code-intelligence/services/metric-collector/index.d.ts +2 -2
  361. package/dist/domains/code-intelligence/services/metric-collector/index.js +2 -3
  362. package/dist/domains/code-intelligence/services/metric-collector/loc-counter.d.ts +1 -1
  363. package/dist/domains/code-intelligence/services/metric-collector/loc-counter.js +11 -36
  364. package/dist/domains/code-intelligence/services/metric-collector/test-counter.d.ts +1 -1
  365. package/dist/domains/code-intelligence/services/metric-collector/test-counter.js +45 -103
  366. package/dist/domains/contract-testing/services/api-compatibility.js +7 -6
  367. package/dist/domains/contract-testing/services/contract-validator.js +6 -4
  368. package/dist/domains/contract-testing/services/schema-validator.js +8 -5
  369. package/dist/domains/defect-intelligence/interfaces.d.ts +2 -0
  370. package/dist/domains/defect-intelligence/plugin.js +11 -2
  371. package/dist/domains/defect-intelligence/prediction-history.d.ts +27 -0
  372. package/dist/domains/defect-intelligence/prediction-history.js +68 -0
  373. package/dist/domains/defect-intelligence/services/defect-predictor.js +25 -10
  374. package/dist/domains/enterprise-integration/services/message-broker-service.js +3 -2
  375. package/dist/domains/enterprise-integration/services/odata-service.js +2 -1
  376. package/dist/domains/enterprise-integration/services/sap-integration-service.js +3 -2
  377. package/dist/domains/learning-optimization/active-patterns.d.ts +2 -2
  378. package/dist/domains/learning-optimization/active-patterns.js +2 -2
  379. package/dist/domains/learning-optimization/coordinator.js +9 -5
  380. package/dist/domains/learning-optimization/interfaces.d.ts +6 -2
  381. package/dist/domains/learning-optimization/pattern-archive.d.ts +31 -0
  382. package/dist/domains/learning-optimization/pattern-archive.js +56 -0
  383. package/dist/domains/learning-optimization/pattern-consolidation.d.ts +12 -0
  384. package/dist/domains/learning-optimization/pattern-consolidation.js +41 -0
  385. package/dist/domains/learning-optimization/reward-source.d.ts +13 -0
  386. package/dist/domains/learning-optimization/reward-source.js +8 -1
  387. package/dist/domains/learning-optimization/services/learning-coordinator.d.ts +5 -3
  388. package/dist/domains/learning-optimization/services/learning-coordinator.js +45 -58
  389. package/dist/domains/security-compliance/plugin.js +17 -3
  390. package/dist/domains/security-compliance/sast-path-guard.d.ts +9 -0
  391. package/dist/domains/security-compliance/sast-path-guard.js +17 -0
  392. package/dist/domains/security-compliance/services/scanners/dast-auth-testing.js +46 -56
  393. package/dist/domains/security-compliance/services/scanners/dast-helpers.js +76 -91
  394. package/dist/domains/security-compliance/services/scanners/dast-injection-testing.js +52 -62
  395. package/dist/domains/security-compliance/services/scanners/dast-scanner.d.ts +21 -1
  396. package/dist/domains/security-compliance/services/scanners/dast-scanner.js +29 -24
  397. package/dist/domains/security-compliance/services/scanners/scanner-orchestrator.js +4 -1
  398. package/dist/domains/test-execution/coordinator.d.ts +5 -0
  399. package/dist/domains/test-execution/coordinator.js +35 -20
  400. package/dist/domains/test-execution/interfaces.d.ts +25 -0
  401. package/dist/domains/test-execution/plugin.js +19 -4
  402. package/dist/domains/test-execution/services/flaky-detector.js +9 -7
  403. package/dist/domains/test-execution/services/retry-handler.js +46 -7
  404. package/dist/domains/test-execution/services/runner-test-cases.d.ts +11 -0
  405. package/dist/domains/test-execution/services/runner-test-cases.js +20 -2
  406. package/dist/domains/test-execution/services/test-executor.js +8 -8
  407. package/dist/domains/test-generation/plugin.js +7 -2
  408. package/dist/domains/test-generation/services/test-data-generator.js +3 -1
  409. package/dist/domains/visual-accessibility/services/axe-core-audit.js +1 -1
  410. package/dist/hooks/cross-phase-hooks.js +2 -1
  411. package/dist/init/phases/10-workers.js +50 -6
  412. package/dist/integrations/browser/agent-browser/client.js +37 -52
  413. package/dist/integrations/browser/agent-browser/command-executor.d.ts +33 -27
  414. package/dist/integrations/browser/agent-browser/command-executor.js +53 -54
  415. package/dist/integrations/browser/agent-browser/session-manager.d.ts +1 -1
  416. package/dist/integrations/browser/agent-browser/session-manager.js +8 -9
  417. package/dist/integrations/browser/web-content-fetcher.js +9 -3
  418. package/dist/integrations/vibium/client.js +2 -2
  419. package/dist/integrations/vibium/runtime.d.ts +1 -1
  420. package/dist/integrations/vibium/runtime.js +14 -11
  421. package/dist/kernel/unified-memory-schemas.d.ts +3 -2
  422. package/dist/kernel/unified-memory-schemas.js +3 -2
  423. package/dist/kernel/unified-memory.js +25 -6
  424. package/dist/learning/dream/dream-commit.d.ts +65 -0
  425. package/dist/learning/dream/dream-commit.js +104 -0
  426. package/dist/learning/dream/dream-engine.d.ts +81 -31
  427. package/dist/learning/dream/dream-engine.js +225 -168
  428. package/dist/learning/dream/dream-insights-pruner.d.ts +9 -3
  429. package/dist/learning/dream/dream-insights-pruner.js +16 -30
  430. package/dist/learning/dream/index.d.ts +3 -2
  431. package/dist/learning/dream/index.js +3 -1
  432. package/dist/learning/dream/rvcow-branch-manager.d.ts +8 -1
  433. package/dist/learning/dream/rvcow-branch-manager.js +8 -1
  434. package/dist/learning/dream/speculative-dreamer.d.ts +50 -74
  435. package/dist/learning/dream/speculative-dreamer.js +64 -111
  436. package/dist/learning/dream/spreading-activation.d.ts +2 -1
  437. package/dist/learning/dream/spreading-activation.js +15 -6
  438. package/dist/learning/experience-capture.d.ts +9 -0
  439. package/dist/learning/experience-capture.js +18 -4
  440. package/dist/learning/qe-reasoning-bank-types.d.ts +17 -2
  441. package/dist/learning/qe-reasoning-bank.js +22 -11
  442. package/dist/learning/sqlite-persistence.d.ts +6 -0
  443. package/dist/learning/sqlite-persistence.js +16 -2
  444. package/dist/learning/usage-outcome.d.ts +68 -0
  445. package/dist/learning/usage-outcome.js +84 -0
  446. package/dist/mcp/background-workers.d.ts +13 -1
  447. package/dist/mcp/background-workers.js +17 -3
  448. package/dist/mcp/bundle.js +607 -580
  449. package/dist/mcp/handlers/core-handlers.js +11 -0
  450. package/dist/mcp/handlers/domain-handler-configs.d.ts +5 -0
  451. package/dist/mcp/handlers/domain-handler-configs.js +11 -3
  452. package/dist/mcp/handlers/handler-factory.d.ts +2 -1
  453. package/dist/mcp/handlers/handler-factory.js +36 -15
  454. package/dist/mcp/handlers/orchestrate-routes.d.ts +36 -0
  455. package/dist/mcp/handlers/orchestrate-routes.js +88 -0
  456. package/dist/mcp/handlers/task-handlers.d.ts +3 -0
  457. package/dist/mcp/handlers/task-handlers.js +35 -8
  458. package/dist/mcp/handlers/validation-pipeline-handler.js +6 -2
  459. package/dist/mcp/protocol-server.js +2 -0
  460. package/dist/mcp/security/schema-validator.js +3 -2
  461. package/dist/mcp/tools/code-intelligence/c4.js +11 -1
  462. package/dist/mcp/tools/coverage-analysis/index.js +31 -2
  463. package/dist/mcp/tools/learning-optimization/dream.d.ts +8 -8
  464. package/dist/mcp/tools/learning-optimization/dream.js +38 -34
  465. package/dist/mcp/tools/learning-optimization/optimize.d.ts +18 -2
  466. package/dist/mcp/tools/learning-optimization/optimize.js +58 -10
  467. package/dist/mcp/tools/quality-assessment/gate.js +12 -1
  468. package/dist/mcp/tools/requirements-validation/quality-criteria.js +9 -2
  469. package/dist/migration/agent-compat.js +7 -5
  470. package/dist/migrations/20261018_add_dream_insights_archive.d.ts +27 -0
  471. package/dist/migrations/20261018_add_dream_insights_archive.js +57 -0
  472. package/dist/shared/git/git-analyzer.d.ts +49 -0
  473. package/dist/shared/git/git-analyzer.js +159 -319
  474. package/dist/shared/git/git-process.d.ts +22 -0
  475. package/dist/shared/git/git-process.js +37 -0
  476. package/dist/shared/git/index.d.ts +1 -0
  477. package/dist/shared/git/index.js +1 -0
  478. package/dist/shared/io/payload-path-guard.d.ts +75 -0
  479. package/dist/shared/io/payload-path-guard.js +190 -0
  480. package/dist/shared/llm/router/agent-router-config.js +2 -1
  481. package/dist/shared/llm/translation/tool-translator.js +2 -1
  482. package/dist/shared/test-runner-args.d.ts +5 -0
  483. package/dist/shared/test-runner-args.js +6 -1
  484. package/dist/shared/test-runner-process.d.ts +6 -0
  485. package/dist/shared/test-runner-process.js +14 -0
  486. package/dist/shared/test-runner-verdict.d.ts +9 -1
  487. package/dist/shared/test-runner-verdict.js +15 -4
  488. package/dist/shared/utils/namespaced-search.d.ts +14 -0
  489. package/dist/shared/utils/namespaced-search.js +19 -1
  490. package/dist/shared/utils/safe-expression-evaluator.js +4 -3
  491. package/dist/strange-loop/infra-healing/recovery-playbook.js +13 -3
  492. package/dist/validation/gate-reexecute.js +7 -4
  493. package/dist/workers/daemon.js +13 -1
  494. package/dist/workers/quality-daemon/git-watcher.js +9 -9
  495. package/dist/workers/workers/defect-predictor.d.ts +8 -3
  496. package/dist/workers/workers/defect-predictor.js +48 -49
  497. package/dist/workers/workers/learning-consolidation.d.ts +2 -0
  498. package/dist/workers/workers/learning-consolidation.js +12 -1
  499. package/dist/workflows/browser/workflow-loader.js +8 -5
  500. package/package.json +1 -1
  501. package/dist/cli/chunks/adapter-R2Q4QGXQ.js +0 -2
  502. package/dist/cli/chunks/agent-booster-wasm-427FRKWG.js +0 -2
  503. package/dist/cli/chunks/aqe-learning-engine-3RENLQWP.js +0 -2
  504. package/dist/cli/chunks/base-67DXSAYM.js +0 -2
  505. package/dist/cli/chunks/browser-CT3MTV6G.js +0 -4
  506. package/dist/cli/chunks/browser-workflow-NDXRROWZ.js +0 -2
  507. package/dist/cli/chunks/chunk-4URT6JO2.js +0 -2
  508. package/dist/cli/chunks/chunk-5LAAZLUC.js +0 -4
  509. package/dist/cli/chunks/chunk-7DMA5NYL.js +0 -4
  510. package/dist/cli/chunks/chunk-F2SQPP6U.js +0 -4
  511. package/dist/cli/chunks/chunk-G3BKZNFL.js +0 -120
  512. package/dist/cli/chunks/chunk-GR3JYE5A.js +0 -2
  513. package/dist/cli/chunks/chunk-J3WGK22W.js +0 -2
  514. package/dist/cli/chunks/chunk-KHSRIPBP.js +0 -180
  515. package/dist/cli/chunks/chunk-KTSLTZSG.js +0 -2
  516. package/dist/cli/chunks/chunk-O3JLOVZX.js +0 -4
  517. package/dist/cli/chunks/chunk-THAY7WHO.js +0 -12
  518. package/dist/cli/chunks/chunk-VXZJOKOX.js +0 -2
  519. package/dist/cli/chunks/chunk-VYLM2YV5.js +0 -12
  520. package/dist/cli/chunks/client-ZP3CTVRF.js +0 -2
  521. package/dist/cli/chunks/core-handlers-JSRXQWPE.js +0 -2
  522. package/dist/cli/chunks/cross-domain-router-7UKODQWG.js +0 -2
  523. package/dist/cli/chunks/daemon-YIFT46FH.js +0 -34
  524. package/dist/cli/chunks/domain-transfer-6EF75EKU.js +0 -2
  525. package/dist/cli/chunks/dream-UDLM6M55.js +0 -2
  526. package/dist/cli/chunks/file-discovery-THWOUQ7Z.js +0 -2
  527. package/dist/cli/chunks/fleet-ADL57COA.js +0 -44
  528. package/dist/cli/chunks/heartbeat-scheduler-HGOC5KH3.js +0 -2
  529. package/dist/cli/chunks/hnsw-adapter-EPSA6AP7.js +0 -2
  530. package/dist/cli/chunks/hnsw-index-RMFOPYGY.js +0 -2
  531. package/dist/cli/chunks/hybrid-backend-NZ3G4WBX.js +0 -2
  532. package/dist/cli/chunks/impact-analyzer-WZC6NHFP.js +0 -2
  533. package/dist/cli/chunks/init-wizard-422UZYQ5.js +0 -2
  534. package/dist/cli/chunks/kernel-N7PJ6FCE.js +0 -2
  535. package/dist/cli/chunks/knowledge-graph-SZCVQF37.js +0 -2
  536. package/dist/cli/chunks/llm-router-service-4DE5WDUZ.js +0 -2
  537. package/dist/cli/chunks/load-test-POMIF4Q4.js +0 -2
  538. package/dist/cli/chunks/mcp-CRZKZE37.js +0 -2
  539. package/dist/cli/chunks/memory-backend-4P6AHSOY.js +0 -2
  540. package/dist/cli/chunks/memory-handlers-NK6NV3GE.js +0 -2
  541. package/dist/cli/chunks/pattern-null-store-CCHQHGQG.js +0 -2
  542. package/dist/cli/chunks/pipeline-5LMLBIJ7.js +0 -19
  543. package/dist/cli/chunks/project-root-X72FSM2F.js +0 -2
  544. package/dist/cli/chunks/protocol-executor-QW6XN6QN.js +0 -2
  545. package/dist/cli/chunks/qe-reasoning-bank-ZD3WF647.js +0 -2
  546. package/dist/cli/chunks/queen-coordinator-S4U4MKK2.js +0 -2
  547. package/dist/cli/chunks/router-CXZKOOTR.js +0 -2
  548. package/dist/cli/chunks/routing-feedback-IYFANYY5.js +0 -2
  549. package/dist/cli/chunks/rvf-dual-writer-HCLQ5WUQ.js +0 -2
  550. package/dist/cli/chunks/rvf-migration-adapter-XCLUWOO3.js +0 -2
  551. package/dist/cli/chunks/rvf-native-adapter-MRT5H3IP.js +0 -2
  552. package/dist/cli/chunks/safe-db-WFODRGVZ.js +0 -2
  553. package/dist/cli/chunks/schedule-RO55OQXG.js +0 -2
  554. package/dist/cli/chunks/scheduler-XXMJCH24.js +0 -2
  555. package/dist/cli/chunks/sqlite-persistence-AWRIS4MK.js +0 -2
  556. package/dist/cli/chunks/sync-UVXA6CT2.js +0 -2
  557. package/dist/cli/chunks/task-handlers-GUYW2EPJ.js +0 -9
  558. package/dist/cli/chunks/token-bootstrap-EDK6FNQ3.js +0 -2
  559. package/dist/cli/chunks/tree-sitter-wasm-parser-MI3NZKUD.js +0 -2
  560. package/dist/cli/chunks/unified-memory-6JWHV6EF.js +0 -2
  561. package/dist/cli/chunks/unified-memory-hnsw-4UANU6NU.js +0 -2
  562. package/dist/cli/chunks/unified-persistence-KGGNA46H.js +0 -2
  563. package/dist/cli/chunks/visual-security-6VZNQLH7.js +0 -2
  564. package/dist/cli/chunks/witness-chain-AKKHWEWU.js +0 -2
  565. package/dist/cli/chunks/witness-chain-TATPXQRK.js +0 -2
  566. package/dist/cli/chunks/witness-chain-repair-2HGJGE7O.js +0 -2
  567. package/dist/cli/chunks/workflow-orchestrator-4GAW7HNZ.js +0 -2
  568. package/dist/cli/chunks/wrappers-ZD5NBHYI.js +0 -2
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Run git without blocking the event loop (#1115).
3
+ *
4
+ * Git runs in its own process group, so a timeout stops it together with any
5
+ * wrapper, credential helper or fsmonitor child it started.
6
+ */
7
+ import { runProcessText } from '../test-runner-process.js';
8
+ /** Git did not finish before its deadline; its result is unknown, not empty. */
9
+ export class GitTimeoutError extends Error {
10
+ constructor(args, timeoutMs) {
11
+ super(`git ${args.join(' ')} timed out after ${Math.max(0, timeoutMs)}ms`);
12
+ this.name = 'GitTimeoutError';
13
+ }
14
+ }
15
+ /**
16
+ * Resolve with git's stdout. Rejects with GitTimeoutError when the deadline
17
+ * passes, and with a plain Error when git cannot start or exits non-zero.
18
+ */
19
+ export async function runGit(args, options) {
20
+ if (options.timeout <= 0)
21
+ throw new GitTimeoutError(args, options.timeout);
22
+ try {
23
+ return await runProcessText('git', args, {
24
+ cwd: options.cwd,
25
+ timeout: options.timeout,
26
+ maxBuffer: options.maxBuffer,
27
+ // Never wait for a credential prompt that no one can answer.
28
+ env: { ...process.env, GIT_TERMINAL_PROMPT: '0' },
29
+ });
30
+ }
31
+ catch (error) {
32
+ if (error.code === 'ETIMEDOUT')
33
+ throw new GitTimeoutError(args, options.timeout);
34
+ throw error;
35
+ }
36
+ }
37
+ //# sourceMappingURL=git-process.js.map
@@ -4,4 +4,5 @@
4
4
  export { GitAnalyzer } from './git-analyzer';
5
5
  export type { GitAnalyzerConfig, GitCommit, GitBlameInfo, FileHistory, } from './git-analyzer';
6
6
  export { assertSafeGitRef, getGitRefError } from './ref-validation';
7
+ export { GitTimeoutError } from './git-process';
7
8
  //# sourceMappingURL=index.d.ts.map
@@ -3,4 +3,5 @@
3
3
  */
4
4
  export { GitAnalyzer } from './git-analyzer.js';
5
5
  export { assertSafeGitRef, getGitRefError } from './ref-validation.js';
6
+ export { GitTimeoutError } from './git-process.js';
6
7
  //# sourceMappingURL=index.js.map
@@ -0,0 +1,75 @@
1
+ /**
2
+ * #1126: decide which caller-named paths a task handler may read.
3
+ *
4
+ * A task payload can come from MCP task_submit, task_orchestrate, a domain
5
+ * MCP tool or `aqe task submit`, so every handler that reads a path from its
6
+ * payload applies the same rule as code indexing (#1096) and sast-scan
7
+ * (#1144): a path is read only when its realpath is a regular file (or, for a
8
+ * target to walk, a directory) inside the project root's realpath. A path
9
+ * spelled outside the root is refused before any filesystem call, so the
10
+ * reason does not reveal whether it exists, and an outside directory is never
11
+ * listed. A symlink pointing out, a device such as /dev/zero or a directory
12
+ * is refused by name, and so is a file over the size limit when the handler
13
+ * reads files whole.
14
+ *
15
+ * The check runs inside each handler rather than at one MCP entry point, so
16
+ * no route into the handler can skip it. A refusal is a CallerInputError: it
17
+ * is not retried and does not count toward the domain circuit breaker.
18
+ */
19
+ import { Result } from '../types';
20
+ /** Largest file a handler reads whole into memory (the #1144 sast limit). */
21
+ export declare const MAX_PAYLOAD_FILE_BYTES: number;
22
+ export type PayloadPathSkipReason = 'not-found' | 'not-a-file' | 'outside-project-root' | 'unreadable' | 'too-large';
23
+ export interface SkippedPayloadPath {
24
+ path: string;
25
+ reason: PayloadPathSkipReason;
26
+ }
27
+ export interface ConfinedPayloadPaths {
28
+ /** Requested paths (as given) that are regular files inside the project root. */
29
+ accepted: string[];
30
+ /** The real path checked for each accepted entry, in the same order. */
31
+ resolved: string[];
32
+ skipped: SkippedPayloadPath[];
33
+ }
34
+ export interface PayloadPathOptions {
35
+ /** Project root; defaults to findProjectRoot(). */
36
+ projectRoot?: string;
37
+ /** Base for relative paths; defaults to process.cwd(), as FileReader does. */
38
+ basePath?: string;
39
+ /** Refuse files larger than this. Omit when the handler does not read files whole. */
40
+ maxBytes?: number;
41
+ /**
42
+ * Accept a path inside the root that does not exist, for handlers that
43
+ * report a missing file themselves (a test runner, a deleted file in a
44
+ * changeset). A missing path outside the root is still refused.
45
+ */
46
+ allowMissing?: boolean;
47
+ }
48
+ /** Options for a single caller-named target that may be a directory. */
49
+ export interface PayloadTargetOptions extends PayloadPathOptions {
50
+ /** Accept a directory inside the root as well as a regular file. */
51
+ allowDirectory?: boolean;
52
+ }
53
+ /**
54
+ * Split `paths` into those a handler may read and those it must refuse.
55
+ * `resolved[i]` is the symlink-free path checked for `accepted[i]` (relative
56
+ * to basePath when the request was relative); a handler opens that path,
57
+ * never the caller's string.
58
+ */
59
+ export declare function confinePayloadPaths(paths: readonly string[], options?: PayloadTargetOptions): Promise<ConfinedPayloadPaths>;
60
+ /**
61
+ * Handler-side check for a payload path list: `value` must be an array of
62
+ * non-empty path strings, and every entry must pass confinePayloadPaths.
63
+ * Otherwise the whole request is refused and nothing is read. Returns the real
64
+ * paths that were checked; the handler reads those, not the payload strings.
65
+ * `taskType` and `field` name the payload in the error.
66
+ */
67
+ export declare function requirePayloadFiles(taskType: string, field: string, value: unknown, options?: PayloadTargetOptions): Promise<Result<string[], Error>>;
68
+ /**
69
+ * Handler-side check for one caller-named path (a file, or with
70
+ * allowDirectory a directory to walk). Returns the real path that was
71
+ * checked, which the handler reads instead of the payload string, or an error
72
+ * naming the reason without reading anything.
73
+ */
74
+ export declare function requirePayloadPath(taskType: string, field: string, value: unknown, options?: PayloadTargetOptions): Promise<Result<string, Error>>;
75
+ //# sourceMappingURL=payload-path-guard.d.ts.map
@@ -0,0 +1,190 @@
1
+ /**
2
+ * #1126: decide which caller-named paths a task handler may read.
3
+ *
4
+ * A task payload can come from MCP task_submit, task_orchestrate, a domain
5
+ * MCP tool or `aqe task submit`, so every handler that reads a path from its
6
+ * payload applies the same rule as code indexing (#1096) and sast-scan
7
+ * (#1144): a path is read only when its realpath is a regular file (or, for a
8
+ * target to walk, a directory) inside the project root's realpath. A path
9
+ * spelled outside the root is refused before any filesystem call, so the
10
+ * reason does not reveal whether it exists, and an outside directory is never
11
+ * listed. A symlink pointing out, a device such as /dev/zero or a directory
12
+ * is refused by name, and so is a file over the size limit when the handler
13
+ * reads files whole.
14
+ *
15
+ * The check runs inside each handler rather than at one MCP entry point, so
16
+ * no route into the handler can skip it. A refusal is a CallerInputError: it
17
+ * is not retried and does not count toward the domain circuit breaker.
18
+ */
19
+ import * as fs from 'node:fs/promises';
20
+ import * as path from 'node:path';
21
+ import { findProjectRoot } from '../../kernel/project-root.js';
22
+ import { ok, err } from '../types/index.js';
23
+ import { CallerInputError } from '../error-utils.js';
24
+ /** Largest file a handler reads whole into memory (the #1144 sast limit). */
25
+ export const MAX_PAYLOAD_FILE_BYTES = 2 * 1024 * 1024;
26
+ /** True when `candidate` is `root` or lies beneath it (both absolute). */
27
+ function isWithin(root, candidate) {
28
+ const relative = path.relative(root, candidate);
29
+ return relative === '' || (relative !== '..' && !relative.startsWith(`..${path.sep}`) && !path.isAbsolute(relative));
30
+ }
31
+ /**
32
+ * The path the kernel will open for `requested`. path.resolve() collapses
33
+ * `..` as text, but the kernel follows a symlink before applying `..`, so
34
+ * `src/link/../x` opens a file beside the link's target (review of #1162).
35
+ * Keep the caller's spelling and let realpath resolve it the kernel's way.
36
+ */
37
+ function kernelPath(basePath, requested) {
38
+ return path.isAbsolute(requested) ? requested : `${basePath}${path.sep}${requested}`;
39
+ }
40
+ /**
41
+ * For a path that does not exist: resolve its deepest existing ancestor the
42
+ * kernel's way and append the missing names. Returns null when the ancestor
43
+ * resolves outside the root or a missing name is `..`.
44
+ */
45
+ async function resolveMissing(raw, rootReal) {
46
+ const missing = [];
47
+ let dir = raw;
48
+ for (;;) {
49
+ missing.unshift(path.basename(dir));
50
+ const parent = path.dirname(dir);
51
+ if (parent === dir)
52
+ return null;
53
+ dir = parent;
54
+ const real = await fs.realpath(dir).catch(() => null);
55
+ if (!real)
56
+ continue;
57
+ if (!isWithin(rootReal, real) || missing.some(name => name === '..'))
58
+ return null;
59
+ return path.join(real, ...missing.filter(name => name !== '.' && name !== ''));
60
+ }
61
+ }
62
+ /**
63
+ * Split `paths` into those a handler may read and those it must refuse.
64
+ * `resolved[i]` is the symlink-free path checked for `accepted[i]` (relative
65
+ * to basePath when the request was relative); a handler opens that path,
66
+ * never the caller's string.
67
+ */
68
+ export async function confinePayloadPaths(paths, options = {}) {
69
+ const projectRoot = options.projectRoot ?? findProjectRoot();
70
+ const basePath = options.basePath ?? process.cwd();
71
+ const accepted = [];
72
+ const resolved = [];
73
+ const skipped = [];
74
+ const rootLexical = path.resolve(projectRoot);
75
+ const rootReal = await fs.realpath(projectRoot).catch(() => rootLexical);
76
+ const baseReal = await fs.realpath(basePath).catch(() => null);
77
+ // A relative request stays relative, to the base's realpath: the kernel
78
+ // resolves it through the same real directories, and records keep the
79
+ // caller's spelling for ordinary paths ('tests/a.test.ts').
80
+ const accept = (requested, real) => {
81
+ accepted.push(requested);
82
+ resolved.push(!path.isAbsolute(requested) && baseReal ? (path.relative(baseReal, real) || '.') : real);
83
+ };
84
+ for (const requested of paths) {
85
+ const lexical = path.resolve(basePath, requested);
86
+ // Spelled outside the root: refused before any filesystem call, so the
87
+ // reason cannot reveal whether an outside path exists.
88
+ if (!isWithin(rootLexical, lexical) && !isWithin(rootReal, lexical)) {
89
+ skipped.push({ path: requested, reason: 'outside-project-root' });
90
+ continue;
91
+ }
92
+ const raw = kernelPath(basePath, requested);
93
+ let real;
94
+ try {
95
+ real = await fs.realpath(raw);
96
+ }
97
+ catch (error) {
98
+ const code = error.code;
99
+ const missing = code === 'ENOENT' || code === 'ENOTDIR';
100
+ // A dangling symlink exists by name: it is not a missing file to accept.
101
+ const dangling = await fs.lstat(raw).then(() => true, () => false);
102
+ const target = missing && !dangling && options.allowMissing ? await resolveMissing(raw, rootReal) : null;
103
+ if (target)
104
+ accept(requested, target);
105
+ else
106
+ skipped.push({ path: requested, reason: missing ? 'not-found' : 'unreadable' });
107
+ continue;
108
+ }
109
+ if (!isWithin(rootReal, real)) {
110
+ skipped.push({ path: requested, reason: 'outside-project-root' });
111
+ continue;
112
+ }
113
+ // stat, never open: a FIFO, device or directory is refused unread.
114
+ const stat = await fs.stat(real).catch(() => null);
115
+ if (!stat) {
116
+ skipped.push({ path: requested, reason: 'unreadable' });
117
+ }
118
+ else if (!(stat.isFile() || (options.allowDirectory && stat.isDirectory()))) {
119
+ skipped.push({ path: requested, reason: 'not-a-file' });
120
+ }
121
+ else if (options.maxBytes !== undefined && stat.size > options.maxBytes) {
122
+ skipped.push({ path: requested, reason: 'too-large' });
123
+ }
124
+ else {
125
+ accept(requested, real);
126
+ }
127
+ }
128
+ return { accepted, resolved, skipped };
129
+ }
130
+ function describe(value) {
131
+ if (value === null)
132
+ return 'null';
133
+ if (Array.isArray(value))
134
+ return 'array';
135
+ return typeof value;
136
+ }
137
+ /**
138
+ * Handler-side check for a payload path list: `value` must be an array of
139
+ * non-empty path strings, and every entry must pass confinePayloadPaths.
140
+ * Otherwise the whole request is refused and nothing is read. Returns the real
141
+ * paths that were checked; the handler reads those, not the payload strings.
142
+ * `taskType` and `field` name the payload in the error.
143
+ */
144
+ export async function requirePayloadFiles(taskType, field, value, options = {}) {
145
+ const context = `Invalid ${taskType} payload`;
146
+ if (!Array.isArray(value)) {
147
+ return err(new CallerInputError(`${context}: '${field}' must be an array of file paths, got ${describe(value)}`));
148
+ }
149
+ for (let i = 0; i < value.length; i++) {
150
+ const entry = value[i];
151
+ if (typeof entry !== 'string' || entry.trim() === '') {
152
+ return err(new CallerInputError(`${context}: '${field}[${i}]' must be a non-empty string, got ${describe(entry)}`));
153
+ }
154
+ if (entry.includes('\0')) {
155
+ return err(new CallerInputError(`${context}: '${field}[${i}]' contains a null byte`));
156
+ }
157
+ }
158
+ const { resolved, skipped } = await confinePayloadPaths(value, options);
159
+ if (skipped.length > 0)
160
+ return err(refusal(context, field, skipped, options));
161
+ return ok(resolved);
162
+ }
163
+ function refusal(context, field, skipped, options) {
164
+ const limit = options.maxBytes !== undefined
165
+ ? `, at most ${Math.round(options.maxBytes / (1024 * 1024))} MB each`
166
+ : '';
167
+ const kinds = options.allowDirectory ? 'regular files or directories' : 'regular files';
168
+ return new CallerInputError(`${context}: ${field} cannot be read: ${skipped.map(s => `${s.path} (${s.reason})`).join(', ')}. ` +
169
+ `Pass ${kinds} inside the project${limit}.`);
170
+ }
171
+ /**
172
+ * Handler-side check for one caller-named path (a file, or with
173
+ * allowDirectory a directory to walk). Returns the real path that was
174
+ * checked, which the handler reads instead of the payload string, or an error
175
+ * naming the reason without reading anything.
176
+ */
177
+ export async function requirePayloadPath(taskType, field, value, options = {}) {
178
+ const context = `Invalid ${taskType} payload`;
179
+ if (typeof value !== 'string' || value.trim() === '') {
180
+ return err(new CallerInputError(`${context}: '${field}' must be a non-empty path string, got ${describe(value)}`));
181
+ }
182
+ if (value.includes('\0')) {
183
+ return err(new CallerInputError(`${context}: '${field}' contains a null byte`));
184
+ }
185
+ const { resolved, skipped } = await confinePayloadPaths([value], options);
186
+ if (skipped.length > 0)
187
+ return err(refusal(context, field, skipped, options));
188
+ return ok(resolved[0]);
189
+ }
190
+ //# sourceMappingURL=payload-path-guard.js.map
@@ -278,7 +278,8 @@ export const DEFAULT_CATEGORY_CAPABILITIES = {
278
278
  */
279
279
  export function getAgentRoutingCategory(agentType) {
280
280
  // Direct lookup first
281
- if (agentType in AGENT_CATEGORY_MAP) {
281
+ // #1136: own entries only; `constructor` is not an agent type.
282
+ if (Object.hasOwn(AGENT_CATEGORY_MAP, agentType)) {
282
283
  return AGENT_CATEGORY_MAP[agentType];
283
284
  }
284
285
  // Pattern-based detection
@@ -246,7 +246,8 @@ export function validateToolDefinition(tool) {
246
246
  const params = tool.parameters;
247
247
  const props = params.properties || {};
248
248
  for (const req of tool.required) {
249
- if (!(req in props)) {
249
+ // #1136: own properties only.
250
+ if (!Object.hasOwn(props, req)) {
250
251
  errors.push(`Required parameter '${req}' not found in properties`);
251
252
  }
252
253
  }
@@ -35,6 +35,11 @@ export declare function jestExactPathPattern(file: string, cwd?: string): string
35
35
  /**
36
36
  * Literal test-name filter in `--flag=value` form. Mocha uses `--grep`; Jest
37
37
  * and Vitest use `--testNamePattern` (the long form of `-t`).
38
+ *
39
+ * `testName` is the full name the runner reported (describe titles, then the
40
+ * test title). Runners match the filter against that name joined with ' '
41
+ * (Jest, Mocha, Vitest 3) or ' > ' (Vitest 4+), so each space matches either
42
+ * separator, and the name is anchored so a retry targets that one test (#1141).
38
43
  */
39
44
  export declare function nameFilterArg(runner: NameFilterRunner, testName: string): string;
40
45
  /** True when a command vector (runner command plus its arguments) runs Jest. */
@@ -62,9 +62,14 @@ export function jestExactPathPattern(file, cwd = process.cwd()) {
62
62
  /**
63
63
  * Literal test-name filter in `--flag=value` form. Mocha uses `--grep`; Jest
64
64
  * and Vitest use `--testNamePattern` (the long form of `-t`).
65
+ *
66
+ * `testName` is the full name the runner reported (describe titles, then the
67
+ * test title). Runners match the filter against that name joined with ' '
68
+ * (Jest, Mocha, Vitest 3) or ' > ' (Vitest 4+), so each space matches either
69
+ * separator, and the name is anchored so a retry targets that one test (#1141).
65
70
  */
66
71
  export function nameFilterArg(runner, testName) {
67
- const pattern = escapeRegExpLiteral(testName);
72
+ const pattern = `^${testName.split(' ').map(escapeRegExpLiteral).join('(?: > | )')}$`;
68
73
  return runner === 'mocha' ? `--grep=${pattern}` : `--testNamePattern=${pattern}`;
69
74
  }
70
75
  /** True when a command vector (runner command plus its arguments) runs Jest. */
@@ -33,4 +33,10 @@ export interface TestRunnerProcessOptions {
33
33
  * the promise settles and before any report file is removed.
34
34
  */
35
35
  export declare function runTestRunnerProcess(command: string, args: readonly string[], options: TestRunnerProcessOptions): Promise<TestRunnerProcessResult>;
36
+ /**
37
+ * Stdout of a command that must exit 0, run like runTestRunnerProcess (no
38
+ * blocking, process-group stop on timeout). Rejects with the ETIMEDOUT,
39
+ * ENOBUFS or spawn error, or with an error carrying `status` and `stderr`.
40
+ */
41
+ export declare function runProcessText(command: string, args: readonly string[], options: TestRunnerProcessOptions): Promise<string>;
36
42
  //# sourceMappingURL=test-runner-process.d.ts.map
@@ -298,4 +298,18 @@ export function runTestRunnerProcess(command, args, options) {
298
298
  proc.once('close', (status, signal) => settle(status, signal));
299
299
  });
300
300
  }
301
+ /**
302
+ * Stdout of a command that must exit 0, run like runTestRunnerProcess (no
303
+ * blocking, process-group stop on timeout). Rejects with the ETIMEDOUT,
304
+ * ENOBUFS or spawn error, or with an error carrying `status` and `stderr`.
305
+ */
306
+ export async function runProcessText(command, args, options) {
307
+ const result = await runTestRunnerProcess(command, args, options);
308
+ if (result.error)
309
+ throw result.error;
310
+ if (result.status !== 0) {
311
+ throw Object.assign(new Error(`${command} exited with ${result.status ?? result.signal}: ${result.stderr.trim()}`), { status: result.status, stderr: result.stderr });
312
+ }
313
+ return result.stdout;
314
+ }
301
315
  //# sourceMappingURL=test-runner-process.js.map
@@ -1,4 +1,7 @@
1
- /** A runner or suite error is not an assertion result. */
1
+ /**
2
+ * A runner or suite error is not an assertion result. Its message carries
3
+ * runner output and is returned over MCP, so it is redacted (#1122).
4
+ */
2
5
  export declare class TestRunnerExecutionError extends Error {
3
6
  constructor(message: string);
4
7
  }
@@ -19,6 +22,11 @@ interface RunnerReport {
19
22
  }>;
20
23
  }>;
21
24
  }
25
+ /**
26
+ * Runner output quoted in an error, redacted before it is cut so a secret
27
+ * that straddles the cut cannot survive half-matched (#1122).
28
+ */
29
+ export declare function capDiagnostics(text: string, maxLength?: number): string;
22
30
  /**
23
31
  * Preserve ordinary assertion failures, but reject incomplete/failed execution
24
32
  * that assertion counts cannot represent. Process status is authoritative even
@@ -1,10 +1,21 @@
1
- /** A runner or suite error is not an assertion result. */
1
+ import { redactLogText } from '../logging/redaction.js';
2
+ /**
3
+ * A runner or suite error is not an assertion result. Its message carries
4
+ * runner output and is returned over MCP, so it is redacted (#1122).
5
+ */
2
6
  export class TestRunnerExecutionError extends Error {
3
7
  constructor(message) {
4
- super(message);
8
+ super(redactLogText(message, Number.POSITIVE_INFINITY));
5
9
  this.name = 'TestRunnerExecutionError';
6
10
  }
7
11
  }
12
+ /**
13
+ * Runner output quoted in an error, redacted before it is cut so a secret
14
+ * that straddles the cut cannot survive half-matched (#1122).
15
+ */
16
+ export function capDiagnostics(text, maxLength = 4000) {
17
+ return redactLogText(text, Number.POSITIVE_INFINITY).slice(0, maxLength);
18
+ }
8
19
  /**
9
20
  * Preserve ordinary assertion failures, but reject incomplete/failed execution
10
21
  * that assertion counts cannot represent. Process status is authoritative even
@@ -36,8 +47,8 @@ export function getTestRunnerExecutionError(runner, files, exitCode, counts, out
36
47
  const diagnostics = [
37
48
  ...suiteErrors.map(suite => suite.message).filter(Boolean),
38
49
  output.trim(),
39
- ].filter(Boolean).join('\n').slice(0, 4000);
50
+ ].filter(Boolean).join('\n');
40
51
  return new TestRunnerExecutionError(`${runner} ${reason} for ${files} (exit code ${exitCode ?? 'unknown'}).` +
41
- (diagnostics ? `\n${diagnostics}` : ''));
52
+ (diagnostics ? `\n${capDiagnostics(diagnostics)}` : ''));
42
53
  }
43
54
  //# sourceMappingURL=test-runner-verdict.js.map
@@ -30,6 +30,13 @@ export interface SearchAllKeysOptions {
30
30
  /** First request size (tests). Defaults to `DEFAULT_KEY_SCAN_PAGE_SIZE`. */
31
31
  pageSize?: number;
32
32
  }
33
+ /**
34
+ * Most `search()` requests one scan may make (#1106). The limit doubles each
35
+ * time, so this covers more keys than any store holds (2^31 x the first page)
36
+ * while still guaranteeing the loop ends for a backend that never returns a
37
+ * short page.
38
+ */
39
+ export declare const MAX_KEY_SCAN_REQUESTS = 32;
33
40
  /**
34
41
  * Every key matching `pattern`, bare (usable with `get(key, retrieve)`),
35
42
  * de-duplicated and sorted.
@@ -37,6 +44,13 @@ export interface SearchAllKeysOptions {
37
44
  * `search()` has no offset, so this widens the request until the backend
38
45
  * returns fewer keys than were asked for. That is the only point at which the
39
46
  * result is known to be complete; no cap ever truncates it.
47
+ *
48
+ * #1106: a backend that always returns at least `limit` keys (for example
49
+ * one that pads or repeats results) never gives a short page. After
50
+ * MAX_KEY_SCAN_REQUESTS this throws instead of looping forever or returning a
51
+ * list that may be incomplete, because callers select patterns to archive
52
+ * from it. A backend that ignores `limit` and returns every key still ends:
53
+ * the limit doubles past the key count.
40
54
  */
41
55
  export declare function searchAllKeys(memory: MemoryBackend, pattern: string, options?: SearchAllKeysOptions): Promise<string[]>;
42
56
  //# sourceMappingURL=namespaced-search.d.ts.map
@@ -31,6 +31,13 @@ export function bareSearchKey(found, namespace, pattern) {
31
31
  }
32
32
  /** First request size for `searchAllKeys`. Each further request doubles it. */
33
33
  export const DEFAULT_KEY_SCAN_PAGE_SIZE = 10_000;
34
+ /**
35
+ * Most `search()` requests one scan may make (#1106). The limit doubles each
36
+ * time, so this covers more keys than any store holds (2^31 x the first page)
37
+ * while still guaranteeing the loop ends for a backend that never returns a
38
+ * short page.
39
+ */
40
+ export const MAX_KEY_SCAN_REQUESTS = 32;
34
41
  /**
35
42
  * Every key matching `pattern`, bare (usable with `get(key, retrieve)`),
36
43
  * de-duplicated and sorted.
@@ -38,11 +45,22 @@ export const DEFAULT_KEY_SCAN_PAGE_SIZE = 10_000;
38
45
  * `search()` has no offset, so this widens the request until the backend
39
46
  * returns fewer keys than were asked for. That is the only point at which the
40
47
  * result is known to be complete; no cap ever truncates it.
48
+ *
49
+ * #1106: a backend that always returns at least `limit` keys (for example
50
+ * one that pads or repeats results) never gives a short page. After
51
+ * MAX_KEY_SCAN_REQUESTS this throws instead of looping forever or returning a
52
+ * list that may be incomplete, because callers select patterns to archive
53
+ * from it. A backend that ignores `limit` and returns every key still ends:
54
+ * the limit doubles past the key count.
41
55
  */
42
56
  export async function searchAllKeys(memory, pattern, options = {}) {
43
57
  let limit = Math.max(1, Math.floor(options.pageSize ?? DEFAULT_KEY_SCAN_PAGE_SIZE));
44
58
  let found = await memory.search(pattern, limit, options.retrieve);
45
- while (found.length >= limit) {
59
+ for (let requests = 1; found.length >= limit; requests++) {
60
+ if (requests >= MAX_KEY_SCAN_REQUESTS) {
61
+ throw new Error(`searchAllKeys('${pattern}'): the backend never returned a short page after ${requests} requests ` +
62
+ `(last limit ${limit}); refusing to return a possibly incomplete key list`);
63
+ }
46
64
  limit *= 2;
47
65
  found = await memory.search(pattern, limit, options.retrieve);
48
66
  }
@@ -243,8 +243,9 @@ class Parser {
243
243
  parseIdentifier() {
244
244
  let value = this.context;
245
245
  const name = this.advance().value;
246
- // Get initial value from context
247
- if (typeof value === 'object' && value !== null && name in value) {
246
+ // Get initial value from context. #1136: own properties only, so an
247
+ // identifier such as `constructor` does not read an inherited member.
248
+ if (typeof value === 'object' && value !== null && Object.hasOwn(value, name)) {
248
249
  value = value[name];
249
250
  }
250
251
  else {
@@ -254,7 +255,7 @@ class Parser {
254
255
  while (this.current().type === 'DOT') {
255
256
  this.advance(); // consume dot
256
257
  const prop = this.expect('IDENTIFIER').value;
257
- if (value !== null && value !== undefined && typeof value === 'object') {
258
+ if (value !== null && value !== undefined && typeof value === 'object' && Object.hasOwn(value, prop)) {
258
259
  value = value[prop];
259
260
  }
260
261
  else {
@@ -59,7 +59,11 @@ export class RecoveryPlaybook {
59
59
  getRecoveryPlan(serviceName) {
60
60
  if (!this.config)
61
61
  return undefined;
62
- return this.config.services[serviceName];
62
+ // Own-property lookup only: a name like `constructor` or `toString` must
63
+ // not resolve to an Object.prototype member (#1118).
64
+ return Object.hasOwn(this.config.services, serviceName)
65
+ ? this.config.services[serviceName]
66
+ : undefined;
63
67
  }
64
68
  /**
65
69
  * List all service names defined in the playbook.
@@ -89,7 +93,9 @@ export class RecoveryPlaybook {
89
93
  const defaultTimeoutMs = defaults.timeoutMs ?? 10_000;
90
94
  const defaultMaxRetries = defaults.maxRetries ?? 3;
91
95
  const defaultBackoffMs = defaults.backoffMs ?? [2000, 5000, 10_000];
92
- const services = {};
96
+ // Null-prototype map so a service named `__proto__` is stored as an own
97
+ // key instead of silently replacing the prototype (#1118).
98
+ const services = Object.create(null);
93
99
  if (raw.services) {
94
100
  for (const [name, rawService] of Object.entries(raw.services)) {
95
101
  services[name] = this.parseService(name, rawService, defaultTimeoutMs, defaultMaxRetries, defaultBackoffMs);
@@ -137,7 +143,11 @@ export class RecoveryPlaybook {
137
143
  */
138
144
  interpolate(template) {
139
145
  return template.replace(/\$\{([^}]+)\}/g, (_match, varName) => {
140
- return this.variables[varName] ?? _match;
146
+ // Own properties only: `${constructor}` must stay unresolved rather
147
+ // than expand to Object's function source (#1118).
148
+ return Object.hasOwn(this.variables, varName)
149
+ ? (this.variables[varName] ?? _match)
150
+ : _match;
141
151
  });
142
152
  }
143
153
  }
@@ -26,6 +26,7 @@ import { createHash } from 'node:crypto';
26
26
  import { meetsNoRegression } from './anchor-set.js';
27
27
  import { tierAllowsPromotion } from '../learning/provenance-tier.js';
28
28
  import { bootstrapDeltaCILow, pairedDeltas } from './paired-bootstrap.js';
29
+ import { getOwn } from '../shared/utils/safe-record.js';
29
30
  /** Tag domain-separating the rule fingerprint hash. */
30
31
  const RULE_TAG = 'aqe:accept-rule:v1+sig';
31
32
  /**
@@ -137,14 +138,16 @@ export function sealedHash(sealed) {
137
138
  * unknown version so a missing rule can never silently pass verification.
138
139
  */
139
140
  export function gateFingerprint(ruleVersion) {
140
- if (!(ruleVersion in ACCEPTANCE_RULES)) {
141
+ // #1136: own entries only; `constructor` is not a registered rule.
142
+ if (!Object.hasOwn(ACCEPTANCE_RULES, ruleVersion)) {
141
143
  throw new Error(`Unknown acceptance rule version '${ruleVersion}' — cannot fingerprint an unregistered rule.`);
142
144
  }
143
145
  return createHash('sha256').update(RULE_TAG).update('\0').update(ruleVersion).digest('hex');
144
146
  }
145
147
  /** Re-execute a frozen rule on sealed inputs. Throws for an unknown version. */
146
148
  export function reExecuteGate(ruleVersion, sealed) {
147
- const rule = ACCEPTANCE_RULES[ruleVersion];
149
+ // #1136: an inherited member (`constructor` is Object) is not a rule.
150
+ const rule = getOwn(ACCEPTANCE_RULES, ruleVersion);
148
151
  if (!rule) {
149
152
  throw new Error(`Unknown acceptance rule version '${ruleVersion}' — refusing to re-execute an unregistered rule.`);
150
153
  }
@@ -260,14 +263,14 @@ export function pathSealedHash(sealed) {
260
263
  }
261
264
  /** Fingerprint of a path-rule VERSION. Throws for an unregistered rule. */
262
265
  export function pathGateFingerprint(ruleVersion) {
263
- if (!(ruleVersion in PROMOTION_PATH_RULES)) {
266
+ if (!Object.hasOwn(PROMOTION_PATH_RULES, ruleVersion)) {
264
267
  throw new Error(`Unknown promotion-path rule version '${ruleVersion}' — cannot fingerprint an unregistered rule.`);
265
268
  }
266
269
  return createHash('sha256').update(PATH_RULE_TAG).update('\0').update(ruleVersion).digest('hex');
267
270
  }
268
271
  /** Re-execute a frozen path rule on sealed inputs. Throws for an unknown version. */
269
272
  export function reExecutePathGate(ruleVersion, sealed) {
270
- const rule = PROMOTION_PATH_RULES[ruleVersion];
273
+ const rule = getOwn(PROMOTION_PATH_RULES, ruleVersion);
271
274
  if (!rule) {
272
275
  throw new Error(`Unknown promotion-path rule version '${ruleVersion}' — refusing to re-execute an unregistered rule.`);
273
276
  }
@@ -74,7 +74,19 @@ export class QEDaemon {
74
74
  this._healthCheckTimer.unref?.();
75
75
  // Auto-start workers if configured
76
76
  if (this.config.autoStart) {
77
- await this.workerManager.startAll();
77
+ try {
78
+ await this.workerManager.startAll();
79
+ }
80
+ catch (error) {
81
+ // #1116: a failed start must not leave the daemon reporting running.
82
+ this._running = false;
83
+ this._startedAt = undefined;
84
+ if (this._healthCheckTimer)
85
+ clearInterval(this._healthCheckTimer);
86
+ this._healthCheckTimer = undefined;
87
+ await this.workerManager.stopAll().catch(() => undefined);
88
+ throw error;
89
+ }
78
90
  console.info('[Daemon] All workers started');
79
91
  }
80
92
  // Log registered workers