agentic-qe 3.15.13 → 3.15.14

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 (409) hide show
  1. package/.claude/helpers/brain-checkpoint.cjs +124 -5
  2. package/.claude/skills/skills-manifest.json +1 -1
  3. package/CHANGELOG.md +78 -0
  4. package/assets/skills/skills-manifest.json +1 -1
  5. package/dist/cli/bundle.js +6 -6
  6. package/dist/cli/chunks/adapter-23KA2YW7.js +2 -0
  7. package/dist/cli/chunks/{agent-booster-wasm-6RRQWMNE.js → agent-booster-wasm-2DLAEZK6.js} +2 -2
  8. package/dist/cli/chunks/{agent-handler-AOH6TV7W.js → agent-handler-P3IY7XEE.js} +2 -2
  9. package/dist/cli/chunks/{agent-memory-branch-2P54SF5N.js → agent-memory-branch-WWKC2H3G.js} +2 -2
  10. package/dist/cli/chunks/aqe-learning-engine-MUICAXW5.js +2 -0
  11. package/dist/cli/chunks/{arena-X6MOGQHA.js → arena-4BMFF6BS.js} +4 -4
  12. package/dist/cli/chunks/{arena-NSVFCAF5.js → arena-EIV5OALF.js} +2 -2
  13. package/dist/cli/chunks/{audit-27DJLQNM.js → audit-DNTI453H.js} +3 -3
  14. package/dist/cli/chunks/base-XPWGYDKD.js +2 -0
  15. package/dist/cli/chunks/{better-sqlite3-BU5GXILS.js → better-sqlite3-TQBQGNC6.js} +2 -2
  16. package/dist/cli/chunks/brain-handler-HY57CNAO.js +95 -0
  17. package/dist/cli/chunks/{branch-enumerator-5CLULOCU.js → branch-enumerator-THPMZPHQ.js} +2 -2
  18. package/dist/cli/chunks/{browser-R4DMU3LN.js → browser-O6JJOZCK.js} +2 -2
  19. package/dist/cli/chunks/browser-workflow-UMQVBVGK.js +2 -0
  20. package/dist/cli/chunks/{chunk-VU5TBX2V.js → chunk-2HPNGK7A.js} +2 -2
  21. package/dist/cli/chunks/{chunk-5FKWCZNF.js → chunk-2IJO3657.js} +2 -2
  22. package/dist/cli/chunks/{chunk-K3TLLJMX.js → chunk-2QLE6NDW.js} +1 -1
  23. package/dist/cli/chunks/{chunk-J2ZIFFM6.js → chunk-2UZBLC5H.js} +2 -2
  24. package/dist/cli/chunks/{chunk-HD7YIFOI.js → chunk-2W5MQDHM.js} +2 -2
  25. package/dist/cli/chunks/{chunk-F3YS57NF.js → chunk-3FITMWWJ.js} +2 -2
  26. package/dist/cli/chunks/{chunk-K4CZA77U.js → chunk-3TF27MG5.js} +2 -2
  27. package/dist/cli/chunks/{chunk-BLSLEVDI.js → chunk-3XACRXBY.js} +2 -2
  28. package/dist/cli/chunks/{chunk-A64JFBWI.js → chunk-43XHGWYH.js} +2 -2
  29. package/dist/cli/chunks/{chunk-42J34YG4.js → chunk-4RPBODN5.js} +2 -2
  30. package/dist/cli/chunks/{chunk-W26B7ERY.js → chunk-4T7XV5KQ.js} +1 -1
  31. package/dist/cli/chunks/{chunk-SSU73QAX.js → chunk-4WLIOPHX.js} +2 -2
  32. package/dist/cli/chunks/{chunk-P7A4NKTZ.js → chunk-52KOPIMI.js} +2 -2
  33. package/dist/cli/chunks/{chunk-HQZGPJYG.js → chunk-56NSE3LJ.js} +2 -2
  34. package/dist/cli/chunks/{chunk-AQSVJNEH.js → chunk-57DRT6UA.js} +2 -2
  35. package/dist/cli/chunks/{chunk-M6AAGIG7.js → chunk-57FX3GP6.js} +1 -1
  36. package/dist/cli/chunks/{chunk-O6FGXMHD.js → chunk-5PLBQZ5J.js} +1 -1
  37. package/dist/cli/chunks/{chunk-ASQYASNV.js → chunk-5Y7UFHJD.js} +1 -1
  38. package/dist/cli/chunks/{chunk-5VMAV6T6.js → chunk-5Z4MO2F3.js} +1 -1
  39. package/dist/cli/chunks/chunk-65EE2EST.js +8 -0
  40. package/dist/cli/chunks/{chunk-7CMTY45A.js → chunk-6NIGSY5L.js} +2 -2
  41. package/dist/cli/chunks/chunk-6O63ZTVX.js +3 -0
  42. package/dist/cli/chunks/{chunk-FZ76G4QJ.js → chunk-6OI5SK7M.js} +1 -1
  43. package/dist/cli/chunks/{chunk-5ZGM3RMH.js → chunk-6P4Q4RTC.js} +1 -1
  44. package/dist/cli/chunks/{chunk-LUZNKJE6.js → chunk-7724KXM2.js} +3 -3
  45. package/dist/cli/chunks/{chunk-XPRVF4YE.js → chunk-7MISCSL5.js} +2 -2
  46. package/dist/cli/chunks/{chunk-TCBBNUBP.js → chunk-7MUO4DEH.js} +3 -3
  47. package/dist/cli/chunks/{chunk-NT4DBXSX.js → chunk-7QUSNBAA.js} +2 -2
  48. package/dist/cli/chunks/{chunk-TWDW32W2.js → chunk-7SQTLUEN.js} +2 -2
  49. package/dist/cli/chunks/{chunk-QPNG5ZN2.js → chunk-7T6L3LFN.js} +2 -2
  50. package/dist/cli/chunks/{chunk-E56B6IDX.js → chunk-7TH4PJSU.js} +2 -2
  51. package/dist/cli/chunks/{chunk-LZYQHVD4.js → chunk-7Y3LXH57.js} +2 -2
  52. package/dist/cli/chunks/{chunk-YQFLQE53.js → chunk-A2T56XVL.js} +2 -2
  53. package/dist/cli/chunks/{chunk-KV4T4MXK.js → chunk-AJVLVF7V.js} +2 -2
  54. package/dist/cli/chunks/{chunk-VTDFVFST.js → chunk-ARRBXCII.js} +2 -2
  55. package/dist/cli/chunks/{chunk-G6WDYBLQ.js → chunk-AYLEH2UF.js} +1 -1
  56. package/dist/cli/chunks/{chunk-526QYFJU.js → chunk-BBYJBZHG.js} +2 -2
  57. package/dist/cli/chunks/{chunk-CM4LSLKR.js → chunk-BM3EJLMV.js} +2 -2
  58. package/dist/cli/chunks/{chunk-DVGRPK7A.js → chunk-BNG4J3CE.js} +2 -2
  59. package/dist/cli/chunks/{chunk-BK577VL7.js → chunk-BPDAQB3F.js} +2 -2
  60. package/dist/cli/chunks/{chunk-C6JTLKG7.js → chunk-BQJ7CV53.js} +9 -9
  61. package/dist/cli/chunks/{chunk-GB6HBNH2.js → chunk-C3OIBFAA.js} +2 -2
  62. package/dist/cli/chunks/{chunk-RF7HWBHN.js → chunk-CAZM63TP.js} +2 -2
  63. package/dist/cli/chunks/{chunk-KWYH3FI4.js → chunk-CIINJHOX.js} +1 -1
  64. package/dist/cli/chunks/{chunk-ARJW4I2O.js → chunk-CPPYZYXC.js} +2 -2
  65. package/dist/cli/chunks/{chunk-CRWPZT74.js → chunk-D3ZZ2NLL.js} +2 -2
  66. package/dist/cli/chunks/{chunk-Q3UDLV5Z.js → chunk-D5GB5PUU.js} +1 -1
  67. package/dist/cli/chunks/{chunk-7PLIEBY7.js → chunk-DLTB5KCR.js} +2 -2
  68. package/dist/cli/chunks/{chunk-YZWBNBTW.js → chunk-DRLSJJIC.js} +2 -2
  69. package/dist/cli/chunks/{chunk-BEGR4D6N.js → chunk-DSQESXL4.js} +2 -2
  70. package/dist/cli/chunks/{chunk-72ASBE35.js → chunk-E2JLAW3U.js} +3 -3
  71. package/dist/cli/chunks/{chunk-MAMQA43L.js → chunk-E3QIQMMN.js} +1 -1
  72. package/dist/cli/chunks/{chunk-WOCGL4QP.js → chunk-E7OR6V3V.js} +2 -2
  73. package/dist/cli/chunks/{chunk-MVVB7C2E.js → chunk-E7QTWGPI.js} +156 -156
  74. package/dist/cli/chunks/{chunk-JQGMW45H.js → chunk-EC65UZ77.js} +1 -1
  75. package/dist/cli/chunks/{chunk-YXRASAPI.js → chunk-EIEEST4T.js} +2 -2
  76. package/dist/cli/chunks/{chunk-AL6FBH3E.js → chunk-FHPNWHY7.js} +2 -2
  77. package/dist/cli/chunks/{chunk-C7JM7CD3.js → chunk-FJOIBZUB.js} +2 -2
  78. package/dist/cli/chunks/{chunk-LL7LDPXS.js → chunk-FTYRPEJS.js} +1 -1
  79. package/dist/cli/chunks/{chunk-MFW5HSG4.js → chunk-G7HGUQAE.js} +2 -2
  80. package/dist/cli/chunks/{chunk-WQL7WCIZ.js → chunk-GY4P7KAI.js} +1 -1
  81. package/dist/cli/chunks/{chunk-3YNLWPBF.js → chunk-H3C5FJRH.js} +2 -2
  82. package/dist/cli/chunks/{chunk-W3INMZZ6.js → chunk-H4LYXLAT.js} +1 -1
  83. package/dist/cli/chunks/{chunk-W3PPFHI5.js → chunk-HAYKLXCT.js} +52 -50
  84. package/dist/cli/chunks/{chunk-XNBOGCF3.js → chunk-HEDGFKC5.js} +2 -2
  85. package/dist/cli/chunks/{chunk-SYV2V3PL.js → chunk-HHBF2BZC.js} +4 -4
  86. package/dist/cli/chunks/{chunk-75RDHBAX.js → chunk-HSDWPQQY.js} +3 -3
  87. package/dist/cli/chunks/{chunk-6KATY3KS.js → chunk-HTVGHHX2.js} +2 -2
  88. package/dist/cli/chunks/{chunk-VRVMIPTM.js → chunk-HV43NX4A.js} +2 -2
  89. package/dist/cli/chunks/{chunk-RFNW2LGD.js → chunk-IDBA5GK2.js} +2 -2
  90. package/dist/cli/chunks/{chunk-DNDL7SOS.js → chunk-INGXD5IX.js} +2 -2
  91. package/dist/cli/chunks/{chunk-IJUHSJ2U.js → chunk-IQRPR4KB.js} +2 -2
  92. package/dist/cli/chunks/{chunk-UOC3O6RP.js → chunk-IRPNEXOU.js} +2 -2
  93. package/dist/cli/chunks/{chunk-KDVZND5Q.js → chunk-J35JWDJE.js} +1 -1
  94. package/dist/cli/chunks/{chunk-CV77DMDQ.js → chunk-J6ASX536.js} +2 -2
  95. package/dist/cli/chunks/{chunk-7YTGHGK4.js → chunk-JAOCHPYX.js} +2 -2
  96. package/dist/cli/chunks/{chunk-HZ5NXFXH.js → chunk-JB7R77SH.js} +2 -2
  97. package/dist/cli/chunks/{chunk-PB6J6HAA.js → chunk-JI67T6Q2.js} +2 -2
  98. package/dist/cli/chunks/{chunk-E7CLYGS7.js → chunk-JJHLGGPP.js} +1 -1
  99. package/dist/cli/chunks/{chunk-3Y7TJFHU.js → chunk-JK6PMLQQ.js} +2 -2
  100. package/dist/cli/chunks/{chunk-CCMKSHAT.js → chunk-JO26SG47.js} +2 -2
  101. package/dist/cli/chunks/{chunk-NU3W5WFT.js → chunk-JSSU4RIK.js} +2 -2
  102. package/dist/cli/chunks/{chunk-756CGMEH.js → chunk-K2SMP4OD.js} +1 -1
  103. package/dist/cli/chunks/{chunk-OCAEXYFA.js → chunk-K7GFYFBO.js} +2 -2
  104. package/dist/cli/chunks/{chunk-VRHRBAEM.js → chunk-K7RT6ITZ.js} +1 -1
  105. package/dist/cli/chunks/{chunk-LFJALJOA.js → chunk-KJ5A54ZH.js} +2 -2
  106. package/dist/cli/chunks/{chunk-3Y2ROSCL.js → chunk-L5VSLPMW.js} +2 -2
  107. package/dist/cli/chunks/{chunk-WKGTGOYS.js → chunk-L752CNG3.js} +3 -3
  108. package/dist/cli/chunks/{chunk-IC3TQEOA.js → chunk-L7PC675Y.js} +1 -1
  109. package/dist/cli/chunks/{chunk-TOQWL2ZF.js → chunk-LTGQJYYO.js} +2 -2
  110. package/dist/cli/chunks/{chunk-SVLQRAMF.js → chunk-M2TG7VDK.js} +1 -1
  111. package/dist/cli/chunks/{chunk-X7N2JF2X.js → chunk-M5JEA6ZY.js} +2 -2
  112. package/dist/cli/chunks/{chunk-GHM6MQNK.js → chunk-MB4UKUBV.js} +2 -2
  113. package/dist/cli/chunks/{chunk-R7SYRCRP.js → chunk-MKYOE7NE.js} +1 -1
  114. package/dist/cli/chunks/{chunk-3AN5TNGD.js → chunk-MQXWG55U.js} +3 -3
  115. package/dist/cli/chunks/{chunk-3QZEGE67.js → chunk-MR2OPUSA.js} +1 -1
  116. package/dist/cli/chunks/{chunk-6Z7PRBSG.js → chunk-N736GLWZ.js} +2 -2
  117. package/dist/cli/chunks/{chunk-PIDQVU3L.js → chunk-NHEG2DLN.js} +2 -2
  118. package/dist/cli/chunks/chunk-NKOLILT7.js +86 -0
  119. package/dist/cli/chunks/{chunk-UXZSUMEA.js → chunk-NPCXGX7N.js} +2 -2
  120. package/dist/cli/chunks/{chunk-XEAEYC6Y.js → chunk-NZQYJCO6.js} +1 -1
  121. package/dist/cli/chunks/{chunk-G77ERMUD.js → chunk-O2AAYJUV.js} +1 -1
  122. package/dist/cli/chunks/{chunk-H4GG2NLO.js → chunk-O32BFQV4.js} +2 -2
  123. package/dist/cli/chunks/{chunk-3LJ7LQMV.js → chunk-O3ERGUXH.js} +1 -1
  124. package/dist/cli/chunks/{chunk-QDEJ4CI2.js → chunk-O5CEL447.js} +2 -2
  125. package/dist/cli/chunks/{chunk-W2QWSQVE.js → chunk-O756AOUX.js} +2 -2
  126. package/dist/cli/chunks/{chunk-PSFSPGUD.js → chunk-OCN53CCK.js} +2 -2
  127. package/dist/cli/chunks/{chunk-KCW47QR5.js → chunk-OGEIHS76.js} +1 -1
  128. package/dist/cli/chunks/{chunk-3RZV5DGO.js → chunk-OLUOVNUF.js} +2 -2
  129. package/dist/cli/chunks/{chunk-KADFXPPN.js → chunk-P2TPH3TC.js} +2 -2
  130. package/dist/cli/chunks/{chunk-7NA7JXNB.js → chunk-PCQZIAXB.js} +2 -2
  131. package/dist/cli/chunks/{chunk-HOAJUIBQ.js → chunk-PGN4TARY.js} +2 -2
  132. package/dist/cli/chunks/{chunk-KB56CPU4.js → chunk-PNRPVQGI.js} +2 -2
  133. package/dist/cli/chunks/{chunk-CE7B5LU7.js → chunk-PWQWKYBG.js} +1 -1
  134. package/dist/cli/chunks/{chunk-DLD7RUZ4.js → chunk-QNQE3EOH.js} +2 -2
  135. package/dist/cli/chunks/chunk-QP2HLKTS.js +2 -0
  136. package/dist/cli/chunks/{chunk-H4H2YSFH.js → chunk-QP6GL3O5.js} +1 -1
  137. package/dist/cli/chunks/{chunk-LWR3FV3Y.js → chunk-QUZ745UQ.js} +2 -2
  138. package/dist/cli/chunks/{chunk-X2Z7F4EU.js → chunk-R5RRWLRI.js} +2 -2
  139. package/dist/cli/chunks/{chunk-NURIILUB.js → chunk-RE6JTSDM.js} +1 -1
  140. package/dist/cli/chunks/{chunk-YSZ5OE3Z.js → chunk-TOJF3ZG4.js} +2 -2
  141. package/dist/cli/chunks/{chunk-7JUC2MVZ.js → chunk-TSP6SU5V.js} +2 -2
  142. package/dist/cli/chunks/{chunk-NW7IBHJA.js → chunk-TW6Z6W4X.js} +4 -4
  143. package/dist/cli/chunks/{chunk-UDQSYWVF.js → chunk-TWOV3I3A.js} +1 -1
  144. package/dist/cli/chunks/chunk-U4TML2VD.js +3 -0
  145. package/dist/cli/chunks/{chunk-WO274FRI.js → chunk-U6IOQKCT.js} +2 -2
  146. package/dist/cli/chunks/{chunk-KDNJ4F3P.js → chunk-UDSB3XCG.js} +2 -2
  147. package/dist/cli/chunks/{chunk-SG3NX7QE.js → chunk-UFP7SN5V.js} +2 -2
  148. package/dist/cli/chunks/{chunk-UTRV7T2N.js → chunk-UMHFTQTR.js} +2 -2
  149. package/dist/cli/chunks/{chunk-4OVC4RIL.js → chunk-UNYTHZDZ.js} +1 -1
  150. package/dist/cli/chunks/{chunk-32ZMWEP3.js → chunk-UPWLMIDY.js} +2 -2
  151. package/dist/cli/chunks/{chunk-T3PGQFDI.js → chunk-USAKCGHC.js} +2 -2
  152. package/dist/cli/chunks/{chunk-2G7TVT6W.js → chunk-V3MGY76S.js} +2 -2
  153. package/dist/cli/chunks/{chunk-ZAKQLAHT.js → chunk-V6SE2ZU2.js} +1 -1
  154. package/dist/cli/chunks/{chunk-SE4VNN4I.js → chunk-VCVRZD4Y.js} +3 -3
  155. package/dist/cli/chunks/{chunk-PHP5UBT4.js → chunk-VG32EEUG.js} +2 -2
  156. package/dist/cli/chunks/{chunk-YZEXYO4W.js → chunk-VGZOPQQY.js} +1 -1
  157. package/dist/cli/chunks/{chunk-OFACHK5O.js → chunk-VJBJRFUO.js} +2 -2
  158. package/dist/cli/chunks/{chunk-NZ3GUMB2.js → chunk-WBC6WB32.js} +2 -2
  159. package/dist/cli/chunks/{chunk-GHY6Z6KO.js → chunk-WCM6WE7G.js} +3 -3
  160. package/dist/cli/chunks/{chunk-NZD4DPSU.js → chunk-WCPSR4MJ.js} +2 -2
  161. package/dist/cli/chunks/{chunk-I3C7JOXC.js → chunk-WKI46WWN.js} +2 -2
  162. package/dist/cli/chunks/{chunk-5K26BEYB.js → chunk-WM2QRIRD.js} +2 -2
  163. package/dist/cli/chunks/{chunk-U2FUXDDJ.js → chunk-WRC3HLUY.js} +3 -3
  164. package/dist/cli/chunks/{chunk-GII6UM3F.js → chunk-WUGXXNK4.js} +1 -1
  165. package/dist/cli/chunks/{chunk-JGZ722G3.js → chunk-WZQADC5R.js} +2 -2
  166. package/dist/cli/chunks/{chunk-GU5HNCWI.js → chunk-X6NJOT3V.js} +1 -1
  167. package/dist/cli/chunks/{chunk-DFUASIKA.js → chunk-X6Q2N5S5.js} +2 -2
  168. package/dist/cli/chunks/{chunk-G2Q66Z23.js → chunk-X7CUI7KH.js} +2 -2
  169. package/dist/cli/chunks/{chunk-5MDERQH3.js → chunk-XMCSKYDE.js} +1 -1
  170. package/dist/cli/chunks/{chunk-VTOBUZL6.js → chunk-XN3KCKAM.js} +2 -2
  171. package/dist/cli/chunks/{chunk-KUAKV3IW.js → chunk-XSPMLJCQ.js} +1 -1
  172. package/dist/cli/chunks/{chunk-YBQH2VOP.js → chunk-XTZGAG6P.js} +2 -2
  173. package/dist/cli/chunks/{chunk-MGZ5FJUW.js → chunk-YE54T2NQ.js} +2 -2
  174. package/dist/cli/chunks/{chunk-BTVEYBW2.js → chunk-YEFTK4HD.js} +2 -2
  175. package/dist/cli/chunks/{chunk-CT6SAVXQ.js → chunk-YGC5QKQ4.js} +2 -2
  176. package/dist/cli/chunks/{chunk-TWJTK4CC.js → chunk-YGOSSVY5.js} +2 -2
  177. package/dist/cli/chunks/chunk-YKQWIXUY.js +2 -0
  178. package/dist/cli/chunks/{chunk-TSQC2KKZ.js → chunk-Z2S7DNFP.js} +2 -2
  179. package/dist/cli/chunks/{chunk-JRRXCODW.js → chunk-Z54G2YOL.js} +2 -2
  180. package/dist/cli/chunks/{chunk-EXGMJFAT.js → chunk-ZJGFQK27.js} +1 -1
  181. package/dist/cli/chunks/{chunk-WNQS4WTS.js → chunk-ZUE524JL.js} +2 -2
  182. package/dist/cli/chunks/{ci-ENOASTYB.js → ci-UMA2SMNW.js} +2 -2
  183. package/dist/cli/chunks/{ci-config-B26OXHQM.js → ci-config-UQSILJFQ.js} +2 -2
  184. package/dist/cli/chunks/{ci-output-JTCLLNOQ.js → ci-output-U6YZLLKH.js} +2 -2
  185. package/dist/cli/chunks/{circuit-breaker-23JMFNM5.js → circuit-breaker-ATYQP6X2.js} +2 -2
  186. package/dist/cli/chunks/{claude-flow-setup-ON6L462G.js → claude-flow-setup-6YHFD7AN.js} +2 -2
  187. package/dist/cli/chunks/client-E43GWLQH.js +2 -0
  188. package/dist/cli/chunks/{cline-installer-OWQ4D2FQ.js → cline-installer-EPE7IOZE.js} +2 -2
  189. package/dist/cli/chunks/{code-2ZRL7SEU.js → code-NUEJ4XYO.js} +3 -3
  190. package/dist/cli/chunks/{code-index-extractor-JXSQVM67.js → code-index-extractor-D4DBT6OL.js} +2 -2
  191. package/dist/cli/chunks/{codex-installer-7LXZYBSQ.js → codex-installer-633SM4LR.js} +2 -2
  192. package/dist/cli/chunks/{completions-C2LR623C.js → completions-WUKVIW3L.js} +2 -2
  193. package/dist/cli/chunks/{complexity-analyzer-TGQLHCYJ.js → complexity-analyzer-F73ACR5H.js} +2 -2
  194. package/dist/cli/chunks/{continuedev-installer-RUGD24D2.js → continuedev-installer-QH42TKMS.js} +2 -2
  195. package/dist/cli/chunks/{copilot-installer-ZLFVLEJP.js → copilot-installer-Y3XC7BTT.js} +2 -2
  196. package/dist/cli/chunks/core-handlers-R5A3SQDY.js +2 -0
  197. package/dist/cli/chunks/{cost-tracker-RT4QL745.js → cost-tracker-57QPV7E3.js} +2 -2
  198. package/dist/cli/chunks/coverage-IBCHMBCR.js +51 -0
  199. package/dist/cli/chunks/cross-domain-router-LLYVPZF6.js +2 -0
  200. package/dist/cli/chunks/{cursor-installer-LJKLNFF6.js → cursor-installer-F4UYQHIN.js} +2 -2
  201. package/dist/cli/chunks/{daemon-FBH3IRYN.js → daemon-BYYPIJ7G.js} +4 -4
  202. package/dist/cli/chunks/{daemon-BMDXCQT5.js → daemon-XR4Q6YZF.js} +3 -3
  203. package/dist/cli/chunks/{dag-attention-scheduler-JGDED55I.js → dag-attention-scheduler-ZR5ZD3TW.js} +2 -2
  204. package/dist/cli/chunks/{detect-SZIHIVCJ.js → detect-GEGYURLL.js} +2 -2
  205. package/dist/cli/chunks/{dist-node-FV3KWXQ6.js → dist-node-JU3KT2JO.js} +2 -2
  206. package/dist/cli/chunks/{domain-handler-GI5JWQOV.js → domain-handler-7QI3FJGE.js} +2 -2
  207. package/dist/cli/chunks/{domain-plugins-BUWY36TL.js → domain-plugins-O2YRM2PD.js} +2 -2
  208. package/dist/cli/chunks/{domain-transfer-GCY7W5DA.js → domain-transfer-7J3S2OS6.js} +2 -2
  209. package/dist/cli/chunks/dream-6C4NURSE.js +2 -0
  210. package/dist/cli/chunks/{embed-and-insert-pattern-GPRR3ZGD.js → embed-and-insert-pattern-URES5Q6J.js} +2 -2
  211. package/dist/cli/chunks/{eval-XPB3IGAP.js → eval-RVMCIUOR.js} +2 -2
  212. package/dist/cli/chunks/{experience-capture-middleware-2E554UB3.js → experience-capture-middleware-SYJQSBKE.js} +3 -3
  213. package/dist/cli/chunks/{fast-paths-ZSMWZPUC.js → fast-paths-QUKPKWKZ.js} +2 -2
  214. package/dist/cli/chunks/{feature-flags-N7EOGE5P.js → feature-flags-5JCSKL2P.js} +2 -2
  215. package/dist/cli/chunks/{feature-flags-GIWVDVVC.js → feature-flags-K7JXNKJI.js} +2 -2
  216. package/dist/cli/chunks/file-discovery-J5IE5KP7.js +2 -0
  217. package/dist/cli/chunks/{fleet-HCHDOUCX.js → fleet-II4Q6HXK.js} +3 -3
  218. package/dist/cli/chunks/{gnn-wrapper-CZNCNXXZ.js → gnn-wrapper-M7VO2EMS.js} +2 -2
  219. package/dist/cli/chunks/{heartbeat-handler-6YUIF2YQ.js → heartbeat-handler-ND5CY26N.js} +4 -4
  220. package/dist/cli/chunks/heartbeat-scheduler-FC5PBTMN.js +2 -0
  221. package/dist/cli/chunks/hnsw-adapter-47UIVOBG.js +2 -0
  222. package/dist/cli/chunks/hnsw-index-3AKVLOZQ.js +2 -0
  223. package/dist/cli/chunks/{hnsw-legacy-bridge-J3M3IK24.js → hnsw-legacy-bridge-N3AUUUU7.js} +2 -2
  224. package/dist/cli/chunks/{hnswlib-node-ULGTGDZW.js → hnswlib-node-NZY3E5EN.js} +2 -2
  225. package/dist/cli/chunks/{hooks-C4BUGYUQ.js → hooks-QVJDTII5.js} +10 -10
  226. package/dist/cli/chunks/hybrid-backend-YAOSNX47.js +2 -0
  227. package/dist/cli/chunks/{hypergraph-engine-WINGVMPG.js → hypergraph-engine-ZRY6MTDV.js} +2 -2
  228. package/dist/cli/chunks/{hypergraph-handler-GADMWKAU.js → hypergraph-handler-56DO4XZQ.js} +3 -3
  229. package/dist/cli/chunks/impact-analyzer-4FMJXM4M.js +2 -0
  230. package/dist/cli/chunks/{init-guard-K2T4QWAO.js → init-guard-DTF4EVUY.js} +2 -2
  231. package/dist/cli/chunks/{init-handler-PCZTDZYI.js → init-handler-M6CNQHMX.js} +6 -6
  232. package/dist/cli/chunks/init-wizard-RTLCRWDT.js +2 -0
  233. package/dist/cli/chunks/kernel-2OWIGGGT.js +2 -0
  234. package/dist/cli/chunks/{kilocode-installer-XENXNEIU.js → kilocode-installer-IJN7XKBH.js} +2 -2
  235. package/dist/cli/chunks/{kiro-installer-3PG2TJ67.js → kiro-installer-UKKPGPDC.js} +2 -2
  236. package/dist/cli/chunks/knowledge-graph-25XXKDJN.js +2 -0
  237. package/dist/cli/chunks/learning-W2HETWQ4.js +131 -0
  238. package/dist/cli/chunks/{llm-router-RKVDEWU2.js → llm-router-Y546K4VX.js} +4 -4
  239. package/dist/cli/chunks/llm-router-service-G3EIN4UB.js +2 -0
  240. package/dist/cli/chunks/{load-ITHC564X.js → load-MKAB2AXE.js} +2 -2
  241. package/dist/cli/chunks/load-test-D6QYNIVT.js +2 -0
  242. package/dist/cli/chunks/{mcp-TCL5UW3N.js → mcp-AZKUS6K3.js} +2 -2
  243. package/dist/cli/chunks/{memory-BKDAY2N2.js → memory-ZDOQN2KU.js} +5 -5
  244. package/dist/cli/chunks/memory-backend-LDFFZMEQ.js +2 -0
  245. package/dist/cli/chunks/{memory-handlers-WN4FXFOA.js → memory-handlers-3SQVY7FE.js} +2 -2
  246. package/dist/cli/chunks/{multi-model-executor-VHAT7ZPF.js → multi-model-executor-WWVXDHG4.js} +2 -2
  247. package/dist/cli/chunks/{opencode-installer-E3VM3EEY.js → opencode-installer-YUJNXXWS.js} +2 -2
  248. package/dist/cli/chunks/{orchestrator-BMQ6X762.js → orchestrator-Z6PWPLRE.js} +109 -25
  249. package/dist/cli/chunks/pattern-null-store-KDVRM7PW.js +2 -0
  250. package/dist/cli/chunks/{pattern-usage-recorder-GOOR2BV5.js → pattern-usage-recorder-TPWPX32U.js} +2 -2
  251. package/dist/cli/chunks/{pipeline-5NSFQQIX.js → pipeline-4BBGTE4M.js} +2 -2
  252. package/dist/cli/chunks/{platform-SQM34J5G.js → platform-5GSHXCV5.js} +2 -2
  253. package/dist/cli/chunks/{plugin-UQJZRMZG.js → plugin-OFDVF5HS.js} +2 -2
  254. package/dist/cli/chunks/{prime-radiant-advanced-wasm-WMDJOL4S.js → prime-radiant-advanced-wasm-NC6MUYGJ.js} +2 -2
  255. package/dist/cli/chunks/project-root-DDGBWDP6.js +2 -0
  256. package/dist/cli/chunks/protocol-executor-KBOLLCWA.js +2 -0
  257. package/dist/cli/chunks/{protocol-handler-OBDCVY6X.js → protocol-handler-MPOAAEPA.js} +2 -2
  258. package/dist/cli/chunks/{prove-XDC7I4XT.js → prove-CDKMAIVM.js} +2 -2
  259. package/dist/cli/chunks/qe-reasoning-bank-GRXBT7FC.js +2 -0
  260. package/dist/cli/chunks/{quality-L4GQ6WX4.js → quality-ZH4F7R7R.js} +2 -2
  261. package/dist/cli/chunks/{quality-gate-MJG66LKN.js → quality-gate-IDRMW6OE.js} +3 -3
  262. package/dist/cli/chunks/queen-coordinator-L2QWMJ5Q.js +2 -0
  263. package/dist/cli/chunks/{real-embeddings-HW4G2LWL.js → real-embeddings-I2UVNNB3.js} +2 -2
  264. package/dist/cli/chunks/{ref-validation-FC7JOJ2C.js → ref-validation-Z5GCGVXK.js} +2 -2
  265. package/dist/cli/chunks/{roocode-installer-KWS4CEIC.js → roocode-installer-IZ2S7PH2.js} +2 -2
  266. package/dist/cli/chunks/router-FT5WJPUH.js +2 -0
  267. package/dist/cli/chunks/routing-feedback-EO2MKOUX.js +2 -0
  268. package/dist/cli/chunks/{routing-handler-QF4WVB2S.js → routing-handler-NAX35VUW.js} +2 -2
  269. package/dist/cli/chunks/{ruvector-commands-2MTCOUK6.js → ruvector-commands-5YW2SOFF.js} +2 -2
  270. package/dist/cli/chunks/rvf-dual-writer-WHBFQJVU.js +2 -0
  271. package/dist/cli/chunks/rvf-migration-adapter-YT3APF2I.js +2 -0
  272. package/dist/cli/chunks/{rvf-migration-coordinator-BREJCXWN.js → rvf-migration-coordinator-VUIZHTVG.js} +2 -2
  273. package/dist/cli/chunks/rvf-native-adapter-37PUFKQD.js +2 -0
  274. package/dist/cli/chunks/{rvf-store-integrity-KKC6HOJD.js → rvf-store-integrity-IPGCAT6C.js} +2 -2
  275. package/dist/cli/chunks/safe-db-TDZKUOZJ.js +2 -0
  276. package/dist/cli/chunks/schedule-CRKTRY2A.js +2 -0
  277. package/dist/cli/chunks/scheduler-6ZBDVQWN.js +2 -0
  278. package/dist/cli/chunks/{security-OSAE7VAP.js → security-3IH4BO5Z.js} +3 -3
  279. package/dist/cli/chunks/{shared-rvf-adapter-COUOS665.js → shared-rvf-adapter-ABY7PAY2.js} +2 -2
  280. package/dist/cli/chunks/{shared-rvf-dual-writer-YXMPZKQE.js → shared-rvf-dual-writer-6KENLN2W.js} +2 -2
  281. package/dist/cli/chunks/sqlite-persistence-FFJQAIKW.js +2 -0
  282. package/dist/cli/chunks/{standalone-memory-E6JBMOIL.js → standalone-memory-RLFAUGOW.js} +2 -2
  283. package/dist/cli/chunks/{status-handler-AFTCIYIX.js → status-handler-FCOZBPE5.js} +2 -2
  284. package/dist/cli/chunks/{structural-health-2FROCEI4.js → structural-health-4RDA5UUM.js} +2 -2
  285. package/dist/cli/chunks/{sync-VAYTOWDC.js → sync-54LUAUTK.js} +2 -2
  286. package/dist/cli/chunks/{sync-YIQYOFGW.js → sync-KGEEXXCC.js} +2 -2
  287. package/dist/cli/chunks/{task-handler-KVQHDEX3.js → task-handler-K3OXHYKU.js} +2 -2
  288. package/dist/cli/chunks/{task-handlers-MVVECQA6.js → task-handlers-6H7L2UT4.js} +3 -3
  289. package/dist/cli/chunks/{test-5JSVTOMY.js → test-S7IG6EIX.js} +4 -4
  290. package/dist/cli/chunks/test-runner-process-OTQDAJLN.js +2 -0
  291. package/dist/cli/chunks/{test-scheduling-HBOHVLI3.js → test-scheduling-7XYXI4L2.js} +3 -3
  292. package/dist/cli/chunks/{token-bootstrap-5VEPTPFA.js → token-bootstrap-3QMABE45.js} +2 -2
  293. package/dist/cli/chunks/{token-usage-TBJHDLY6.js → token-usage-Y2YTPOFE.js} +2 -2
  294. package/dist/cli/chunks/{transformers-VAWYMHMZ.js → transformers-UCJ3HHHC.js} +2 -2
  295. package/dist/cli/chunks/tree-sitter-wasm-parser-D6JTTHTP.js +2 -0
  296. package/dist/cli/chunks/{types-R5SDZU2E.js → types-6CMFPETH.js} +2 -2
  297. package/dist/cli/chunks/unified-memory-QARWQKJ2.js +2 -0
  298. package/dist/cli/chunks/unified-memory-hnsw-LHY3DXCP.js +2 -0
  299. package/dist/cli/chunks/unified-persistence-WEYYGLHM.js +2 -0
  300. package/dist/cli/chunks/{upgrade-K5PIHXRB.js → upgrade-K25DN6WU.js} +2 -2
  301. package/dist/cli/chunks/{validate-RPTS7RYJ.js → validate-T4V3TBY3.js} +2 -2
  302. package/dist/cli/chunks/{validate-swarm-B2ZL556X.js → validate-swarm-XSRC576T.js} +2 -2
  303. package/dist/cli/chunks/visual-security-O4ALMCXQ.js +2 -0
  304. package/dist/cli/chunks/{web-tree-sitter-K4DUJC32.js → web-tree-sitter-YOZXHRTN.js} +2 -2
  305. package/dist/cli/chunks/{windsurf-installer-OK2AJN35.js → windsurf-installer-ITPU2IYL.js} +2 -2
  306. package/dist/cli/chunks/witness-chain-B3YW5NMS.js +2 -0
  307. package/dist/cli/chunks/witness-chain-PIYR72HJ.js +2 -0
  308. package/dist/cli/chunks/{witness-chain-repair-L6Y5RFXR.js → witness-chain-repair-YUG7E3UX.js} +2 -2
  309. package/dist/cli/chunks/{witness-chain-verifier-N4CW7FZX.js → witness-chain-verifier-DTDSVKOG.js} +2 -2
  310. package/dist/cli/chunks/{witness-key-manager-TDNPS3WD.js → witness-key-manager-EWACWGAW.js} +2 -2
  311. package/dist/cli/chunks/{workflow-XRZA3YCY.js → workflow-ZIQ4FV42.js} +4 -4
  312. package/dist/cli/chunks/workflow-orchestrator-3ZN2BCGY.js +2 -0
  313. package/dist/cli/chunks/{wrappers-5JIFWKN6.js → wrappers-PW2O27LL.js} +2 -2
  314. package/dist/cli/commands/coverage.js +6 -0
  315. package/dist/cli/commands/learning-prune.d.ts +14 -0
  316. package/dist/cli/commands/learning-prune.js +105 -0
  317. package/dist/cli/commands/learning.js +9 -0
  318. package/dist/cli/handlers/brain-handler.js +12 -1
  319. package/dist/cli/utils/coverage-verdict.js +14 -3
  320. package/dist/context/compaction/index.d.ts +7 -0
  321. package/dist/context/compaction/index.js +30 -6
  322. package/dist/coordination/handlers/coverage-evidence.d.ts +19 -0
  323. package/dist/coordination/handlers/coverage-evidence.js +31 -2
  324. package/dist/coordination/handlers/coverage-handlers.js +5 -1
  325. package/dist/coordination/handlers/coverage-target.js +8 -1
  326. package/dist/coordination/handlers/quality-handlers.js +9 -1
  327. package/dist/coordination/result-saver-adapters.js +1 -0
  328. package/dist/coordination/result-saver.js +9 -5
  329. package/dist/domains/chaos-resilience/services/chaos-engineer.d.ts +1 -0
  330. package/dist/domains/chaos-resilience/services/chaos-engineer.js +23 -45
  331. package/dist/domains/coverage-analysis/collected-metrics.d.ts +22 -6
  332. package/dist/domains/coverage-analysis/collected-metrics.js +37 -12
  333. package/dist/domains/coverage-analysis/services/coverage-analyzer.js +2 -0
  334. package/dist/domains/defect-intelligence/services/defect-predictor.js +3 -6
  335. package/dist/domains/quality-assessment/coverage-report-event.d.ts +8 -0
  336. package/dist/domains/quality-assessment/coverage-report-event.js +22 -1
  337. package/dist/domains/quality-assessment/interfaces.d.ts +6 -0
  338. package/dist/domains/quality-assessment/services/quality-analyzer.d.ts +4 -0
  339. package/dist/domains/quality-assessment/services/quality-analyzer.js +63 -17
  340. package/dist/domains/test-execution/interfaces.d.ts +5 -0
  341. package/dist/domains/test-execution/services/test-executor.js +6 -0
  342. package/dist/init/phases/07-hooks.js +90 -6
  343. package/dist/integrations/ruvector/brain-rvf-exporter.d.ts +25 -0
  344. package/dist/integrations/ruvector/brain-rvf-exporter.js +154 -61
  345. package/dist/learning/dream/dream-engine.d.ts +24 -1
  346. package/dist/learning/dream/dream-engine.js +57 -6
  347. package/dist/learning/learning-retention.d.ts +103 -0
  348. package/dist/learning/learning-retention.js +213 -0
  349. package/dist/mcp/bundle.js +494 -489
  350. package/dist/mcp/handlers/domain-handler-configs.d.ts +9 -1
  351. package/dist/mcp/handlers/domain-handler-configs.js +24 -14
  352. package/dist/mcp/protocol-server.js +1 -1
  353. package/dist/mcp/tools/chaos-resilience/inject.d.ts +3 -4
  354. package/dist/mcp/tools/chaos-resilience/inject.js +11 -81
  355. package/dist/mcp/tools/learning-optimization/dream.d.ts +8 -0
  356. package/dist/mcp/tools/learning-optimization/dream.js +4 -0
  357. package/package.json +1 -1
  358. package/dist/cli/chunks/adapter-KCQDVYY2.js +0 -2
  359. package/dist/cli/chunks/aqe-learning-engine-SAQOHSGN.js +0 -2
  360. package/dist/cli/chunks/base-WCACU3FN.js +0 -2
  361. package/dist/cli/chunks/brain-handler-GTQNHHZS.js +0 -94
  362. package/dist/cli/chunks/browser-workflow-G6IASEAP.js +0 -2
  363. package/dist/cli/chunks/chunk-K65CGKLD.js +0 -8
  364. package/dist/cli/chunks/chunk-MB46UBGY.js +0 -3
  365. package/dist/cli/chunks/chunk-N4CYAKOX.js +0 -79
  366. package/dist/cli/chunks/chunk-PT4FMJPQ.js +0 -3
  367. package/dist/cli/chunks/chunk-S5AZCIZS.js +0 -2
  368. package/dist/cli/chunks/chunk-UT2VZ33P.js +0 -2
  369. package/dist/cli/chunks/client-TV3V2YZ5.js +0 -2
  370. package/dist/cli/chunks/core-handlers-PZT4OLWR.js +0 -2
  371. package/dist/cli/chunks/coverage-NV3C4IMM.js +0 -50
  372. package/dist/cli/chunks/cross-domain-router-QOFCZ7G4.js +0 -2
  373. package/dist/cli/chunks/dream-TRFBGDSQ.js +0 -2
  374. package/dist/cli/chunks/file-discovery-WCKGMSPZ.js +0 -2
  375. package/dist/cli/chunks/heartbeat-scheduler-P44A2OX3.js +0 -2
  376. package/dist/cli/chunks/hnsw-adapter-ZJQIQJKC.js +0 -2
  377. package/dist/cli/chunks/hnsw-index-HMG2GH3Z.js +0 -2
  378. package/dist/cli/chunks/hybrid-backend-B7M74PZG.js +0 -2
  379. package/dist/cli/chunks/impact-analyzer-PZYOVKQO.js +0 -2
  380. package/dist/cli/chunks/init-wizard-TZDJQK3U.js +0 -2
  381. package/dist/cli/chunks/kernel-Y6RRIOKW.js +0 -2
  382. package/dist/cli/chunks/knowledge-graph-BVD5Z66M.js +0 -2
  383. package/dist/cli/chunks/learning-6KDH7FK4.js +0 -122
  384. package/dist/cli/chunks/llm-router-service-KHCAMSUU.js +0 -2
  385. package/dist/cli/chunks/load-test-RUF7DZA5.js +0 -2
  386. package/dist/cli/chunks/memory-backend-7ZLFOVGG.js +0 -2
  387. package/dist/cli/chunks/pattern-null-store-RY6CVYHP.js +0 -2
  388. package/dist/cli/chunks/project-root-IO5KRNGL.js +0 -2
  389. package/dist/cli/chunks/protocol-executor-U2CUDWDE.js +0 -2
  390. package/dist/cli/chunks/qe-reasoning-bank-DQSSX2IP.js +0 -2
  391. package/dist/cli/chunks/queen-coordinator-6FN4BZIX.js +0 -2
  392. package/dist/cli/chunks/router-YUO3I7RU.js +0 -2
  393. package/dist/cli/chunks/routing-feedback-36SLQGJE.js +0 -2
  394. package/dist/cli/chunks/rvf-dual-writer-FRYZH3WZ.js +0 -2
  395. package/dist/cli/chunks/rvf-migration-adapter-XXNITL5I.js +0 -2
  396. package/dist/cli/chunks/rvf-native-adapter-D2WWKJIV.js +0 -2
  397. package/dist/cli/chunks/safe-db-4RRIGRXD.js +0 -2
  398. package/dist/cli/chunks/schedule-25RTO4DQ.js +0 -2
  399. package/dist/cli/chunks/scheduler-BPIOJZ5P.js +0 -2
  400. package/dist/cli/chunks/sqlite-persistence-EDF47DDX.js +0 -2
  401. package/dist/cli/chunks/test-runner-process-LEPF2OSS.js +0 -2
  402. package/dist/cli/chunks/tree-sitter-wasm-parser-TSZTCMFV.js +0 -2
  403. package/dist/cli/chunks/unified-memory-TLGSSLMI.js +0 -2
  404. package/dist/cli/chunks/unified-memory-hnsw-MSUR7ZOO.js +0 -2
  405. package/dist/cli/chunks/unified-persistence-VFFOTWK7.js +0 -2
  406. package/dist/cli/chunks/visual-security-6Q44XNLB.js +0 -2
  407. package/dist/cli/chunks/witness-chain-KDOMXDQX.js +0 -2
  408. package/dist/cli/chunks/witness-chain-N3OY2RMH.js +0 -2
  409. package/dist/cli/chunks/workflow-orchestrator-CVNNT2RJ.js +0 -2
