agentic-qe 3.15.5 → 3.15.6

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/skills/qe-court/evals/fixtures/seeded-mutant-delivery/README.md +9 -2
  2. package/.claude/skills/qe-court/evals/qe-court.yaml +3 -2
  3. package/.claude/skills/qe-quality-assessment/schemas/output.json +12 -2
  4. package/.claude/skills/skills-manifest.json +1 -1
  5. package/CHANGELOG.md +121 -0
  6. package/assets/skills/qe-court/evals/fixtures/seeded-mutant-delivery/README.md +9 -2
  7. package/assets/skills/qe-court/evals/qe-court.yaml +3 -2
  8. package/assets/skills/qe-quality-assessment/schemas/output.json +12 -2
  9. package/assets/skills/skills-manifest.json +1 -1
  10. package/dist/cli/bundle.js +5 -5
  11. package/dist/cli/chunks/adapter-PP3XIXDV.js +2 -0
  12. package/dist/cli/chunks/{agent-booster-wasm-CCTTGCQS.js → agent-booster-wasm-SY7UCLBL.js} +2 -2
  13. package/dist/cli/chunks/{agent-handler-DHYUF3NX.js → agent-handler-KAMYBU3S.js} +2 -2
  14. package/dist/cli/chunks/{agent-memory-branch-642W7CYX.js → agent-memory-branch-2CAW3KUM.js} +2 -2
  15. package/dist/cli/chunks/aqe-learning-engine-VDUQJKKY.js +2 -0
  16. package/dist/cli/chunks/{arena-NW2JVAFY.js → arena-4OFLJ3R2.js} +2 -2
  17. package/dist/cli/chunks/{arena-MUCC7UUN.js → arena-QCCVIOAH.js} +4 -4
  18. package/dist/cli/chunks/{audit-VKQTZJAA.js → audit-RBDQJQJB.js} +3 -3
  19. package/dist/cli/chunks/base-QSYWWPCE.js +2 -0
  20. package/dist/cli/chunks/{better-sqlite3-7ZUFVWLQ.js → better-sqlite3-5JRACCDQ.js} +2 -2
  21. package/dist/cli/chunks/{brain-handler-7LKAWSBI.js → brain-handler-W4QIIRT4.js} +3 -3
  22. package/dist/cli/chunks/{branch-enumerator-HUNXJKM4.js → branch-enumerator-IBNGI572.js} +2 -2
  23. package/dist/cli/chunks/{browser-ZSZEYUDP.js → browser-GMSCVAOI.js} +2 -2
  24. package/dist/cli/chunks/browser-workflow-WXXPBSCM.js +2 -0
  25. package/dist/cli/chunks/{chunk-RUSLEOMC.js → chunk-22OZIJAD.js} +2 -2
  26. package/dist/cli/chunks/{chunk-WR64BKUE.js → chunk-24ZSGYC6.js} +1 -1
  27. package/dist/cli/chunks/{chunk-CR2JUANW.js → chunk-2CIDFR2H.js} +3 -3
  28. package/dist/cli/chunks/{chunk-SDWMLT7B.js → chunk-2IWPJUVV.js} +5 -5
  29. package/dist/cli/chunks/{chunk-VYDNLQJN.js → chunk-2ZTWPMTK.js} +2 -2
  30. package/dist/cli/chunks/{chunk-WN55MNZ2.js → chunk-34MDMFET.js} +2 -2
  31. package/dist/cli/chunks/{chunk-D3G2NN7F.js → chunk-3DJNKNBR.js} +66 -65
  32. package/dist/cli/chunks/{chunk-XQRE2HWM.js → chunk-3NJ7O3OH.js} +2 -2
  33. package/dist/cli/chunks/chunk-45MVRQG4.js +2 -0
  34. package/dist/cli/chunks/chunk-46HBVDMU.js +2 -0
  35. package/dist/cli/chunks/{chunk-MNQ36MAF.js → chunk-47Q7JL3V.js} +2 -2
  36. package/dist/cli/chunks/chunk-4CLDYT36.js +2 -0
  37. package/dist/cli/chunks/{chunk-ORTBRO7F.js → chunk-4KOVHQXK.js} +2 -2
  38. package/dist/cli/chunks/{chunk-B2UHTA4Q.js → chunk-4POOJYXA.js} +1 -1
  39. package/dist/cli/chunks/{chunk-QXY3IRBW.js → chunk-5DH5QI7G.js} +26 -26
  40. package/dist/cli/chunks/{chunk-7BIYJRQJ.js → chunk-5GIJU2ZY.js} +2 -2
  41. package/dist/cli/chunks/{chunk-6LG5UEQE.js → chunk-5HAPS6VD.js} +2 -2
  42. package/dist/cli/chunks/{chunk-OU4ZAWCC.js → chunk-5LST62QR.js} +2 -2
  43. package/dist/cli/chunks/{chunk-Y2E3IJ53.js → chunk-5MT7DMD7.js} +2 -2
  44. package/dist/cli/chunks/{chunk-6UYN5PHA.js → chunk-5NC7QEJ6.js} +4 -4
  45. package/dist/cli/chunks/{chunk-3DTEQHFB.js → chunk-5UPIL62W.js} +3 -3
  46. package/dist/cli/chunks/{chunk-YINFES3E.js → chunk-5VUIXDY2.js} +2 -2
  47. package/dist/cli/chunks/chunk-5VZVMO7B.js +3 -0
  48. package/dist/cli/chunks/{chunk-JCC7QEKZ.js → chunk-624QRKQX.js} +1 -1
  49. package/dist/cli/chunks/{chunk-HIUNCO2W.js → chunk-66NW3ZB4.js} +2 -2
  50. package/dist/cli/chunks/{chunk-4AZP7ZCW.js → chunk-6HWARQWV.js} +2 -2
  51. package/dist/cli/chunks/{chunk-LNO5IWGH.js → chunk-6MXAJBEA.js} +1 -1
  52. package/dist/cli/chunks/{chunk-XNEEYXR2.js → chunk-6R3FBFCJ.js} +2 -2
  53. package/dist/cli/chunks/{chunk-ZT3GUYM5.js → chunk-6RDVY26I.js} +2 -2
  54. package/dist/cli/chunks/{chunk-W3ZGNNDV.js → chunk-6T6AHVLF.js} +1 -1
  55. package/dist/cli/chunks/{chunk-JANLATHN.js → chunk-6WOZUSSN.js} +2 -2
  56. package/dist/cli/chunks/chunk-72MQCZSM.js +2 -0
  57. package/dist/cli/chunks/chunk-7QVPMH25.js +3 -0
  58. package/dist/cli/chunks/{chunk-HLFDC4SF.js → chunk-7SAMMQVS.js} +1 -1
  59. package/dist/cli/chunks/{chunk-644DFAGS.js → chunk-7TJZDRDU.js} +1 -1
  60. package/dist/cli/chunks/{chunk-BYXNHGQC.js → chunk-7TVIX4WL.js} +2 -2
  61. package/dist/cli/chunks/{chunk-FBEXG4HD.js → chunk-7VTKR44N.js} +2 -2
  62. package/dist/cli/chunks/{chunk-UE22ODHN.js → chunk-7XTANLTN.js} +1 -1
  63. package/dist/cli/chunks/chunk-7XUB7U6Z.js +4 -0
  64. package/dist/cli/chunks/{chunk-HPLMX62I.js → chunk-A74J23QB.js} +2 -2
  65. package/dist/cli/chunks/{chunk-VRJPH3LG.js → chunk-A7ANPS4E.js} +2 -2
  66. package/dist/cli/chunks/{chunk-IHFUEPZH.js → chunk-AJT3XDRD.js} +2 -2
  67. package/dist/cli/chunks/{chunk-EUEHBERE.js → chunk-ALCIUWFC.js} +1 -1
  68. package/dist/cli/chunks/{chunk-NMJVG22Z.js → chunk-AUN4FG7V.js} +1 -1
  69. package/dist/cli/chunks/{chunk-DWZI3IVB.js → chunk-AUOSHM63.js} +2 -2
  70. package/dist/cli/chunks/{chunk-7EZLOC4K.js → chunk-AX26QJ6T.js} +2 -2
  71. package/dist/cli/chunks/{chunk-PDPEMBFV.js → chunk-B7RHBKHL.js} +2 -2
  72. package/dist/cli/chunks/{chunk-DEGWCUMY.js → chunk-BAYGQRNP.js} +2 -2
  73. package/dist/cli/chunks/{chunk-ONCH5AXU.js → chunk-BIXRTOH3.js} +18 -18
  74. package/dist/cli/chunks/{chunk-U4TV75AC.js → chunk-BO7UFNYV.js} +2 -2
  75. package/dist/cli/chunks/{chunk-FNAYDITO.js → chunk-BUTGIVKW.js} +1 -1
  76. package/dist/cli/chunks/{chunk-HBYQYGXP.js → chunk-BXATKI5S.js} +2 -2
  77. package/dist/cli/chunks/{chunk-BO4PKNYP.js → chunk-CCL436IU.js} +32 -27
  78. package/dist/cli/chunks/{chunk-XIE7OHML.js → chunk-CEXNW5TR.js} +1 -1
  79. package/dist/cli/chunks/{chunk-663ZFPUL.js → chunk-CLAMMGY3.js} +2 -2
  80. package/dist/cli/chunks/{chunk-PVAE65B4.js → chunk-CR66HNAE.js} +1 -1
  81. package/dist/cli/chunks/{chunk-LRASYSGV.js → chunk-CZBIREL5.js} +2 -2
  82. package/dist/cli/chunks/{chunk-WLIYWBQR.js → chunk-D5N2O5EH.js} +2 -2
  83. package/dist/cli/chunks/{chunk-A337MD3C.js → chunk-DA7DGDTI.js} +2 -2
  84. package/dist/cli/chunks/{chunk-WC47GICZ.js → chunk-DLSFT6PO.js} +2 -2
  85. package/dist/cli/chunks/{chunk-KHCALIFP.js → chunk-DQNUPEY5.js} +2 -2
  86. package/dist/cli/chunks/{chunk-GTSOFCMQ.js → chunk-EECF4CMA.js} +1 -1
  87. package/dist/cli/chunks/{chunk-5BOZCMXZ.js → chunk-EF5UHDCG.js} +1 -1
  88. package/dist/cli/chunks/{chunk-L6SVCNXK.js → chunk-EJ4KZFZN.js} +1 -1
  89. package/dist/cli/chunks/{chunk-CFPR24YK.js → chunk-ELI4GDQO.js} +2 -2
  90. package/dist/cli/chunks/{chunk-KJ3KBP24.js → chunk-F3KS3TAB.js} +2 -2
  91. package/dist/cli/chunks/{chunk-RMJ7PJOS.js → chunk-F7A2UBZO.js} +2 -2
  92. package/dist/cli/chunks/{chunk-U6OVPMQX.js → chunk-FOJRPEIP.js} +2 -2
  93. package/dist/cli/chunks/{chunk-JYY7AYGA.js → chunk-FQ5N666N.js} +1 -1
  94. package/dist/cli/chunks/{chunk-4XSCZVON.js → chunk-FU7LNUD7.js} +2 -2
  95. package/dist/cli/chunks/{chunk-OW42F2TX.js → chunk-GFB6BZWU.js} +2 -2
  96. package/dist/cli/chunks/{chunk-JI77KJP7.js → chunk-GI5HWS4H.js} +1 -1
  97. package/dist/cli/chunks/{chunk-4UXPDV7E.js → chunk-GNYOHZVV.js} +1 -1
  98. package/dist/cli/chunks/{chunk-VCKDVOPD.js → chunk-GVRFSXY6.js} +2 -2
  99. package/dist/cli/chunks/{chunk-PURHGLEC.js → chunk-GWM4M5NF.js} +1 -1
  100. package/dist/cli/chunks/{chunk-BY646JOM.js → chunk-HAN4MS5T.js} +2 -2
  101. package/dist/cli/chunks/{chunk-OGYWWZU7.js → chunk-HEGGV2PT.js} +2 -2
  102. package/dist/cli/chunks/{chunk-FHUJCVT3.js → chunk-HOEWMEF2.js} +2 -2
  103. package/dist/cli/chunks/{chunk-CXOXUBYU.js → chunk-HZFK2Z2Z.js} +1 -1
  104. package/dist/cli/chunks/chunk-I7WAW7TM.js +2 -0
  105. package/dist/cli/chunks/{chunk-E4VIVMDL.js → chunk-IEPWO4XP.js} +2 -2
  106. package/dist/cli/chunks/{chunk-DTJODGCE.js → chunk-ITIJ23K2.js} +2 -2
  107. package/dist/cli/chunks/{chunk-AQN5EDBM.js → chunk-IVJIHZSM.js} +1 -1
  108. package/dist/cli/chunks/{chunk-PHP4UJYP.js → chunk-JAPBSSFY.js} +1 -1
  109. package/dist/cli/chunks/{chunk-A2WOQO2N.js → chunk-JCE76MPP.js} +2 -2
  110. package/dist/cli/chunks/{chunk-A5J4XJS6.js → chunk-JPJEAK4G.js} +1 -1
  111. package/dist/cli/chunks/{chunk-3OAQPN2N.js → chunk-JYKQVYX2.js} +2 -2
  112. package/dist/cli/chunks/{chunk-MQGEZA2A.js → chunk-K55EAWZ5.js} +2 -2
  113. package/dist/cli/chunks/chunk-KCB6P463.js +3 -0
  114. package/dist/cli/chunks/{chunk-L375O3CZ.js → chunk-KIDOBLUO.js} +2 -2
  115. package/dist/cli/chunks/{chunk-NLDFNAOS.js → chunk-KYVIOC3C.js} +2 -2
  116. package/dist/cli/chunks/{chunk-CQMHDAJS.js → chunk-L2TDHJR3.js} +2 -2
  117. package/dist/cli/chunks/{chunk-FE3AIZI6.js → chunk-L4D3TPFP.js} +1 -1
  118. package/dist/cli/chunks/{chunk-VLOIEVER.js → chunk-LAY7NCQK.js} +3 -3
  119. package/dist/cli/chunks/{chunk-WT3JC4A6.js → chunk-LCCTJ2PC.js} +2 -2
  120. package/dist/cli/chunks/{chunk-VML4SG3X.js → chunk-LJCEDTUM.js} +3 -3
  121. package/dist/cli/chunks/{chunk-NF6AFIAX.js → chunk-LMAEMVPA.js} +1 -1
  122. package/dist/cli/chunks/{chunk-2XYTS2WY.js → chunk-LZWJ5BMP.js} +2 -2
  123. package/dist/cli/chunks/{chunk-PHAQWAEV.js → chunk-MP3FSUNB.js} +2 -2
  124. package/dist/cli/chunks/{chunk-IJ2EXSMO.js → chunk-MQCTLTGE.js} +2 -2
  125. package/dist/cli/chunks/{chunk-GRIPCYW5.js → chunk-MQTA6KIO.js} +1 -1
  126. package/dist/cli/chunks/{chunk-GGDKOJVF.js → chunk-NBUXM5X6.js} +10 -6
  127. package/dist/cli/chunks/{chunk-DPYDUKVZ.js → chunk-NHRF3V4B.js} +2 -2
  128. package/dist/cli/chunks/chunk-NMY4KTWA.js +16 -0
  129. package/dist/cli/chunks/chunk-NYS2GUNO.js +2 -0
  130. package/dist/cli/chunks/{chunk-AUZXRFOX.js → chunk-ONPPBLRB.js} +2 -2
  131. package/dist/cli/chunks/{chunk-HGBJ2QQ4.js → chunk-OPDZBRIL.js} +2 -2
  132. package/dist/cli/chunks/{chunk-DXVZBJE4.js → chunk-OQ4S6B7P.js} +1 -1
  133. package/dist/cli/chunks/{chunk-Y2WMPEUP.js → chunk-ORBODZSO.js} +2 -2
  134. package/dist/cli/chunks/{chunk-IJOFZBXD.js → chunk-ORFL3YXB.js} +2 -2
  135. package/dist/cli/chunks/{chunk-BMWAWZAN.js → chunk-P7DXVL2S.js} +2 -2
  136. package/dist/cli/chunks/chunk-PEMSXSP2.js +4 -0
  137. package/dist/cli/chunks/chunk-PS6WFCA4.js +6 -0
  138. package/dist/cli/chunks/{chunk-DPV33C77.js → chunk-Q2RBOC7V.js} +2 -2
  139. package/dist/cli/chunks/{chunk-3AYYGR6W.js → chunk-QLKUCMZC.js} +1 -1
  140. package/dist/cli/chunks/{chunk-EVCFUYYK.js → chunk-QLYO3H7E.js} +9 -9
  141. package/dist/cli/chunks/{chunk-3SH23PS3.js → chunk-QS5KZYUZ.js} +2 -2
  142. package/dist/cli/chunks/{chunk-3YNP33GB.js → chunk-R363XXGH.js} +2 -2
  143. package/dist/cli/chunks/chunk-RD5BYLN7.js +2 -0
  144. package/dist/cli/chunks/{chunk-MS3Z2CP5.js → chunk-RFDFET3O.js} +2 -2
  145. package/dist/cli/chunks/{chunk-ZLBBX24Q.js → chunk-RHIQ6QO5.js} +357 -351
  146. package/dist/cli/chunks/chunk-RLB7K7QP.js +2 -0
  147. package/dist/cli/chunks/{chunk-3YASZPLO.js → chunk-RUTO67PT.js} +2 -2
  148. package/dist/cli/chunks/{chunk-V7GNUVYI.js → chunk-RV6HSMKJ.js} +1 -1
  149. package/dist/cli/chunks/{chunk-4PT5KNXL.js → chunk-SOSJWM3E.js} +4 -4
  150. package/dist/cli/chunks/{chunk-6ZIDZ4TJ.js → chunk-SV5BUYHH.js} +2 -2
  151. package/dist/cli/chunks/{chunk-ZTC5FBL6.js → chunk-TL5GV3PR.js} +8 -8
  152. package/dist/cli/chunks/{chunk-GKPRECLL.js → chunk-TLUIO37P.js} +2 -2
  153. package/dist/cli/chunks/{chunk-FWYJ6UDX.js → chunk-TUDENMAE.js} +2 -2
  154. package/dist/cli/chunks/chunk-TVLOED6O.js +2 -0
  155. package/dist/cli/chunks/{chunk-3QD7U3FY.js → chunk-UB6DQGWM.js} +2 -2
  156. package/dist/cli/chunks/{chunk-SAPIRK2G.js → chunk-UHHMAKPE.js} +1 -1
  157. package/dist/cli/chunks/{chunk-35MDATQE.js → chunk-ULCHPPW2.js} +1 -1
  158. package/dist/cli/chunks/chunk-V3OLS2NG.js +2 -0
  159. package/dist/cli/chunks/{chunk-UXZEVIFX.js → chunk-VAYZ5QIE.js} +1 -1
  160. package/dist/cli/chunks/{chunk-VH3EB6ZG.js → chunk-VCONCVSY.js} +3 -3
  161. package/dist/cli/chunks/{chunk-QPV3OKX2.js → chunk-VVF337SV.js} +2 -2
  162. package/dist/cli/chunks/{chunk-XNHB6TLC.js → chunk-WKDWRRDT.js} +2 -2
  163. package/dist/cli/chunks/{chunk-RUJLVJDE.js → chunk-X2DR27AY.js} +2 -2
  164. package/dist/cli/chunks/{chunk-47GEI2LT.js → chunk-X33F7NXH.js} +3 -3
  165. package/dist/cli/chunks/{chunk-MB4VFAJC.js → chunk-XBEI2JBA.js} +2 -2
  166. package/dist/cli/chunks/{chunk-OQDC7GCM.js → chunk-XBFQJZWX.js} +2 -2
  167. package/dist/cli/chunks/{chunk-EAYQCBXL.js → chunk-XFPQIWEH.js} +3 -3
  168. package/dist/cli/chunks/{chunk-2KWI3MT3.js → chunk-XPB5BVU6.js} +2 -2
  169. package/dist/cli/chunks/{chunk-DL5JENWD.js → chunk-XQ53PZEF.js} +3 -3
  170. package/dist/cli/chunks/{chunk-BZFT4QDQ.js → chunk-XZ46CI35.js} +2 -2
  171. package/dist/cli/chunks/chunk-YLNYPQDR.js +2 -0
  172. package/dist/cli/chunks/{chunk-EOR3RECZ.js → chunk-YNG7E26C.js} +2 -2
  173. package/dist/cli/chunks/{chunk-6JFGB2JB.js → chunk-YXU35GGD.js} +1 -1
  174. package/dist/cli/chunks/{chunk-JNMUVBAJ.js → chunk-ZCP4P6O2.js} +2 -2
  175. package/dist/cli/chunks/{chunk-Y7GPLOXB.js → chunk-ZL5LJT7D.js} +2 -2
  176. package/dist/cli/chunks/{chunk-PCCIZFD7.js → chunk-ZOUEQ6DL.js} +1 -1
  177. package/dist/cli/chunks/{chunk-FQKEZVN6.js → chunk-ZSBD4FUX.js} +2 -2
  178. package/dist/cli/chunks/chunk-ZTB32K5N.js +5 -0
  179. package/dist/cli/chunks/{chunk-X52TMBHU.js → chunk-ZUTFHGEO.js} +1 -1
  180. package/dist/cli/chunks/ci-GEJCXMBK.js +81 -0
  181. package/dist/cli/chunks/{ci-config-XDDZOOEI.js → ci-config-2ZVV4OXL.js} +2 -2
  182. package/dist/cli/chunks/{ci-output-7ZUQI4U6.js → ci-output-E45OGVPR.js} +2 -2
  183. package/dist/cli/chunks/{circuit-breaker-ALXKCFAL.js → circuit-breaker-X73ITYZC.js} +2 -2
  184. package/dist/cli/chunks/{claude-flow-setup-RL7K2NI2.js → claude-flow-setup-W4PPH46C.js} +2 -2
  185. package/dist/cli/chunks/client-6XKSQ4JT.js +2 -0
  186. package/dist/cli/chunks/{cline-installer-2Z2QQKC3.js → cline-installer-NUEPMWDE.js} +2 -2
  187. package/dist/cli/chunks/{code-QSZTDINQ.js → code-6WQHBS7G.js} +3 -3
  188. package/dist/cli/chunks/{code-index-extractor-5CGR5D3Y.js → code-index-extractor-BXQIFIFT.js} +2 -2
  189. package/dist/cli/chunks/{codex-installer-7JLSEDE5.js → codex-installer-Z337R2KH.js} +2 -2
  190. package/dist/cli/chunks/{completions-U4NBSXEB.js → completions-F5DMYFHV.js} +2 -2
  191. package/dist/cli/chunks/{complexity-analyzer-WYZD2YSY.js → complexity-analyzer-W2SYPZDI.js} +2 -2
  192. package/dist/cli/chunks/{continuedev-installer-UPXINJFT.js → continuedev-installer-ZCHUIFTN.js} +2 -2
  193. package/dist/cli/chunks/{copilot-installer-WIVYQRIF.js → copilot-installer-M5JNODXF.js} +2 -2
  194. package/dist/cli/chunks/core-handlers-OJYW4Y6M.js +2 -0
  195. package/dist/cli/chunks/{cost-tracker-RIN4JDDM.js → cost-tracker-LSYTHBHV.js} +2 -2
  196. package/dist/cli/chunks/coverage-PGMRS5SS.js +49 -0
  197. package/dist/cli/chunks/cross-domain-router-QVUPQ2SC.js +2 -0
  198. package/dist/cli/chunks/{cursor-installer-POM7NGCC.js → cursor-installer-XPUA73UW.js} +2 -2
  199. package/dist/cli/chunks/{daemon-HFGKQ6LB.js → daemon-ITKDIYMW.js} +5 -5
  200. package/dist/cli/chunks/daemon-QBYTCIMH.js +10 -0
  201. package/dist/cli/chunks/{dag-attention-scheduler-HJXM7Q5P.js → dag-attention-scheduler-T55AXLD6.js} +2 -2
  202. package/dist/cli/chunks/{detect-XKQGLZYN.js → detect-DR7J6K4O.js} +2 -2
  203. package/dist/cli/chunks/{dist-node-SSKB53QL.js → dist-node-LAJJBOUT.js} +2 -2
  204. package/dist/cli/chunks/{domain-handler-6BNDHATU.js → domain-handler-OMSHCRMK.js} +2 -2
  205. package/dist/cli/chunks/{domain-plugins-DOX54YE3.js → domain-plugins-EQXSKC5K.js} +2 -2
  206. package/dist/cli/chunks/{domain-transfer-FW4ZX3Z7.js → domain-transfer-FKRAGVSW.js} +2 -2
  207. package/dist/cli/chunks/dream-3UABDRZJ.js +2 -0
  208. package/dist/cli/chunks/embed-and-insert-pattern-JZFPCNL3.js +3 -0
  209. package/dist/cli/chunks/{eval-K7E4XXBS.js → eval-JSNNASBW.js} +2 -2
  210. package/dist/cli/chunks/experience-capture-middleware-UPD3IZBK.js +40 -0
  211. package/dist/cli/chunks/{fast-paths-5JXXTYAG.js → fast-paths-YNMIBS2E.js} +2 -2
  212. package/dist/cli/chunks/{feature-flags-2CR3CO23.js → feature-flags-SRLXDKBI.js} +2 -2
  213. package/dist/cli/chunks/{feature-flags-RB72LHOJ.js → feature-flags-VIR7O4L7.js} +2 -2
  214. package/dist/cli/chunks/file-discovery-ZFGZTKZ4.js +2 -0
  215. package/dist/cli/chunks/{fleet-SDU7QEOA.js → fleet-K2ED46EL.js} +3 -3
  216. package/dist/cli/chunks/{gnn-wrapper-AWCFODUV.js → gnn-wrapper-QCU4ZRYW.js} +2 -2
  217. package/dist/cli/chunks/{heartbeat-handler-A4PJ3NFP.js → heartbeat-handler-YYQI4WZM.js} +4 -4
  218. package/dist/cli/chunks/heartbeat-scheduler-MJ6MTPDF.js +2 -0
  219. package/dist/cli/chunks/hnsw-adapter-FQWJCFVW.js +2 -0
  220. package/dist/cli/chunks/hnsw-index-NJYKJUHC.js +2 -0
  221. package/dist/cli/chunks/{hnsw-legacy-bridge-KRS7SSFM.js → hnsw-legacy-bridge-C5TJSWTZ.js} +2 -2
  222. package/dist/cli/chunks/{hnswlib-node-OGGCPKPO.js → hnswlib-node-SE3MJJYS.js} +2 -2
  223. package/dist/cli/chunks/{hooks-XNRNMUBW.js → hooks-C572SRDH.js} +43 -43
  224. package/dist/cli/chunks/hybrid-backend-SL7RFID7.js +2 -0
  225. package/dist/cli/chunks/{hypergraph-engine-X35LTXYT.js → hypergraph-engine-35A6G3M5.js} +2 -2
  226. package/dist/cli/chunks/{hypergraph-handler-M6THKAG6.js → hypergraph-handler-U2756CWI.js} +3 -3
  227. package/dist/cli/chunks/impact-analyzer-5ZJTXPVC.js +2 -0
  228. package/dist/cli/chunks/init-handler-PCLYQUSB.js +88 -0
  229. package/dist/cli/chunks/init-wizard-MQMDSIOF.js +2 -0
  230. package/dist/cli/chunks/kernel-MEJ5GMRH.js +2 -0
  231. package/dist/cli/chunks/{kilocode-installer-TEPR2ZJD.js → kilocode-installer-32PX5YH7.js} +2 -2
  232. package/dist/cli/chunks/{kiro-installer-RUKHGDEE.js → kiro-installer-C4ROMMUS.js} +2 -2
  233. package/dist/cli/chunks/knowledge-graph-XUBZSEZE.js +2 -0
  234. package/dist/cli/chunks/learning-GEPVZGJQ.js +122 -0
  235. package/dist/cli/chunks/{llm-router-7GECMDCP.js → llm-router-XRKTTJTX.js} +4 -4
  236. package/dist/cli/chunks/llm-router-service-QZAPAEPX.js +2 -0
  237. package/dist/cli/chunks/{load-NTJ4Y4ZR.js → load-XVH6HW7E.js} +2 -2
  238. package/dist/cli/chunks/load-test-OVXIQ3AF.js +2 -0
  239. package/dist/cli/chunks/{mcp-4335GTTG.js → mcp-IULSTM4Z.js} +2 -2
  240. package/dist/cli/chunks/{memory-HYC4M4XS.js → memory-6K7IAU4T.js} +5 -5
  241. package/dist/cli/chunks/memory-backend-TRPOMPK4.js +2 -0
  242. package/dist/cli/chunks/memory-handlers-CG6DRLAW.js +2 -0
  243. package/dist/cli/chunks/{multi-model-executor-T7FYKM6T.js → multi-model-executor-VZDUYPLX.js} +2 -2
  244. package/dist/cli/chunks/{opencode-installer-3USXVT5M.js → opencode-installer-QUTXKNH4.js} +2 -2
  245. package/dist/cli/chunks/orchestrator-PCKKUWOP.js +452 -0
  246. package/dist/cli/chunks/pattern-null-store-JWYBRBZG.js +2 -0
  247. package/dist/cli/chunks/{pattern-usage-recorder-CMZLPX2K.js → pattern-usage-recorder-PX5HQVRL.js} +2 -2
  248. package/dist/cli/chunks/{pipeline-BTRZOVSL.js → pipeline-O562GTOG.js} +2 -2
  249. package/dist/cli/chunks/{platform-2MCRKC25.js → platform-PM7Q2AZS.js} +2 -2
  250. package/dist/cli/chunks/plugin-OTYTFGPY.js +27 -0
  251. package/dist/cli/chunks/{prime-radiant-advanced-wasm-TXFEMBP6.js → prime-radiant-advanced-wasm-6CFXTHC2.js} +2 -2
  252. package/dist/cli/chunks/project-root-VVSTHIP4.js +2 -0
  253. package/dist/cli/chunks/protocol-executor-PXZCLZD3.js +2 -0
  254. package/dist/cli/chunks/{protocol-handler-DZ26OYVZ.js → protocol-handler-PPGNSAOS.js} +2 -2
  255. package/dist/cli/chunks/{prove-QWONEJWX.js → prove-WQ3BKRZG.js} +2 -2
  256. package/dist/cli/chunks/qe-reasoning-bank-42FRS5V3.js +2 -0
  257. package/dist/cli/chunks/{quality-WFH54FY7.js → quality-C5WUU3AA.js} +2 -2
  258. package/dist/cli/chunks/{quality-gate-ONJB7XU7.js → quality-gate-WSSRKD5U.js} +3 -3
  259. package/dist/cli/chunks/queen-coordinator-UI3B7DI6.js +2 -0
  260. package/dist/cli/chunks/real-embeddings-CFQE7IRQ.js +2 -0
  261. package/dist/cli/chunks/{ref-validation-HW5Y55ZC.js → ref-validation-DHKHXVZT.js} +2 -2
  262. package/dist/cli/chunks/{roocode-installer-5OABDNZT.js → roocode-installer-3PPODABV.js} +2 -2
  263. package/dist/cli/chunks/router-HYRPWLAY.js +2 -0
  264. package/dist/cli/chunks/routing-feedback-BPZ5R6F3.js +2 -0
  265. package/dist/cli/chunks/{routing-handler-CVHVOQTC.js → routing-handler-JNXTGT6T.js} +2 -2
  266. package/dist/cli/chunks/{ruvector-commands-KKDKFGIQ.js → ruvector-commands-6YLROPVP.js} +2 -2
  267. package/dist/cli/chunks/rvf-dual-writer-DEKDQ6KO.js +2 -0
  268. package/dist/cli/chunks/rvf-migration-adapter-L53VBS7I.js +2 -0
  269. package/dist/cli/chunks/rvf-migration-coordinator-4DWB4WRK.js +2 -0
  270. package/dist/cli/chunks/rvf-native-adapter-I6RUGD2D.js +2 -0
  271. package/dist/cli/chunks/{rvf-store-integrity-UGUXKIFX.js → rvf-store-integrity-YKR2ZNBF.js} +2 -2
  272. package/dist/cli/chunks/safe-db-KS65XDCP.js +2 -0
  273. package/dist/cli/chunks/schedule-KD2VN6GB.js +2 -0
  274. package/dist/cli/chunks/scheduler-ZH3RMUHY.js +2 -0
  275. package/dist/cli/chunks/{security-7723AZZ4.js → security-PWQTGDRU.js} +3 -3
  276. package/dist/cli/chunks/shared-rvf-adapter-LNRLFP5I.js +2 -0
  277. package/dist/cli/chunks/{shared-rvf-dual-writer-ZSHYG5IA.js → shared-rvf-dual-writer-GWU6YQNS.js} +2 -2
  278. package/dist/cli/chunks/sqlite-persistence-6DTVME5D.js +2 -0
  279. package/dist/cli/chunks/{standalone-memory-MHZEEYMK.js → standalone-memory-46KKBSSV.js} +2 -2
  280. package/dist/cli/chunks/{status-handler-JKXPJ22K.js → status-handler-35T5FTDQ.js} +2 -2
  281. package/dist/cli/chunks/{structural-health-J4RKCYWF.js → structural-health-P7QPQWLO.js} +2 -2
  282. package/dist/cli/chunks/{sync-PDPORHVN.js → sync-W6Z4R4PL.js} +2 -2
  283. package/dist/cli/chunks/sync-Y43EWBSY.js +2 -0
  284. package/dist/cli/chunks/{task-handler-VERADM44.js → task-handler-5CX3ZYT7.js} +2 -2
  285. package/dist/cli/chunks/{task-handlers-4RUCWUR2.js → task-handlers-DQZGOJNE.js} +3 -3
  286. package/dist/cli/chunks/{test-DMBJFQNL.js → test-TPP53VVV.js} +12 -12
  287. package/dist/cli/chunks/{test-scheduling-LUPTVGCD.js → test-scheduling-WBV4UMQH.js} +3 -3
  288. package/dist/cli/chunks/token-bootstrap-GIIDXHLC.js +2 -0
  289. package/dist/cli/chunks/{token-usage-VOA34IKM.js → token-usage-AKK37RB7.js} +2 -2
  290. package/dist/cli/chunks/{transformers-GU4TYAN5.js → transformers-7MASPELS.js} +2 -2
  291. package/dist/cli/chunks/{tree-sitter-wasm-parser-MZPXAH7C.js → tree-sitter-wasm-parser-YZKD6UGB.js} +2 -2
  292. package/dist/cli/chunks/{types-K4FLXR2K.js → types-AZ3BTXDP.js} +2 -2
  293. package/dist/cli/chunks/unified-memory-FCX7NLFZ.js +2 -0
  294. package/dist/cli/chunks/unified-memory-hnsw-VU5QJK37.js +2 -0
  295. package/dist/cli/chunks/unified-persistence-FM376LGE.js +2 -0
  296. package/dist/cli/chunks/{upgrade-M3ATDRMK.js → upgrade-L7OTDKEK.js} +2 -2
  297. package/dist/cli/chunks/{validate-AAP773B3.js → validate-O3QVFIGP.js} +2 -2
  298. package/dist/cli/chunks/{validate-swarm-7RGAZX5F.js → validate-swarm-2UGBGLTX.js} +2 -2
  299. package/dist/cli/chunks/visual-security-EU7Y3X46.js +2 -0
  300. package/dist/cli/chunks/{web-tree-sitter-GQMRHGGI.js → web-tree-sitter-J75IYPRO.js} +2 -2
  301. package/dist/cli/chunks/{windsurf-installer-HG6HF2GF.js → windsurf-installer-FQ5DBFCG.js} +2 -2
  302. package/dist/cli/chunks/witness-chain-CSEBT52D.js +2 -0
  303. package/dist/cli/chunks/{witness-chain-WKU3ZIBQ.js → witness-chain-I7TN4MXZ.js} +2 -2
  304. package/dist/cli/chunks/witness-chain-repair-D3NE3NQK.js +2 -0
  305. package/dist/cli/chunks/{witness-chain-verifier-Q2KW3QEQ.js → witness-chain-verifier-RU2WOP5M.js} +2 -2
  306. package/dist/cli/chunks/witness-key-manager-IHQB2FR5.js +2 -0
  307. package/dist/cli/chunks/{workflow-CX6SHFBW.js → workflow-6BWTNVV6.js} +28 -28
  308. package/dist/cli/chunks/workflow-orchestrator-ALNKOM3N.js +2 -0
  309. package/dist/cli/chunks/wrappers-URVP25VU.js +2 -0
  310. package/dist/cli/commands/ci.js +47 -25
  311. package/dist/cli/commands/coverage.d.ts +1 -28
  312. package/dist/cli/commands/coverage.js +63 -134
  313. package/dist/cli/commands/daemon.js +7 -1
  314. package/dist/cli/commands/hooks-handlers/stats-hooks.d.ts +15 -0
  315. package/dist/cli/commands/hooks-handlers/stats-hooks.js +54 -2
  316. package/dist/cli/commands/learning.js +47 -7
  317. package/dist/cli/commands/test.js +6 -7
  318. package/dist/cli/commands/workflow.js +9 -5
  319. package/dist/cli/handlers/init-guard.d.ts +13 -0
  320. package/dist/cli/handlers/init-guard.js +23 -0
  321. package/dist/cli/handlers/init-handler.d.ts +3 -0
  322. package/dist/cli/handlers/init-handler.js +9 -0
  323. package/dist/cli/handlers/interfaces.js +5 -1
  324. package/dist/cli/scheduler/persistent-scheduler.d.ts +6 -2
  325. package/dist/cli/scheduler/persistent-scheduler.js +107 -41
  326. package/dist/cli/utils/ci-output.d.ts +8 -1
  327. package/dist/cli/utils/ci-output.js +13 -2
  328. package/dist/cli/utils/coverage-data.d.ts +3 -0
  329. package/dist/cli/utils/coverage-data.js +14 -39
  330. package/dist/cli/utils/coverage-verdict.d.ts +130 -0
  331. package/dist/cli/utils/coverage-verdict.js +193 -0
  332. package/dist/cli/utils/file-discovery.js +5 -0
  333. package/dist/coordination/deterministic-actions.js +24 -13
  334. package/dist/coordination/handlers/code-intelligence-handlers.d.ts +8 -0
  335. package/dist/coordination/handlers/code-intelligence-handlers.js +39 -0
  336. package/dist/coordination/handlers/coverage-handlers.js +34 -6
  337. package/dist/coordination/handlers/coverage-runner.d.ts +22 -0
  338. package/dist/coordination/handlers/coverage-runner.js +105 -10
  339. package/dist/coordination/handlers/coverage-target.d.ts +1 -0
  340. package/dist/coordination/handlers/coverage-target.js +4 -1
  341. package/dist/coordination/handlers/handler-types.d.ts +9 -0
  342. package/dist/coordination/handlers/handler-utils.d.ts +14 -1
  343. package/dist/coordination/handlers/handler-utils.js +46 -22
  344. package/dist/coordination/handlers/quality-handlers.js +108 -18
  345. package/dist/coordination/handlers/test-execution-handlers.js +4 -1
  346. package/dist/coordination/protocols/defect-investigation.d.ts +2 -1
  347. package/dist/coordination/protocols/defect-investigation.js +6 -3
  348. package/dist/coordination/protocols/quality-gate.js +10 -6
  349. package/dist/coordination/result-saver.d.ts +22 -0
  350. package/dist/coordination/result-saver.js +113 -43
  351. package/dist/coordination/task-executor.d.ts +7 -0
  352. package/dist/coordination/task-executor.js +32 -3
  353. package/dist/domains/code-intelligence/plugin.js +4 -0
  354. package/dist/domains/code-intelligence/services/metric-collector/index.js +9 -2
  355. package/dist/domains/code-intelligence/services/metric-collector/interfaces.d.ts +21 -0
  356. package/dist/domains/code-intelligence/services/metric-collector/interfaces.js +25 -0
  357. package/dist/domains/code-intelligence/services/metric-collector/loc-counter.d.ts +12 -0
  358. package/dist/domains/code-intelligence/services/metric-collector/loc-counter.js +69 -3
  359. package/dist/domains/code-intelligence/services/metric-collector/test-counter.js +4 -1
  360. package/dist/domains/coverage-analysis/collected-metrics.d.ts +33 -0
  361. package/dist/domains/coverage-analysis/collected-metrics.js +36 -0
  362. package/dist/domains/coverage-analysis/coordinator.js +18 -6
  363. package/dist/domains/coverage-analysis/interfaces.d.ts +44 -0
  364. package/dist/domains/coverage-analysis/interfaces.js +6 -1
  365. package/dist/domains/coverage-analysis/services/coverage-analyzer.js +61 -34
  366. package/dist/domains/coverage-analysis/services/gap-detector.js +7 -2
  367. package/dist/domains/defect-intelligence/plugin.js +4 -0
  368. package/dist/domains/defect-intelligence/services/defect-predictor.js +6 -4
  369. package/dist/domains/learning-optimization/coordinator.js +4 -0
  370. package/dist/domains/learning-optimization/plugin.js +4 -0
  371. package/dist/domains/quality-assessment/coordinator-rl-integration.d.ts +14 -0
  372. package/dist/domains/quality-assessment/coordinator-rl-integration.js +54 -16
  373. package/dist/domains/quality-assessment/coordinator.js +10 -6
  374. package/dist/domains/quality-assessment/coverage-report-event.d.ts +32 -8
  375. package/dist/domains/quality-assessment/coverage-report-event.js +28 -6
  376. package/dist/domains/quality-assessment/index.d.ts +1 -1
  377. package/dist/domains/quality-assessment/interfaces.d.ts +46 -0
  378. package/dist/domains/quality-assessment/quality-evidence.d.ts +48 -2
  379. package/dist/domains/quality-assessment/quality-evidence.js +62 -0
  380. package/dist/domains/quality-assessment/services/quality-analyzer.d.ts +23 -2
  381. package/dist/domains/quality-assessment/services/quality-analyzer.js +192 -109
  382. package/dist/domains/security-compliance/services/scanners/dast-scanner.js +22 -16
  383. package/dist/domains/test-execution/interfaces.d.ts +10 -6
  384. package/dist/domains/test-execution/plugin.js +4 -0
  385. package/dist/domains/test-execution/services/test-executor.js +152 -102
  386. package/dist/domains/test-generation/coordinator.js +4 -0
  387. package/dist/domains/test-generation/plugin.js +4 -0
  388. package/dist/feedback/coverage-learner.js +4 -1
  389. package/dist/feedback/coverage-session-provenance.d.ts +29 -0
  390. package/dist/feedback/coverage-session-provenance.js +39 -0
  391. package/dist/init/orchestrator.js +2 -0
  392. package/dist/init/phases/09-assets.d.ts +4 -0
  393. package/dist/init/phases/09-assets.js +35 -0
  394. package/dist/init/retired-assets.d.ts +86 -0
  395. package/dist/init/retired-assets.js +230 -0
  396. package/dist/init/skills-installer.d.ts +2 -0
  397. package/dist/init/skills-installer.js +4 -0
  398. package/dist/init/types.d.ts +3 -0
  399. package/dist/integrations/ruvector/rvf-native-adapter.d.ts +2 -0
  400. package/dist/integrations/ruvector/rvf-native-adapter.js +5 -0
  401. package/dist/integrations/ruvector/server-client.js +4 -12
  402. package/dist/kernel/project-root.d.ts +17 -0
  403. package/dist/kernel/project-root.js +54 -2
  404. package/dist/kernel/shared-dirs.d.ts +66 -0
  405. package/dist/kernel/shared-dirs.js +168 -0
  406. package/dist/learning/daily-log.js +2 -1
  407. package/dist/learning/experience-capture-middleware.d.ts +22 -0
  408. package/dist/learning/experience-capture-middleware.js +35 -0
  409. package/dist/learning/learnable-result.d.ts +16 -0
  410. package/dist/learning/learnable-result.js +24 -0
  411. package/dist/learning/pattern-mutation-error.d.ts +8 -0
  412. package/dist/learning/pattern-mutation-error.js +12 -0
  413. package/dist/learning/qe-reasoning-bank.d.ts +10 -0
  414. package/dist/learning/qe-reasoning-bank.js +50 -1
  415. package/dist/learning/rvf-reconcile.d.ts +39 -0
  416. package/dist/learning/rvf-reconcile.js +40 -0
  417. package/dist/learning/sqlite-persistence.d.ts +14 -0
  418. package/dist/learning/sqlite-persistence.js +36 -0
  419. package/dist/mcp/bundle.js +516 -504
  420. package/dist/mcp/handlers/domain-handler-configs.d.ts +31 -1
  421. package/dist/mcp/handlers/domain-handler-configs.js +37 -3
  422. package/dist/mcp/handlers/handler-factory.js +40 -14
  423. package/dist/mcp/protocol-server.js +27 -2
  424. package/dist/mcp/tool-cache-scope.d.ts +31 -0
  425. package/dist/mcp/tool-cache-scope.js +71 -0
  426. package/dist/mcp/tools/code-intelligence/analyze.js +5 -3
  427. package/dist/mcp/types.d.ts +4 -0
  428. package/dist/optimization/session-cache.d.ts +19 -1
  429. package/dist/optimization/session-cache.js +36 -2
  430. package/dist/plugins/cache.js +2 -1
  431. package/dist/plugins/sources/github.js +2 -1
  432. package/dist/plugins/sources/npm.js +2 -1
  433. package/dist/shared/aqe-managed-dirs.d.ts +24 -0
  434. package/dist/shared/aqe-managed-dirs.js +56 -0
  435. package/dist/shared/events/domain-events.d.ts +18 -3
  436. package/dist/shared/events/domain-events.js +4 -0
  437. package/dist/shared/http/http-client.d.ts +6 -0
  438. package/dist/shared/http/http-client.js +13 -15
  439. package/dist/shared/io/file-reader.d.ts +26 -0
  440. package/dist/shared/io/file-reader.js +111 -17
  441. package/dist/shared/llm/providers/response-deadline.d.ts +7 -2
  442. package/dist/shared/llm/providers/response-deadline.js +17 -5
  443. package/dist/shared/metrics/code-metrics.d.ts +24 -0
  444. package/dist/shared/metrics/code-metrics.js +93 -6
  445. package/dist/shared/metrics/index.d.ts +1 -1
  446. package/dist/workers/interfaces.d.ts +9 -1
  447. package/dist/workers/quality-daemon/coverage-delta.d.ts +4 -3
  448. package/dist/workers/quality-daemon/coverage-delta.js +13 -6
  449. package/dist/workers/quality-daemon/index.js +6 -5
  450. package/dist/workers/quality-daemon/notification-service.js +3 -3
  451. package/dist/workers/quality-daemon/persistent-memory.d.ts +2 -2
  452. package/dist/workers/quality-daemon/persistent-memory.js +2 -2
  453. package/dist/workers/worker-manager.js +5 -1
  454. package/dist/workers/workers/coverage-tracker.js +69 -33
  455. package/dist/workers/workers/regression-monitor.d.ts +18 -1
  456. package/dist/workers/workers/regression-monitor.js +276 -117
  457. package/package.json +1 -1
  458. package/dist/cli/chunks/adapter-EGIPTX5H.js +0 -2
  459. package/dist/cli/chunks/aqe-learning-engine-WP4GCBDT.js +0 -2
  460. package/dist/cli/chunks/base-6ORFD62I.js +0 -2
  461. package/dist/cli/chunks/browser-workflow-PIXGERWP.js +0 -2
  462. package/dist/cli/chunks/chunk-2WFTZSRT.js +0 -2
  463. package/dist/cli/chunks/chunk-7YB2KELI.js +0 -5
  464. package/dist/cli/chunks/chunk-BBL6YXD3.js +0 -2
  465. package/dist/cli/chunks/chunk-BJ5P4IV2.js +0 -2
  466. package/dist/cli/chunks/chunk-DFPL5N3Q.js +0 -16
  467. package/dist/cli/chunks/chunk-DLY4YEN3.js +0 -2
  468. package/dist/cli/chunks/chunk-ERGWWI4Y.js +0 -3
  469. package/dist/cli/chunks/chunk-KZVJW2SD.js +0 -2
  470. package/dist/cli/chunks/chunk-L336HFFE.js +0 -2
  471. package/dist/cli/chunks/chunk-N2TJNIHA.js +0 -2
  472. package/dist/cli/chunks/chunk-RCXMUEZN.js +0 -3
  473. package/dist/cli/chunks/chunk-SEZLYRCS.js +0 -2
  474. package/dist/cli/chunks/chunk-TDLKXLJC.js +0 -4
  475. package/dist/cli/chunks/chunk-WOZIXXY5.js +0 -7
  476. package/dist/cli/chunks/ci-KP4GZKJ7.js +0 -81
  477. package/dist/cli/chunks/client-C3KHVRM6.js +0 -2
  478. package/dist/cli/chunks/core-handlers-KSQM6Q6S.js +0 -2
  479. package/dist/cli/chunks/coverage-SPFVHRRU.js +0 -43
  480. package/dist/cli/chunks/coverage-target-GSRBNHXE.js +0 -2
  481. package/dist/cli/chunks/cross-domain-router-CTGNOVCF.js +0 -2
  482. package/dist/cli/chunks/daemon-M5TD5Y6T.js +0 -10
  483. package/dist/cli/chunks/dream-MIK2E4UL.js +0 -2
  484. package/dist/cli/chunks/embed-and-insert-pattern-QST77T2B.js +0 -3
  485. package/dist/cli/chunks/experience-capture-middleware-X66IYSRV.js +0 -40
  486. package/dist/cli/chunks/file-discovery-3NHRUQQB.js +0 -2
  487. package/dist/cli/chunks/heartbeat-scheduler-OCKRACUW.js +0 -2
  488. package/dist/cli/chunks/hnsw-adapter-X67XG73C.js +0 -2
  489. package/dist/cli/chunks/hnsw-index-I7KCQBQR.js +0 -2
  490. package/dist/cli/chunks/hybrid-backend-FOUHTKAK.js +0 -2
  491. package/dist/cli/chunks/impact-analyzer-GXYVX46O.js +0 -2
  492. package/dist/cli/chunks/init-handler-2AXMXHYF.js +0 -86
  493. package/dist/cli/chunks/init-wizard-C2MRX2QG.js +0 -2
  494. package/dist/cli/chunks/kernel-Q2IUDIDC.js +0 -2
  495. package/dist/cli/chunks/knowledge-graph-E2Z6K5EE.js +0 -2
  496. package/dist/cli/chunks/learning-BEA26RNA.js +0 -122
  497. package/dist/cli/chunks/llm-router-service-YATYFEDD.js +0 -2
  498. package/dist/cli/chunks/load-test-LV77JXWA.js +0 -2
  499. package/dist/cli/chunks/memory-backend-XME3X3QX.js +0 -2
  500. package/dist/cli/chunks/memory-handlers-VG47X5DX.js +0 -2
  501. package/dist/cli/chunks/orchestrator-VHUXUYIM.js +0 -452
  502. package/dist/cli/chunks/pattern-null-store-TAXMLENP.js +0 -2
  503. package/dist/cli/chunks/plugin-2VAYWAO3.js +0 -27
  504. package/dist/cli/chunks/project-root-CFFPBGPX.js +0 -2
  505. package/dist/cli/chunks/protocol-executor-ML76QAVQ.js +0 -2
  506. package/dist/cli/chunks/qe-reasoning-bank-LUZH6RYV.js +0 -2
  507. package/dist/cli/chunks/queen-coordinator-EWXNIXB6.js +0 -2
  508. package/dist/cli/chunks/real-embeddings-GZV4VKK4.js +0 -2
  509. package/dist/cli/chunks/router-MXOBVEBF.js +0 -2
  510. package/dist/cli/chunks/routing-feedback-T6CCRUEK.js +0 -2
  511. package/dist/cli/chunks/rvf-dual-writer-WHXVT3V3.js +0 -2
  512. package/dist/cli/chunks/rvf-migration-adapter-JFPWIRCG.js +0 -2
  513. package/dist/cli/chunks/rvf-migration-coordinator-D4KUBNRZ.js +0 -2
  514. package/dist/cli/chunks/rvf-native-adapter-KOXR7TJL.js +0 -2
  515. package/dist/cli/chunks/safe-db-CI6IPSIN.js +0 -2
  516. package/dist/cli/chunks/schedule-X4HW6TVJ.js +0 -2
  517. package/dist/cli/chunks/scheduler-KCNJ2ON3.js +0 -2
  518. package/dist/cli/chunks/shared-rvf-adapter-KEQ5CLNI.js +0 -2
  519. package/dist/cli/chunks/sqlite-persistence-PGHU6VUR.js +0 -2
  520. package/dist/cli/chunks/sync-EFWXMA2H.js +0 -2
  521. package/dist/cli/chunks/token-bootstrap-S346YBVO.js +0 -2
  522. package/dist/cli/chunks/unified-memory-6CK3TUNQ.js +0 -2
  523. package/dist/cli/chunks/unified-memory-hnsw-A7BWBGYN.js +0 -2
  524. package/dist/cli/chunks/unified-persistence-GEPMDBQZ.js +0 -2
  525. package/dist/cli/chunks/visual-security-L4J7LQWT.js +0 -2
  526. package/dist/cli/chunks/witness-chain-CDUMX623.js +0 -2
  527. package/dist/cli/chunks/witness-chain-repair-WNYH6O4L.js +0 -2
  528. package/dist/cli/chunks/witness-key-manager-NQ5DAAC4.js +0 -2
  529. package/dist/cli/chunks/workflow-orchestrator-USJDWVDR.js +0 -2
  530. package/dist/cli/chunks/wrappers-CZDI6Z3X.js +0 -2
  531. /package/.claude/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.test.ts → budget-tests.ts.fixture} +0 -0
  532. /package/.claude/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.ts → budget.ts.fixture} +0 -0
  533. /package/.claude/skills/testability-scoring/resources/templates/{testability-scoring.spec.template.js → testability-scoring-spec.template.js} +0 -0
  534. /package/assets/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.test.ts → budget-tests.ts.fixture} +0 -0
  535. /package/assets/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.ts → budget.ts.fixture} +0 -0
  536. /package/assets/skills/testability-scoring/resources/templates/{testability-scoring.spec.template.js → testability-scoring-spec.template.js} +0 -0
