agentic-qe 3.15.1 → 3.15.3

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 (447) hide show
  1. package/.claude/helpers/brain-checkpoint.cjs +46 -6
  2. package/.claude/hooks/aqe-hook.cjs +280 -51
  3. package/.claude/skills/skills-manifest.json +1 -1
  4. package/CHANGELOG.md +129 -0
  5. package/assets/skills/skills-manifest.json +1 -1
  6. package/dist/adapters/ag-ui/state-delta-cache.js +14 -5
  7. package/dist/adapters/trajectory-adapter.js +3 -1
  8. package/dist/cli/bundle.js +5 -5
  9. package/dist/cli/chunks/adapter-WQSFQES5.js +2 -0
  10. package/dist/cli/chunks/{agent-booster-wasm-XUHRLKWP.js → agent-booster-wasm-CYG3PKHH.js} +2 -2
  11. package/dist/cli/chunks/{agent-handler-CL7MJP5W.js → agent-handler-WTFYFZKL.js} +2 -2
  12. package/dist/cli/chunks/{agent-memory-branch-F7RV72FC.js → agent-memory-branch-G6WE3ZXU.js} +2 -2
  13. package/dist/cli/chunks/aqe-learning-engine-TDHBBADE.js +2 -0
  14. package/dist/cli/chunks/{arena-GRRNK7IN.js → arena-S72QW44C.js} +4 -4
  15. package/dist/cli/chunks/{arena-LHLVOQHW.js → arena-ZFXQEVUQ.js} +2 -2
  16. package/dist/cli/chunks/{audit-EOP2K34L.js → audit-KPYIEQJ3.js} +3 -3
  17. package/dist/cli/chunks/base-CZSB27VO.js +2 -0
  18. package/dist/cli/chunks/{better-sqlite3-YERQ5DOL.js → better-sqlite3-L2M3TI5D.js} +2 -2
  19. package/dist/cli/chunks/{brain-handler-FBXBM5XE.js → brain-handler-FHKLQTB4.js} +3 -3
  20. package/dist/cli/chunks/{branch-enumerator-NWO6LNHB.js → branch-enumerator-3BSHOPOK.js} +2 -2
  21. package/dist/cli/chunks/{browser-EDCG7TNF.js → browser-JUIJPL6Y.js} +2 -2
  22. package/dist/cli/chunks/browser-workflow-AEMIS6PA.js +2 -0
  23. package/dist/cli/chunks/{chunk-ARWSPV2C.js → chunk-2GJJGO5D.js} +2 -2
  24. package/dist/cli/chunks/{chunk-SUFXUM6W.js → chunk-2M75CW5Q.js} +2 -2
  25. package/dist/cli/chunks/{chunk-ZX4I7IND.js → chunk-2MEWIXW4.js} +2 -2
  26. package/dist/cli/chunks/{chunk-VEKRK3R6.js → chunk-2TBHPYOU.js} +2 -2
  27. package/dist/cli/chunks/{chunk-OH4SKOAM.js → chunk-34Y4CIHD.js} +2 -2
  28. package/dist/cli/chunks/{chunk-JY6HWYC4.js → chunk-35VDOH4Y.js} +1 -1
  29. package/dist/cli/chunks/{chunk-NK2BR4QZ.js → chunk-366IBPZB.js} +2 -2
  30. package/dist/cli/chunks/{chunk-PZBYZV5M.js → chunk-3MNKYCLH.js} +1 -1
  31. package/dist/cli/chunks/chunk-3UUMGWHW.js +316 -0
  32. package/dist/cli/chunks/{chunk-REGPCPEJ.js → chunk-3Y4GX5FL.js} +2 -2
  33. package/dist/cli/chunks/{chunk-PGARKOE6.js → chunk-3ZTBV6M3.js} +1 -1
  34. package/dist/cli/chunks/{chunk-GUHJWBPN.js → chunk-4IYHYHTG.js} +2 -2
  35. package/dist/cli/chunks/{chunk-J2WALRWR.js → chunk-4JVVVKAX.js} +6 -6
  36. package/dist/cli/chunks/chunk-4N7YXTV3.js +4 -0
  37. package/dist/cli/chunks/{chunk-YM3GAJMN.js → chunk-4TM5K6EZ.js} +2 -2
  38. package/dist/cli/chunks/{chunk-IUGY6Z4Q.js → chunk-5LEUEWJY.js} +2 -2
  39. package/dist/cli/chunks/{chunk-Q7ONRZBD.js → chunk-5QUOM357.js} +1 -1
  40. package/dist/cli/chunks/{chunk-5B5TA3X4.js → chunk-5WOBFN2T.js} +2 -2
  41. package/dist/cli/chunks/{chunk-JEXPSOT2.js → chunk-6AKJ73X3.js} +2 -2
  42. package/dist/cli/chunks/{chunk-K4NB3MYN.js → chunk-6EQDA4EC.js} +2 -2
  43. package/dist/cli/chunks/{chunk-HU4QGCIJ.js → chunk-6TYTBQPV.js} +2 -2
  44. package/dist/cli/chunks/{chunk-RXKOZ6VS.js → chunk-6V6XVGCL.js} +3 -3
  45. package/dist/cli/chunks/{chunk-4KHSWNFW.js → chunk-6W6GZHQA.js} +6 -6
  46. package/dist/cli/chunks/{chunk-WTFVYFRZ.js → chunk-7IJVCDDC.js} +1 -1
  47. package/dist/cli/chunks/{chunk-T5K6ZCA6.js → chunk-7PDC4SKR.js} +1 -1
  48. package/dist/cli/chunks/{chunk-NF6SLLE6.js → chunk-7SWHW5AC.js} +20 -20
  49. package/dist/cli/chunks/{chunk-UE33MZOC.js → chunk-7TW5UGDP.js} +2 -2
  50. package/dist/cli/chunks/{chunk-4AEFJEZH.js → chunk-7UUSV2SK.js} +1 -1
  51. package/dist/cli/chunks/{chunk-WONHFDWF.js → chunk-A3IQU2ND.js} +2 -2
  52. package/dist/cli/chunks/{chunk-ALLABEUK.js → chunk-A5H7TF7C.js} +2 -2
  53. package/dist/cli/chunks/{chunk-C3BW3Q27.js → chunk-A6PII4R4.js} +1 -1
  54. package/dist/cli/chunks/{chunk-ZE6WJDXM.js → chunk-AEL4XJGJ.js} +2 -2
  55. package/dist/cli/chunks/{chunk-5QEXDXHQ.js → chunk-AOZJ6UUZ.js} +2 -2
  56. package/dist/cli/chunks/chunk-APV5UWTU.js +15 -0
  57. package/dist/cli/chunks/{chunk-YWX7KLNG.js → chunk-AQTQ24SK.js} +3 -3
  58. package/dist/cli/chunks/{chunk-PBWR2SKH.js → chunk-AS54N3H7.js} +2 -2
  59. package/dist/cli/chunks/chunk-ASUXS4N4.js +2 -0
  60. package/dist/cli/chunks/{chunk-JSHASVQ2.js → chunk-B23ROYST.js} +3 -3
  61. package/dist/cli/chunks/{chunk-NTLWHLAY.js → chunk-BDKQSEEY.js} +1 -1
  62. package/dist/cli/chunks/{chunk-VLL7ASGH.js → chunk-BO43BGHX.js} +2 -2
  63. package/dist/cli/chunks/{chunk-KP6LNSDO.js → chunk-CF3BPD2R.js} +161 -159
  64. package/dist/cli/chunks/{chunk-KTBA2HJC.js → chunk-CFXROOIU.js} +2 -2
  65. package/dist/cli/chunks/{chunk-SRXXPZVT.js → chunk-CNQUU6CF.js} +2 -2
  66. package/dist/cli/chunks/{chunk-OKS25EGZ.js → chunk-D5V6C3XG.js} +3 -3
  67. package/dist/cli/chunks/{chunk-ADEYBXAS.js → chunk-D6PUDLJ4.js} +2 -2
  68. package/dist/cli/chunks/{chunk-D3LREV4P.js → chunk-DE3QNPTG.js} +1 -1
  69. package/dist/cli/chunks/{chunk-TJCMG3QE.js → chunk-DH5NWHH2.js} +2 -2
  70. package/dist/cli/chunks/{chunk-GDSYJHVB.js → chunk-DLA3EHKJ.js} +1 -1
  71. package/dist/cli/chunks/{chunk-VGYLV6VD.js → chunk-DWG4TN6A.js} +1 -1
  72. package/dist/cli/chunks/{chunk-4KSCJ462.js → chunk-EBIMVSPH.js} +4 -4
  73. package/dist/cli/chunks/{chunk-4XEZ562Q.js → chunk-ED5HUPUR.js} +2 -2
  74. package/dist/cli/chunks/{chunk-CHX65QXY.js → chunk-EQGT4VLC.js} +1 -1
  75. package/dist/cli/chunks/{chunk-WFDDWRWY.js → chunk-F5BREV2Q.js} +8 -8
  76. package/dist/cli/chunks/{chunk-7FGSX4UD.js → chunk-FPFGN2Z5.js} +2 -2
  77. package/dist/cli/chunks/{chunk-3TZRJ5QD.js → chunk-FTUNC4EI.js} +3 -3
  78. package/dist/cli/chunks/chunk-FXTZXZCU.js +54 -0
  79. package/dist/cli/chunks/{chunk-DREYYJ7A.js → chunk-GJB3LPCS.js} +2 -2
  80. package/dist/cli/chunks/{chunk-4P7CGSRL.js → chunk-GPZH6OPP.js} +4 -4
  81. package/dist/cli/chunks/{chunk-NWNZMXNO.js → chunk-HR7RL4PB.js} +2 -2
  82. package/dist/cli/chunks/{chunk-NGDRSF6Y.js → chunk-HSR53REE.js} +2 -2
  83. package/dist/cli/chunks/{chunk-UOHZRR5C.js → chunk-HU474NXP.js} +1 -1
  84. package/dist/cli/chunks/{chunk-LI7N45GM.js → chunk-HV3ZVUHO.js} +1 -1
  85. package/dist/cli/chunks/{chunk-WPG6SW7C.js → chunk-HVIFA73X.js} +2 -2
  86. package/dist/cli/chunks/{chunk-6U6JQS4Z.js → chunk-HW4V7BVV.js} +2 -2
  87. package/dist/cli/chunks/{chunk-X6W35QXO.js → chunk-I5VJ3FBC.js} +2 -2
  88. package/dist/cli/chunks/{chunk-YTMWPGVR.js → chunk-IARE5VGI.js} +1 -1
  89. package/dist/cli/chunks/chunk-INVDDFJC.js +2 -0
  90. package/dist/cli/chunks/{chunk-RDI3W4H6.js → chunk-JJBTM4JO.js} +2 -2
  91. package/dist/cli/chunks/chunk-JVQK6NGI.js +14 -0
  92. package/dist/cli/chunks/{chunk-CFZJEOCD.js → chunk-K65X6CQA.js} +1 -1
  93. package/dist/cli/chunks/{chunk-6DF6X3SZ.js → chunk-KCBCYF7M.js} +2 -2
  94. package/dist/cli/chunks/{chunk-QOOADAT7.js → chunk-KGS6H2HB.js} +2 -2
  95. package/dist/cli/chunks/{chunk-TCJ65NPY.js → chunk-L6OSEWOS.js} +1 -1
  96. package/dist/cli/chunks/{chunk-BW7S6LIJ.js → chunk-LEB6O2IN.js} +2 -2
  97. package/dist/cli/chunks/{chunk-WHBDSJUE.js → chunk-LPZAB3N2.js} +3 -3
  98. package/dist/cli/chunks/{chunk-JYF3QF4C.js → chunk-M3ACHBC7.js} +2 -2
  99. package/dist/cli/chunks/{chunk-WQZR6DS6.js → chunk-M3ONCPSU.js} +2 -2
  100. package/dist/cli/chunks/{chunk-7B3XVVYP.js → chunk-MUSYQF53.js} +2 -2
  101. package/dist/cli/chunks/{chunk-6AVVC7Y3.js → chunk-MZDUBFLP.js} +1 -1
  102. package/dist/cli/chunks/{chunk-53HWWWFZ.js → chunk-NT6FYFJA.js} +2 -2
  103. package/dist/cli/chunks/{chunk-6WW6A6JM.js → chunk-O66D4NEJ.js} +2 -2
  104. package/dist/cli/chunks/{chunk-3NOSMJS4.js → chunk-OGARNKLS.js} +2 -2
  105. package/dist/cli/chunks/{chunk-KHVWIUAF.js → chunk-OKNMZLGB.js} +2 -2
  106. package/dist/cli/chunks/{chunk-XCVD57GW.js → chunk-OMHISPPF.js} +1 -1
  107. package/dist/cli/chunks/{chunk-N5OSH5JO.js → chunk-OT6SOPAL.js} +2 -2
  108. package/dist/cli/chunks/{chunk-ZZV6GR46.js → chunk-OTTTHNIT.js} +1 -1
  109. package/dist/cli/chunks/{chunk-XZGRHJGC.js → chunk-P36IODAM.js} +2 -2
  110. package/dist/cli/chunks/{chunk-JHKMUY4W.js → chunk-P6EGRAQG.js} +2 -2
  111. package/dist/cli/chunks/{chunk-5JJWVFUV.js → chunk-PBUWNMZ2.js} +1 -1
  112. package/dist/cli/chunks/{chunk-LQI5GVH7.js → chunk-POTVF6BY.js} +1 -1
  113. package/dist/cli/chunks/{chunk-N4HQ6FE2.js → chunk-POVP6O6K.js} +1 -1
  114. package/dist/cli/chunks/{chunk-P24ZBDZY.js → chunk-PPA53NJB.js} +2 -2
  115. package/dist/cli/chunks/{chunk-OABFAREV.js → chunk-PUPEKA2J.js} +2 -2
  116. package/dist/cli/chunks/{chunk-27S47AYK.js → chunk-QDQLL2QB.js} +2 -2
  117. package/dist/cli/chunks/{chunk-MEOAKMKF.js → chunk-QSVNVDA5.js} +1 -1
  118. package/dist/cli/chunks/{chunk-66HKJJFH.js → chunk-QUXX2DP7.js} +2 -2
  119. package/dist/cli/chunks/{chunk-TLUMENRZ.js → chunk-QVNMTMDJ.js} +2 -2
  120. package/dist/cli/chunks/{chunk-LDDIYDIP.js → chunk-QZBFMXO5.js} +54 -54
  121. package/dist/cli/chunks/{chunk-4THIRDBL.js → chunk-RDTR43YN.js} +2 -2
  122. package/dist/cli/chunks/{chunk-6MGJMGAD.js → chunk-RGD2CG23.js} +2 -2
  123. package/dist/cli/chunks/{chunk-V5RP2SU3.js → chunk-RQUSJEON.js} +2 -2
  124. package/dist/cli/chunks/{chunk-WYE3ICSL.js → chunk-RRSZ27A7.js} +2 -2
  125. package/dist/cli/chunks/{chunk-GUKBN3BS.js → chunk-RWLOERKK.js} +2 -2
  126. package/dist/cli/chunks/{chunk-5TEDVUEB.js → chunk-RWQDRPN5.js} +2 -2
  127. package/dist/cli/chunks/{chunk-2IPBCXTT.js → chunk-S7D4GD7H.js} +2 -2
  128. package/dist/cli/chunks/{chunk-FTHXV7N7.js → chunk-SKHP5WUP.js} +2 -2
  129. package/dist/cli/chunks/{chunk-QVTV47TM.js → chunk-SP2JO53K.js} +2 -2
  130. package/dist/cli/chunks/{chunk-UTFNHITI.js → chunk-SRDECRTL.js} +2 -2
  131. package/dist/cli/chunks/{chunk-HVAYG54D.js → chunk-TBVPNN65.js} +2 -2
  132. package/dist/cli/chunks/{chunk-JQVECGYL.js → chunk-U5AVZ3T2.js} +1 -1
  133. package/dist/cli/chunks/{chunk-EQ3BJS37.js → chunk-UCSGZVJX.js} +1 -1
  134. package/dist/cli/chunks/{chunk-5C4UYXQL.js → chunk-UGNTLSBL.js} +2 -2
  135. package/dist/cli/chunks/{chunk-W5NHBYYS.js → chunk-UTALYUMW.js} +2 -2
  136. package/dist/cli/chunks/{chunk-35XRY6ZW.js → chunk-UZDTRCVU.js} +9 -9
  137. package/dist/cli/chunks/{chunk-AVOYMVD6.js → chunk-V5NYGDSX.js} +2 -2
  138. package/dist/cli/chunks/{chunk-FQYXPSWD.js → chunk-VGN46ZT4.js} +2 -2
  139. package/dist/cli/chunks/{chunk-QMHWJBD3.js → chunk-VHBZADYK.js} +2 -2
  140. package/dist/cli/chunks/{chunk-54JYUOSR.js → chunk-VOKIUF7I.js} +1 -1
  141. package/dist/cli/chunks/{chunk-PDLVO3ZR.js → chunk-VRT736E3.js} +2 -2
  142. package/dist/cli/chunks/{chunk-DV7I6CRH.js → chunk-VUBLJBHQ.js} +2 -2
  143. package/dist/cli/chunks/{chunk-FRGNM6SW.js → chunk-VX7CQUO7.js} +2 -2
  144. package/dist/cli/chunks/{chunk-YDM2DPUU.js → chunk-W7EHNX3Y.js} +2 -2
  145. package/dist/cli/chunks/{chunk-W5HQQTVH.js → chunk-WI7I6LMM.js} +1 -1
  146. package/dist/cli/chunks/{chunk-46DUU44C.js → chunk-WLOHTLHO.js} +2 -2
  147. package/dist/cli/chunks/{chunk-W6K77PQR.js → chunk-WQZBKLAG.js} +1 -1
  148. package/dist/cli/chunks/{chunk-UGUZFUQG.js → chunk-WSND64RL.js} +2 -2
  149. package/dist/cli/chunks/{chunk-PNK5KHSI.js → chunk-WSUYEVSY.js} +1 -1
  150. package/dist/cli/chunks/{chunk-FIIHSEXP.js → chunk-WTMLRMKW.js} +2 -2
  151. package/dist/cli/chunks/{chunk-OPBPFNBO.js → chunk-WW4RJ6BH.js} +2 -2
  152. package/dist/cli/chunks/{chunk-KBK4GBJQ.js → chunk-X335K4SU.js} +2 -2
  153. package/dist/cli/chunks/{chunk-NS4RIZ4F.js → chunk-X33LID2T.js} +1 -1
  154. package/dist/cli/chunks/{chunk-L5GEWKR3.js → chunk-XTGVGZ4J.js} +3 -3
  155. package/dist/cli/chunks/{chunk-CTLHNFPM.js → chunk-XV2TIODR.js} +1 -1
  156. package/dist/cli/chunks/{chunk-GAKVCN3C.js → chunk-XXW4KFBB.js} +1 -1
  157. package/dist/cli/chunks/{chunk-CTK7NMSJ.js → chunk-YCGU2LI7.js} +2 -2
  158. package/dist/cli/chunks/chunk-YGEC3PSD.js +2 -0
  159. package/dist/cli/chunks/{chunk-ARGMYSDY.js → chunk-YGKU2QRC.js} +1 -1
  160. package/dist/cli/chunks/{chunk-6Q7PWKWV.js → chunk-YHZGFWJE.js} +2 -2
  161. package/dist/cli/chunks/{chunk-V3ISBQ5Q.js → chunk-YJH7UFA2.js} +2 -2
  162. package/dist/cli/chunks/{chunk-A5LOELVV.js → chunk-YQ3ZW47V.js} +2 -2
  163. package/dist/cli/chunks/{chunk-25IWHVMW.js → chunk-YTRGMILO.js} +2 -2
  164. package/dist/cli/chunks/chunk-YW4GM36K.js +2 -0
  165. package/dist/cli/chunks/{chunk-JW2HNT3J.js → chunk-Z7JPWXW2.js} +2 -2
  166. package/dist/cli/chunks/{chunk-PZDI7WQ3.js → chunk-Z7UGEQ4G.js} +1 -1
  167. package/dist/cli/chunks/{chunk-TBCQWD5A.js → chunk-ZATQLTYL.js} +1 -1
  168. package/dist/cli/chunks/{chunk-DKWB4ERY.js → chunk-ZI6NJEBY.js} +1 -1
  169. package/dist/cli/chunks/{chunk-B3DWOR5R.js → chunk-ZJW4HRUA.js} +1 -1
  170. package/dist/cli/chunks/{chunk-X4PGLEPQ.js → chunk-ZL2GYU7H.js} +2 -2
  171. package/dist/cli/chunks/{ci-K7DG4GSO.js → ci-JPISJ25U.js} +3 -3
  172. package/dist/cli/chunks/{ci-output-EBSUG6HP.js → ci-output-DPHTFIGX.js} +2 -2
  173. package/dist/cli/chunks/{circuit-breaker-P6N6YIRZ.js → circuit-breaker-PQ65VU2M.js} +2 -2
  174. package/dist/cli/chunks/{claude-flow-setup-P6EZPQZT.js → claude-flow-setup-GKHVO7AD.js} +2 -2
  175. package/dist/cli/chunks/client-BS7I637W.js +2 -0
  176. package/dist/cli/chunks/{cline-installer-EVZZ3EFY.js → cline-installer-HWMQZJ64.js} +2 -2
  177. package/dist/cli/chunks/{code-3WLBG2XK.js → code-OTY7BF3D.js} +3 -3
  178. package/dist/cli/chunks/{code-index-extractor-ZP6D4WL2.js → code-index-extractor-FG3TMHHR.js} +2 -2
  179. package/dist/cli/chunks/{codex-installer-XAUI4SB7.js → codex-installer-63JARKKS.js} +2 -2
  180. package/dist/cli/chunks/{completions-RHFNDDG3.js → completions-4ZHONFML.js} +2 -2
  181. package/dist/cli/chunks/{complexity-analyzer-DCW7Q3OR.js → complexity-analyzer-FYHTJW5Y.js} +2 -2
  182. package/dist/cli/chunks/{continuedev-installer-53SQA5T6.js → continuedev-installer-ZAWDSUR3.js} +2 -2
  183. package/dist/cli/chunks/{copilot-installer-SXXMFB6T.js → copilot-installer-5QK565JX.js} +2 -2
  184. package/dist/cli/chunks/core-handlers-UG7RMTK5.js +2 -0
  185. package/dist/cli/chunks/cost-tracker-AWWMPPBJ.js +2 -0
  186. package/dist/cli/chunks/{coverage-AWCS2SP7.js → coverage-SMFQEGKE.js} +3 -3
  187. package/dist/cli/chunks/cross-domain-router-NX7F6TOF.js +2 -0
  188. package/dist/cli/chunks/{cursor-installer-4TYF5V5J.js → cursor-installer-3BL7JACV.js} +2 -2
  189. package/dist/cli/chunks/{daemon-CTZXGN5V.js → daemon-OJ624POF.js} +4 -4
  190. package/dist/cli/chunks/{daemon-OOY4H6RJ.js → daemon-R6ULBHHF.js} +3 -3
  191. package/dist/cli/chunks/{dag-attention-scheduler-3WG24Q33.js → dag-attention-scheduler-J6I3LTMY.js} +2 -2
  192. package/dist/cli/chunks/{detect-O7MUZ6NX.js → detect-5Q5W33UR.js} +2 -2
  193. package/dist/cli/chunks/{dist-node-H4XI7BAF.js → dist-node-GJNW56NA.js} +2 -2
  194. package/dist/cli/chunks/{domain-handler-FU4WZ23B.js → domain-handler-IZQY2G44.js} +2 -2
  195. package/dist/cli/chunks/{domain-plugins-XK26KYNJ.js → domain-plugins-PIGO3KI2.js} +2 -2
  196. package/dist/cli/chunks/{domain-transfer-6B5NOVH6.js → domain-transfer-NU3B4FQG.js} +2 -2
  197. package/dist/cli/chunks/dream-GYEH57FW.js +2 -0
  198. package/dist/cli/chunks/{embed-and-insert-pattern-XNZXPZNL.js → embed-and-insert-pattern-5QDDRPWV.js} +2 -2
  199. package/dist/cli/chunks/{eval-J3Q5TTI7.js → eval-TB5HOAUY.js} +2 -2
  200. package/dist/cli/chunks/{experience-capture-middleware-COKIGMXW.js → experience-capture-middleware-SIYVLKDE.js} +3 -3
  201. package/dist/cli/chunks/{fast-paths-IHWPJI6I.js → fast-paths-T7QELS6D.js} +2 -2
  202. package/dist/cli/chunks/{feature-flags-WUXFWZLR.js → feature-flags-T3CNNYMJ.js} +2 -2
  203. package/dist/cli/chunks/{feature-flags-G7ONDNTT.js → feature-flags-TNZ7ZAJV.js} +2 -2
  204. package/dist/cli/chunks/{file-discovery-JN3YMBOJ.js → file-discovery-M45P2ZCY.js} +2 -2
  205. package/dist/cli/chunks/{fleet-OUHUZJE4.js → fleet-DSBZPHBZ.js} +3 -3
  206. package/dist/cli/chunks/{gnn-wrapper-PRH55ZT6.js → gnn-wrapper-EHODCF32.js} +2 -2
  207. package/dist/cli/chunks/{heartbeat-handler-6YF35AQS.js → heartbeat-handler-V5DBVF7V.js} +4 -4
  208. package/dist/cli/chunks/heartbeat-scheduler-4TJ3T7LR.js +2 -0
  209. package/dist/cli/chunks/hnsw-adapter-PHFK4EAP.js +2 -0
  210. package/dist/cli/chunks/hnsw-index-434XDDBH.js +2 -0
  211. package/dist/cli/chunks/{hnsw-legacy-bridge-7PAFSTJO.js → hnsw-legacy-bridge-IYKDYA2F.js} +2 -2
  212. package/dist/cli/chunks/{hnswlib-node-UETDZNNN.js → hnswlib-node-DKG4LW3X.js} +2 -2
  213. package/dist/cli/chunks/{hooks-QQNUKQAS.js → hooks-VKNMAILY.js} +10 -10
  214. package/dist/cli/chunks/hybrid-backend-DYVJQENQ.js +2 -0
  215. package/dist/cli/chunks/{hypergraph-engine-5GDGE3ET.js → hypergraph-engine-AXZVP7A7.js} +2 -2
  216. package/dist/cli/chunks/{hypergraph-handler-C3F2OJYA.js → hypergraph-handler-6EO6JN4Z.js} +3 -3
  217. package/dist/cli/chunks/impact-analyzer-CBAST6M2.js +2 -0
  218. package/dist/cli/chunks/init-handler-N3NG3RHN.js +86 -0
  219. package/dist/cli/chunks/init-wizard-DWIJW7HY.js +2 -0
  220. package/dist/cli/chunks/kernel-AQGCS4X2.js +2 -0
  221. package/dist/cli/chunks/{kilocode-installer-VLJENC76.js → kilocode-installer-JICGAHLM.js} +2 -2
  222. package/dist/cli/chunks/{kiro-installer-UYPYM6LA.js → kiro-installer-VYBFP6ZH.js} +2 -2
  223. package/dist/cli/chunks/knowledge-graph-2ICXFUUV.js +2 -0
  224. package/dist/cli/chunks/{learning-SFIWIG6Z.js → learning-3BHEZEPK.js} +3 -3
  225. package/dist/cli/chunks/{llm-router-V633KAS5.js → llm-router-GPTEZCUN.js} +4 -4
  226. package/dist/cli/chunks/llm-router-service-C47RGTH6.js +2 -0
  227. package/dist/cli/chunks/{load-UWZV4JRA.js → load-W5BIRPU4.js} +2 -2
  228. package/dist/cli/chunks/load-test-LRDAW3N6.js +2 -0
  229. package/dist/cli/chunks/{mcp-XVFHUKCP.js → mcp-EBV4DZPG.js} +2 -2
  230. package/dist/cli/chunks/{memory-BQ5652VK.js → memory-7F6YYKNL.js} +5 -5
  231. package/dist/cli/chunks/memory-backend-UFBAYPQ6.js +2 -0
  232. package/dist/cli/chunks/memory-handlers-OGLJHAAJ.js +2 -0
  233. package/dist/cli/chunks/{multi-model-executor-X6AQ7VVR.js → multi-model-executor-3ZIA2YOL.js} +2 -2
  234. package/dist/cli/chunks/{opencode-installer-N3V2Z4EF.js → opencode-installer-2XRZUTLR.js} +2 -2
  235. package/dist/cli/chunks/{orchestrator-KNEKS4F7.js → orchestrator-VSZVJUJW.js} +87 -28
  236. package/dist/cli/chunks/pattern-null-store-27FCITT3.js +2 -0
  237. package/dist/cli/chunks/{pattern-usage-recorder-MZIM6XWU.js → pattern-usage-recorder-I2IGVHRL.js} +2 -2
  238. package/dist/cli/chunks/{pipeline-LNLBKSXR.js → pipeline-5G3O6WBY.js} +2 -2
  239. package/dist/cli/chunks/{platform-OMUDXHD3.js → platform-6GUFDIA3.js} +2 -2
  240. package/dist/cli/chunks/{plugin-HGY6KKZW.js → plugin-GYXE4CIC.js} +2 -2
  241. package/dist/cli/chunks/{prime-radiant-advanced-wasm-LZBHLQYN.js → prime-radiant-advanced-wasm-THX6JLGZ.js} +2 -2
  242. package/dist/cli/chunks/{project-root-VPSCDBMD.js → project-root-QJRBKZQU.js} +2 -2
  243. package/dist/cli/chunks/protocol-executor-XWXXTMEW.js +2 -0
  244. package/dist/cli/chunks/{protocol-handler-LZXT3TXU.js → protocol-handler-B54LRU26.js} +2 -2
  245. package/dist/cli/chunks/{prove-I4VKQEYQ.js → prove-PCY2WQOD.js} +2 -2
  246. package/dist/cli/chunks/qe-reasoning-bank-3RMYXENE.js +2 -0
  247. package/dist/cli/chunks/{quality-VVAWK2DD.js → quality-LPVDZC7U.js} +2 -2
  248. package/dist/cli/chunks/{quality-gate-RGXLWYT6.js → quality-gate-L3KXL6WE.js} +3 -3
  249. package/dist/cli/chunks/queen-coordinator-AS6DZ7UJ.js +2 -0
  250. package/dist/cli/chunks/{real-embeddings-WM66PMQ6.js → real-embeddings-N3H523PJ.js} +2 -2
  251. package/dist/cli/chunks/{ref-validation-ZIWJNI6M.js → ref-validation-6BKDPHZ7.js} +2 -2
  252. package/dist/cli/chunks/{roocode-installer-QYSI3STC.js → roocode-installer-NSGGTWXE.js} +2 -2
  253. package/dist/cli/chunks/router-OVNLNGHO.js +2 -0
  254. package/dist/cli/chunks/routing-feedback-TBOWEB6H.js +2 -0
  255. package/dist/cli/chunks/{routing-handler-BID3EOLE.js → routing-handler-SRQNUBG3.js} +2 -2
  256. package/dist/cli/chunks/{ruvector-commands-DXIFMF4W.js → ruvector-commands-2IGULGDE.js} +2 -2
  257. package/dist/cli/chunks/rvf-dual-writer-YJYRCYGT.js +2 -0
  258. package/dist/cli/chunks/rvf-migration-adapter-VMRQ2SFO.js +2 -0
  259. package/dist/cli/chunks/{rvf-migration-coordinator-EV5E6SAO.js → rvf-migration-coordinator-ZD6WK5CK.js} +2 -2
  260. package/dist/cli/chunks/rvf-native-adapter-B75L3ALW.js +2 -0
  261. package/dist/cli/chunks/{rvf-store-integrity-IT6DCCJK.js → rvf-store-integrity-QULKUBBI.js} +2 -2
  262. package/dist/cli/chunks/safe-db-CRQHMCV6.js +2 -0
  263. package/dist/cli/chunks/schedule-L3DKJRXU.js +2 -0
  264. package/dist/cli/chunks/scheduler-VRHYUGY5.js +2 -0
  265. package/dist/cli/chunks/{security-AAFAEATQ.js → security-JW4EBARW.js} +3 -3
  266. package/dist/cli/chunks/{shared-rvf-adapter-QIHSYHAF.js → shared-rvf-adapter-VQ7NJTGY.js} +2 -2
  267. package/dist/cli/chunks/{shared-rvf-dual-writer-V7OZ6TBR.js → shared-rvf-dual-writer-SKTS52HK.js} +2 -2
  268. package/dist/cli/chunks/sqlite-persistence-JVAZETTL.js +2 -0
  269. package/dist/cli/chunks/{standalone-memory-ALZI6VPX.js → standalone-memory-3N4YJCSY.js} +2 -2
  270. package/dist/cli/chunks/{status-handler-DED5A3OW.js → status-handler-5BQ2IIDG.js} +2 -2
  271. package/dist/cli/chunks/{structural-health-CB7L3NWH.js → structural-health-WGYR2RJB.js} +2 -2
  272. package/dist/cli/chunks/{sync-QNPGETIO.js → sync-DLKSXTIR.js} +2 -2
  273. package/dist/cli/chunks/sync-R5OKUBTQ.js +2 -0
  274. package/dist/cli/chunks/{task-handler-CGHXYFIF.js → task-handler-Z5KNTSUX.js} +2 -2
  275. package/dist/cli/chunks/{task-handlers-A6BGQJIB.js → task-handlers-RZFMYFSC.js} +3 -3
  276. package/dist/cli/chunks/test-LHWKZJRN.js +34 -0
  277. package/dist/cli/chunks/test-scheduling-EN7WXUMS.js +15 -0
  278. package/dist/cli/chunks/token-bootstrap-4V3OO4EC.js +2 -0
  279. package/dist/cli/chunks/{token-usage-25BRFKJ5.js → token-usage-PFC2BYBS.js} +2 -2
  280. package/dist/cli/chunks/{transformers-TBVVSZMF.js → transformers-VZCC4SHC.js} +2 -2
  281. package/dist/cli/chunks/{tree-sitter-wasm-parser-N7KCOQT4.js → tree-sitter-wasm-parser-ZYDQXGKN.js} +2 -2
  282. package/dist/cli/chunks/{types-TFHWJGRK.js → types-I6AWHZZQ.js} +2 -2
  283. package/dist/cli/chunks/unified-memory-WOOCCIUM.js +2 -0
  284. package/dist/cli/chunks/unified-memory-hnsw-PDDHFLUB.js +2 -0
  285. package/dist/cli/chunks/unified-persistence-6ETD3JSC.js +2 -0
  286. package/dist/cli/chunks/{upgrade-4VWQU7RD.js → upgrade-T7SG75PA.js} +2 -2
  287. package/dist/cli/chunks/{validate-FF7WVXMP.js → validate-YLYEHTY3.js} +2 -2
  288. package/dist/cli/chunks/{validate-swarm-NRLH4EDC.js → validate-swarm-VTLTRUE3.js} +2 -2
  289. package/dist/cli/chunks/visual-security-O4OT2YPY.js +2 -0
  290. package/dist/cli/chunks/{web-tree-sitter-VVU3LULW.js → web-tree-sitter-JUM7ZY5M.js} +2 -2
  291. package/dist/cli/chunks/{windsurf-installer-Q2ZNWG2D.js → windsurf-installer-4KS2466T.js} +2 -2
  292. package/dist/cli/chunks/witness-chain-67JHPDCN.js +2 -0
  293. package/dist/cli/chunks/{witness-chain-FP3D4PQL.js → witness-chain-E4X6TOCT.js} +2 -2
  294. package/dist/cli/chunks/witness-chain-repair-MB53OZO6.js +2 -0
  295. package/dist/cli/chunks/{witness-chain-verifier-LACGL6BK.js → witness-chain-verifier-LBWJHO7Y.js} +2 -2
  296. package/dist/cli/chunks/{witness-key-manager-GQZIB5ZE.js → witness-key-manager-5IHVMXHJ.js} +2 -2
  297. package/dist/cli/chunks/{workflow-JPA5Y7L6.js → workflow-XUQXIRNE.js} +4 -4
  298. package/dist/cli/chunks/workflow-orchestrator-ZVFSNRYZ.js +2 -0
  299. package/dist/cli/chunks/wrappers-YVF5SQUN.js +2 -0
  300. package/dist/cli/commands/test.js +42 -9
  301. package/dist/cli/handlers/init-flags.d.ts +45 -0
  302. package/dist/cli/handlers/init-flags.js +35 -0
  303. package/dist/cli/handlers/init-handler.d.ts +6 -0
  304. package/dist/cli/handlers/init-handler.js +24 -10
  305. package/dist/cli/utils/generated-test-writer.d.ts +35 -0
  306. package/dist/cli/utils/generated-test-writer.js +44 -0
  307. package/dist/context/compiler.js +4 -1
  308. package/dist/coordination/consensus/providers/ollama-provider.js +16 -27
  309. package/dist/coordination/consensus/providers/openrouter-provider.js +13 -24
  310. package/dist/coordination/handlers/test-execution-handlers.js +4 -2
  311. package/dist/coordination/protocols/defect-investigation.js +4 -1
  312. package/dist/coordination/task-executor.js +4 -2
  313. package/dist/domains/code-intelligence/services/metric-collector/test-counter.js +3 -3
  314. package/dist/domains/coverage-analysis/services/gap-detector.js +3 -1
  315. package/dist/domains/learning-optimization/services/learning-coordinator.js +4 -2
  316. package/dist/domains/test-execution/services/flaky-detector.js +8 -2
  317. package/dist/domains/test-execution/services/retry-handler.js +23 -20
  318. package/dist/domains/test-execution/services/test-executor.js +5 -2
  319. package/dist/domains/test-generation/services/test-generator.js +5 -2
  320. package/dist/governance/compliance-reporter.js +8 -7
  321. package/dist/governance/proof-envelope-integration.js +3 -1
  322. package/dist/init/claude-plugin-detection.d.ts +63 -0
  323. package/dist/init/claude-plugin-detection.js +118 -0
  324. package/dist/init/init-wizard-hooks.d.ts +6 -1
  325. package/dist/init/init-wizard-hooks.js +9 -1
  326. package/dist/init/init-wizard.d.ts +4 -0
  327. package/dist/init/init-wizard.js +3 -1
  328. package/dist/init/orchestrator.js +1 -0
  329. package/dist/init/phases/07-hooks.js +30 -4
  330. package/dist/init/phases/08-mcp.d.ts +7 -0
  331. package/dist/init/phases/08-mcp.js +22 -0
  332. package/dist/init/phases/10-workers.js +42 -6
  333. package/dist/init/phases/phase-interface.d.ts +5 -1
  334. package/dist/integrations/agentic-flow/onnx-embeddings/embedding-generator.d.ts +4 -1
  335. package/dist/integrations/agentic-flow/onnx-embeddings/embedding-generator.js +6 -2
  336. package/dist/integrations/browser/qe-dashboard/wasm-vector-store.js +2 -1
  337. package/dist/integrations/ruvector/coverage-router.d.ts +3 -1
  338. package/dist/integrations/ruvector/coverage-router.js +7 -6
  339. package/dist/integrations/ruvector/diff-risk-classifier.js +5 -4
  340. package/dist/integrations/ruvector/rvf-dual-writer.js +10 -1
  341. package/dist/integrations/vibium/runtime.js +2 -6
  342. package/dist/learning/dream/dream-engine.d.ts +5 -0
  343. package/dist/learning/dream/dream-engine.js +20 -3
  344. package/dist/learning/embedding-space.d.ts +18 -0
  345. package/dist/learning/embedding-space.js +33 -0
  346. package/dist/learning/rvf-pattern-store.js +19 -5
  347. package/dist/mcp/bundle.js +443 -441
  348. package/dist/mcp/handlers/domain-handler-configs.js +3 -1
  349. package/dist/mcp/handlers/handler-factory.js +7 -0
  350. package/dist/mcp/handlers/save-results-option.d.ts +97 -0
  351. package/dist/mcp/handlers/save-results-option.js +94 -0
  352. package/dist/mcp/protocol-server.js +23 -11
  353. package/dist/mcp/security/rate-limiter.d.ts +8 -1
  354. package/dist/mcp/security/rate-limiter.js +33 -4
  355. package/dist/mcp/services/session-resume.js +11 -0
  356. package/dist/mcp/services/session-store.d.ts +31 -2
  357. package/dist/mcp/services/session-store.js +84 -15
  358. package/dist/mcp/services/session-write-buffer.d.ts +55 -0
  359. package/dist/mcp/services/session-write-buffer.js +144 -0
  360. package/dist/mcp/types.d.ts +9 -0
  361. package/dist/memory/crdt/g-counter.js +10 -8
  362. package/dist/shared/embeddings/ollama-client.d.ts +1 -1
  363. package/dist/shared/embeddings/ollama-client.js +30 -31
  364. package/dist/shared/git/git-analyzer.d.ts +4 -1
  365. package/dist/shared/git/git-analyzer.js +9 -4
  366. package/dist/shared/llm/cost-tracker.js +8 -6
  367. package/dist/shared/llm/providers/azure-openai.js +5 -21
  368. package/dist/shared/llm/providers/bedrock.js +5 -21
  369. package/dist/shared/llm/providers/claude.js +5 -21
  370. package/dist/shared/llm/providers/cognitum.js +5 -17
  371. package/dist/shared/llm/providers/gemini.js +9 -23
  372. package/dist/shared/llm/providers/ollama.js +5 -21
  373. package/dist/shared/llm/providers/openai.js +5 -21
  374. package/dist/shared/llm/providers/openrouter.js +9 -23
  375. package/dist/shared/llm/providers/response-deadline.d.ts +3 -0
  376. package/dist/shared/llm/providers/response-deadline.js +100 -0
  377. package/dist/shared/llm/spend-ledger.js +3 -2
  378. package/dist/shared/metrics/code-metrics.d.ts +1 -0
  379. package/dist/shared/metrics/code-metrics.js +3 -44
  380. package/dist/shared/metrics/cognitive-complexity.d.ts +17 -0
  381. package/dist/shared/metrics/cognitive-complexity.js +108 -0
  382. package/dist/shared/npm-cli-invocation.d.ts +21 -0
  383. package/dist/shared/npm-cli-invocation.js +28 -0
  384. package/dist/shared/optional-module.js +24 -0
  385. package/dist/shared/test-runner-args.d.ts +42 -0
  386. package/dist/shared/test-runner-args.js +74 -0
  387. package/dist/shared/utils/safe-record.d.ts +18 -0
  388. package/dist/shared/utils/safe-record.js +28 -0
  389. package/dist/test-scheduling/executors/vitest-executor.js +23 -5
  390. package/dist/workers/quality-daemon/git-watcher.js +5 -0
  391. package/package.json +1 -1
  392. package/dist/adapters/ag-ui/json-patch-utils.d.ts +0 -136
  393. package/dist/adapters/ag-ui/json-patch-utils.js +0 -575
  394. package/dist/cli/chunks/adapter-Q6RPGMUE.js +0 -2
  395. package/dist/cli/chunks/aqe-learning-engine-JQPXIU7C.js +0 -2
  396. package/dist/cli/chunks/base-5SK64NXB.js +0 -2
  397. package/dist/cli/chunks/browser-workflow-WN7XNTCJ.js +0 -2
  398. package/dist/cli/chunks/chunk-2K3QFLX2.js +0 -2
  399. package/dist/cli/chunks/chunk-53C7TGC4.js +0 -4
  400. package/dist/cli/chunks/chunk-J4ULR4QR.js +0 -54
  401. package/dist/cli/chunks/chunk-R2ICZKQA.js +0 -2
  402. package/dist/cli/chunks/chunk-TR37Q7A6.js +0 -15
  403. package/dist/cli/chunks/chunk-XYZUBAR6.js +0 -316
  404. package/dist/cli/chunks/chunk-YDMPTCJ3.js +0 -14
  405. package/dist/cli/chunks/client-ZYH66YRI.js +0 -2
  406. package/dist/cli/chunks/core-handlers-XKSPHEHE.js +0 -2
  407. package/dist/cli/chunks/cost-tracker-CKLDQ5AZ.js +0 -2
  408. package/dist/cli/chunks/cross-domain-router-6VYNFQZA.js +0 -2
  409. package/dist/cli/chunks/dream-DRSSIHPP.js +0 -2
  410. package/dist/cli/chunks/heartbeat-scheduler-FMICCNWK.js +0 -2
  411. package/dist/cli/chunks/hnsw-adapter-4TGBNJEZ.js +0 -2
  412. package/dist/cli/chunks/hnsw-index-J4NSCPAZ.js +0 -2
  413. package/dist/cli/chunks/hybrid-backend-NKPA3QE7.js +0 -2
  414. package/dist/cli/chunks/impact-analyzer-MWX7XY7X.js +0 -2
  415. package/dist/cli/chunks/init-handler-C7ZBDAC5.js +0 -81
  416. package/dist/cli/chunks/init-wizard-EX5N5Q7X.js +0 -2
  417. package/dist/cli/chunks/kernel-EQLZDHDD.js +0 -2
  418. package/dist/cli/chunks/knowledge-graph-A3WSMQ6U.js +0 -2
  419. package/dist/cli/chunks/llm-router-service-A6XYWTL6.js +0 -2
  420. package/dist/cli/chunks/load-test-WF2PCXLI.js +0 -2
  421. package/dist/cli/chunks/memory-backend-BKGLI2RF.js +0 -2
  422. package/dist/cli/chunks/memory-handlers-PWI3G4P4.js +0 -2
  423. package/dist/cli/chunks/pattern-null-store-YTBLEH7D.js +0 -2
  424. package/dist/cli/chunks/protocol-executor-HFR2D54O.js +0 -2
  425. package/dist/cli/chunks/qe-reasoning-bank-MYFBQUYV.js +0 -2
  426. package/dist/cli/chunks/queen-coordinator-CQQMOTIW.js +0 -2
  427. package/dist/cli/chunks/router-GKWLPA3N.js +0 -2
  428. package/dist/cli/chunks/routing-feedback-WA4D5JRF.js +0 -2
  429. package/dist/cli/chunks/rvf-dual-writer-H3ZXS5MA.js +0 -2
  430. package/dist/cli/chunks/rvf-migration-adapter-J7MTCOQA.js +0 -2
  431. package/dist/cli/chunks/rvf-native-adapter-HXBY4VYI.js +0 -2
  432. package/dist/cli/chunks/safe-db-INVJ5LHR.js +0 -2
  433. package/dist/cli/chunks/schedule-XRIPPL52.js +0 -2
  434. package/dist/cli/chunks/scheduler-HBN3KPRW.js +0 -2
  435. package/dist/cli/chunks/sqlite-persistence-6KNLT5Q2.js +0 -2
  436. package/dist/cli/chunks/sync-S6Z2U46T.js +0 -2
  437. package/dist/cli/chunks/test-IISTF5W6.js +0 -33
  438. package/dist/cli/chunks/test-scheduling-FKYX4OLF.js +0 -15
  439. package/dist/cli/chunks/token-bootstrap-OKO3JEKT.js +0 -2
  440. package/dist/cli/chunks/unified-memory-WVELSL6T.js +0 -2
  441. package/dist/cli/chunks/unified-memory-hnsw-7P5MVKXD.js +0 -2
  442. package/dist/cli/chunks/unified-persistence-YLFCEWYY.js +0 -2
  443. package/dist/cli/chunks/visual-security-T5OM742H.js +0 -2
  444. package/dist/cli/chunks/witness-chain-D6X4OZP5.js +0 -2
  445. package/dist/cli/chunks/witness-chain-repair-3LG4BF7C.js +0 -2
  446. package/dist/cli/chunks/workflow-orchestrator-OORDDKT3.js +0 -2
  447. package/dist/cli/chunks/wrappers-2B5NHICD.js +0 -2