@@ -9,7 +9,7 @@ import { getCodeMetricsAnalyzer } from '../../../shared/metrics/index.js';
9
9
  import { toError } from '../../../shared/error-utils.js';
10
10
  import { safeJsonParse } from '../../../shared/safe-json.js';
11
11
  import { getClaudeModelForTier } from '../../../shared/llm/model-registry.js';
12
- import { measuredCoverageSummary, measuredFileCoverage } from '../coverage-report-event.js';
12
+ import { measuredFileCoverage } from '../coverage-report-event.js';
13
13
  import { fileCoverageLookupKeys } from '../../coverage-analysis/collected-metrics.js';
14
14
  /** Metrics the static analyzer produces when the caller asks for all of them. */
15
15
  const ANALYZER_METRICS = ['coverage', 'complexity', 'maintainability', 'duplication', 'testability'];
@@ -25,6 +25,22 @@ const PARSED_METRICS = new Set(['complexity', 'maintainability', 'testability'])
25
25
  export const MIN_ANALYSED_SHARE = 0.95;
26
26
  /** #1011: the sentinel for "not measured" in score and complexity fields. */
27
27
  const UNMEASURED = -1;
28
+ /**
29
+ * #1219: covered lines over total lines across the files, or `null` when a
30
+ * record has no line counts (a mean of percentages would weight a 10-line
31
+ * file like a 1000-line one).
32
+ */
33
+ function lineWeightedCoverage(records) {
34
+ let covered = 0;
35
+ let total = 0;
36
+ for (const record of records) {
37
+ if (!record.lines)
38
+ return null;
39
+ covered += record.lines.covered;
40
+ total += record.lines.total;
41
+ }
42
+ return total > 0 ? (covered / total) * 100 : null;
43
+ }
28
44
  /** First reasons of a failure list, for a one-line explanation. */
