agentic-qe 3.15.10 → 3.15.12

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