agentic-qe 3.15.11 → 3.15.13

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 (522) hide show
  1. package/.claude/hooks/aqe-hook.cjs +38 -2
  2. package/.claude/skills/skills-manifest.json +1 -1
  3. package/CHANGELOG.md +267 -0
  4. package/assets/skills/skills-manifest.json +1 -1
  5. package/dist/cli/bundle.js +6 -6
  6. package/dist/cli/chunks/adapter-KCQDVYY2.js +2 -0
  7. package/dist/cli/chunks/{agent-booster-wasm-TIDSQ3ZK.js → agent-booster-wasm-6RRQWMNE.js} +2 -2
  8. package/dist/cli/chunks/{agent-handler-G3EPBVA7.js → agent-handler-AOH6TV7W.js} +2 -2
  9. package/dist/cli/chunks/{agent-memory-branch-ARC5C7GW.js → agent-memory-branch-2P54SF5N.js} +2 -2
  10. package/dist/cli/chunks/aqe-learning-engine-SAQOHSGN.js +2 -0
  11. package/dist/cli/chunks/{arena-K4I4QDXB.js → arena-NSVFCAF5.js} +2 -2
  12. package/dist/cli/chunks/{arena-36DTATJV.js → arena-X6MOGQHA.js} +4 -4
  13. package/dist/cli/chunks/{audit-WQSJSJZF.js → audit-27DJLQNM.js} +3 -3
  14. package/dist/cli/chunks/base-WCACU3FN.js +2 -0
  15. package/dist/cli/chunks/{better-sqlite3-BB4K67MT.js → better-sqlite3-BU5GXILS.js} +2 -2
  16. package/dist/cli/chunks/{brain-handler-CU3GOIU3.js → brain-handler-GTQNHHZS.js} +3 -3
  17. package/dist/cli/chunks/{branch-enumerator-NJQX7ZNB.js → branch-enumerator-5CLULOCU.js} +2 -2
  18. package/dist/cli/chunks/{browser-6YJF4FQW.js → browser-R4DMU3LN.js} +2 -2
  19. package/dist/cli/chunks/browser-workflow-G6IASEAP.js +2 -0
  20. package/dist/cli/chunks/{chunk-G4FAPO57.js → chunk-2G7TVT6W.js} +2 -2
  21. package/dist/cli/chunks/{chunk-HDNWSKHA.js → chunk-32ZMWEP3.js} +2 -2
  22. package/dist/cli/chunks/{chunk-FWSGPE3V.js → chunk-3AN5TNGD.js} +3 -3
  23. package/dist/cli/chunks/{chunk-X4J73KP3.js → chunk-3LJ7LQMV.js} +1 -1
  24. package/dist/cli/chunks/{chunk-3RHOPP7A.js → chunk-3QZEGE67.js} +1 -1
  25. package/dist/cli/chunks/{chunk-RBZCA7SD.js → chunk-3RZV5DGO.js} +2 -2
  26. package/dist/cli/chunks/{chunk-DDEOZPWJ.js → chunk-3Y2ROSCL.js} +2 -2
  27. package/dist/cli/chunks/{chunk-LD5CFK53.js → chunk-3Y7TJFHU.js} +2 -2
  28. package/dist/cli/chunks/{chunk-I36CRDHF.js → chunk-3YNLWPBF.js} +2 -2
  29. package/dist/cli/chunks/{chunk-ZMC543GI.js → chunk-42J34YG4.js} +2 -2
  30. package/dist/cli/chunks/{chunk-YNOCQ2SL.js → chunk-4OVC4RIL.js} +1 -1
  31. package/dist/cli/chunks/{chunk-2KFFEKSI.js → chunk-526QYFJU.js} +2 -2
  32. package/dist/cli/chunks/{chunk-LBX7M4LW.js → chunk-5FKWCZNF.js} +2 -2
  33. package/dist/cli/chunks/{chunk-OH5V5EJW.js → chunk-5K26BEYB.js} +2 -2
  34. package/dist/cli/chunks/{chunk-TCYSBC7Y.js → chunk-5MDERQH3.js} +1 -1
  35. package/dist/cli/chunks/{chunk-V5AADCBC.js → chunk-5VMAV6T6.js} +1 -1
  36. package/dist/cli/chunks/{chunk-YBBT3YYG.js → chunk-5ZGM3RMH.js} +1 -1
  37. package/dist/cli/chunks/{chunk-RTY7VSZB.js → chunk-6KATY3KS.js} +2 -2
  38. package/dist/cli/chunks/{chunk-LPU6PAJE.js → chunk-6Z7PRBSG.js} +2 -2
  39. package/dist/cli/chunks/{chunk-6NA3KZZT.js → chunk-72ASBE35.js} +7 -7
  40. package/dist/cli/chunks/{chunk-GBFUANTC.js → chunk-756CGMEH.js} +1 -1
  41. package/dist/cli/chunks/{chunk-UTTSH4NH.js → chunk-75RDHBAX.js} +3 -3
  42. package/dist/cli/chunks/{chunk-XGPTZUKQ.js → chunk-7CMTY45A.js} +2 -2
  43. package/dist/cli/chunks/{chunk-NC6K7SCQ.js → chunk-7JUC2MVZ.js} +2 -2
  44. package/dist/cli/chunks/{chunk-RTFKTKSO.js → chunk-7NA7JXNB.js} +2 -2
  45. package/dist/cli/chunks/{chunk-GWJWSLDA.js → chunk-7PLIEBY7.js} +2 -2
  46. package/dist/cli/chunks/{chunk-OURITHFV.js → chunk-7YTGHGK4.js} +2 -2
  47. package/dist/cli/chunks/{chunk-ITL3IN2E.js → chunk-A64JFBWI.js} +2 -2
  48. package/dist/cli/chunks/{chunk-OHR7C777.js → chunk-AL6FBH3E.js} +2 -2
  49. package/dist/cli/chunks/{chunk-5N25I53C.js → chunk-AQSVJNEH.js} +2 -2
  50. package/dist/cli/chunks/{chunk-FL32MTKT.js → chunk-ARJW4I2O.js} +2 -2
  51. package/dist/cli/chunks/{chunk-ZQHDA4O7.js → chunk-ASQYASNV.js} +1 -1
  52. package/dist/cli/chunks/{chunk-4HJKQIX5.js → chunk-BEGR4D6N.js} +2 -2
  53. package/dist/cli/chunks/{chunk-G77MLBDF.js → chunk-BK577VL7.js} +2 -2
  54. package/dist/cli/chunks/{chunk-NPZOBSAN.js → chunk-BLSLEVDI.js} +2 -2
  55. package/dist/cli/chunks/{chunk-R5LGV6GZ.js → chunk-BTVEYBW2.js} +2 -2
  56. package/dist/cli/chunks/{chunk-2CW7VRPH.js → chunk-C6JTLKG7.js} +5 -5
  57. package/dist/cli/chunks/{chunk-EWPUQCN4.js → chunk-C7JM7CD3.js} +2 -2
  58. package/dist/cli/chunks/{chunk-325QCVDI.js → chunk-CCMKSHAT.js} +2 -2
  59. package/dist/cli/chunks/{chunk-V7DA4HAK.js → chunk-CE7B5LU7.js} +1 -1
  60. package/dist/cli/chunks/{chunk-4RAQ7PJA.js → chunk-CM4LSLKR.js} +2 -2
  61. package/dist/cli/chunks/chunk-CRWPZT74.js +62 -0
  62. package/dist/cli/chunks/{chunk-U3LJNNVJ.js → chunk-CT6SAVXQ.js} +2 -2
  63. package/dist/cli/chunks/chunk-CV77DMDQ.js +2 -0
  64. package/dist/cli/chunks/{chunk-UMVSWQNB.js → chunk-DFUASIKA.js} +2 -2
  65. package/dist/cli/chunks/{chunk-KSE5TDM5.js → chunk-DLD7RUZ4.js} +2 -2
  66. package/dist/cli/chunks/{chunk-4MUBW4RT.js → chunk-DNDL7SOS.js} +2 -2
  67. package/dist/cli/chunks/{chunk-EJPK7OTR.js → chunk-DVGRPK7A.js} +2 -2
  68. package/dist/cli/chunks/{chunk-WCVCOT4E.js → chunk-E56B6IDX.js} +2 -2
  69. package/dist/cli/chunks/{chunk-7HEMJHPP.js → chunk-E7CLYGS7.js} +1 -1
  70. package/dist/cli/chunks/{chunk-R5GRABPQ.js → chunk-EXGMJFAT.js} +1 -1
  71. package/dist/cli/chunks/chunk-F3YS57NF.js +21 -0
  72. package/dist/cli/chunks/{chunk-I4K2HTQU.js → chunk-FZ76G4QJ.js} +1 -1
  73. package/dist/cli/chunks/{chunk-4UX35V7P.js → chunk-G2Q66Z23.js} +2 -2
  74. package/dist/cli/chunks/{chunk-KJCIMNHS.js → chunk-G6WDYBLQ.js} +1 -1
  75. package/dist/cli/chunks/{chunk-VWUZSNVC.js → chunk-G77ERMUD.js} +1 -1
  76. package/dist/cli/chunks/{chunk-FZHSG75I.js → chunk-GB6HBNH2.js} +2 -2
  77. package/dist/cli/chunks/{chunk-KDI5JOYZ.js → chunk-GHM6MQNK.js} +2 -2
  78. package/dist/cli/chunks/{chunk-H7BLYMNU.js → chunk-GHY6Z6KO.js} +5 -5
  79. package/dist/cli/chunks/{chunk-TFW7CCKS.js → chunk-GII6UM3F.js} +1 -1
  80. package/dist/cli/chunks/{chunk-DOBZPSKE.js → chunk-GU5HNCWI.js} +1 -1
  81. package/dist/cli/chunks/{chunk-AFFN6E6Q.js → chunk-H4GG2NLO.js} +2 -2
  82. package/dist/cli/chunks/{chunk-7R5HC56U.js → chunk-H4H2YSFH.js} +1 -1
  83. package/dist/cli/chunks/{chunk-J4JMCZVA.js → chunk-HD7YIFOI.js} +2 -2
  84. package/dist/cli/chunks/{chunk-5MTWCCZJ.js → chunk-HOAJUIBQ.js} +2 -2
  85. package/dist/cli/chunks/{chunk-T5KHJ3J7.js → chunk-HQZGPJYG.js} +2 -2
  86. package/dist/cli/chunks/{chunk-VEEYL2CZ.js → chunk-HZ5NXFXH.js} +2 -2
  87. package/dist/cli/chunks/{chunk-LQ4NUC6Q.js → chunk-I3C7JOXC.js} +2 -2
  88. package/dist/cli/chunks/{chunk-Z2EA7A4Z.js → chunk-IC3TQEOA.js} +1 -1
  89. package/dist/cli/chunks/{chunk-E44NNCEU.js → chunk-IJUHSJ2U.js} +2 -2
  90. package/dist/cli/chunks/{chunk-EH2S6AOR.js → chunk-J2ZIFFM6.js} +2 -2
  91. package/dist/cli/chunks/{chunk-GVKVJJQX.js → chunk-JGZ722G3.js} +2 -2
  92. package/dist/cli/chunks/{chunk-EK5GMOSO.js → chunk-JQGMW45H.js} +1 -1
  93. package/dist/cli/chunks/{chunk-XGBU3KEM.js → chunk-JRRXCODW.js} +2 -2
  94. package/dist/cli/chunks/{chunk-5WYZHDIZ.js → chunk-K3TLLJMX.js} +1 -1
  95. package/dist/cli/chunks/{chunk-LXQ3B4RY.js → chunk-K4CZA77U.js} +2 -2
  96. package/dist/cli/chunks/chunk-K65CGKLD.js +8 -0
  97. package/dist/cli/chunks/{chunk-HFFPYC4G.js → chunk-KADFXPPN.js} +2 -2
  98. package/dist/cli/chunks/{chunk-APPZATXA.js → chunk-KB56CPU4.js} +2 -2
  99. package/dist/cli/chunks/{chunk-25P77WA5.js → chunk-KCW47QR5.js} +1 -1
  100. package/dist/cli/chunks/{chunk-WM3SRRA6.js → chunk-KDNJ4F3P.js} +2 -2
  101. package/dist/cli/chunks/{chunk-5ERFHEEE.js → chunk-KDVZND5Q.js} +1 -1
  102. package/dist/cli/chunks/{chunk-YOCULVHR.js → chunk-KUAKV3IW.js} +1 -1
  103. package/dist/cli/chunks/{chunk-M5XYIQYZ.js → chunk-KV4T4MXK.js} +2 -2
  104. package/dist/cli/chunks/{chunk-MIK4RBEH.js → chunk-KWYH3FI4.js} +1 -1
  105. package/dist/cli/chunks/{chunk-UKKYMW3S.js → chunk-LFJALJOA.js} +2 -2
  106. package/dist/cli/chunks/{chunk-K7V2WZNF.js → chunk-LL7LDPXS.js} +1 -1
  107. package/dist/cli/chunks/{chunk-55CH76ZO.js → chunk-LUZNKJE6.js} +3 -3
  108. package/dist/cli/chunks/{chunk-OV5RPLKV.js → chunk-LWR3FV3Y.js} +2 -2
  109. package/dist/cli/chunks/{chunk-SMVVAVN2.js → chunk-LZYQHVD4.js} +2 -2
  110. package/dist/cli/chunks/{chunk-672XOJDG.js → chunk-M6AAGIG7.js} +1 -1
  111. package/dist/cli/chunks/{chunk-WCAVIJ64.js → chunk-MAMQA43L.js} +1 -1
  112. package/dist/cli/chunks/chunk-MB46UBGY.js +3 -0
  113. package/dist/cli/chunks/{chunk-AP3ADWDK.js → chunk-MFW5HSG4.js} +2 -2
  114. package/dist/cli/chunks/{chunk-NKTWKYHB.js → chunk-MGZ5FJUW.js} +2 -2
  115. package/dist/cli/chunks/{chunk-ERN43HOX.js → chunk-MVVB7C2E.js} +410 -410
  116. package/dist/cli/chunks/{chunk-57LNKSW7.js → chunk-N4CYAKOX.js} +2 -2
  117. package/dist/cli/chunks/chunk-NT4DBXSX.js +2 -0
  118. package/dist/cli/chunks/{chunk-BZPE3LDO.js → chunk-NU3W5WFT.js} +2 -2
  119. package/dist/cli/chunks/chunk-NURIILUB.js +2 -0
  120. package/dist/cli/chunks/{chunk-ITPGWGQS.js → chunk-NW7IBHJA.js} +4 -4
  121. package/dist/cli/chunks/{chunk-OD5D4LSZ.js → chunk-NZ3GUMB2.js} +2 -2
  122. package/dist/cli/chunks/{chunk-35M2X3C5.js → chunk-NZD4DPSU.js} +2 -2
  123. package/dist/cli/chunks/{chunk-EIDJNT5C.js → chunk-O6FGXMHD.js} +1 -1
  124. package/dist/cli/chunks/{chunk-OYJC3YON.js → chunk-OCAEXYFA.js} +2 -2
  125. package/dist/cli/chunks/{chunk-Y7B5EUIJ.js → chunk-OFACHK5O.js} +2 -2
  126. package/dist/cli/chunks/{chunk-5MNASJOH.js → chunk-P7A4NKTZ.js} +2 -2
  127. package/dist/cli/chunks/{chunk-M7XFBSIK.js → chunk-PB6J6HAA.js} +2 -2
  128. package/dist/cli/chunks/{chunk-5HQP4SLM.js → chunk-PHP5UBT4.js} +2 -2
  129. package/dist/cli/chunks/{chunk-KXS3Y2AX.js → chunk-PIDQVU3L.js} +2 -2
  130. package/dist/cli/chunks/{chunk-4UBVAJFO.js → chunk-PSFSPGUD.js} +2 -2
  131. package/dist/cli/chunks/chunk-PT4FMJPQ.js +3 -0
  132. package/dist/cli/chunks/{chunk-HDJUYAZG.js → chunk-Q3UDLV5Z.js} +1 -1
  133. package/dist/cli/chunks/{chunk-CIAL4YRY.js → chunk-QDEJ4CI2.js} +2 -2
  134. package/dist/cli/chunks/{chunk-S6IYEBAI.js → chunk-QPNG5ZN2.js} +2 -2
  135. package/dist/cli/chunks/{chunk-YPX2TV3M.js → chunk-R7SYRCRP.js} +1 -1
  136. package/dist/cli/chunks/{chunk-XNLIWQYE.js → chunk-RF7HWBHN.js} +2 -2
  137. package/dist/cli/chunks/{chunk-5YLOLACR.js → chunk-RFNW2LGD.js} +2 -2
  138. package/dist/cli/chunks/{chunk-2VLYUF7U.js → chunk-S5AZCIZS.js} +2 -2
  139. package/dist/cli/chunks/{chunk-ETVAYGCB.js → chunk-SE4VNN4I.js} +3 -3
  140. package/dist/cli/chunks/{chunk-E6PF35JZ.js → chunk-SG3NX7QE.js} +2 -2
  141. package/dist/cli/chunks/{chunk-VYTILW4R.js → chunk-SSU73QAX.js} +2 -2
  142. package/dist/cli/chunks/{chunk-ZP75ASUU.js → chunk-SVLQRAMF.js} +1 -1
  143. package/dist/cli/chunks/{chunk-JGJXXAS6.js → chunk-SYV2V3PL.js} +4 -4
  144. package/dist/cli/chunks/{chunk-4RH5I24Q.js → chunk-T3PGQFDI.js} +2 -2
  145. package/dist/cli/chunks/{chunk-O4JAKWWM.js → chunk-TCBBNUBP.js} +17 -17
  146. package/dist/cli/chunks/{chunk-QDESWOZP.js → chunk-TOQWL2ZF.js} +2 -2
  147. package/dist/cli/chunks/{chunk-NTB342NJ.js → chunk-TSQC2KKZ.js} +4 -4
  148. package/dist/cli/chunks/{chunk-NQZNMCZU.js → chunk-TWDW32W2.js} +2 -2
  149. package/dist/cli/chunks/{chunk-CO3DX2AX.js → chunk-TWJTK4CC.js} +2 -2
  150. package/dist/cli/chunks/{chunk-FUYOOKTH.js → chunk-U2FUXDDJ.js} +3 -3
  151. package/dist/cli/chunks/{chunk-XDI5X3FR.js → chunk-UDQSYWVF.js} +1 -1
  152. package/dist/cli/chunks/chunk-UOC3O6RP.js +5 -0
  153. package/dist/cli/chunks/chunk-UT2VZ33P.js +2 -0
  154. package/dist/cli/chunks/{chunk-IOZRKXR5.js → chunk-UTRV7T2N.js} +2 -2
  155. package/dist/cli/chunks/{chunk-ZMHCMJ4J.js → chunk-UXZSUMEA.js} +2 -2
  156. package/dist/cli/chunks/{chunk-G4CKPWF6.js → chunk-VRHRBAEM.js} +1 -1
  157. package/dist/cli/chunks/{chunk-AUUJBXWX.js → chunk-VRVMIPTM.js} +2 -2
  158. package/dist/cli/chunks/{chunk-IENZSO3K.js → chunk-VTDFVFST.js} +2 -2
  159. package/dist/cli/chunks/{chunk-JFLU7L3W.js → chunk-VTOBUZL6.js} +2 -2
  160. package/dist/cli/chunks/{chunk-KKYO2NKV.js → chunk-VU5TBX2V.js} +2 -2
  161. package/dist/cli/chunks/{chunk-XS2XF3YG.js → chunk-W26B7ERY.js} +1 -1
  162. package/dist/cli/chunks/{chunk-DOFREOPQ.js → chunk-W2QWSQVE.js} +2 -2
  163. package/dist/cli/chunks/{chunk-KSLLHFVY.js → chunk-W3INMZZ6.js} +1 -1
  164. package/dist/cli/chunks/{chunk-FLU5FDSC.js → chunk-W3PPFHI5.js} +59 -59
  165. package/dist/cli/chunks/chunk-WKGTGOYS.js +13 -0
  166. package/dist/cli/chunks/{chunk-4X4MWMHB.js → chunk-WNQS4WTS.js} +2 -2
  167. package/dist/cli/chunks/{chunk-XJKZ7FTR.js → chunk-WO274FRI.js} +2 -2
  168. package/dist/cli/chunks/{chunk-76SNL7GU.js → chunk-WOCGL4QP.js} +2 -2
  169. package/dist/cli/chunks/{chunk-HYXUN7BW.js → chunk-WQL7WCIZ.js} +1 -1
  170. package/dist/cli/chunks/{chunk-BTVWA35P.js → chunk-X2Z7F4EU.js} +2 -2
  171. package/dist/cli/chunks/{chunk-VBK2YAYY.js → chunk-X7N2JF2X.js} +2 -2
  172. package/dist/cli/chunks/{chunk-NT7JRHMH.js → chunk-XEAEYC6Y.js} +1 -1
  173. package/dist/cli/chunks/{chunk-G2IJFNZS.js → chunk-XNBOGCF3.js} +2 -2
  174. package/dist/cli/chunks/{chunk-LCVEEII4.js → chunk-XPRVF4YE.js} +2 -2
  175. package/dist/cli/chunks/{chunk-AMZKAJLJ.js → chunk-YBQH2VOP.js} +2 -2
  176. package/dist/cli/chunks/{chunk-JUMICXM6.js → chunk-YQFLQE53.js} +2 -2
  177. package/dist/cli/chunks/{chunk-M5RQ6U3G.js → chunk-YSZ5OE3Z.js} +2 -2
  178. package/dist/cli/chunks/{chunk-RQMCZQN2.js → chunk-YXRASAPI.js} +2 -2
  179. package/dist/cli/chunks/{chunk-X3PZCXWG.js → chunk-YZEXYO4W.js} +1 -1
  180. package/dist/cli/chunks/{chunk-TL6OFMXF.js → chunk-YZWBNBTW.js} +2 -2
  181. package/dist/cli/chunks/{chunk-CFWGGRE7.js → chunk-ZAKQLAHT.js} +1 -1
  182. package/dist/cli/chunks/ci-ENOASTYB.js +81 -0
  183. package/dist/cli/chunks/{ci-config-J665XNOX.js → ci-config-B26OXHQM.js} +2 -2
  184. package/dist/cli/chunks/{ci-output-PEQQQWVD.js → ci-output-JTCLLNOQ.js} +2 -2
  185. package/dist/cli/chunks/{circuit-breaker-HHB2JSKH.js → circuit-breaker-23JMFNM5.js} +2 -2
  186. package/dist/cli/chunks/{claude-flow-setup-JKUJRWPN.js → claude-flow-setup-ON6L462G.js} +2 -2
  187. package/dist/cli/chunks/client-TV3V2YZ5.js +2 -0
  188. package/dist/cli/chunks/{cline-installer-Y77BWTAN.js → cline-installer-OWQ4D2FQ.js} +2 -2
  189. package/dist/cli/chunks/{code-LV2HAGJY.js → code-2ZRL7SEU.js} +19 -18
  190. package/dist/cli/chunks/{code-index-extractor-4GKKSETB.js → code-index-extractor-JXSQVM67.js} +2 -2
  191. package/dist/cli/chunks/{codex-installer-WMKBYE5Y.js → codex-installer-7LXZYBSQ.js} +2 -2
  192. package/dist/cli/chunks/{completions-SBGFAOIJ.js → completions-C2LR623C.js} +2 -2
  193. package/dist/cli/chunks/{complexity-analyzer-AQHFIJXC.js → complexity-analyzer-TGQLHCYJ.js} +2 -2
  194. package/dist/cli/chunks/{continuedev-installer-26AYFS2E.js → continuedev-installer-RUGD24D2.js} +2 -2
  195. package/dist/cli/chunks/{copilot-installer-4UD3DK55.js → copilot-installer-ZLFVLEJP.js} +2 -2
  196. package/dist/cli/chunks/core-handlers-PZT4OLWR.js +2 -0
  197. package/dist/cli/chunks/{cost-tracker-TP4NZCG4.js → cost-tracker-RT4QL745.js} +2 -2
  198. package/dist/cli/chunks/{coverage-B2KIXHAI.js → coverage-NV3C4IMM.js} +11 -10
  199. package/dist/cli/chunks/cross-domain-router-QOFCZ7G4.js +2 -0
  200. package/dist/cli/chunks/{cursor-installer-AVZEQZ4W.js → cursor-installer-LJKLNFF6.js} +2 -2
  201. package/dist/cli/chunks/{daemon-XM2A7LQU.js → daemon-BMDXCQT5.js} +3 -3
  202. package/dist/cli/chunks/{daemon-P574WWBW.js → daemon-FBH3IRYN.js} +4 -4
  203. package/dist/cli/chunks/{dag-attention-scheduler-MIWOZ6ET.js → dag-attention-scheduler-JGDED55I.js} +2 -2
  204. package/dist/cli/chunks/{detect-TYR7HT23.js → detect-SZIHIVCJ.js} +2 -2
  205. package/dist/cli/chunks/{dist-node-2DGVQGLS.js → dist-node-FV3KWXQ6.js} +2 -2
  206. package/dist/cli/chunks/{domain-handler-RRA4ZOMF.js → domain-handler-GI5JWQOV.js} +2 -2
  207. package/dist/cli/chunks/{domain-plugins-IVZEZ5RB.js → domain-plugins-BUWY36TL.js} +2 -2
  208. package/dist/cli/chunks/domain-transfer-GCY7W5DA.js +2 -0
  209. package/dist/cli/chunks/dream-TRFBGDSQ.js +2 -0
  210. package/dist/cli/chunks/{embed-and-insert-pattern-VNIEOVPO.js → embed-and-insert-pattern-GPRR3ZGD.js} +2 -2
  211. package/dist/cli/chunks/{eval-QV4LVPUF.js → eval-XPB3IGAP.js} +2 -2
  212. package/dist/cli/chunks/{experience-capture-middleware-DAPKT763.js → experience-capture-middleware-2E554UB3.js} +3 -3
  213. package/dist/cli/chunks/{fast-paths-WVRFPHX7.js → fast-paths-ZSMWZPUC.js} +2 -2
  214. package/dist/cli/chunks/{feature-flags-DEFTUIYT.js → feature-flags-GIWVDVVC.js} +2 -2
  215. package/dist/cli/chunks/{feature-flags-O7ZXDDCD.js → feature-flags-N7EOGE5P.js} +2 -2
  216. package/dist/cli/chunks/file-discovery-WCKGMSPZ.js +2 -0
  217. package/dist/cli/chunks/fleet-HCHDOUCX.js +44 -0
  218. package/dist/cli/chunks/{gnn-wrapper-LS4LZJDR.js → gnn-wrapper-CZNCNXXZ.js} +2 -2
  219. package/dist/cli/chunks/{heartbeat-handler-RFTERD4K.js → heartbeat-handler-6YUIF2YQ.js} +4 -4
  220. package/dist/cli/chunks/heartbeat-scheduler-P44A2OX3.js +2 -0
  221. package/dist/cli/chunks/hnsw-adapter-ZJQIQJKC.js +2 -0
  222. package/dist/cli/chunks/hnsw-index-HMG2GH3Z.js +2 -0
  223. package/dist/cli/chunks/{hnsw-legacy-bridge-GPKGFFHY.js → hnsw-legacy-bridge-J3M3IK24.js} +2 -2
  224. package/dist/cli/chunks/{hnswlib-node-PHL3F2PR.js → hnswlib-node-ULGTGDZW.js} +2 -2
  225. package/dist/cli/chunks/{hooks-GYJ6D4QM.js → hooks-C4BUGYUQ.js} +28 -28
  226. package/dist/cli/chunks/hybrid-backend-B7M74PZG.js +2 -0
  227. package/dist/cli/chunks/{hypergraph-engine-YGEQPCKJ.js → hypergraph-engine-WINGVMPG.js} +2 -2
  228. package/dist/cli/chunks/{hypergraph-handler-ZIMM647V.js → hypergraph-handler-GADMWKAU.js} +3 -3
  229. package/dist/cli/chunks/impact-analyzer-PZYOVKQO.js +2 -0
  230. package/dist/cli/chunks/{init-guard-VOMBXJXG.js → init-guard-K2T4QWAO.js} +2 -2
  231. package/dist/cli/chunks/{init-handler-PSMUBWK5.js → init-handler-PCZTDZYI.js} +6 -6
  232. package/dist/cli/chunks/init-wizard-TZDJQK3U.js +2 -0
  233. package/dist/cli/chunks/kernel-Y6RRIOKW.js +2 -0
  234. package/dist/cli/chunks/{kilocode-installer-2YNTFBWJ.js → kilocode-installer-XENXNEIU.js} +2 -2
  235. package/dist/cli/chunks/{kiro-installer-XHJDPVAZ.js → kiro-installer-3PG2TJ67.js} +2 -2
  236. package/dist/cli/chunks/knowledge-graph-BVD5Z66M.js +2 -0
  237. package/dist/cli/chunks/{learning-GNSIDRNG.js → learning-6KDH7FK4.js} +3 -3
  238. package/dist/cli/chunks/{llm-router-LQDM7IU2.js → llm-router-RKVDEWU2.js} +4 -4
  239. package/dist/cli/chunks/llm-router-service-KHCAMSUU.js +2 -0
  240. package/dist/cli/chunks/{load-YATHI72E.js → load-ITHC564X.js} +2 -2
  241. package/dist/cli/chunks/load-test-RUF7DZA5.js +2 -0
  242. package/dist/cli/chunks/{mcp-4Y6GDLYK.js → mcp-TCL5UW3N.js} +2 -2
  243. package/dist/cli/chunks/{memory-OUW3L7H2.js → memory-BKDAY2N2.js} +5 -5
  244. package/dist/cli/chunks/memory-backend-7ZLFOVGG.js +2 -0
  245. package/dist/cli/chunks/{memory-handlers-G3LFF53U.js → memory-handlers-WN4FXFOA.js} +2 -2
  246. package/dist/cli/chunks/{multi-model-executor-UBZJXAD2.js → multi-model-executor-VHAT7ZPF.js} +2 -2
  247. package/dist/cli/chunks/{opencode-installer-AMMNWVH5.js → opencode-installer-E3VM3EEY.js} +2 -2
  248. package/dist/cli/chunks/{orchestrator-Y44WDOER.js → orchestrator-BMQ6X762.js} +58 -20
  249. package/dist/cli/chunks/pattern-null-store-RY6CVYHP.js +2 -0
  250. package/dist/cli/chunks/{pattern-usage-recorder-ESR42RME.js → pattern-usage-recorder-GOOR2BV5.js} +2 -2
  251. package/dist/cli/chunks/{pipeline-EDTS6OSC.js → pipeline-5NSFQQIX.js} +2 -2
  252. package/dist/cli/chunks/{platform-5WONJSUX.js → platform-SQM34J5G.js} +2 -2
  253. package/dist/cli/chunks/{plugin-IJXPCLD4.js → plugin-UQJZRMZG.js} +2 -2
  254. package/dist/cli/chunks/{prime-radiant-advanced-wasm-5ECKGZK6.js → prime-radiant-advanced-wasm-WMDJOL4S.js} +2 -2
  255. package/dist/cli/chunks/project-root-IO5KRNGL.js +2 -0
  256. package/dist/cli/chunks/protocol-executor-U2CUDWDE.js +2 -0
  257. package/dist/cli/chunks/{protocol-handler-DRD3GVNW.js → protocol-handler-OBDCVY6X.js} +2 -2
  258. package/dist/cli/chunks/{prove-KTGW2HMJ.js → prove-XDC7I4XT.js} +2 -2
  259. package/dist/cli/chunks/qe-reasoning-bank-DQSSX2IP.js +2 -0
  260. package/dist/cli/chunks/{quality-DV2WPRRS.js → quality-L4GQ6WX4.js} +2 -2
  261. package/dist/cli/chunks/{quality-gate-HFUAFVZC.js → quality-gate-MJG66LKN.js} +3 -3
  262. package/dist/cli/chunks/queen-coordinator-6FN4BZIX.js +2 -0
  263. package/dist/cli/chunks/real-embeddings-HW4G2LWL.js +2 -0
  264. package/dist/cli/chunks/{ref-validation-QWSKS5OY.js → ref-validation-FC7JOJ2C.js} +2 -2
  265. package/dist/cli/chunks/{roocode-installer-RBAYRCHX.js → roocode-installer-KWS4CEIC.js} +2 -2
  266. package/dist/cli/chunks/router-YUO3I7RU.js +2 -0
  267. package/dist/cli/chunks/routing-feedback-36SLQGJE.js +2 -0
  268. package/dist/cli/chunks/{routing-handler-FMPP3XKO.js → routing-handler-QF4WVB2S.js} +2 -2
  269. package/dist/cli/chunks/{ruvector-commands-KZZT4HWF.js → ruvector-commands-2MTCOUK6.js} +2 -2
  270. package/dist/cli/chunks/rvf-dual-writer-FRYZH3WZ.js +2 -0
  271. package/dist/cli/chunks/rvf-migration-adapter-XXNITL5I.js +2 -0
  272. package/dist/cli/chunks/{rvf-migration-coordinator-7CHEV35N.js → rvf-migration-coordinator-BREJCXWN.js} +2 -2
  273. package/dist/cli/chunks/rvf-native-adapter-D2WWKJIV.js +2 -0
  274. package/dist/cli/chunks/{rvf-store-integrity-Q2TH52SN.js → rvf-store-integrity-KKC6HOJD.js} +2 -2
  275. package/dist/cli/chunks/safe-db-4RRIGRXD.js +2 -0
  276. package/dist/cli/chunks/schedule-25RTO4DQ.js +2 -0
  277. package/dist/cli/chunks/scheduler-BPIOJZ5P.js +2 -0
  278. package/dist/cli/chunks/{security-CUEA3UIM.js → security-OSAE7VAP.js} +3 -3
  279. package/dist/cli/chunks/{shared-rvf-adapter-DROMBRV2.js → shared-rvf-adapter-COUOS665.js} +2 -2
  280. package/dist/cli/chunks/{shared-rvf-dual-writer-DBNABOP7.js → shared-rvf-dual-writer-YXMPZKQE.js} +2 -2
  281. package/dist/cli/chunks/sqlite-persistence-EDF47DDX.js +2 -0
  282. package/dist/cli/chunks/{standalone-memory-IAHA3M6B.js → standalone-memory-E6JBMOIL.js} +2 -2
  283. package/dist/cli/chunks/{status-handler-AFUCASTX.js → status-handler-AFTCIYIX.js} +2 -2
  284. package/dist/cli/chunks/{structural-health-AQRV6JJ6.js → structural-health-2FROCEI4.js} +2 -2
  285. package/dist/cli/chunks/{sync-XW5TLZ7M.js → sync-VAYTOWDC.js} +2 -2
  286. package/dist/cli/chunks/{sync-GX7FMJHL.js → sync-YIQYOFGW.js} +2 -2
  287. package/dist/cli/chunks/task-handler-KVQHDEX3.js +62 -0
  288. package/dist/cli/chunks/task-handlers-MVVECQA6.js +9 -0
  289. package/dist/cli/chunks/{test-D2XDJNDX.js → test-5JSVTOMY.js} +4 -4
  290. package/dist/cli/chunks/test-runner-process-LEPF2OSS.js +2 -0
  291. package/dist/cli/chunks/{test-scheduling-TS6I2PR7.js → test-scheduling-HBOHVLI3.js} +3 -3
  292. package/dist/cli/chunks/{token-bootstrap-HBBLPCZ3.js → token-bootstrap-5VEPTPFA.js} +2 -2
  293. package/dist/cli/chunks/{token-usage-3MBUX4PR.js → token-usage-TBJHDLY6.js} +2 -2
  294. package/dist/cli/chunks/{transformers-ZWMQO3L2.js → transformers-VAWYMHMZ.js} +2 -2
  295. package/dist/cli/chunks/tree-sitter-wasm-parser-TSZTCMFV.js +2 -0
  296. package/dist/cli/chunks/{types-5YEMGPSQ.js → types-R5SDZU2E.js} +2 -2
  297. package/dist/cli/chunks/unified-memory-TLGSSLMI.js +2 -0
  298. package/dist/cli/chunks/unified-memory-hnsw-MSUR7ZOO.js +2 -0
  299. package/dist/cli/chunks/unified-persistence-VFFOTWK7.js +2 -0
  300. package/dist/cli/chunks/{upgrade-2TPBKIHI.js → upgrade-K5PIHXRB.js} +2 -2
  301. package/dist/cli/chunks/{validate-XRAXXFW6.js → validate-RPTS7RYJ.js} +2 -2
  302. package/dist/cli/chunks/{validate-swarm-IYSCS3BZ.js → validate-swarm-B2ZL556X.js} +2 -2
  303. package/dist/cli/chunks/visual-security-6Q44XNLB.js +2 -0
  304. package/dist/cli/chunks/{web-tree-sitter-PZQ3ZG2P.js → web-tree-sitter-K4DUJC32.js} +2 -2
  305. package/dist/cli/chunks/{windsurf-installer-U6XWFRVT.js → windsurf-installer-OK2AJN35.js} +2 -2
  306. package/dist/cli/chunks/witness-chain-KDOMXDQX.js +2 -0
  307. package/dist/cli/chunks/witness-chain-N3OY2RMH.js +2 -0
  308. package/dist/cli/chunks/{witness-chain-repair-K7YX2AO6.js → witness-chain-repair-L6Y5RFXR.js} +2 -2
  309. package/dist/cli/chunks/{witness-chain-verifier-GUTC3W7N.js → witness-chain-verifier-N4CW7FZX.js} +2 -2
  310. package/dist/cli/chunks/{witness-key-manager-YBNKMOP6.js → witness-key-manager-TDNPS3WD.js} +2 -2
  311. package/dist/cli/chunks/{workflow-UAJUILFQ.js → workflow-XRZA3YCY.js} +4 -4
  312. package/dist/cli/chunks/workflow-orchestrator-CVNNT2RJ.js +2 -0
  313. package/dist/cli/chunks/{wrappers-AVZ3GPAL.js → wrappers-5JIFWKN6.js} +2 -2
  314. package/dist/cli/commands/ci.js +7 -0
  315. package/dist/cli/commands/code.js +6 -0
  316. package/dist/cli/commands/coverage.js +7 -1
  317. package/dist/cli/commands/fleet-run.d.ts +12 -0
  318. package/dist/cli/commands/fleet-run.js +175 -0
  319. package/dist/cli/commands/fleet.js +2 -117
  320. package/dist/cli/commands/hooks-handlers/stats-hooks.d.ts +4 -3
  321. package/dist/cli/commands/hooks-handlers/stats-hooks.js +22 -4
  322. package/dist/cli/handlers/task-handler.d.ts +5 -0
  323. package/dist/cli/handlers/task-handler.js +26 -0
  324. package/dist/cli/utils/coverage-verdict.d.ts +11 -2
  325. package/dist/cli/utils/coverage-verdict.js +26 -6
  326. package/dist/cli/utils/fleet-operation.d.ts +10 -2
  327. package/dist/cli/utils/fleet-operation.js +20 -3
  328. package/dist/cli/utils/fleet-result.d.ts +20 -4
  329. package/dist/cli/utils/fleet-result.js +32 -21
  330. package/dist/cli/utils/fleet-shard.d.ts +36 -0
  331. package/dist/cli/utils/fleet-shard.js +110 -0
  332. package/dist/coordination/handlers/code-intelligence-handlers.js +21 -1
  333. package/dist/coordination/handlers/coverage-collection.d.ts +2 -0
  334. package/dist/coordination/handlers/coverage-collection.js +2 -1
  335. package/dist/coordination/handlers/coverage-evidence.d.ts +75 -0
  336. package/dist/coordination/handlers/coverage-evidence.js +159 -0
  337. package/dist/coordination/handlers/coverage-handlers.js +16 -3
  338. package/dist/coordination/handlers/coverage-scope.d.ts +40 -0
  339. package/dist/coordination/handlers/coverage-scope.js +321 -0
  340. package/dist/coordination/handlers/coverage-target.d.ts +9 -0
  341. package/dist/coordination/handlers/coverage-target.js +15 -5
  342. package/dist/coordination/handlers/handler-types.d.ts +2 -2
  343. package/dist/coordination/handlers/handler-utils.d.ts +11 -0
  344. package/dist/coordination/handlers/handler-utils.js +22 -8
  345. package/dist/coordination/handlers/misc-handlers.js +5 -2
  346. package/dist/coordination/handlers/quality-handlers.js +2 -2
  347. package/dist/coordination/handlers/security-handlers.js +12 -2
  348. package/dist/coordination/protocols/security-audit.js +11 -1
  349. package/dist/coordination/task-executor.js +7 -2
  350. package/dist/domains/code-intelligence/coordinator-gnn.d.ts +2 -16
  351. package/dist/domains/code-intelligence/coordinator-gnn.js +1 -62
  352. package/dist/domains/code-intelligence/coordinator.d.ts +12 -6
  353. package/dist/domains/code-intelligence/coordinator.js +24 -27
  354. package/dist/domains/code-intelligence/interfaces.d.ts +9 -0
  355. package/dist/domains/code-intelligence/services/metric-collector/listing-process-owner.js +4 -1
  356. package/dist/domains/code-intelligence/services/semantic-analyzer.d.ts +51 -5
  357. package/dist/domains/code-intelligence/services/semantic-analyzer.js +144 -78
  358. package/dist/domains/coverage-analysis/collected-metrics.d.ts +10 -0
  359. package/dist/domains/coverage-analysis/collected-metrics.js +29 -0
  360. package/dist/domains/coverage-analysis/services/coverage-analyzer.js +11 -3
  361. package/dist/domains/coverage-analysis/services/coverage-parser.d.ts +2 -0
  362. package/dist/domains/coverage-analysis/services/coverage-parser.js +18 -2
  363. package/dist/domains/quality-assessment/coherence/gate-controller.js +16 -4
  364. package/dist/domains/quality-assessment/coherence/lambda-calculator.d.ts +8 -0
  365. package/dist/domains/quality-assessment/coherence/lambda-calculator.js +57 -14
  366. package/dist/domains/quality-assessment/coherence/types.d.ts +12 -7
  367. package/dist/domains/quality-assessment/coordinator-gate-evaluation.js +3 -1
  368. package/dist/domains/quality-assessment/coordinator-reports.d.ts +30 -10
  369. package/dist/domains/quality-assessment/coordinator-reports.js +93 -57
  370. package/dist/domains/quality-assessment/coordinator.d.ts +14 -40
  371. package/dist/domains/quality-assessment/coordinator.js +10 -4
  372. package/dist/domains/quality-assessment/interfaces.d.ts +2 -0
  373. package/dist/domains/quality-assessment/services/coherence-gate.js +15 -2
  374. package/dist/domains/quality-assessment/services/quality-gate.js +6 -4
  375. package/dist/domains/security-compliance/index.d.ts +1 -1
  376. package/dist/domains/security-compliance/interfaces.d.ts +46 -5
  377. package/dist/domains/security-compliance/services/scanners/dast-auth-testing.d.ts +3 -3
  378. package/dist/domains/security-compliance/services/scanners/dast-auth-testing.js +15 -14
  379. package/dist/domains/security-compliance/services/scanners/dast-helpers.d.ts +8 -9
  380. package/dist/domains/security-compliance/services/scanners/dast-helpers.js +19 -44
  381. package/dist/domains/security-compliance/services/scanners/dast-injection-testing.d.ts +3 -3
  382. package/dist/domains/security-compliance/services/scanners/dast-injection-testing.js +13 -9
  383. package/dist/domains/security-compliance/services/scanners/dast-requests.d.ts +54 -0
  384. package/dist/domains/security-compliance/services/scanners/dast-requests.js +125 -0
  385. package/dist/domains/security-compliance/services/scanners/dast-scanner.d.ts +5 -1
  386. package/dist/domains/security-compliance/services/scanners/dast-scanner.js +125 -155
  387. package/dist/domains/security-compliance/services/scanners/index.d.ts +1 -1
  388. package/dist/domains/security-compliance/services/scanners/index.js +1 -1
  389. package/dist/domains/security-compliance/services/scanners/scanner-types.d.ts +2 -2
  390. package/dist/domains/security-compliance/services/security-auditor-dast.js +183 -212
  391. package/dist/domains/security-compliance/services/security-auditor-reports.js +5 -1
  392. package/dist/domains/security-compliance/services/security-auditor.d.ts +11 -3
  393. package/dist/domains/security-compliance/services/security-auditor.js +106 -65
  394. package/dist/domains/test-execution/coordinator.d.ts +2 -1
  395. package/dist/domains/test-execution/coordinator.js +33 -27
  396. package/dist/domains/test-execution/interfaces.d.ts +5 -0
  397. package/dist/domains/test-execution/services/test-executor.d.ts +6 -0
  398. package/dist/domains/test-execution/services/test-executor.js +16 -4
  399. package/dist/domains/visual-accessibility/coordinator.js +34 -9
  400. package/dist/domains/visual-accessibility/interfaces.d.ts +27 -0
  401. package/dist/domains/visual-accessibility/plugin.js +5 -0
  402. package/dist/domains/visual-accessibility/services/accessibility-tester-heuristics.d.ts +13 -21
  403. package/dist/domains/visual-accessibility/services/accessibility-tester-heuristics.js +13 -297
  404. package/dist/domains/visual-accessibility/services/accessibility-tester.d.ts +13 -5
  405. package/dist/domains/visual-accessibility/services/accessibility-tester.js +96 -73
  406. package/dist/init/phases/10-workers.js +42 -4
  407. package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.d.ts +23 -1
  408. package/dist/integrations/agentic-flow/reasoning-bank/experience-replay.js +50 -15
  409. package/dist/integrations/agentic-flow/reasoning-bank/index.d.ts +7 -2
  410. package/dist/integrations/agentic-flow/reasoning-bank/index.js +8 -0
  411. package/dist/integrations/embeddings/index/HNSWIndex.js +8 -4
  412. package/dist/integrations/ruvector/transfer-coherence-stub.js +5 -10
  413. package/dist/learning/embedder-endpoint-client.d.ts +8 -0
  414. package/dist/learning/embedder-endpoint-client.js +20 -0
  415. package/dist/learning/embedder-recovery.d.ts +63 -0
  416. package/dist/learning/embedder-recovery.js +94 -0
  417. package/dist/learning/qe-reasoning-bank-types.d.ts +5 -0
  418. package/dist/learning/qe-reasoning-bank.d.ts +21 -0
  419. package/dist/learning/qe-reasoning-bank.js +54 -8
  420. package/dist/learning/real-embeddings.d.ts +23 -0
  421. package/dist/learning/real-embeddings.js +69 -2
  422. package/dist/learning/real-qe-reasoning-bank.d.ts +24 -4
  423. package/dist/learning/real-qe-reasoning-bank.js +58 -20
  424. package/dist/logging/redaction.js +142 -12
  425. package/dist/mcp/bundle.js +509 -497
  426. package/dist/mcp/daemon-mode.d.ts +126 -0
  427. package/dist/mcp/daemon-mode.js +257 -0
  428. package/dist/mcp/entry.d.ts +4 -0
  429. package/dist/mcp/entry.js +50 -2
  430. package/dist/mcp/handlers/domain-handler-configs.d.ts +8 -0
  431. package/dist/mcp/handlers/domain-handler-configs.js +14 -2
  432. package/dist/mcp/handlers/handler-factory.js +3 -0
  433. package/dist/mcp/handlers/model-route-handlers.d.ts +107 -0
  434. package/dist/mcp/handlers/model-route-handlers.js +139 -0
  435. package/dist/mcp/handlers/orchestrate-routes.d.ts +6 -1
  436. package/dist/mcp/handlers/orchestrate-routes.js +94 -3
  437. package/dist/mcp/handlers/task-handlers.d.ts +3 -242
  438. package/dist/mcp/handlers/task-handlers.js +11 -788
  439. package/dist/mcp/handlers/task-inference.d.ts +26 -0
  440. package/dist/mcp/handlers/task-inference.js +156 -0
  441. package/dist/mcp/handlers/task-learning-handlers.d.ts +92 -0
  442. package/dist/mcp/handlers/task-learning-handlers.js +230 -0
  443. package/dist/mcp/handlers/task-orchestrate-handler.d.ts +73 -0
  444. package/dist/mcp/handlers/task-orchestrate-handler.js +361 -0
  445. package/dist/mcp/protocol-server.js +15 -2
  446. package/dist/mcp/services/reasoning-bank-service.d.ts +6 -1
  447. package/dist/mcp/services/reasoning-bank-service.js +9 -0
  448. package/dist/mcp/tools/code-intelligence/analyze.js +3 -6
  449. package/dist/mcp/tools/coverage-analysis/index.d.ts +4 -0
  450. package/dist/mcp/tools/coverage-analysis/index.js +8 -2
  451. package/dist/mcp/tools/visual-accessibility/index.d.ts +7 -0
  452. package/dist/mcp/tools/visual-accessibility/index.js +29 -13
  453. package/dist/mcp/types.d.ts +14 -0
  454. package/dist/routing/advisor/redaction.js +22 -2
  455. package/dist/shared/events/domain-events.d.ts +2 -0
  456. package/dist/shared/llm/providers/response-deadline.js +16 -2
  457. package/dist/shared/metrics/code-metrics.js +21 -3
  458. package/dist/shared/parsers/typescript-parser.d.ts +6 -0
  459. package/dist/shared/parsers/typescript-parser.js +13 -1
  460. package/dist/shared/types/index.js +3 -1
  461. package/dist/strange-loop/infra-healing/infra-aware-agent-provider.js +8 -1
  462. package/package.json +3 -3
  463. package/dist/cli/chunks/adapter-V4GSGOOK.js +0 -2
  464. package/dist/cli/chunks/aqe-learning-engine-6WQTM5YR.js +0 -2
  465. package/dist/cli/chunks/base-AK7BXBX2.js +0 -2
  466. package/dist/cli/chunks/browser-workflow-VTDFBW7T.js +0 -2
  467. package/dist/cli/chunks/chunk-2DTX7YAZ.js +0 -6
  468. package/dist/cli/chunks/chunk-72ZBJD2E.js +0 -3
  469. package/dist/cli/chunks/chunk-EBPJY4DI.js +0 -3
  470. package/dist/cli/chunks/chunk-H43AFUKL.js +0 -2
  471. package/dist/cli/chunks/chunk-HJ3XNTTJ.js +0 -2
  472. package/dist/cli/chunks/chunk-IO5537OM.js +0 -2
  473. package/dist/cli/chunks/chunk-IW6WDGHM.js +0 -2
  474. package/dist/cli/chunks/chunk-K2HBNYAZ.js +0 -62
  475. package/dist/cli/chunks/chunk-LRL56ZYL.js +0 -21
  476. package/dist/cli/chunks/chunk-VLD7Z2ED.js +0 -13
  477. package/dist/cli/chunks/chunk-VO3DRK4P.js +0 -3
  478. package/dist/cli/chunks/ci-6GUFAZMJ.js +0 -81
  479. package/dist/cli/chunks/client-HL2COSFM.js +0 -2
  480. package/dist/cli/chunks/core-handlers-IX7ATLM6.js +0 -2
  481. package/dist/cli/chunks/cross-domain-router-YYKLAPJO.js +0 -2
  482. package/dist/cli/chunks/domain-transfer-DOBI67K6.js +0 -2
  483. package/dist/cli/chunks/dream-T6EP7B3F.js +0 -2
  484. package/dist/cli/chunks/file-discovery-JYMVTDMU.js +0 -2
  485. package/dist/cli/chunks/fleet-FVAUMKUT.js +0 -46
  486. package/dist/cli/chunks/heartbeat-scheduler-4N5MUJ7S.js +0 -2
  487. package/dist/cli/chunks/hnsw-adapter-ZPAJDSLR.js +0 -2
  488. package/dist/cli/chunks/hnsw-index-4CTH6RHB.js +0 -2
  489. package/dist/cli/chunks/hybrid-backend-AW6UTXQS.js +0 -2
  490. package/dist/cli/chunks/impact-analyzer-MZK3JMSV.js +0 -2
  491. package/dist/cli/chunks/init-wizard-FUC7KDVX.js +0 -2
  492. package/dist/cli/chunks/kernel-ZCPMCVMW.js +0 -2
  493. package/dist/cli/chunks/knowledge-graph-NUJKEDNF.js +0 -2
  494. package/dist/cli/chunks/llm-router-service-B2BFBQ76.js +0 -2
  495. package/dist/cli/chunks/load-test-ZHQ2MUGO.js +0 -2
  496. package/dist/cli/chunks/memory-backend-AAMQG6WH.js +0 -2
  497. package/dist/cli/chunks/pattern-null-store-RFNVA46O.js +0 -2
  498. package/dist/cli/chunks/project-root-7QL4KP5C.js +0 -2
  499. package/dist/cli/chunks/protocol-executor-2NW5BD4R.js +0 -2
  500. package/dist/cli/chunks/qe-reasoning-bank-G2JZOGKD.js +0 -2
  501. package/dist/cli/chunks/queen-coordinator-GRG5FT2A.js +0 -2
  502. package/dist/cli/chunks/real-embeddings-RQRVOKVM.js +0 -2
  503. package/dist/cli/chunks/router-LQB5SWAF.js +0 -2
  504. package/dist/cli/chunks/routing-feedback-OEEXA55N.js +0 -2
  505. package/dist/cli/chunks/rvf-dual-writer-BZK4M7BO.js +0 -2
  506. package/dist/cli/chunks/rvf-migration-adapter-EZZUJL2E.js +0 -2
  507. package/dist/cli/chunks/rvf-native-adapter-6COXTQZ3.js +0 -2
  508. package/dist/cli/chunks/safe-db-PE6G3L55.js +0 -2
  509. package/dist/cli/chunks/schedule-OLKQ6QYW.js +0 -2
  510. package/dist/cli/chunks/scheduler-LSGBDFAT.js +0 -2
  511. package/dist/cli/chunks/sqlite-persistence-HH4DNTYH.js +0 -2
  512. package/dist/cli/chunks/task-handler-TFKVUTNF.js +0 -60
  513. package/dist/cli/chunks/task-handlers-SS4ZDXNF.js +0 -9
  514. package/dist/cli/chunks/test-runner-process-PSSBNNGR.js +0 -2
  515. package/dist/cli/chunks/tree-sitter-wasm-parser-TYRQRJ2W.js +0 -2
  516. package/dist/cli/chunks/unified-memory-AGDZQ5XD.js +0 -2
  517. package/dist/cli/chunks/unified-memory-hnsw-X5TJ3JDE.js +0 -2
  518. package/dist/cli/chunks/unified-persistence-UCV7YETW.js +0 -2
  519. package/dist/cli/chunks/visual-security-ZLXRIQZV.js +0 -2
  520. package/dist/cli/chunks/witness-chain-CVIWYTD2.js +0 -2
  521. package/dist/cli/chunks/witness-chain-VBKORKOX.js +0 -2
  522. package/dist/cli/chunks/workflow-orchestrator-3ZN7MVCE.js +0 -2
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Agentic QE v3 - MCP server daemon mode (#1158)
3
+ *
4
+ * The generated `.agentic-qe/workers/start-daemon.cjs` runs the MCP server as
5
+ * a detached background process with no stdin (`stdio: 'ignore'`), only to
6
+ * host the worker daemon. The #513 guard treats stdin EOF as "the client is
7
+ * gone" and shuts the server down, so that daemon used to exit within
8
+ * seconds of starting.
9
+ *
10
+ * `AQE_MCP_DAEMON=1` selects daemon mode. It changes exactly one thing: stdin
11
+ * EOF/close no longer shuts the server down, and a ref'd heartbeat timer keeps
12
+ * the process alive (worker timers are unref'd, also #513). The server then
13
+ * stops only on SIGTERM/SIGINT (what `stop-daemon.cjs` sends), the JSON-RPC
14
+ * `shutdown` method, or a crash.
15
+ *
16
+ * Safety: daemon mode is honoured only when stdin is NOT a pipe or socket. An
17
+ * MCP client always talks to the server over a pipe/socket, so an
18
+ * `AQE_MCP_DAEMON` that leaks into a client's environment cannot turn its
19
+ * server into an orphan that outlives the client: the #513 guard stays on and
20
+ * a warning is logged. The variable is also removed from `process.env` once
21
+ * read, so processes the server spawns do not inherit it.
22
+ *
23
+ * Log size (#1207): the server's stdout/stderr ARE daemon.log (a descriptor
24
+ * opened with O_APPEND by start-daemon.cjs), so renaming the file would not
25
+ * stop the writes. Instead, on each heartbeat the server copies an oversized
26
+ * daemon.log to daemon.log.1 and truncates daemon.log in place; with O_APPEND
27
+ * the next write lands at the new end of the file. start-daemon.cjs rotates an
28
+ * oversized log at start-up the same way (a rename, as nothing writes it then).
29
+ */
30
+ export declare const DAEMON_MODE_ENV = "AQE_MCP_DAEMON";
31
+ /** Default interval of the daemon heartbeat line in daemon.log. */
32
+ export declare const DEFAULT_DAEMON_HEARTBEAT_MS = 60000;
33
+ /** Heartbeat interval in seconds (#1207), also how often daemon.log size is checked. */
34
+ export declare const DAEMON_HEARTBEAT_ENV = "AQE_DAEMON_HEARTBEAT_SECONDS";
35
+ /** Size cap of daemon.log before it is rotated to daemon.log.1 (#1207). */
36
+ export declare const DAEMON_LOG_MAX_SIZE_ENV = "AQE_DAEMON_LOG_MAX_SIZE";
37
+ export declare const DEFAULT_DAEMON_LOG_MAX_BYTES: number;
38
+ /**
39
+ * Absolute path of daemon.log, set by start-daemon.cjs for the server it
40
+ * starts. Internal: the server rotates the log only when this file is the one
41
+ * its stdout/stderr write to.
42
+ */
43
+ export declare const DAEMON_LOG_PATH_ENV = "AQE_MCP_DAEMON_LOG";
44
+ export interface ParsedSetting {
45
+ value: number;
46
+ /** Set when the raw value was rejected and the default applies. */
47
+ warning?: string;
48
+ }
49
+ /**
50
+ * Parse `AQE_DAEMON_LOG_MAX_SIZE`: bytes, or a number with a K, M or G suffix
51
+ * (binary units, optional trailing B). `0`/`off` disables rotation (value 0).
52
+ * Unset, empty or invalid values fall back to the 5 MB default.
53
+ */
54
+ export declare function parseDaemonLogMaxBytes(raw: string | undefined): ParsedSetting;
55
+ /** Parse `AQE_DAEMON_HEARTBEAT_SECONDS` (whole seconds, 1 to 86400) into milliseconds. */
56
+ export declare function parseDaemonHeartbeatMs(raw: string | undefined): ParsedSetting;
57
+ /** What `fd 0` is connected to, as far as the guard cares. */
58
+ export type StdinKind = 'tty' | 'pipe' | 'other';
59
+ /** How the server's lifecycle reacts to stdin. */
60
+ export type StdinGuardMode =
61
+ /** Normal stdio client: stdin EOF/close shuts the server down (#513). */
62
+ 'stdio'
63
+ /** Interactive terminal: no guard, so Ctrl-D does not kill a debug session. */
64
+ | 'tty'
65
+ /** `AQE_MCP_DAEMON` with a non-pipe stdin: stdin is ignored (#1158). */
66
+ | 'daemon';
67
+ export interface StdinGuardDecision {
68
+ mode: StdinGuardMode;
69
+ /** Set when daemon mode was requested but refused. */
70
+ warning?: string;
71
+ }
72
+ /** Whether the environment asks for daemon mode. */
73
+ export declare function isDaemonModeRequested(env: Readonly<Record<string, string | undefined>>): boolean;
74
+ /**
75
+ * Classify the process's stdin. A FIFO or socket means a client is (or was)
76
+ * connected; `/dev/null` (`stdio: 'ignore'`) or a regular file is 'other'.
77
+ */
78
+ export declare function detectStdinKind(stdin?: {
79
+ isTTY?: boolean;
80
+ }, fd?: number): StdinKind;
81
+ /** Decide how the server should treat stdin EOF. Pure: no side effects. */
82
+ export declare function resolveStdinGuardMode(env: Readonly<Record<string, string | undefined>>, stdinKind: StdinKind): StdinGuardDecision;
83
+ export interface DaemonHeartbeatStatus {
84
+ totalWorkers: number;
85
+ errorWorkers: number;
86
+ /** Worker runs since the daemon started, all workers together. */
87
+ totalExecutions: number;
88
+ failedExecutions: number;
89
+ }
90
+ /**
91
+ * Keep a daemon-mode server alive and log one heartbeat line per interval.
92
+ * The timer is deliberately ref'd: nothing else holds the event loop open in
93
+ * daemon mode. `beforeBeat` runs just before each line (log rotation, #1207);
94
+ * an error it throws is ignored. Returns a function that stops it.
95
+ */
96
+ export declare function startDaemonHeartbeat(log: (message: string) => void, getStatus: () => DaemonHeartbeatStatus | undefined, intervalMs?: number, beforeBeat?: () => void): () => void;
97
+ export type DaemonLogRotation = {
98
+ rotated: true;
99
+ bytes: number;
100
+ kept: boolean;
101
+ error?: string;
102
+ } | {
103
+ rotated: false;
104
+ reason: 'disabled' | 'not-a-regular-file' | 'not-our-log' | 'under-cap' | 'error';
105
+ error?: string;
106
+ };
107
+ /**
108
+ * Keep daemon.log under `maxBytes` (#1207). When it is over the cap, copy it
109
+ * to `<logPath>.1` (replacing the previous one) and truncate it in place
110
+ * through the server's own descriptor, which start-daemon.cjs opened with
111
+ * O_APPEND, so later writes start again at offset 0 of the same file.
112
+ *
113
+ * Acts only when `logPath` is a regular file (not a symlink, #970) and is the
114
+ * very file one of `fds` (stdout/stderr) writes to, matched by device and
115
+ * inode, so it never truncates a file the server does not own. If the copy
116
+ * fails the log is still truncated, to keep disk use bounded. Lines written
117
+ * between the copy and the truncate are lost; the window is one copy long.
118
+ */
119
+ export declare function rotateDaemonLog(logPath: string, maxBytes: number, fds?: readonly number[]): DaemonLogRotation;
120
+ /**
121
+ * The heartbeat hook that keeps daemon.log under `maxBytes` (#1207), logging a
122
+ * line into the fresh log after each rotation and a warning the first time a
123
+ * check fails. Returns undefined when there is nothing to rotate.
124
+ */
125
+ export declare function createDaemonLogRotator(logPath: string | undefined, maxBytes: number, log: (message: string) => void): (() => void) | undefined;
126
+ //# sourceMappingURL=daemon-mode.d.ts.map
@@ -0,0 +1,257 @@
1
+ /**
2
+ * Agentic QE v3 - MCP server daemon mode (#1158)
3
+ *
4
+ * The generated `.agentic-qe/workers/start-daemon.cjs` runs the MCP server as
5
+ * a detached background process with no stdin (`stdio: 'ignore'`), only to
6
+ * host the worker daemon. The #513 guard treats stdin EOF as "the client is
7
+ * gone" and shuts the server down, so that daemon used to exit within
8
+ * seconds of starting.
9
+ *
10
+ * `AQE_MCP_DAEMON=1` selects daemon mode. It changes exactly one thing: stdin
11
+ * EOF/close no longer shuts the server down, and a ref'd heartbeat timer keeps
12
+ * the process alive (worker timers are unref'd, also #513). The server then
13
+ * stops only on SIGTERM/SIGINT (what `stop-daemon.cjs` sends), the JSON-RPC
14
+ * `shutdown` method, or a crash.
15
+ *
16
+ * Safety: daemon mode is honoured only when stdin is NOT a pipe or socket. An
17
+ * MCP client always talks to the server over a pipe/socket, so an
18
+ * `AQE_MCP_DAEMON` that leaks into a client's environment cannot turn its
19
+ * server into an orphan that outlives the client: the #513 guard stays on and
20
+ * a warning is logged. The variable is also removed from `process.env` once
21
+ * read, so processes the server spawns do not inherit it.
22
+ *
23
+ * Log size (#1207): the server's stdout/stderr ARE daemon.log (a descriptor
24
+ * opened with O_APPEND by start-daemon.cjs), so renaming the file would not
25
+ * stop the writes. Instead, on each heartbeat the server copies an oversized
26
+ * daemon.log to daemon.log.1 and truncates daemon.log in place; with O_APPEND
27
+ * the next write lands at the new end of the file. start-daemon.cjs rotates an
28
+ * oversized log at start-up the same way (a rename, as nothing writes it then).
29
+ */
30
+ import { closeSync, constants, fstatSync, ftruncateSync, lstatSync, openSync, readSync, renameSync, unlinkSync, writeSync, } from 'node:fs';
31
+ export const DAEMON_MODE_ENV = 'AQE_MCP_DAEMON';
32
+ /** Only these values enable daemon mode; anything else (or unset) is off. */
33
+ const DAEMON_ON_VALUES = new Set(['1', 'true', 'yes', 'on']);
34
+ /** Default interval of the daemon heartbeat line in daemon.log. */
35
+ export const DEFAULT_DAEMON_HEARTBEAT_MS = 60_000;
36
+ /** Heartbeat interval in seconds (#1207), also how often daemon.log size is checked. */
37
+ export const DAEMON_HEARTBEAT_ENV = 'AQE_DAEMON_HEARTBEAT_SECONDS';
38
+ const MAX_HEARTBEAT_SECONDS = 86_400;
39
+ /** Size cap of daemon.log before it is rotated to daemon.log.1 (#1207). */
40
+ export const DAEMON_LOG_MAX_SIZE_ENV = 'AQE_DAEMON_LOG_MAX_SIZE';
41
+ export const DEFAULT_DAEMON_LOG_MAX_BYTES = 5 * 1024 * 1024;
42
+ const MIN_DAEMON_LOG_MAX_BYTES = 1024;
43
+ /**
44
+ * Absolute path of daemon.log, set by start-daemon.cjs for the server it
45
+ * starts. Internal: the server rotates the log only when this file is the one
46
+ * its stdout/stderr write to.
47
+ */
48
+ export const DAEMON_LOG_PATH_ENV = 'AQE_MCP_DAEMON_LOG';
49
+ const OFF_VALUES = new Set(['0', 'off', 'false', 'no', 'none', 'disable', 'disabled']);
50
+ const SIZE_UNITS = { '': 1, k: 1024, m: 1024 ** 2, g: 1024 ** 3 };
51
+ /**
52
+ * Parse `AQE_DAEMON_LOG_MAX_SIZE`: bytes, or a number with a K, M or G suffix
53
+ * (binary units, optional trailing B). `0`/`off` disables rotation (value 0).
54
+ * Unset, empty or invalid values fall back to the 5 MB default.
55
+ */
56
+ export function parseDaemonLogMaxBytes(raw) {
57
+ const text = (raw ?? '').trim().toLowerCase();
58
+ if (text === '')
59
+ return { value: DEFAULT_DAEMON_LOG_MAX_BYTES };
60
+ if (OFF_VALUES.has(text))
61
+ return { value: 0 };
62
+ const match = /^(\d+)\s*([kmg]?)b?$/.exec(text);
63
+ const bytes = match ? Number(match[1]) * SIZE_UNITS[match[2]] : NaN;
64
+ if (Number.isSafeInteger(bytes) && bytes >= MIN_DAEMON_LOG_MAX_BYTES)
65
+ return { value: bytes };
66
+ return {
67
+ value: DEFAULT_DAEMON_LOG_MAX_BYTES,
68
+ warning: `[AQE] WARN ${DAEMON_LOG_MAX_SIZE_ENV}=${JSON.stringify(raw)} ignored: expected bytes ` +
69
+ `(at least ${MIN_DAEMON_LOG_MAX_BYTES}) or a size such as 512K or 5M; using 5M\n`,
70
+ };
71
+ }
72
+ /** Parse `AQE_DAEMON_HEARTBEAT_SECONDS` (whole seconds, 1 to 86400) into milliseconds. */
73
+ export function parseDaemonHeartbeatMs(raw) {
74
+ const text = (raw ?? '').trim();
75
+ if (text === '')
76
+ return { value: DEFAULT_DAEMON_HEARTBEAT_MS };
77
+ const seconds = /^\d+$/.test(text) ? Number(text) : NaN;
78
+ if (seconds >= 1 && seconds <= MAX_HEARTBEAT_SECONDS)
79
+ return { value: seconds * 1000 };
80
+ return {
81
+ value: DEFAULT_DAEMON_HEARTBEAT_MS,
82
+ warning: `[AQE] WARN ${DAEMON_HEARTBEAT_ENV}=${JSON.stringify(raw)} ignored: expected whole ` +
83
+ `seconds from 1 to ${MAX_HEARTBEAT_SECONDS}; using 60\n`,
84
+ };
85
+ }
86
+ /** Whether the environment asks for daemon mode. */
87
+ export function isDaemonModeRequested(env) {
88
+ const raw = env[DAEMON_MODE_ENV];
89
+ if (raw === undefined)
90
+ return false;
91
+ return DAEMON_ON_VALUES.has(raw.trim().toLowerCase());
92
+ }
93
+ /**
94
+ * Classify the process's stdin. A FIFO or socket means a client is (or was)
95
+ * connected; `/dev/null` (`stdio: 'ignore'`) or a regular file is 'other'.
96
+ */
97
+ export function detectStdinKind(stdin = process.stdin, fd = 0) {
98
+ if (stdin.isTTY)
99
+ return 'tty';
100
+ try {
101
+ const stat = fstatSync(fd);
102
+ return stat.isFIFO() || stat.isSocket() ? 'pipe' : 'other';
103
+ }
104
+ catch {
105
+ // Unknown stdin: treat it as a client pipe so the #513 guard stays on.
106
+ return 'pipe';
107
+ }
108
+ }
109
+ /** Decide how the server should treat stdin EOF. Pure: no side effects. */
110
+ export function resolveStdinGuardMode(env, stdinKind) {
111
+ const requested = isDaemonModeRequested(env);
112
+ if (stdinKind === 'tty')
113
+ return { mode: 'tty' };
114
+ if (!requested)
115
+ return { mode: 'stdio' };
116
+ if (stdinKind === 'pipe') {
117
+ return {
118
+ mode: 'stdio',
119
+ warning: `[AQE] WARN ${DAEMON_MODE_ENV} ignored: stdin is a pipe (an MCP client is attached), ` +
120
+ 'so the server still shuts down when stdin closes\n',
121
+ };
122
+ }
123
+ return { mode: 'daemon' };
124
+ }
125
+ /**
126
+ * Keep a daemon-mode server alive and log one heartbeat line per interval.
127
+ * The timer is deliberately ref'd: nothing else holds the event loop open in
128
+ * daemon mode. `beforeBeat` runs just before each line (log rotation, #1207);
129
+ * an error it throws is ignored. Returns a function that stops it.
130
+ */
131
+ export function startDaemonHeartbeat(log, getStatus, intervalMs = DEFAULT_DAEMON_HEARTBEAT_MS, beforeBeat) {
132
+ const startedAt = Date.now();
133
+ const timer = setInterval(() => {
134
+ try {
135
+ beforeBeat?.();
136
+ }
137
+ catch { /* never let rotation stop the heartbeat */ }
138
+ const uptimeS = Math.round((Date.now() - startedAt) / 1000);
139
+ let status;
140
+ try {
141
+ status = getStatus();
142
+ }
143
+ catch {
144
+ status = undefined;
145
+ }
146
+ const workers = status
147
+ ? `${status.totalWorkers} workers (${status.errorWorkers} in error), ` +
148
+ `${status.totalExecutions} runs (${status.failedExecutions} failed)`
149
+ : 'workers unavailable';
150
+ log(`[AQE] Daemon heartbeat: pid ${process.pid}, up ${uptimeS}s, ${workers}\n`);
151
+ }, intervalMs);
152
+ return () => clearInterval(timer);
153
+ }
154
+ /** Copy `src` to a fresh `dest`; neither path may be a symlink. */
155
+ function copyNoFollow(src, dest, srcIno) {
156
+ const nofollow = constants.O_NOFOLLOW ?? 0;
157
+ const input = openSync(src, constants.O_RDONLY | nofollow);
158
+ let output;
159
+ try {
160
+ if (fstatSync(input).ino !== srcIno)
161
+ throw new Error('daemon.log changed while rotating');
162
+ try {
163
+ unlinkSync(dest);
164
+ }
165
+ catch { /* absent */ }
166
+ // O_EXCL: fails on anything already there, a symlink included.
167
+ output = openSync(dest, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL | nofollow, 0o644);
168
+ const buffer = Buffer.allocUnsafe(64 * 1024);
169
+ let read;
170
+ while ((read = readSync(input, buffer, 0, buffer.length, null)) > 0) {
171
+ writeSync(output, buffer, 0, read);
172
+ }
173
+ }
174
+ finally {
175
+ if (output !== undefined)
176
+ closeSync(output);
177
+ closeSync(input);
178
+ }
179
+ }
180
+ /**
181
+ * Keep daemon.log under `maxBytes` (#1207). When it is over the cap, copy it
182
+ * to `<logPath>.1` (replacing the previous one) and truncate it in place
183
+ * through the server's own descriptor, which start-daemon.cjs opened with
184
+ * O_APPEND, so later writes start again at offset 0 of the same file.
185
+ *
186
+ * Acts only when `logPath` is a regular file (not a symlink, #970) and is the
187
+ * very file one of `fds` (stdout/stderr) writes to, matched by device and
188
+ * inode, so it never truncates a file the server does not own. If the copy
189
+ * fails the log is still truncated, to keep disk use bounded. Lines written
190
+ * between the copy and the truncate are lost; the window is one copy long.
191
+ */
192
+ export function rotateDaemonLog(logPath, maxBytes, fds = [1, 2]) {
193
+ if (maxBytes <= 0)
194
+ return { rotated: false, reason: 'disabled' };
195
+ try {
196
+ const stat = lstatSync(logPath);
197
+ if (!stat.isFile())
198
+ return { rotated: false, reason: 'not-a-regular-file' };
199
+ const fd = fds.find((candidate) => {
200
+ try {
201
+ const own = fstatSync(candidate);
202
+ return own.dev === stat.dev && own.ino === stat.ino;
203
+ }
204
+ catch {
205
+ return false;
206
+ }
207
+ });
208
+ if (fd === undefined)
209
+ return { rotated: false, reason: 'not-our-log' };
210
+ if (stat.size <= maxBytes)
211
+ return { rotated: false, reason: 'under-cap' };
212
+ const tmp = `${logPath}.1.${process.pid}.tmp`;
213
+ let copyError;
214
+ try {
215
+ copyNoFollow(logPath, tmp, stat.ino);
216
+ renameSync(tmp, `${logPath}.1`); // replaces the old one, never follows it
217
+ }
218
+ catch (error) {
219
+ copyError = error instanceof Error ? error.message : String(error);
220
+ try {
221
+ unlinkSync(tmp);
222
+ }
223
+ catch { /* absent */ }
224
+ }
225
+ ftruncateSync(fd, 0);
226
+ return copyError === undefined
227
+ ? { rotated: true, bytes: stat.size, kept: true }
228
+ : { rotated: true, bytes: stat.size, kept: false, error: copyError };
229
+ }
230
+ catch (error) {
231
+ return { rotated: false, reason: 'error', error: error instanceof Error ? error.message : String(error) };
232
+ }
233
+ }
234
+ /**
235
+ * The heartbeat hook that keeps daemon.log under `maxBytes` (#1207), logging a
236
+ * line into the fresh log after each rotation and a warning the first time a
237
+ * check fails. Returns undefined when there is nothing to rotate.
238
+ */
239
+ export function createDaemonLogRotator(logPath, maxBytes, log) {
240
+ if (!logPath || maxBytes <= 0)
241
+ return undefined;
242
+ let warned = false;
243
+ return () => {
244
+ const result = rotateDaemonLog(logPath, maxBytes);
245
+ if (result.rotated) {
246
+ log(result.kept
247
+ ? `[AQE] daemon.log rotated: ${result.bytes} bytes moved to daemon.log.1 (cap ${maxBytes})\n`
248
+ : `[AQE] WARN daemon.log truncated at ${result.bytes} bytes (cap ${maxBytes}); ` +
249
+ `could not keep daemon.log.1: ${result.error}\n`);
250
+ }
251
+ else if (result.reason === 'error' && !warned) {
252
+ warned = true;
253
+ log(`[AQE] WARN daemon.log size check failed: ${result.error}\n`);
254
+ }
255
+ };
256
+ }
257
+ //# sourceMappingURL=daemon-mode.js.map
@@ -12,6 +12,10 @@
12
12
  * Environment Variables:
13
13
  * AQE_HTTP_PORT: Port for HTTP server (0 = disabled, default: 0)
14
14
  * AQE_VERBOSE: Enable verbose logging
15
+ * AQE_MCP_DAEMON: 1 = daemon mode (#1158): stdin EOF does not shut the
16
+ * server down; only honoured when stdin is not a pipe. See daemon-mode.ts.
17
+ * AQE_DAEMON_HEARTBEAT_SECONDS / AQE_DAEMON_LOG_MAX_SIZE: daemon mode only,
18
+ * heartbeat interval and daemon.log size cap (#1207).
15
19
  */
16
20
  export {};
17
21
  //# sourceMappingURL=entry.d.ts.map
package/dist/mcp/entry.js CHANGED
@@ -12,6 +12,10 @@
12
12
  * Environment Variables:
13
13
  * AQE_HTTP_PORT: Port for HTTP server (0 = disabled, default: 0)
14
14
  * AQE_VERBOSE: Enable verbose logging
15
+ * AQE_MCP_DAEMON: 1 = daemon mode (#1158): stdin EOF does not shut the
16
+ * server down; only honoured when stdin is not a pipe. See daemon-mode.ts.
17
+ * AQE_DAEMON_HEARTBEAT_SECONDS / AQE_DAEMON_LOG_MAX_SIZE: daemon mode only,
18
+ * heartbeat interval and daemon.log size cap (#1207).
15
19
  */
16
20
  import { quickStart } from './protocol-server.js';
17
21
  import { createHTTPServer } from './http-server.js';
@@ -25,7 +29,8 @@ import { initFeatureFlagsFromEnv } from '../integrations/ruvector/feature-flags.
25
29
  import { resetSharedRvfAdapter } from '../integrations/ruvector/shared-rvf-adapter.js';
26
30
  import { resetSharedRvfDualWriter } from '../integrations/ruvector/shared-rvf-dual-writer.js';
27
31
  import { claimProcessLifecycle, closeRegisteredStores } from '../kernel/process-lifecycle.js';
28
- import { startBackgroundWorkers } from './background-workers.js';
32
+ import { getBackgroundWorkersState, startBackgroundWorkers } from './background-workers.js';
33
+ import { DAEMON_HEARTBEAT_ENV, DAEMON_LOG_MAX_SIZE_ENV, DAEMON_LOG_PATH_ENV, DAEMON_MODE_ENV, createDaemonLogRotator, detectStdinKind, parseDaemonHeartbeatMs, parseDaemonLogMaxBytes, resolveStdinGuardMode, startDaemonHeartbeat, } from './daemon-mode.js';
29
34
  import { readFileSync } from 'node:fs';
30
35
  import { resolve, dirname } from 'node:path';
31
36
  import { fileURLToPath } from 'node:url';
@@ -95,11 +100,15 @@ async function main() {
95
100
  // resolved, which is why `kill <pid>` appeared to be "ignored" and only
96
101
  // `kill -9` worked.
97
102
  let shuttingDown = false;
103
+ let stopDaemonHeartbeat = null;
104
+ let daemonStatus = null;
105
+ const daemonWarnings = [];
98
106
  const shutdown = async (reason) => {
99
107
  if (shuttingDown)
100
108
  return;
101
109
  shuttingDown = true;
102
110
  originalStderrWrite(`[AQE] Shutting down (${reason})\n`);
111
+ stopDaemonHeartbeat?.();
103
112
  const watchdog = setTimeout(() => {
104
113
  originalStderrWrite('[AQE] Shutdown watchdog fired — forcing exit\n');
105
114
  process.exit(0);
@@ -139,10 +148,29 @@ async function main() {
139
148
  // reaches EOF. An orphaned stdio MCP server has no parent to serve, so exit
140
149
  // instead of lingering at high CPU. Guarded to a piped stdin so an
141
150
  // interactive TTY debug session (Ctrl-D) is unaffected.
142
- if (!process.stdin.isTTY) {
151
+ // #1158: start-daemon.cjs runs the server with no stdin and AQE_MCP_DAEMON=1;
152
+ // that daemon mode skips this guard (only when stdin is not a client pipe).
153
+ const stdinGuard = resolveStdinGuardMode(process.env, detectStdinKind(process.stdin));
154
+ const daemonLogPath = process.env[DAEMON_LOG_PATH_ENV];
155
+ delete process.env[DAEMON_MODE_ENV]; // never inherited by processes we spawn
156
+ delete process.env[DAEMON_LOG_PATH_ENV];
157
+ if (stdinGuard.mode === 'stdio') {
143
158
  process.stdin.on('end', () => { void shutdown('stdin-eof'); });
144
159
  process.stdin.on('close', () => { void shutdown('stdin-close'); });
145
160
  }
161
+ else if (stdinGuard.mode === 'daemon') {
162
+ // Worker timers are unref'd (#513), so a daemon with no stdin needs its
163
+ // own ref'd timer to stay up, from the start of boot; it also logs
164
+ // liveness to daemon.log.
165
+ // #1207: each heartbeat also keeps daemon.log under its size cap.
166
+ const heartbeat = parseDaemonHeartbeatMs(process.env[DAEMON_HEARTBEAT_ENV]);
167
+ const logCap = parseDaemonLogMaxBytes(process.env[DAEMON_LOG_MAX_SIZE_ENV]);
168
+ for (const parsed of [heartbeat, logCap])
169
+ if (parsed.warning)
170
+ daemonWarnings.push(parsed.warning);
171
+ const log = (message) => { originalStderrWrite(message); }; // declared further down
172
+ stopDaemonHeartbeat = startDaemonHeartbeat(log, () => daemonStatus?.(), heartbeat.value, createDaemonLogRotator(daemonLogPath, logCap.value, log));
173
+ }
146
174
  // Catch unhandled exceptions/rejections to prevent MCP connection drops
147
175
  process.on('uncaughtException', (error) => {
148
176
  process.stderr.write(`[AQE] FATAL uncaught exception: ${error.message}\n`);
@@ -334,6 +362,26 @@ async function main() {
334
362
  // IMP-10: Start background workers (heartbeat scheduler, etc.) and the
335
363
  // QualityDaemon. #1061: AQE_WORKERS_ENABLED=false skips both.
336
364
  await startBackgroundWorkers(originalStderrWrite);
365
+ if (stdinGuard.warning)
366
+ originalStderrWrite(stdinGuard.warning);
367
+ for (const warning of daemonWarnings)
368
+ originalStderrWrite(warning);
369
+ if (stdinGuard.mode === 'daemon') {
370
+ if (getBackgroundWorkersState().state !== 'disabled') {
371
+ const { getDaemon } = await import('../workers/daemon.js');
372
+ daemonStatus = () => {
373
+ const health = getDaemon().getStatus().workerManager;
374
+ const workers = Object.values(health.workers);
375
+ return {
376
+ totalWorkers: health.totalWorkers,
377
+ errorWorkers: health.errorWorkers,
378
+ totalExecutions: workers.reduce((sum, w) => sum + w.totalExecutions, 0),
379
+ failedExecutions: workers.reduce((sum, w) => sum + w.failedExecutions, 0),
380
+ };
381
+ };
382
+ }
383
+ originalStderrWrite(`[AQE] Daemon mode (${DAEMON_MODE_ENV}): stdin EOF ignored; stop with SIGTERM (stop-daemon.cjs)\n`);
384
+ }
337
385
  // Start HTTP server for AG-UI/A2A/A2UI if port is specified
338
386
  const httpPort = parseInt(process.env.AQE_HTTP_PORT || '0', 10);
339
387
  if (httpPort > 0) {
@@ -148,6 +148,9 @@ export interface AccessibilityTestResult {
148
148
  score: number;
149
149
  violations: unknown[];
150
150
  warnings: unknown[];
151
+ /** #1145: false when no page was audited; `passed` is then not a verdict and `score` is -1. */
152
+ measured?: boolean;
153
+ note?: string;
151
154
  duration: number;
152
155
  savedFiles?: string[];
153
156
  /** #933: true when result files were written; see savedFiles for their paths. */
@@ -247,6 +250,11 @@ export interface CodeIndexResult {
247
250
  tests: number;
248
251
  toolsUsed: string[];
249
252
  };
253
+ /**
254
+ * #1224: non-fatal indexing warnings, e.g. that code search does not cover
255
+ * every indexed file. Absent when there are none.
256
+ */
257
+ warnings?: string[];
250
258
  /**
251
259
  * #1096: discovered paths that were not indexed (missing, not a regular
252
260
  * file, outside the project root, filtered out), with the reason. Absent
@@ -455,6 +455,11 @@ export const coverageAnalyzeConfig = {
455
455
  ...(data.runStatus === 'passed' || data.runStatus === 'failed' ? { runStatus: data.runStatus } : {}),
456
456
  // #995: the target has no measurement at all — distinct from a measured 0%.
457
457
  ...(data.unmeasured === true ? { unmeasured: true } : {}),
458
+ // #1154: target files the report does not cover, and a stale report.
459
+ ...(data.evidenceStatus === 'complete' || data.evidenceStatus === 'insufficient-evidence'
460
+ ? { evidenceStatus: data.evidenceStatus } : {}),
461
+ ...(Array.isArray(data.unmeasuredFiles) ? { unmeasuredFiles: data.unmeasuredFiles } : {}),
462
+ ...(data.staleReport ? { staleReport: data.staleReport } : {}),
458
463
  ...(data.warning ? { warning: data.warning } : {}),
459
464
  };
460
465
  },
@@ -682,11 +687,15 @@ export const accessibilityTestConfig = {
682
687
  }),
683
688
  mapToResult: (taskId, data, duration, savedFiles) => ({
684
689
  taskId,
685
- status: 'completed',
690
+ status: data.measured === true ? 'completed' : 'not-measured',
686
691
  passed: data.passed || false,
687
- score: data.score || 0,
692
+ // #1145: an unmeasured score is -1, never a 0/100 grade
693
+ score: data.measured === true && typeof data.score === 'number' ? data.score : -1,
688
694
  violations: data.violations || [],
689
695
  warnings: data.warnings || [],
696
+ // #1145: fail closed; only an explicit measurement counts as one
697
+ measured: data.measured === true,
698
+ ...(typeof data.note === 'string' ? { note: data.note } : {}),
690
699
  duration,
691
700
  savedFiles,
692
701
  }),
@@ -808,6 +817,9 @@ export const codeIndexConfig = {
808
817
  symbolsExtracted: data.symbolsExtracted || 0,
809
818
  relationsFound: data.relationsFound || 0,
810
819
  ...(data.projectMetrics ? { projectMetrics: data.projectMetrics } : {}),
820
+ ...(Array.isArray(data.warnings) && data.warnings.length > 0
821
+ ? { warnings: data.warnings }
822
+ : {}),
811
823
  ...(Array.isArray(data.skipped) && data.skipped.length > 0
812
824
  ? { skipped: data.skipped }
813
825
  : {}),
@@ -224,6 +224,9 @@ async function recordDomainFeedback(domain, data, durationMs, params) {
224
224
  coverageMethod: data.coverageMethod ?? 'instrumented-report',
225
225
  branchDataCollected: data.branchCoverage !== null && data.branchCoverage !== undefined,
226
226
  functionDataCollected: data.functionCoverage !== null && data.functionCoverage !== undefined,
227
+ // #1030: coverage from a run whose tests failed says so, as
228
+ // coverage:latest and the per-file records already do (#1027 N4).
229
+ ...(data.runStatus === 'passed' || data.runStatus === 'failed' ? { runStatus: data.runStatus } : {}),
227
230
  },
228
231
  };
229
232
  await loop.recordCoverageSession(session);
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Agentic QE v3 - Model routing MCP handlers (ADR-051)
3
+ * Routing decisions, routing metrics and routing economics.
4
+ */
5
+ import type { ToolResult } from '../types';
6
+ import { type RoutingLogEntry, type RoutingStats } from '../services/task-router';
7
+ import type { ModelTier } from '../../integrations/agentic-flow';
8
+ export interface ModelRouteParams {
9
+ /** Task description to analyze */
10
+ task: string;
11
+ /** Optional code context for complexity analysis */
12
+ codeContext?: string;
13
+ /** Optional file paths */
14
+ filePaths?: string[];
15
+ /** Manual tier override */
16
+ manualTier?: ModelTier;
17
+ /** Mark as critical task */
18
+ isCritical?: boolean;
19
+ /** Agent type making the request */
20
+ agentType?: string;
21
+ /** Domain context */
22
+ domain?: string;
23
+ }
24
+ export interface ModelRouteResult {
25
+ tier: ModelTier;
26
+ tierName: string;
27
+ modelId: string;
28
+ executionStrategy: string;
29
+ useAgentBooster: boolean;
30
+ agentBoosterTransform?: string;
31
+ complexity: {
32
+ overall: number;
33
+ code: number;
34
+ reasoning: number;
35
+ scope: number;
36
+ };
37
+ confidence: number;
38
+ rationale: string;
39
+ warnings: string[];
40
+ budget: {
41
+ allowed: boolean;
42
+ wasDowngraded: boolean;
43
+ estimatedCostUsd: number;
44
+ };
45
+ decisionTimeMs: number;
46
+ }
47
+ /**
48
+ * Handle model routing query - returns routing decision without submitting task
49
+ */
50
+ export declare function handleModelRoute(params: ModelRouteParams): Promise<ToolResult<ModelRouteResult>>;
51
+ export interface RoutingMetricsParams {
52
+ /** Include routing log entries */
53
+ includeLog?: boolean;
54
+ /** Max log entries to return */
55
+ logLimit?: number;
56
+ }
57
+ export interface RoutingMetricsResult {
58
+ stats: RoutingStats;
59
+ log?: RoutingLogEntry[];
60
+ modelRouterMetrics: {
61
+ totalDecisions: number;
62
+ avgDecisionTimeMs: number;
63
+ agentBoosterStats: {
64
+ eligible: number;
65
+ used: number;
66
+ successRate: number;
67
+ };
68
+ budgetStats: {
69
+ totalSpentUsd: number;
70
+ budgetUtilization: number;
71
+ downgradeCount: number;
72
+ };
73
+ };
74
+ }
75
+ /**
76
+ * Handle routing metrics query
77
+ */
78
+ export declare function handleRoutingMetrics(params: RoutingMetricsParams): Promise<ToolResult<RoutingMetricsResult>>;
79
+ export interface RoutingEconomicsParams {
80
+ /** Task complexity score 0-1 for tier scoring (default: 0.5) */
81
+ taskComplexity?: number;
82
+ }
83
+ export interface RoutingEconomicsResult {
84
+ tierEfficiency: Array<{
85
+ tier: string;
86
+ qualityScore: number;
87
+ estimatedCostUsd: number;
88
+ qualityPerDollar: number | string;
89
+ economicScore: number;
90
+ }>;
91
+ currentHourlyCostUsd: number;
92
+ currentDailyCostUsd: number;
93
+ budgetRemaining: {
94
+ hourly: number | null;
95
+ daily: number | null;
96
+ };
97
+ recommendation: string;
98
+ savingsOpportunity: {
99
+ usd: number;
100
+ description: string;
101
+ } | null;
102
+ }
103
+ /**
104
+ * Handle economic routing report query
105
+ */
106
+ export declare function handleRoutingEconomics(params: RoutingEconomicsParams): Promise<ToolResult<RoutingEconomicsResult>>;
107
+ //# sourceMappingURL=model-route-handlers.d.ts.map