29
45
  function summariseFailures(failures) {
30
46
  return failures.slice(0, 3).map((f) => f.reason).join('; ')
@@ -262,11 +278,16 @@ Focus on:
262
278
  return err(new Error('No source files provided for analysis'));
263
279
  }
264
280
  // Analyze metrics for each file; failures become unmeasured (#1011)
265
- const { fileMetrics, unmeasured, excluded, partial } = await this.collectFileMetrics(sourceFiles, includeMetrics, request.explicitFiles ?? []);
281
+ const { fileMetrics, scopeValues, unmeasured, excluded, partial } = await this.collectFileMetrics(sourceFiles, includeMetrics, request.explicitFiles ?? []);
266
282
  // Calculate aggregated metrics
267
- const metricDetails = this.aggregateMetrics(fileMetrics);
268
- // Calculate overall quality score
269
- const score = this.calculateQualityScore(metricDetails);
283
+ const metricDetails = this.aggregateMetrics(fileMetrics, scopeValues);
284
+ // Calculate overall quality score. With a requested metric unmeasured
285
+ // there is no overall score (-1, as the gate's overallScore since
286
+ // #1223); the score over the measured metrics is kept as subsetScore.
287
+ const computed = this.calculateQualityScore(metricDetails);
288
+ const insufficient = unmeasured.length > 0;
289
+ const score = insufficient ? { ...computed, overall: UNMEASURED } : computed;
290
+ const subsetScore = insufficient && computed.overall >= 0 ? computed.overall : undefined;
270
291
  // Generate trends if enabled