@@ -0,0 +1,56 @@
1
+ /**
2
+ * AQE-managed directories that source walkers must not treat as project code
3
+ * (#999, review N4 / round 2b).
4
+ *
5
+ * - `.agentic-qe/` is AQE runtime state (workers, results, DBs) at ANY depth;
6
+ * it is never source.
7
+ * - `.claude/` holds the assets `aqe init` writes (helpers, skills, agents).
8
+ * It is AQE-managed at the walk root, and nested only when it sits next to
9
+ * a `.agentic-qe/` (a nested `aqe init` in a monorepo package). A nested
10
+ * `.claude/` with no AQE install beside it (e.g. a Claude Code plugin's own
11
+ * `.claude/hooks/*.ts`) is the package's source and is walked.
12
+ */
13
+ import { existsSync, readdirSync } from 'fs';
14
+ import { join } from 'path';
15
+ export const AQE_STATE_DIR = '.agentic-qe';
16
+ export const AQE_CLAUDE_DIR = '.claude';
17
+ /** True when directory `name` inside `parentDir` is AQE-managed (never project source). */
18
+ export function isAqeManagedDir(parentDir, name, isWalkRoot) {
19
+ if (name === AQE_STATE_DIR)
20
+ return true;
21
+ if (name === AQE_CLAUDE_DIR)
22
+ return isWalkRoot || existsSync(join(parentDir, AQE_STATE_DIR));
23
+ return false;
24
+ }
25
+ /**
26
+ * Root-relative ('/'-separated) paths of the AQE-managed `.claude` directories
27
+ * under `projectRoot`: the root one (if present) and every `.claude` that has a
28
+ * sibling `.agentic-qe`. Used to anchor cloc/tokei excludes. Bounded walk that
29
+ * skips `skipDirs` and dot-directories.
30
+ */
31
+ export function findAqeClaudeDirs(projectRoot, skipDirs = [], maxDepth = 12) {
32
+ const skip = new Set(skipDirs);
33
+ const found = [];
34
+ const walk = (dir, rel, depth) => {
35
+ if (existsSync(join(dir, AQE_CLAUDE_DIR)) && (depth === 0 || existsSync(join(dir, AQE_STATE_DIR)))) {
36
+ found.push(rel ? `${rel}/${AQE_CLAUDE_DIR}` : AQE_CLAUDE_DIR);
37
+ }
38
+ if (depth >= maxDepth)
39
+ return;
40
+ let entries;
41
+ try {
42
+ entries = readdirSync(dir, { withFileTypes: true });
43
+ }
44
+ catch {
45
+ return;
46
+ }
47
+ for (const entry of entries) {
48
+ if (!entry.isDirectory() || entry.name.startsWith('.') || skip.has(entry.name))
49
+ continue;
50
+ walk(join(dir, entry.name), rel ? `${rel}/${entry.name}` : entry.name, depth + 1);
51
+ }
52
+ };
53
+ walk(projectRoot, '', 0);
54
+ return found;
55
+ }
56
+ //# sourceMappingURL=aqe-managed-dirs.js.map
@@ -54,10 +54,15 @@ export declare const TestExecutionEvents: {
54
54
  export interface CoverageReportPayload {
55
55
  reportId: string;
56
56
  line: number;
57
- branch: number;
58
- function: number;
59
- statement: number;
57
+ /** `null` = the report collected no branch data (not 0%, #1027). */
58
+ branch: number | null;
59
+ /** `null` = the report collected no function data (not 0%, #1027). */
60
+ function: number | null;
61
+ /** `null` = the report collected no statement data (lcov, Cobertura). */
62
+ statement: number | null;
60
63
  files: number;
64
+ /** Outcome of the test run behind the report, when known (#1027 N4). */
65
+ runStatus?: 'passed' | 'failed';
61
66
  /** False for a static estimate; consumers must not store it as coverage (#1008). */
62
67
  measured?: boolean;
63
68
  }
@@ -67,7 +72,17 @@ export interface CoverageGapPayload {
67
72
  uncoveredLines: number[];
68
73
  uncoveredBranches: number[];
69
74
  riskScore: number;
75
+ /**
76
+ * Provenance (#1014): true only for a gap found in MEASURED coverage. Gaps
77
+ * from a static estimate are never published; consumers must ignore any
78
+ * event without `measured: true` (legacy or foreign publishers).
79
+ */
80
+ measured: boolean;
81
+ /** How the underlying coverage was obtained, e.g. 'instrumented-report'. */
82
+ coverageMethod?: string;
70
83
  }
84
+ /** Is this CoverageGapDetected payload a gap in measured coverage? (#1014, fail-closed) */
85
+ export declare function isMeasuredGapPayload(payload: unknown): boolean;
71
86
  export declare const CoverageAnalysisEvents: {
72
87
  readonly CoverageReportCreated: "coverage-analysis.CoverageReportCreated";
73
88
  readonly CoverageGapDetected: "coverage-analysis.CoverageGapDetected";
@@ -28,6 +28,10 @@ export const TestExecutionEvents = {
28
28
  FlakyTestDetected: 'test-execution.FlakyTestDetected',
29
29
  RetryTriggered: 'test-execution.RetryTriggered',
30
30
  };
31
+ /** Is this CoverageGapDetected payload a gap in measured coverage? (#1014, fail-closed) */
32
+ export function isMeasuredGapPayload(payload) {
33
+ return !!payload && typeof payload === 'object' && payload.measured === true;
34
+ }
31
35
  export const CoverageAnalysisEvents = {
32
36
  CoverageReportCreated: 'coverage-analysis.CoverageReportCreated',
33
37
  CoverageGapDetected: 'coverage-analysis.CoverageGapDetected',
@@ -5,6 +5,12 @@
5
5
  import { Result } from '../types';
6
6
  export interface RequestOptions {
7
7
  timeout?: number;
8
+ /**
9
+ * Absolute cap on the whole request including the body read (#980 review N6).
10
+ * `timeout` is an idle deadline for the body, so this bounds a peer that trickles
11
+ * bytes just often enough to reset it. Default: MAX_DURATION_TIMEOUT_MULTIPLE × timeout.
12
+ */
13
+ maxDurationMs?: number;
8
14
  retries?: number;
9
15
  retryDelay?: number;
10
16
  headers?: Record<string, string>;
@@ -4,10 +4,13 @@
4
4
  */
5
5
  import { ok, err } from '../types/index.js';
6
6
  import { toError } from '../error-utils.js';
7
+ import { fetchWithResponseDeadline } from '../llm/providers/response-deadline.js';
7
8
  // ============================================================================
8
9
  // Constants
9
10
  // ============================================================================
10
11
  const DEFAULT_TIMEOUT = 30000;
12
+ /** Default absolute request cap as a multiple of the idle timeout (#980 review N6). */
13
+ const MAX_DURATION_TIMEOUT_MULTIPLE = 4;
11
14
  const DEFAULT_RETRIES = 3;
12
15
  const DEFAULT_RETRY_DELAY = 1000;
13
16
  const CIRCUIT_BREAKER_THRESHOLD = 5;
@@ -170,6 +173,7 @@ export class HttpClient {
170
173
  */
171
174
  async request(url, fetchOptions, options) {
172
175
  const timeout = options?.timeout ?? DEFAULT_TIMEOUT;
176
+ const maxDurationMs = options?.maxDurationMs ?? timeout * MAX_DURATION_TIMEOUT_MULTIPLE;
173
177
  const maxRetries = options?.retries ?? DEFAULT_RETRIES;
174
178
  const baseRetryDelay = options?.retryDelay ?? DEFAULT_RETRY_DELAY;
175
179
  const useCircuitBreaker = options?.circuitBreaker ?? true;
@@ -198,7 +202,7 @@ export class HttpClient {
198
202
  for (let attempt = 0; attempt <= maxRetries; attempt++) {
199
203
  timing.retryCount = attempt;
200
204
  try {
201
- const response = await this.fetchWithTimeout(url, { ...fetchOptions, headers }, timeout);
205
+ const response = await this.fetchWithTimeout(url, { ...fetchOptions, headers }, timeout, maxDurationMs);
202
206
  timing.endTime = Date.now();
203
207
  timing.duration = timing.endTime - timing.startTime;
204
208
  // Record success for circuit breaker
@@ -233,19 +237,13 @@ export class HttpClient {
233
237
  /**
234
238
  * Fetch with timeout using AbortController
235
239
  */
236
- async fetchWithTimeout(url, options, timeout) {
237
- const controller = new AbortController();
238
- const timeoutId = setTimeout(() => controller.abort(), timeout);
239
- try {
240
- const response = await fetch(url, {
241
- ...options,
242
- signal: controller.signal,
243
- });
244
- return response;
245
- }
246
- finally {
247
- clearTimeout(timeoutId);
248
- }
240
+ async fetchWithTimeout(url, options, timeout, maxDurationMs) {
241
+ // #980 bug class: the timer used to be cleared as soon as headers arrived,
242
+ // so callers reading the body of a peer that stalls mid-body hung forever.
243
+ // The deadline now also covers the body, as an idle deadline (reset on
244
+ // every chunk) so slow but progressing downloads keep working, plus an
245
+ // absolute cap (maxDurationMs) so a trickling peer cannot hold it forever.
246
+ return fetchWithResponseDeadline(url, options, timeout, () => Object.assign(new Error(`Request timeout (idle ${timeout}ms, cap ${maxDurationMs}ms): ${url}`), { name: 'TimeoutError' }), 'idle', maxDurationMs);
249
247
  }
250
248
  /**
251
249
  * Determine error code from error type
@@ -261,7 +259,7 @@ export class HttpClient {
261
259
  while (typeof current === 'object' && current !== null && !visited.has(current)) {
262
260
  visited.add(current);
263
261
  const detail = current;
264
- if (detail.name === 'AbortError')
262
+ if (detail.name === 'AbortError' || detail.name === 'TimeoutError')
265
263
  return 'TIMEOUT';
266
264
  const message = typeof detail.message === 'string' ? detail.message : '';
267
265
  if (detail.code === 'ECONNREFUSED' || message.includes('ECONNREFUSED'))
@@ -12,6 +12,15 @@ export interface FileReaderOptions {
12
12
  cacheTtlMs?: number;
13
13
  /** Whether to enable caching (default: true) */
14
14
  enableCache?: boolean;
15
+ /**
16
+ * Opt-in in-root containment for `readFile` (#1021). A path that resolves
17
+ * inside this directory is accepted when its realpath stays inside the
18
+ * root's realpath (a symlink escaping the root is rejected); the legacy
19
+ * name-pattern validator is not applied to it, so names such as
20
+ * `[...slug].tsx`, in-root dot-dirs and deep paths are readable. Paths
21
+ * outside the root keep every legacy check. Omit to keep legacy behaviour.
22
+ */
23
+ projectRoot?: string;
15
24
  }
16
25
  export interface CacheEntry<T> {
17
26
  value: T;
@@ -49,6 +58,8 @@ export declare class FileReader {
49
58
  private readonly basePath;
50
59
  private readonly cache;
51
60
  private readonly enableCache;
61
+ private readonly projectRoot?;
62
+ private projectRootReal?;
52
63
  private stats;
53
64
  constructor(options?: FileReaderOptions);
54
65
  /**
@@ -56,6 +67,21 @@ export declare class FileReader {
56
67
  * SEC-004 FIX: Validates path to prevent directory traversal attacks
57
68
  */
58
69
  private resolvePath;
70
+ /**
71
+ * #1021: decide whether a path is handled by in-root containment. Returns
72
+ * undefined when the path is not lexically inside the root (or no root is
73
+ * configured), so the caller applies the legacy checks.
74
+ */
75
+ private inProjectRoot;
76
+ /**
77
+ * #1021 round 2b: read an in-root path without a check-then-use race.
78
+ * The file is OPENED first and the open descriptor is verified — its real
79
+ * location (/proc/self/fd/N on Linux; otherwise the re-resolved realpath,
80
+ * which must be the same inode) must lie inside the root — and the content
81
+ * is read from that same descriptor. Swapping a symlink (file or directory
82
+ * component) between the check and the read can no longer redirect it.
83
+ */
84
+ private readContained;
59
85
  /**
60
86
  * Read file contents as a string
61
87
  * SEC-004: Now handles PathTraversalError from path validation
@@ -7,6 +7,8 @@ import * as path from 'node:path';
7
7
  import { ok, err } from '../types/index.js';
8
8
  import { validatePath } from '../security/path-traversal-validator.js';
9
9
  import { safeJsonParse } from '../safe-json.js';
10
+ /** Extensions never read, inside or outside the project root. */
11
+ const DENIED_EXTENSIONS = ['.exe', '.bat', '.cmd', '.ps1', '.dll', '.so'];
10
12
  export class FileReadError extends Error {
11
13
  filePath;
12
14
  code;
@@ -44,6 +46,49 @@ export class PathTraversalError extends Error {
44
46
  this.name = 'PathTraversalError';
45
47
  }
46
48
  }
49
+ /** Map a filesystem error to the reader's FileReadError. */
50
+ function readError(error, absolutePath) {
51
+ const nodeError = error;
52
+ let message;
53
+ switch (nodeError.code) {
54
+ case 'ENOENT':
55
+ message = 'File not found: ' + absolutePath;
56
+ break;
57
+ case 'EACCES':
58
+ message = 'Permission denied: ' + absolutePath;
59
+ break;
60
+ case 'EISDIR':
61
+ message = 'Path is a directory: ' + absolutePath;
62
+ break;
63
+ default:
64
+ message = 'Failed to read file: ' + absolutePath;
65
+ }
66
+ return new FileReadError(message, absolutePath, nodeError.code, nodeError);
67
+ }
68
+ /**
69
+ * #1021 round 2b: where an OPEN descriptor really points. On Linux,
70
+ * /proc/self/fd/N resolves to the opened file itself. Elsewhere, re-resolve
71
+ * the path and accept it only if it is the same inode as the descriptor, so
72
+ * a swap after the open is detected. Returns null when it cannot be proven.
73
+ */
74
+ async function openedLocation(fd, lexical, opened) {
75
+ const sameFile = async (candidate) => {
76
+ const st = await fs.stat(candidate).catch(() => null);
77
+ return st !== null && st.dev === opened.dev && st.ino === opened.ino;
78
+ };
79
+ const viaProc = await fs.realpath(`/proc/self/fd/${fd}`).catch(() => null);
80
+ if (viaProc && path.isAbsolute(viaProc) && await sameFile(viaProc))
81
+ return viaProc;
82
+ const real = await fs.realpath(lexical).catch(() => null);
83
+ if (real && await sameFile(real))
84
+ return real;
85
+ return null;
86
+ }
87
+ /** True when `candidate` is `root` or lies beneath it (both absolute). */
88
+ function isWithin(root, candidate) {
89
+ const relative = path.relative(root, candidate);
90
+ return relative === '' || (!relative.startsWith(`..${path.sep}`) && relative !== '..' && !path.isAbsolute(relative));
91
+ }
47
92
  // ============================================================================
48
93
  // LRU Cache Implementation
49
94
  // ============================================================================
@@ -215,6 +260,8 @@ export class FileReader {
215
260
  basePath;
216
261
  cache;
217
262
  enableCache;
263
+ projectRoot;
264
+ projectRootReal;
218
265
  stats = {
219
266
  cacheHits: 0,
220
267
  cacheMisses: 0,
@@ -225,6 +272,7 @@ export class FileReader {
225
272
  constructor(options = {}) {
226
273
  this.basePath = options.basePath ?? process.cwd();
227
274
  this.enableCache = options.enableCache ?? true;
275
+ this.projectRoot = options.projectRoot ? path.resolve(options.projectRoot) : undefined;
228
276
  this.cache = new LRUCache(options.maxCacheSize ?? 100, options.cacheTtlMs ?? 5 * 60 * 1000 // 5 minutes default
229
277
  );
230
278
  }
@@ -252,7 +300,7 @@ export class FileReader {
252
300
  allowAbsolute: true,
253
301
  maxDepth: 10 + (isAbsolutePath ? baseDepth : 0),
254
302
  // Allow common development file extensions
255
- deniedExtensions: ['.exe', '.bat', '.cmd', '.ps1', '.dll', '.so'],
303
+ deniedExtensions: DENIED_EXTENSIONS,
256
304
  });
257
305
  if (!validation.valid) {
258
306
  throw new PathTraversalError(filePath, [validation.error || 'Path validation failed'], validation.riskLevel);
@@ -269,6 +317,64 @@ export class FileReader {
269
317
  }
270
318
  return path.resolve(this.basePath, filePath);
271
319
  }
320
+ /**
321
+ * #1021: decide whether a path is handled by in-root containment. Returns
322
+ * undefined when the path is not lexically inside the root (or no root is
323
+ * configured), so the caller applies the legacy checks.
324
+ */
325
+ async inProjectRoot(filePath) {
326
+ if (!this.projectRoot)
327
+ return undefined;
328
+ if (filePath.includes('\0')) {
329
+ throw new PathTraversalError(filePath, ['Null byte in path'], 'critical');
330
+ }
331
+ const lexical = path.resolve(this.basePath, filePath);
332
+ if (!isWithin(this.projectRoot, lexical))
333
+ return undefined;
334
+ if (DENIED_EXTENSIONS.includes(path.extname(lexical).toLowerCase())) {
335
+ throw new PathTraversalError(filePath, [`File extension '${path.extname(lexical)}' is not allowed`], 'high');
336
+ }
337
+ this.projectRootReal ??= fs.realpath(this.projectRoot).catch(() => null);
338
+ const rootReal = await this.projectRootReal;
339
+ if (!rootReal)
340
+ return undefined;
341
+ return { lexical, rootReal };
342
+ }
343
+ /**
344
+ * #1021 round 2b: read an in-root path without a check-then-use race.
345
+ * The file is OPENED first and the open descriptor is verified — its real
346
+ * location (/proc/self/fd/N on Linux; otherwise the re-resolved realpath,
347
+ * which must be the same inode) must lie inside the root — and the content
348
+ * is read from that same descriptor. Swapping a symlink (file or directory
349
+ * component) between the check and the read can no longer redirect it.
350
+ */
351
+ async readContained(filePath, lexical, rootReal) {
352
+ this.stats.totalReads++;
353
+ let handle;
354
+ try {
355
+ handle = await fs.open(lexical, 'r');
356
+ }
357
+ catch (error) {
358
+ return err(readError(error, lexical));
359
+ }
360
+ try {
361
+ const opened = await handle.stat();
362
+ const location = await openedLocation(handle.fd, lexical, opened);
363
+ if (!location || !isWithin(rootReal, location)) {
364
+ return err(new PathTraversalError(filePath, ['Path resolves outside the project root'], 'critical'));
365
+ }
366
+ if (!opened.isFile()) {
367
+ return err(new FileReadError('Path is a directory: ' + lexical, lexical, 'EISDIR'));
368
+ }
369
+ return ok(await handle.readFile('utf-8'));
370
+ }
371
+ catch (error) {
372
+ return err(readError(error, lexical));
373
+ }
374
+ finally {
375
+ await handle.close().catch(() => undefined);
376
+ }
377
+ }
272
378
  /**
273
379
  * Read file contents as a string
274
380
  * SEC-004: Now handles PathTraversalError from path validation
@@ -277,6 +383,9 @@ export class FileReader {
277
383
  let absolutePath;
278
384
  // SEC-004: Handle path traversal errors from resolvePath
279
385
  try {
386
+ const contained = await this.inProjectRoot(filePath);
387
+ if (contained)
388
+ return this.readContained(filePath, contained.lexical, contained.rootReal);
280
389
  absolutePath = this.resolvePath(filePath);
281
390
  }
282
391
  catch (error) {
@@ -306,22 +415,7 @@ export class FileReader {
306
415
  return ok(content);
307
416
  }
308
417
  catch (error) {
309
- const nodeError = error;
310
- let message;
311
- switch (nodeError.code) {
312
- case 'ENOENT':
313
- message = 'File not found: ' + absolutePath;
314
- break;
315
- case 'EACCES':
316
- message = 'Permission denied: ' + absolutePath;
317
- break;
318
- case 'EISDIR':
319
- message = 'Path is a directory: ' + absolutePath;
320
- break;
321
- default:
322
- message = 'Failed to read file: ' + absolutePath;
323
- }
324
- return err(new FileReadError(message, absolutePath, nodeError.code, nodeError));
418
+ return err(readError(error, absolutePath));
325
419
  }
326
420
  }
327
421
  /**
@@ -1,3 +1,8 @@
1
- /** Bound headers and bodies; streaming callers may use an idle body deadline. */
2
- export declare function fetchWithResponseDeadline(url: string, options: RequestInit, timeoutMs: number, timeoutError: () => Error, bodyDeadline?: 'absolute' | 'idle'): Promise<Response>;
1
+ /**
2
+ * Bound headers and bodies; streaming callers may use an idle body deadline.
3
+ * `maxDurationMs` adds an absolute cap from the start of the request, so an
4
+ * idle deadline cannot be held open forever by a peer that trickles bytes
5
+ * just often enough to reset it (#980 review N6).
6
+ */
7
+ export declare function fetchWithResponseDeadline(url: string, options: RequestInit, timeoutMs: number, timeoutError: () => Error, bodyDeadline?: 'absolute' | 'idle', maxDurationMs?: number): Promise<Response>;
3
8
  //# sourceMappingURL=response-deadline.d.ts.map
@@ -1,5 +1,10 @@
1
- /** Bound headers and bodies; streaming callers may use an idle body deadline. */
2
- export async function fetchWithResponseDeadline(url, options, timeoutMs, timeoutError, bodyDeadline = 'absolute') {
1
+ /**
2
+ * Bound headers and bodies; streaming callers may use an idle body deadline.
3
+ * `maxDurationMs` adds an absolute cap from the start of the request, so an
4
+ * idle deadline cannot be held open forever by a peer that trickles bytes
5
+ * just often enough to reset it (#980 review N6).
6
+ */
7
+ export async function fetchWithResponseDeadline(url, options, timeoutMs, timeoutError, bodyDeadline = 'absolute', maxDurationMs) {
3
8
  const abort = new AbortController();
4
9
  let expired = false;
5
10
  let expireBody;
@@ -10,6 +15,13 @@ export async function fetchWithResponseDeadline(url, options, timeoutMs, timeout
10
15
  abort.abort(error);
11
16
  };
12
17
  let timer = setTimeout(expire, timeoutMs);
18
+ const capTimer = maxDurationMs !== undefined && maxDurationMs > 0 ? setTimeout(expire, maxDurationMs) : undefined;
19
+ capTimer?.unref?.();
20
+ const clearTimers = () => {
21
+ clearTimeout(timer);
22
+ if (capTimer)
23
+ clearTimeout(capTimer);
24
+ };
13
25
  const resetIdleDeadline = () => {
14
26
  if (bodyDeadline !== 'idle')
15
27
  return;
@@ -22,7 +34,7 @@ export async function fetchWithResponseDeadline(url, options, timeoutMs, timeout
22
34
  try {
23
35
  const response = await fetch(url, { ...options, signal: abort.signal });
24
36
  if (!response.body) {
25
- clearTimeout(timer);
37
+ clearTimers();
26
38
  return response;
27
39
  }
28
40
  resetIdleDeadline();
@@ -30,7 +42,7 @@ export async function fetchWithResponseDeadline(url, options, timeoutMs, timeout
30
42
  let finished = false;
31
43
  const finish = () => {
32
44
  finished = true;
33
- clearTimeout(timer);
45
+ clearTimers();
34
46
  };
35
47
  const body = new ReadableStream({
36
48
  start(controller) {
@@ -90,7 +102,7 @@ export async function fetchWithResponseDeadline(url, options, timeoutMs, timeout
90
102
  return bounded;
91
103
  }
92
104
  catch (error) {
93
- clearTimeout(timer);
105
+ clearTimers();
94
106
  if (expired || (error instanceof Error && error.name === 'AbortError')) {
95
107
  throw timeoutError();
96
108
  }
@@ -36,6 +36,21 @@ export interface DuplicationResult {
36
36
  percentage: number;
37
37
  duplicates: DuplicateBlock[];
38
38
  }
39
+ /**
40
+ * #1011 / #1021: how one file's analysis counts as evidence.
41
+ * - `measured`: real metrics.
42
+ * - `excluded`: not source to judge (binary, generated, minified, type
43
+ * declarations, or refused by the reader's path policy) — leave it out.
44
+ * - `failed`: source that could not be read or parsed — a gap in the scope.
45
+ */
46
+ export type FileAnalysisStatus = 'measured' | 'excluded' | 'failed';
47
+ export interface FileAnalysisOutcome {
48
+ status: FileAnalysisStatus;
49
+ /** Metrics computed from the file; null when excluded or unreadable. */
50
+ metrics: FileMetrics | null;
51
+ /** Why the file is excluded or failed. */
52
+ reason?: string;
53
+ }
39
54
  export interface DuplicateBlock {
40
55
  lines: number;
41
56
  occurrences: number;
@@ -53,6 +68,15 @@ export declare class CodeMetricsAnalyzer {
53
68
  * Analyze a single file for all metrics
54
69
  */
55
70
  analyzeFile(filePath: string): Promise<FileMetrics | null>;
71
+ /**
72
+ * #1011 / #1021: analyse a file and say whether its metrics are evidence.
73
+ * Binary, generated, minified and declaration files — and files the reader
74
+ * refuses by policy — are `excluded`; unreadable or unparseable source is
75
+ * `failed`. Callers must not treat either as a measurement.
76
+ */
77
+ analyzeFileDetailed(filePath: string): Promise<FileAnalysisOutcome>;
78
+ /** Compute metrics, reporting read errors and parse failures separately. */
79
+ private analyzeWithDiagnostics;
56
80
  /**
57
81
  * Analyze function-level metrics
58
82
  */
@@ -3,10 +3,53 @@
3
3
  * Real code analysis for complexity, maintainability, and quality metrics
4
4
  */
5
5
  import { TypeScriptParser } from '../parsers/index.js';
6
- import { FileReader } from '../io/index.js';
6
+ import { FileReader, PathTraversalError } from '../io/index.js';
7
7
  import { treeSitterRegistry } from '../parsers/multi-language-parser.js';
8
8
  import { getLanguageFromExtension } from '../types/test-frameworks.js';
9
9
  import { calculateCognitiveComplexity } from './cognitive-complexity.js';
10
+ import { findProjectRoot } from '../../kernel/project-root.js';
11
+ /** git-style binary sniff: a NUL within the first 8 KB. */
12
+ const BINARY_SNIFF_CHARS = 8192;
13
+ /** How far into a file the generated-file conventions are looked for. */
14
+ const GENERATED_SNIFF_CHARS = 1024;
15
+ /** Go's convention (golang.org/s/generatedcode), one full line. */
16
+ const GO_GENERATED_LINE = /^\/\/ Code generated .* DO NOT EDIT\.$/m;
17
+ /** `@generated` used as a tag (not part of a word, e.g. not `@generatedAt`). */
18
+ const GENERATED_TAG = /(?:^|[\s*/])@generated(?![\w-])/;
19
+ /** The file's first comment block: a leading block comment or run of line comments. */
20
+ function firstCommentBlock(content) {
21
+ const text = content.replace(/^\uFEFF/, '').replace(/^#![^\n]*\n/, '').trimStart();
22
+ if (text.startsWith('/*')) {
23
+ const close = text.indexOf('*/');
24
+ return close >= 0 ? text.slice(0, close + 2) : text;
25
+ }
26
+ const lines = [];
27
+ for (const line of text.split('\n')) {
28
+ if (!line.trimStart().startsWith('//'))
29
+ break;
30
+ lines.push(line);
31
+ }
32
+ return lines.join('\n');
33
+ }
34
+ /**
35
+ * #1021 round 2b: generated only by convention — Go's
36
+ * "// Code generated … DO NOT EDIT." line near the top, or an `@generated`
37
+ * tag in the first comment block. Prose such as "DO NOT EDIT the retry
38
+ * constants", or `@generated` mentioned later in the file, is handwritten.
39
+ */
40
+ function isGeneratedSource(content) {
41
+ const head = content.slice(0, GENERATED_SNIFF_CHARS).replace(/\r\n/g, '\n');
42
+ return GO_GENERATED_LINE.test(head) || GENERATED_TAG.test(firstCommentBlock(head));
43
+ }
44
+ /** Exclusion decided from the file name alone. */
45
+ function excludedByName(filePath) {
46
+ const name = filePath.split(/[\\/]/).pop() ?? filePath;
47
+ if (/\.d\.(ts|mts|cts)$/i.test(name))
48
+ return 'type declaration file';
49
+ if (/\.min\.(js|mjs|cjs)$/i.test(name))
50
+ return 'minified bundle';
51
+ return undefined;
52
+ }
10
53
  // ============================================================================
11
54
  // Code Metrics Analyzer
12
55
  // ============================================================================
@@ -15,17 +58,55 @@ export class CodeMetricsAnalyzer {
15
58
  fileReader;
16
59
  constructor() {
17
60
  this.parser = new TypeScriptParser();
18
- this.fileReader = new FileReader();
61
+ // #1021: reads inside the AQE project root (AQE_PROJECT_ROOT, else the
62
+ // detected root — not merely the process cwd) are contained by realpath,
63
+ // so in-root names like `[...slug].tsx`, dot-dirs and deep paths are
64
+ // readable; anything outside keeps the legacy path validation.
65
+ this.fileReader = new FileReader({ projectRoot: findProjectRoot() });
19
66
  }
20
67
  /**
21
68
  * Analyze a single file for all metrics
22
69
  */
23
70
  async analyzeFile(filePath) {
71
+ return (await this.analyzeWithDiagnostics(filePath)).metrics;
72
+ }
73
+ /**
74
+ * #1011 / #1021: analyse a file and say whether its metrics are evidence.
75
+ * Binary, generated, minified and declaration files — and files the reader
76
+ * refuses by policy — are `excluded`; unreadable or unparseable source is
77
+ * `failed`. Callers must not treat either as a measurement.
78
+ */
79
+ async analyzeFileDetailed(filePath) {
80
+ const byName = excludedByName(filePath);
81
+ if (byName)
82
+ return { status: 'excluded', metrics: null, reason: `${filePath}: ${byName}` };
83
+ const { metrics, content, readError, parseFailure, parsedAsSource } = await this.analyzeWithDiagnostics(filePath);
84
+ if (readError) {
85
+ return readError instanceof PathTraversalError
86
+ ? { status: 'excluded', metrics: null, reason: `${filePath} was refused by the file reader (${readError.message})` }
87
+ : { status: 'failed', metrics: null, reason: `${filePath} could not be read (${readError.message})` };
88
+ }
89
+ // git-style sniff, except that TS/JS which parses cleanly is source even
90
+ // with a raw NUL inside a string literal (seen in real repos).
91
+ const sourceDespiteNul = parsedAsSource && !parseFailure;
92
+ if (content !== undefined && !sourceDespiteNul && content.slice(0, BINARY_SNIFF_CHARS).includes('\u0000')) {
93
+ return { status: 'excluded', metrics: null, reason: `${filePath} has binary content` };
94
+ }
95
+ if (content !== undefined && isGeneratedSource(content)) {
96
+ return { status: 'excluded', metrics: null, reason: `${filePath} is a generated file` };
97
+ }
98
+ if (parseFailure)
99
+ return { status: 'failed', metrics, reason: `${filePath} could not be parsed (${parseFailure})` };
100
+ return { status: 'measured', metrics };
101
+ }
102
+ /** Compute metrics, reporting read errors and parse failures separately. */
103
+ async analyzeWithDiagnostics(filePath) {
24
104
  const contentResult = await this.fileReader.readFile(filePath);
25
105
  if (!contentResult.success) {
26
- return null;
106
+ return { metrics: null, readError: contentResult.error };
27
107
  }
28
108
  const content = contentResult.value;
109
+ let parseFailure;
29
110
  const lines = content.split('\n');
30
111
  // Count different types of lines
31
112
  const { codeLines, commentLines, blankLines } = this.countLines(lines);
@@ -41,6 +122,10 @@ export class CodeMetricsAnalyzer {
41
122
  if (['ts', 'tsx', 'js', 'jsx'].includes(ext)) {
42
123
  try {
43
124
  const ast = this.parser.parseFile(fileName, content);
125
+ const syntaxErrors = ast.parseDiagnostics?.length ?? 0;
126
+ if (syntaxErrors > 0) {
127
+ parseFailure = `${syntaxErrors} syntax error${syntaxErrors === 1 ? '' : 's'}`;
128
+ }
44
129
  // Extract functions and calculate complexity
45
130
  const functions = this.parser.extractFunctions(ast);
46
131
  functionCount = functions.length;
@@ -62,8 +147,9 @@ export class CodeMetricsAnalyzer {
62
147
  }
63
148
  }
64
149
  }
65
- catch {
66
- // If parsing fails, use heuristic analysis
150
+ catch (error) {
151
+ // If parsing fails, use heuristic analysis — an estimate, not a measurement (#1011)
152
+ parseFailure ??= error instanceof Error ? error.message : String(error);
67
153
  cyclomaticComplexity = this.estimateCyclomaticComplexity(content);
68
154
  cognitiveComplexity = this.estimateCognitiveComplexity(content);
69
155
  }
@@ -98,7 +184,7 @@ export class CodeMetricsAnalyzer {
98
184
  const halsteadMetrics = this.calculateHalsteadMetrics(content);
99
185
  // Calculate maintainability index
100
186
  const maintainabilityIndex = this.calculateMaintainabilityIndex(halsteadMetrics.volume, cyclomaticComplexity, codeLines);
101
- return {
187
+ const metrics = {
102
188
  path: filePath,
103
189
  linesOfCode: codeLines,
104
190
  linesOfComments: commentLines,
@@ -111,6 +197,7 @@ export class CodeMetricsAnalyzer {
111
197
  classCount,
112
198
  maxNestingDepth,
113
199
  };
200
+ return { metrics, content, parseFailure, parsedAsSource: ['ts', 'tsx', 'js', 'jsx'].includes(ext) };
114
201
  }
115
202
  /**
116
203
  * Analyze function-level metrics