@@ -7,6 +7,7 @@
7
7
  */
8
8
  import { randomUUID } from 'crypto';
9
9
  import { getModelCost } from './model-registry.js';
10
+ import { addToCount, createSafeRecord } from '../utils/safe-record.js';
10
11
  /**
11
12
  * Token pricing per model (cost per 1M tokens in USD).
12
13
  * Current-generation prices verified 2026-09-27 (Anthropic docs, OpenRouter
@@ -133,7 +134,8 @@ export const MODEL_PRICING = {
133
134
  * as a free/local model.
134
135
  */
135
136
  export function resolveModelPricing(model) {
136
- const pricing = MODEL_PRICING[model];
137
+ // Own keys only: a model named `toString` must not resolve to the inherited method (#914).
138
+ const pricing = Object.hasOwn(MODEL_PRICING, model) ? MODEL_PRICING[model] : undefined;
137
139
  if (pricing) {
138
140
  return { input: pricing.input, output: pricing.output };
139
141
  }
@@ -238,15 +240,15 @@ export class CostTracker {
238
240
  gemini: 0,
239
241
  cognitum: 0,
240
242
  };
241
- const byModel = {};
243
+ // Model and provider names are data, so buckets must not inherit from Object.prototype (#914).
244
+ const byModel = createSafeRecord();
242
245
  let totalCost = 0;
243
246
  let totalTokens = 0;
244
247
  for (const record of relevantRecords) {
245
248
  totalCost += record.cost.totalCost;
246
249
  totalTokens += record.usage.totalTokens;
247
- const providerCost = Object.hasOwn(byProvider, record.provider) ? byProvider[record.provider] : 0;
248
- byProvider[record.provider] = providerCost + record.cost.totalCost;
249
- byModel[record.model] = (byModel[record.model] || 0) + record.cost.totalCost;
250
+ addToCount(byProvider, record.provider, record.cost.totalCost);
251
+ addToCount(byModel, record.model, record.cost.totalCost);
250
252
  }
251
253
  return {
252
254
  period,
@@ -277,7 +279,7 @@ export class CostTracker {
277
279
  getUsageByProvider(provider, period = 'all') {
278
280
  const periodStart = this.getPeriodStart(new Date(), period);
279
281
  const providerRecords = this.records.filter((r) => r.provider === provider && r.timestamp >= periodStart);
280
- const models = {};
282
+ const models = createSafeRecord();
281
283
  let totalCost = 0;
282
284
  let totalTokens = 0;
283
285
  for (const record of providerRecords) {
@@ -33,6 +33,7 @@ import { applyOpenAIParams } from '../openai-params.js';
33
33
  import { TokenMetricsCollector } from '../../../learning/token-tracker.js';
34
34
  import { toError } from '../../error-utils.js';
35
35
  import { backoffDelay } from '../retry.js';
36
+ import { fetchWithResponseDeadline } from './response-deadline.js';
36
37
  /**
37
38
  * Default Azure OpenAI configuration
38
39
  */
@@ -492,27 +493,10 @@ export class AzureOpenAIProvider {
492
493
  * Fetch with timeout
493
494
  */
494
495
  async fetchWithTimeout(url, options, timeoutMs) {
495
- const controller = new AbortController();
496
- const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
497
- try {
498
- const response = await fetch(url, {
499
- ...options,
500
- signal: controller.signal,
501
- });
502
- return response;
503
- }
504
- catch (error) {
505
- if (error instanceof Error && error.name === 'AbortError') {
506
- throw createLLMError('Request timed out', 'TIMEOUT', {
507
- provider: 'azure-openai',
508
- retryable: true,
509
- });
510
- }
511
- throw error;
512
- }
513
- finally {
514
- clearTimeout(timeoutId);
515
- }
496
+ return fetchWithResponseDeadline(url, options, timeoutMs, () => createLLMError('Request timed out', 'TIMEOUT', {
497
+ provider: 'azure-openai',
498
+ retryable: true,
499
+ }));
516
500
  }
517
501
  /**
518
502
  * Fetch with retry logic
@@ -16,6 +16,7 @@ import { CostTracker } from '../cost-tracker.js';
16
16
  import { TokenMetricsCollector } from '../../../learning/token-tracker.js';
17
17
  import { toError } from '../../error-utils.js';
18
18
  import { backoffDelay } from '../retry.js';
19
+ import { fetchWithResponseDeadline } from './response-deadline.js';
19
20
  import { applyAnthropicParams } from '../anthropic-params.js';
20
21
  /**
21
22
  * Default Bedrock configuration
@@ -545,27 +546,10 @@ export class BedrockProvider {
545
546
  * Fetch with timeout
546
547
  */
547
548
  async fetchWithTimeout(url, options, timeoutMs) {
548
- const controller = new AbortController();
549
- const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
550
- try {
551
- const response = await fetch(url, {
552
- ...options,
553
- signal: controller.signal,
554
- });
555
- return response;
556
- }
557
- catch (error) {
558
- if (error instanceof Error && error.name === 'AbortError') {
559
- throw createLLMError('Request timed out', 'TIMEOUT', {
560
- provider: 'bedrock',
561
- retryable: true,
562
- });
563
- }
564
- throw error;
565
- }
566
- finally {
567
- clearTimeout(timeoutId);
568
- }
549
+ return fetchWithResponseDeadline(url, options, timeoutMs, () => createLLMError('Request timed out', 'TIMEOUT', {
550
+ provider: 'bedrock',
551
+ retryable: true,
552
+ }));
569
553
  }
570
554
  /**
571
555
  * Sleep utility
@@ -10,6 +10,7 @@ import { CostTracker } from '../cost-tracker.js';
10
10
  import { TokenMetricsCollector } from '../../../learning/token-tracker.js';
11
11
  import { toError } from '../../error-utils.js';
12
12
  import { backoffDelay } from '../retry.js';
13
+ import { fetchWithResponseDeadline } from './response-deadline.js';
13
14
  import { applyAnthropicParams } from '../anthropic-params.js';
14
15
  import { DEFAULT_SONNET_MODEL } from '../model-registry.js';
15
16
  /**
@@ -357,27 +358,10 @@ export class ClaudeProvider {
357
358
  * Fetch with timeout
358
359
  */
359
360
  async fetchWithTimeout(url, options, timeoutMs) {
360
- const controller = new AbortController();
361
- const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
362
- try {
363
- const response = await fetch(url, {
364
- ...options,
365
- signal: controller.signal,
366
- });
367
- return response;
368
- }
369
- catch (error) {
370
- if (error instanceof Error && error.name === 'AbortError') {
371
- throw createLLMError('Request timed out', 'TIMEOUT', {
372
- provider: 'claude',
373
- retryable: true,
374
- });
375
- }
376
- throw error;
377
- }
378
- finally {
379
- clearTimeout(timeoutId);
380
- }
361
+ return fetchWithResponseDeadline(url, options, timeoutMs, () => createLLMError('Request timed out', 'TIMEOUT', {
362
+ provider: 'claude',
363
+ retryable: true,
364
+ }));
381
365
  }
382
366
  /**
383
367
  * Fetch with retry logic
@@ -16,6 +16,7 @@ import { createLLMError, } from '../interfaces.js';
16
16
  import { TokenMetricsCollector } from '../../../learning/token-tracker.js';
17
17
  import { toError } from '../../error-utils.js';
18
18
  import { backoffDelay } from '../retry.js';
19
+ import { fetchWithResponseDeadline } from './response-deadline.js';
19
20
  export const DEFAULT_COGNITUM_CONFIG = {
20
21
  model: 'cognitum-auto',
21
22
  maxTokens: 4096,
@@ -320,23 +321,10 @@ export class CognitumProvider {
320
321
  }
321
322
  }
322
323
  async fetchWithTimeout(url, options, timeoutMs) {
323
- const controller = new AbortController();
324
- const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
325
- try {
326
- return await fetch(url, { ...options, signal: controller.signal });
327
- }
328
- catch (error) {
329
- if (error instanceof Error && error.name === 'AbortError') {
330
- throw createLLMError('Request timed out', 'TIMEOUT', {
331
- provider: 'cognitum',
332
- retryable: true,
333
- });
334
- }
335
- throw error;
336
- }
337
- finally {
338
- clearTimeout(timeoutId);
339
- }
324
+ return fetchWithResponseDeadline(url, options, timeoutMs, () => createLLMError('Request timed out', 'TIMEOUT', {
325
+ provider: 'cognitum',
326
+ retryable: true,
327
+ }));
340
328
  }
341
329
  async fetchWithRetry(url, options, timeoutMs, maxRetries) {
342
330
  let lastError;
@@ -12,6 +12,7 @@ import { createLLMError, } from '../interfaces.js';
12
12
  import { TokenMetricsCollector } from '../../../learning/token-tracker.js';
13
13
  import { toError } from '../../error-utils.js';
14
14
  import { backoffDelay } from '../retry.js';
15
+ import { fetchWithResponseDeadline } from './response-deadline.js';
15
16
  import { safeJsonParse } from '../../safe-json.js';
16
17
  /**
17
18
  * Default Gemini configuration
@@ -246,7 +247,7 @@ export class GeminiProvider {
246
247
  method: 'POST',
247
248
  headers: { 'Content-Type': 'application/json' },
248
249
  body: JSON.stringify(body),
249
- }, options?.timeoutMs ?? this.config.timeoutMs ?? 60000);
250
+ }, options?.timeoutMs ?? this.config.timeoutMs ?? 60000, 'idle');
250
251
  if (!response.ok) {
251
252
  const errorData = await response.json().catch(() => ({
252
253
  error: { message: 'Unknown error', code: 0, status: 'UNKNOWN' },
@@ -304,6 +305,8 @@ export class GeminiProvider {
304
305
  }
305
306
  }
306
307
  finally {
308
+ // Returning early from the generator must also release its request deadline.
309
+ await reader.cancel().catch(() => { });
307
310
  reader.releaseLock();
308
311
  }
309
312
  const latencyMs = Date.now() - start;
@@ -574,28 +577,11 @@ export class GeminiProvider {
574
577
  /**
575
578
  * Fetch with timeout
576
579
  */
577
- async fetchWithTimeout(url, options, timeoutMs) {
578
- const controller = new AbortController();
579
- const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
580
- try {
581
- const response = await fetch(url, {
582
- ...options,
583
- signal: controller.signal,
584
- });
585
- return response;
586
- }
587
- catch (error) {
588
- if (error instanceof Error && error.name === 'AbortError') {
589
- throw createLLMError('Request timed out', 'TIMEOUT', {
590
- provider: 'gemini',
591
- retryable: true,
592
- });
593
- }
594
- throw error;
595
- }
596
- finally {
597
- clearTimeout(timeoutId);
598
- }
580
+ async fetchWithTimeout(url, options, timeoutMs, bodyDeadline = 'absolute') {
581
+ return fetchWithResponseDeadline(url, options, timeoutMs, () => createLLMError('Request timed out', 'TIMEOUT', {
582
+ provider: 'gemini',
583
+ retryable: true,
584
+ }), bodyDeadline);
599
585
  }
600
586
  /**
601
587
  * Fetch with retry logic
@@ -5,6 +5,7 @@
5
5
  * Local LLM provider using Ollama for fast iteration and zero-cost development.
6
6
  * Supports Llama, Mistral, CodeLlama, and other local models.
7
7
  */
8
+ import { fetchWithResponseDeadline } from './response-deadline.js';
8
9
  import { createLLMError, } from '../interfaces.js';
9
10
  import { CostTracker } from '../cost-tracker.js';
10
11
  import { TokenMetricsCollector } from '../../../learning/token-tracker.js';
@@ -410,27 +411,10 @@ export class OllamaProvider {
410
411
  * Fetch with timeout
411
412
  */
412
413
  async fetchWithTimeout(url, options, timeoutMs) {
413
- const controller = new AbortController();
414
- const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
415
- try {
416
- const response = await fetch(url, {
417
- ...options,
418
- signal: controller.signal,
419
- });
420
- return response;
421
- }
422
- catch (error) {
423
- if (error instanceof Error && error.name === 'AbortError') {
424
- throw createLLMError('Request timed out', 'TIMEOUT', {
425
- provider: 'ollama',
426
- retryable: true,
427
- });
428
- }
429
- throw error;
430
- }
431
- finally {
432
- clearTimeout(timeoutId);
433
- }
414
+ return fetchWithResponseDeadline(url, options, timeoutMs, () => createLLMError('Request timed out', 'TIMEOUT', {
415
+ provider: 'ollama',
416
+ retryable: true,
417
+ }));
434
418
  }
435
419
  }
436
420
  //# sourceMappingURL=ollama.js.map
@@ -11,6 +11,7 @@ import { applyOpenAIParams } from '../openai-params.js';
11
11
  import { TokenMetricsCollector } from '../../../learning/token-tracker.js';
12
12
  import { toError } from '../../error-utils.js';
13
13
  import { backoffDelay } from '../retry.js';
14
+ import { fetchWithResponseDeadline } from './response-deadline.js';
14
15
  /**
15
16
  * Default OpenAI configuration
16
17
  */
@@ -378,27 +379,10 @@ export class OpenAIProvider {
378
379
  * Fetch with timeout
379
380
  */
380
381
  async fetchWithTimeout(url, options, timeoutMs) {
381
- const controller = new AbortController();
382
- const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
383
- try {
384
- const response = await fetch(url, {
385
- ...options,
386
- signal: controller.signal,
387
- });
388
- return response;
389
- }
390
- catch (error) {
391
- if (error instanceof Error && error.name === 'AbortError') {
392
- throw createLLMError('Request timed out', 'TIMEOUT', {
393
- provider: 'openai',
394
- retryable: true,
395
- });
396
- }
397
- throw error;
398
- }
399
- finally {
400
- clearTimeout(timeoutId);
401
- }
382
+ return fetchWithResponseDeadline(url, options, timeoutMs, () => createLLMError('Request timed out', 'TIMEOUT', {
383
+ provider: 'openai',
384
+ retryable: true,
385
+ }));
402
386
  }
403
387
  /**
404
388
  * Fetch with retry logic
@@ -13,6 +13,7 @@ import { createLLMError, } from '../interfaces.js';
13
13
  import { TokenMetricsCollector } from '../../../learning/token-tracker.js';
14
14
  import { toError } from '../../error-utils.js';
15
15
  import { backoffDelay } from '../retry.js';
16
+ import { fetchWithResponseDeadline } from './response-deadline.js';
16
17
  import { safeJsonParse } from '../../safe-json.js';
17
18
  import { resolveModelPricing } from '../cost-tracker.js';
18
19
  /**
@@ -273,7 +274,7 @@ export class OpenRouterProvider {
273
274
  method: 'POST',
274
275
  headers: this.getHeaders(),
275
276
  body: JSON.stringify(body),
276
- }, options?.timeoutMs ?? this.config.timeoutMs ?? 60000);
277
+ }, options?.timeoutMs ?? this.config.timeoutMs ?? 60000, 'idle');
277
278
  if (!response.ok) {
278
279
  const errorData = await response.json().catch(() => ({
279
280
  error: { message: 'Unknown error', type: 'unknown', code: null },
@@ -327,6 +328,8 @@ export class OpenRouterProvider {
327
328
  }
328
329
  }
329
330
  finally {
331
+ // Returning early from the generator must also release its request deadline.
332
+ await reader.cancel().catch(() => { });
330
333
  reader.releaseLock();
331
334
  }
332
335
  const latencyMs = Date.now() - start;
@@ -620,28 +623,11 @@ export class OpenRouterProvider {
620
623
  /**
621
624
  * Fetch with timeout
622
625
  */
623
- async fetchWithTimeout(url, options, timeoutMs) {
624
- const controller = new AbortController();
625
- const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
626
- try {
627
- const response = await fetch(url, {
628
- ...options,
629
- signal: controller.signal,
630
- });
631
- return response;
632
- }
633
- catch (error) {
634
- if (error instanceof Error && error.name === 'AbortError') {
635
- throw createLLMError('Request timed out', 'TIMEOUT', {
636
- provider: 'openrouter',
637
- retryable: true,
638
- });
639
- }
640
- throw error;
641
- }
642
- finally {
643
- clearTimeout(timeoutId);
644
- }
626
+ async fetchWithTimeout(url, options, timeoutMs, bodyDeadline = 'absolute') {
627
+ return fetchWithResponseDeadline(url, options, timeoutMs, () => createLLMError('Request timed out', 'TIMEOUT', {
628
+ provider: 'openrouter',
629
+ retryable: true,
630
+ }), bodyDeadline);
645
631
  }
646
632
  /**
647
633
  * Fetch with retry logic
@@ -0,0 +1,3 @@
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>;
3
+ //# sourceMappingURL=response-deadline.d.ts.map
@@ -0,0 +1,100 @@
1
+ /** Bound headers and bodies; streaming callers may use an idle body deadline. */
2
+ export async function fetchWithResponseDeadline(url, options, timeoutMs, timeoutError, bodyDeadline = 'absolute') {
3
+ const abort = new AbortController();
4
+ let expired = false;
5
+ let expireBody;
6
+ const expire = () => {
7
+ expired = true;
8
+ const error = timeoutError();
9
+ expireBody?.(error);
10
+ abort.abort(error);
11
+ };
12
+ let timer = setTimeout(expire, timeoutMs);
13
+ const resetIdleDeadline = () => {
14
+ if (bodyDeadline !== 'idle')
15
+ return;
16
+ clearTimeout(timer);
17
+ timer = setTimeout(expire, timeoutMs);
18
+ timer.unref?.();
19
+ };
20
+ // A status-only caller must not keep a process alive until its deadline.
21
+ timer.unref?.();
22
+ try {
23
+ const response = await fetch(url, { ...options, signal: abort.signal });
24
+ if (!response.body) {
25
+ clearTimeout(timer);
26
+ return response;
27
+ }
28
+ resetIdleDeadline();
29
+ const reader = response.body.getReader();
30
+ let finished = false;
31
+ const finish = () => {
32
+ finished = true;
33
+ clearTimeout(timer);
34
+ };
35
+ const body = new ReadableStream({
36
+ start(controller) {
37
+ expireBody = error => {
38
+ if (finished)
39
+ return;
40
+ finish();
41
+ controller.error(error);
42
+ // Cancel also settles any pending read before releasing its lock.
43
+ void reader.cancel(error).catch(() => { }).finally(() => reader.releaseLock());
44
+ };
45
+ },
46
+ async pull(controller) {
47
+ try {
48
+ const result = await reader.read();
49
+ if (finished)
50
+ return;
51
+ if (result.done) {
52
+ finish();
53
+ reader.releaseLock();
54
+ controller.close();
55
+ }
56
+ else {
57
+ resetIdleDeadline();
58
+ controller.enqueue(result.value);
59
+ }
60
+ }
61
+ catch (error) {
62
+ if (finished)
63
+ return;
64
+ finish();
65
+ reader.releaseLock();
66
+ controller.error(error);
67
+ }
68
+ },
69
+ async cancel(reason) {
70
+ if (finished)
71
+ return;
72
+ finish();
73
+ try {
74
+ await reader.cancel(reason);
75
+ }
76
+ finally {
77
+ reader.releaseLock();
78
+ }
79
+ },
80
+ }, { highWaterMark: 0 });
81
+ const bounded = new Response(body, {
82
+ status: response.status,
83
+ statusText: response.statusText,
84
+ headers: response.headers,
85
+ });
86
+ // Keep fetch metadata while using the bounded stream for body consumers.
87
+ for (const key of ['url', 'redirected', 'type']) {
88
+ Object.defineProperty(bounded, key, { value: response[key] });
89
+ }
90
+ return bounded;
91
+ }
92
+ catch (error) {
93
+ clearTimeout(timer);
94
+ if (expired || (error instanceof Error && error.name === 'AbortError')) {
95
+ throw timeoutError();
96
+ }
97
+ throw error;
98
+ }
99
+ }
100
+ //# sourceMappingURL=response-deadline.js.map
@@ -17,6 +17,7 @@
17
17
  * connections (one per process) to a WAL-mode DB is exactly the supported
18
18
  * cross-process pattern.
19
19
  */
20
+ import { createSafeRecord } from '../utils/safe-record.js';
20
21
  /** Bucket used for charges recorded without an agent context. */
21
22
  export const UNATTRIBUTED_AGENT = '(unattributed)';
22
23
  const CREATE_TABLE_SQL = `
@@ -127,7 +128,7 @@ export class SqliteSpendLedger {
127
128
  .prepare(`SELECT COALESCE(agent_type, ?) AS agent, COALESCE(SUM(cost_usd), 0) AS total
128
129
  FROM llm_spend WHERE ts >= ? GROUP BY COALESCE(agent_type, ?)`)
129
130
  .all(UNATTRIBUTED_AGENT, nowMs - windowMs, UNATTRIBUTED_AGENT);
130
- const out = {};
131
+ const out = createSafeRecord();
131
132
  for (const r of rows)
132
133
  out[r.agent] = r.total;
133
134
  return out;
@@ -157,7 +158,7 @@ export class InMemorySpendLedger {
157
158
  }
158
159
  spentByAgentSince(windowMs, nowMs = Date.now()) {
159
160
  const cutoff = nowMs - windowMs;
160
- const out = {};
161
+ const out = createSafeRecord();
161
162
  for (const e of this.entries) {
162
163
  if (e.ts >= cutoff)
163
164
  out[e.agent] = (out[e.agent] ?? 0) + e.costUsd;
@@ -63,6 +63,7 @@ export declare class CodeMetricsAnalyzer {
63
63
  detectDuplication(files: string[], minLines?: number): Promise<DuplicationResult>;
64
64
  private countLines;
65
65
  private calculateCyclomaticComplexity;
66
+ /** SonarSource cognitive complexity heuristic; see ./cognitive-complexity.ts (#907). */
66
67
  private calculateCognitiveComplexity;
67
68
  private estimateCyclomaticComplexity;
68
69
  private estimateCognitiveComplexity;
@@ -6,6 +6,7 @@ import { TypeScriptParser } from '../parsers/index.js';
6
6
  import { FileReader } from '../io/index.js';
7
7
  import { treeSitterRegistry } from '../parsers/multi-language-parser.js';
8
8
  import { getLanguageFromExtension } from '../types/test-frameworks.js';
9
+ import { calculateCognitiveComplexity } from './cognitive-complexity.js';
9
10
  // ============================================================================
10
11
  // Code Metrics Analyzer
11
12
  // ============================================================================
@@ -247,51 +248,9 @@ export class CodeMetricsAnalyzer {
247
248
  }
248
249
  return complexity;
249
250
  }
251
+ /** SonarSource cognitive complexity heuristic; see ./cognitive-complexity.ts (#907). */
250
252
  calculateCognitiveComplexity(code) {
251
- let complexity = 0;
252
- let nestingLevel = 0;
253
- const lines = code.split('\n');
254
- for (const line of lines) {
255
- const trimmed = line.trim();
256
- // Increase nesting
257
- if (/\bif\s*\(/.test(trimmed)) {
258
- complexity += 1 + nestingLevel;
259
- nestingLevel++;
260
- }
261
- if (/\belse\s+if\s*\(/.test(trimmed)) {
262
- complexity += 1 + nestingLevel;
263
- }
264
- if (/\belse\s*{/.test(trimmed)) {
265
- complexity += 1;
266
- }
267
- if (/\bfor\s*\(/.test(trimmed)) {
268
- complexity += 1 + nestingLevel;
269
- nestingLevel++;
270
- }
271
- if (/\bwhile\s*\(/.test(trimmed)) {
272
- complexity += 1 + nestingLevel;
273
- nestingLevel++;
274
- }
275
- if (/\bswitch\s*\(/.test(trimmed)) {
276
- complexity += 1 + nestingLevel;
277
- nestingLevel++;
278
- }
279
- if (/\bcatch\s*\(/.test(trimmed)) {
280
- complexity += 1 + nestingLevel;
281
- nestingLevel++;
282
- }
283
- if (/\?\s*[^:]/.test(trimmed)) {
284
- complexity += 1 + nestingLevel; // Ternary
285
- }
286
- if (/&&|\|\|/.test(trimmed)) {
287
- complexity += 1; // Boolean operators
288
- }
289
- // Track nesting via braces (simplified)
290
- const openBraces = (trimmed.match(/{/g) || []).length;
291
- const closeBraces = (trimmed.match(/}/g) || []).length;
292
- nestingLevel = Math.max(0, nestingLevel + openBraces - closeBraces);
293
- }
294
- return complexity;
253
+ return calculateCognitiveComplexity(code);
295
254
  }
296
255
  estimateCyclomaticComplexity(code) {
297
256
  // Fallback heuristic for non-parseable code
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Line-based cognitive complexity heuristic (SonarSource rules, issues #907).
3
+ * Known gaps (lambdas, labelled jumps, boolean sequences, ...) are tracked in #967.
4
+ */
5
+ /**
6
+ * Blank out comments and the contents of string, template and regex literals,
7
+ * keeping newlines and delimiters, so keywords and braces inside them are not counted.
8
+ */
9
+ export declare function maskCommentsAndLiterals(code: string): string;
10
+ /**
11
+ * `if`, loops, `switch`, `catch` and ternaries score +1 plus the nesting level;
12
+ * `else if` and `else` score a flat +1 (an `else if` is not also an `if`).
13
+ * Nesting rises only inside the braces of those structures, so a function
14
+ * body, try block or object literal adds no nesting bonus.
15
+ */
16
+ export declare function calculateCognitiveComplexity(code: string): number;
17
+ //# sourceMappingURL=cognitive-complexity.d.ts.map