271
292
  const trends = this.config.enableTrendAnalysis
272
293
  ? await this.generateTrends(metricDetails, compareBaseline)
@@ -290,6 +311,7 @@ Focus on:
290
311
  unmeasured,
291
312
  excluded,
292
313
  partial,
314
+ ...(subsetScore !== undefined ? { subsetScore } : {}),
293
315
  };
294
316
  // Store the report
295
317
  await this.storeReport(report, sourceFiles);
@@ -395,6 +417,8 @@ Focus on:
395
417
  const unreadable = [];
396
418
  const readable = [];
397
419
  const missingCoverage = [];
420
+ const coverageRecords = [];
421
+ const scopeValues = {};
398
422
  const explicit = new Set(explicitFiles);
399
423
  const needsAnalysis = requested.some((m) => PARSED_METRICS.has(m) || m === 'duplication');
400
424
  for (const file of files) {
@@ -430,7 +454,8 @@ Focus on:
430
454
  // Coverage requires external data (from test runners) — never fabricate a number
431
455
  const storedCoverage = await this.getStoredCoverage(file);
432
456
  if (storedCoverage !== null) {
433
- metrics.coverage = storedCoverage;
457
+ metrics.coverage = storedCoverage.line;
458
+ coverageRecords.push(storedCoverage);
434
459
  }
435
460
  else {
436
461
  missingCoverage.push(file);
@@ -442,11 +467,33 @@ Focus on:
442
467
  if (missingCoverage.length > 0) {
443
468
  for (const metrics of fileMetrics.values())
444
469
  delete metrics.coverage;
470
+ // #1219: the project-wide summary is not a measurement of these files.
445
471
  unmeasured.push({
446
472
  metric: 'coverage',
447
- reason: `no measured coverage recorded for ${missingCoverage.length} of ${total} file(s)`,
473
+ reason: `no measured coverage recorded for ${missingCoverage.length} of ${total} file(s) `
474
+ + `(${missingCoverage.slice(0, 3).join(', ')}${missingCoverage.length > 3 ? ', …' : ''}); `
475
+ + 'a project-wide coverage figure is not a measurement of these files',
476
+ files: missingCoverage,
448
477
  });
449
478
  }
479
+ else if (coverageRecords.length > 1) {
480
+ const weighted = lineWeightedCoverage(coverageRecords);
481
+ if (weighted === null) {
482
+ for (const metrics of fileMetrics.values())
483
+ delete metrics.coverage;
484
+ const legacy = coverageRecords.filter((r) => !r.lines).length;
485
+ // #1219: a plain mean of per-file percentages is not the scope's coverage.
486
+ unmeasured.push({
487
+ metric: 'coverage',
488
+ reason: `${legacy} of ${coverageRecords.length} per-file coverage record(s) carry no line counts `
489
+ + '(written before 3.15.13), so the files cannot be weighted by size and a mean of their '
490
+ + 'percentages is not the coverage of the scope; re-run coverage to record line counts',
491
+ });
492
+ }
493
+ else {
494
+ scopeValues.coverage = weighted;
495
+ }
496
+ }
450
497
  /** Decide whether a metric with these failures is measured, partial or unmeasured. */
451
498
  const judge = (metric, failures) => {
452
499
  const analysed = total - failures.length;
@@ -502,8 +549,12 @@ Focus on:
502
549
  unmeasured.push({ metric: 'duplication', reason: `duplication detection failed: ${toError(error).message}` });
503
550
  }
504
551
  }
505
- return { fileMetrics, unmeasured, excluded, partial };
552
+ return { fileMetrics, scopeValues, unmeasured, excluded, partial };
506
553
  }
554
+ /**
555
+ * The file's own measured coverage record, or `null`. #1219: never the
556
+ * project-wide `coverage:latest` summary — that is not this file's coverage.
557
+ */
507
558
  async getStoredCoverage(file) {
508
559
  try {
509
560
  // 1. Try per-file coverage stored by test executor
@@ -512,21 +563,16 @@ Focus on:
512
563
  for (const key of fileCoverageLookupKeys(file)) {
513
564
  const fileCoverage = measuredFileCoverage(await this.memory.get(key));
514
565
  if (fileCoverage)
515
- return fileCoverage.line;
516
- }
517
- // 2. Fall back to project-wide summary from coverage-analyzer
518
- const summary = measuredCoverageSummary(await this.memory.get('coverage:latest'));
519
- if (summary) {
520
- return summary.line;
566
+ return fileCoverage;
521
567
  }
522
- // No coverage data available — return null (never fabricate)
568
+ // No coverage data for this file — return null (never fabricate)
523
569
  return null;
524
570
  }
525
571
  catch {
526
572
  return null;
527
573
  }
528
574
  }
529
- aggregateMetrics(fileMetrics) {
575
+ aggregateMetrics(fileMetrics, scopeValues = {}) {
530
576
  const aggregated = new Map();
531
577
  // Collect all values per metric
532
578
  for (const metrics of fileMetrics.values()) {
@@ -539,7 +585,7 @@ Focus on:
539
585
  // Calculate averages and generate details
540
586
  const details = [];
541
587
  for (const [name, values] of aggregated.entries()) {
542
- const average = values.reduce((a, b) => a + b, 0) / values.length;
588
+ const average = scopeValues[name] ?? values.reduce((a, b) => a + b, 0) / values.length;
543
589
  const rating = this.getMetricRating(average, name);
544
590
  const trend = this.estimateTrend(values);
545
591
  details.push({
@@ -128,6 +128,11 @@ export interface IFileCoverageData {
128
128
  /** `null` = no functions in the file (istanbul 0/0): not collected, not 100% (#1015). */
129
129
  function: number | null;
130
130
  statement: number | null;
131
+ /** #1219: the line counts behind `line`, when the report has them. */
132
+ lines?: {
133
+ covered: number;
134
+ total: number;
135
+ };
131
136
  }
132
137
  export interface IFailedTest {
133
138
  testId: string;
@@ -1114,6 +1114,7 @@ Provide:
1114
1114
  branch: ratio(branches),
1115
1115
  function: ratio(fns),
1116
1116
  statement: ratio(statements),
1117
+ lines: { covered: lines[0], total: lines[1] },
1117
1118
  });
1118
1119
  for (const [key, [covered, count]] of [['line', lines], ['branch', branches], ['function', fns], ['statement', statements]]) {
1119
1120
  totals[key][0] += covered;
@@ -1171,12 +1172,15 @@ Provide:
1171
1172
  const line = summaryPct(entry?.lines);
1172
1173
  if (line !== null) {
1173
1174
  // #1015: a metric with total 0 is not collected (null), not its 100 pct.
1175
+ const counts = entry.lines;
1174
1176
  perFile.push({
1175
1177
  path: normalizedPath,
1176
1178
  line,
1177
1179
  branch: summaryPct(entry.branches),
1178
1180
  function: summaryPct(entry.functions),
1179
1181
  statement: summaryPct(entry.statements),
1182
+ ...(typeof counts?.covered === 'number' && typeof counts.total === 'number'
1183
+ ? { lines: { covered: counts.covered, total: counts.total } } : {}),
1180
1184
  });
1181
1185
  }
1182
1186
  }
@@ -1268,6 +1272,8 @@ Provide:
1268
1272
  function: fc.function ?? null,
1269
1273
  statement: fc.statement ?? null,
1270
1274
  measured: true,
1275
+ // #1219: the counts behind `line`, so several files can be line-weighted.
1276
+ ...(fc.lines ? { lines: fc.lines } : {}),
1271
1277
  runStatus,
1272
1278
  }, { persist: true });
1273
1279
  }
@@ -394,6 +394,7 @@ console.log(\`\\x1b[1m\\x1b[35m▊ Agentic QE v3\\x1b[0m\${branchStr}\${patStr}\
394
394
  * node brain-checkpoint.cjs verify # Verify aqe.rvf exists (session-start)
395
395
  */
396
396
  const { execFileSync } = require('child_process');
397
+ const crypto = require('crypto');
397
398
  const fs = require('fs');
398
399
  const path = require('path');
399
400
 
@@ -402,6 +403,11 @@ const AQE_DIR = path.join(PROJECT_ROOT, '.agentic-qe');
402
403
  const RVF_PATH = path.join(AQE_DIR, 'aqe.rvf');
403
404
  const DB_PATH = path.join(AQE_DIR, 'memory.db');
404
405
  const MAX_AGE_HOURS = 24;
406
+ // #1238: after a too-large export, skip the Stop-hook export for a while
407
+ // unless a newer aqe.rvf shows that an export has succeeded since.
408
+ const SKIP_PATH = path.join(AQE_DIR, 'brain-checkpoint.skip.json');
409
+ const RETRY_ENV = Number.parseFloat(process.env.AQE_BRAIN_CHECKPOINT_RETRY_HOURS || '');
410
+ const TOO_LARGE_RETRY_HOURS = Number.isFinite(RETRY_ENV) && RETRY_ENV >= 0 ? RETRY_ENV : 6;
405
411
  // Windows (#872): never execFile aqe.cmd (EINVAL without a shell); reuse the
406
412
  // hook shim's resolver, which runs the AQE bundle via node instead.
407
413
  function aqeInvocation() {
@@ -422,32 +428,110 @@ function aqeInvocation() {
422
428
 
423
429
  function log(msg) { process.stderr.write('[brain-checkpoint] ' + msg + '\\n'); }
424
430
 
431
+ function activeSkip() {
432
+ let st; try { st = fs.lstatSync(SKIP_PATH); } catch { return null; }
433
+ let skip = null;
434
+ if (st.isFile()) { try { skip = JSON.parse(fs.readFileSync(SKIP_PATH, 'utf8')); } catch { /* unreadable */ } }
435
+ const at = skip ? Date.parse(skip.at) : NaN;
436
+ let rvfMtime = 0; try { rvfMtime = fs.lstatSync(RVF_PATH).mtimeMs; } catch { /* absent */ }
437
+ if (!Number.isFinite(at) || Date.now() >= at + TOO_LARGE_RETRY_HOURS * 3600000 || rvfMtime > at) {
438
+ try { fs.unlinkSync(SKIP_PATH); } catch { /* best-effort */ }
439
+ return null;
440
+ }
441
+ return skip;
442
+ }
443
+
444
+ function writeSkip(reason) {
445
+ const at = new Date();
446
+ const skip = { reason, at: at.toISOString(), retryAfter: new Date(at.getTime() + TOO_LARGE_RETRY_HOURS * 3600000).toISOString() };
447
+ // 'wx' after unlink: never write through a planted symlink (#970).
448
+ try { try { fs.unlinkSync(SKIP_PATH); } catch { /* absent */ } fs.writeFileSync(SKIP_PATH, JSON.stringify(skip) + '\\n', { flag: 'wx' }); } catch { /* best-effort */ }
449
+ return skip;
450
+ }
451
+
452
+ // Export to a temp store next to aqe.rvf; rename it over aqe.rvf only on
453
+ // success, so a failed, too-large or killed export keeps the last checkpoint.
454
+ const RVF_SIDECARS = ['.idmap.json', '.manifest.json'];
455
+ const TMP_PREFIX = path.basename(RVF_PATH) + '.tmp-';
456
+ function removeEntry(p) { try { fs.unlinkSync(p); } catch (e) { if (!e || e.code !== 'ENOENT') throw e; } }
457
+ function isPidAlive(pid) { try { process.kill(pid, 0); return true; } catch (e) { return !!e && e.code === 'EPERM'; } }
458
+ function removeByPrefix(prefix, keep) {
459
+ let entries = []; try { entries = fs.readdirSync(AQE_DIR); } catch { return; }
460
+ for (const entry of entries) {
461
+ if (!entry.startsWith(prefix) || (keep && keep(entry))) continue;
462
+ try { removeEntry(path.join(AQE_DIR, entry)); } catch { /* best-effort */ }
463
+ }
464
+ }
465
+ function sweepStaleTmp() {
466
+ removeByPrefix(TMP_PREFIX, (entry) => {
467
+ const pid = Number.parseInt(entry.slice(TMP_PREFIX.length).split('-')[0], 10);
468
+ return !Number.isInteger(pid) || pid <= 0 || isPidAlive(pid);
469
+ });
470
+ }
471
+ function lexists(p) { try { fs.lstatSync(p); return true; } catch { return false; } }
472
+ // rename() replaces a planted symlink without writing through it (#970). The
473
+ // store goes first: if that fails nothing changed. If a sidecar rename fails
474
+ // afterwards, the stale sidecar is removed, so the new store is never read
475
+ // with the previous export's idmap.
476
+ function promote(tmp) {
477
+ fs.renameSync(tmp, RVF_PATH);
478
+ for (const suffix of RVF_SIDECARS) {
479
+ try {
480
+ if (lexists(tmp + suffix)) fs.renameSync(tmp + suffix, RVF_PATH + suffix);
481
+ else removeEntry(RVF_PATH + suffix);
482
+ } catch { try { removeEntry(RVF_PATH + suffix); } catch { /* best-effort */ } }
483
+ }
484
+ }
485
+
425
486
  function exportBrain() {
426
487
  if (!fs.existsSync(DB_PATH)) { log('No memory.db, skipping'); return { exported: false }; }
427
488
  const aqe = aqeInvocation();
428
489
  if (!aqe.cmd) { log('Export skipped: ' + aqe.reason); return { exported: false, reason: aqe.reason }; }
429
- // Never write through a committed symlink: .agentic-qe must be a real dir, and
430
- // unlink (not existsSync) drops a planted aqe.rvf link, even a dangling one.
490
+ // Never write through a committed symlink: .agentic-qe must be a real dir.
431
491
  let st; try { st = fs.lstatSync(AQE_DIR); } catch { /* missing */ }
432
492
  if (!st || !st.isDirectory()) { log('Export skipped: .agentic-qe is a symlink'); return { exported: false }; }
433
- for (const f of [RVF_PATH, RVF_PATH + '.idmap.json']) { try { fs.unlinkSync(f); } catch { /* absent */ } }
493
+ const skip = activeSkip();
494
+ if (skip) {
495
+ log('Export skipped until ' + skip.retryAfter + ': ' + skip.reason);
496
+ return { exported: false, skipped: true, reason: skip.reason, retryAfter: skip.retryAfter };
497
+ }
498
+ sweepStaleTmp();
499
+ const tmp = path.join(AQE_DIR, TMP_PREFIX + process.pid + '-' + crypto.randomBytes(4).toString('hex'));
434
500
  try {
501
+ for (const suffix of ['', ...RVF_SIDECARS]) removeEntry(tmp + suffix);
435
502
  const result = execFileSync(
436
- aqe.cmd, [...aqe.args, 'brain', 'export', '-o', RVF_PATH, '--format', 'rvf'],
437
- { timeout: 60000, encoding: 'utf-8', windowsHide: true }
503
+ aqe.cmd, [...aqe.args, 'brain', 'export', '-o', tmp, '--format', 'rvf'],
504
+ { timeout: 60000, encoding: 'utf-8', windowsHide: true, stdio: ['ignore', 'pipe', 'pipe'] }
438
505
  );
506
+ // A zero exit without a store is a failure, not an empty checkpoint.
507
+ if (!lexists(tmp)) throw new Error('brain export exited 0 but wrote no store');
508
+ promote(tmp);
439
509
  const m = result.match(/Patterns:\\s+(\\d+)/);
440
510
  const p = m ? m[1] : '0';
441
511
  log('Exported ' + p + ' patterns to aqe.rvf');
442
512
  return { exported: true, patterns: parseInt(p) };
443
513
  } catch (e) {
444
- log('Export failed: ' + e.message);
514
+ const tooLarge = (String(e.stderr || '') + String(e.stdout || '')).match(/RVF_KERNEL_TOO_LARGE:[^\\n]*/);
515
+ if (tooLarge) {
516
+ const skip = writeSkip(tooLarge[0].trim());
517
+ log('Export failed: ' + skip.reason);
518
+ log('Skipping the checkpoint export until ' + skip.retryAfter + ' (AQE_BRAIN_CHECKPOINT_RETRY_HOURS sets the wait).');
519
+ return { exported: false, tooLarge: true, reason: skip.reason, retryAfter: skip.retryAfter };
520
+ }
521
+ log('Export failed: ' + e.message + ' (previous aqe.rvf kept)');
445
522
  return { exported: false, reason: e.message };
523
+ } finally {
524
+ removeByPrefix(path.basename(tmp));
446
525
  }
447
526
  }
448
527
 
449
528
  function verifyBrain() {
450
529
  if (!fs.existsSync(RVF_PATH)) {
530
+ const skip = activeSkip();
531
+ if (skip) {
532
+ log('No aqe.rvf found; checkpoint export paused until ' + skip.retryAfter + ': ' + skip.reason);
533
+ return { valid: false, reason: 'missing', skippedUntil: skip.retryAfter };
534
+ }
451
535
  log('No aqe.rvf found');
452
536
  return { valid: false, reason: 'missing' };
453
537
  }
@@ -19,6 +19,8 @@ export interface RvfBrainManifest {
19
19
  readonly totalRecords?: number;
20
20
  /** Per-table row counts used by the recovery-mirror richness guard. */
21
21
  readonly tableCounts?: Readonly<Record<string, number>>;
22
+ /** Regenerable cache rows left out of the kernel, per table (#1238). */
23
+ readonly skippedCacheRows?: Readonly<Record<string, number>>;
22
24
  };
23
25
  readonly domains: readonly string[];
24
26
  readonly checksum: string;
@@ -48,6 +50,8 @@ export interface RvfBrainExportOptions {
48
50
  readonly signerKeyId?: string;
49
51
  /** Explicit operator acknowledgement that a richer existing mirror may be replaced. */
50
52
  readonly allowOverwriteRicher?: boolean;
53
+ /** Kernel size ceiling in bytes. Defaults to RVF_MAX_KERNEL_BYTES; lowered only by tests. */
54
+ readonly maxKernelBytes?: number;
51
55
  }
52
56
  export interface RvfBrainImportOptions {
53
57
  readonly mergeStrategy: MergeStrategy;
@@ -59,6 +63,27 @@ export interface RvfBrainImportResult {
59
63
  readonly conflicts: number;
60
64
  readonly embeddingsRestored: number;
61
65
  }
66
+ /**
67
+ * Largest kernel image @ruvector/rvf-node accepts. One byte more and
68
+ * `embedKernel` fails with a misleading `RVF error 0x0303: FsyncFailed`
69
+ * (#1238; measured 134,217,728 B ok, 134,217,729 B fails).
70
+ */
71
+ export declare const RVF_MAX_KERNEL_BYTES: number;
72
+ /**
73
+ * Vector ids written by the code-intelligence domain (KG nodes, semantic code
74
+ * index, C4 diagrams). They are derived from source code and rebuilt by
75
+ * `aqe code index`, so they stay out of the brain kernel (#1238).
76
+ */
77
+ export declare const CODE_INDEX_VECTOR_ID_PREFIX = "code-intelligence:";
78
+ /** Thrown before any native call when the kernel would exceed the RVF limit. */
79
+ export declare class RvfKernelTooLargeError extends Error {
80
+ readonly kernelBytes: number;
81
+ readonly limitBytes: number;
82
+ readonly tableBytes: Readonly<Record<string, number>>;
83
+ readonly complete: boolean;
84
+ readonly code = "RVF_KERNEL_TOO_LARGE";
85
+ constructor(kernelBytes: number, limitBytes: number, tableBytes: Readonly<Record<string, number>>, complete: boolean);
86
+ }
62
87
  /** Export brain state to a single `.rvf` file with vector embeddings + kernel. */
63
88
  export declare function exportBrainToRvf(db: Database.Database, options: RvfBrainExportOptions, sourceDbLabel?: string): RvfBrainManifest;
64
89
  /** Import brain state from a `.rvf` file into a SQLite database. */