agentic-qe 3.12.1 → 3.12.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 (373) hide show
  1. package/.claude/skills/skills-manifest.json +1 -1
  2. package/CHANGELOG.md +87 -0
  3. package/assets/skills/skills-manifest.json +1 -1
  4. package/dist/cli/bundle.js +5 -5
  5. package/dist/cli/chunks/adapter-D657MKZY.js +2 -0
  6. package/dist/cli/chunks/{agent-booster-wasm-P4VYM5KK.js → agent-booster-wasm-XFAQATTH.js} +2 -2
  7. package/dist/cli/chunks/{agent-handler-PBQ7L2TO.js → agent-handler-2ZV4CA3U.js} +2 -2
  8. package/dist/cli/chunks/{agent-memory-branch-UPWO3X6V.js → agent-memory-branch-6WGP7F5T.js} +2 -2
  9. package/dist/cli/chunks/aqe-learning-engine-AFR6OZJK.js +2 -0
  10. package/dist/cli/chunks/{arena-QYTP3FG6.js → arena-FWX7XZAE.js} +4 -4
  11. package/dist/cli/chunks/{arena-LEUTILZ7.js → arena-KJUNQK4N.js} +2 -2
  12. package/dist/cli/chunks/{audit-TB6M2YLK.js → audit-YFUDEOKN.js} +3 -3
  13. package/dist/cli/chunks/base-K5QRGZWE.js +2 -0
  14. package/dist/cli/chunks/{hnswlib-node-62RTSHAY.js → better-sqlite3-FE55OGYB.js} +2 -2
  15. package/dist/cli/chunks/brain-handler-ZCK4WTPK.js +89 -0
  16. package/dist/cli/chunks/{branch-enumerator-WEIP3DXB.js → branch-enumerator-HTVINRYG.js} +2 -2
  17. package/dist/cli/chunks/{browser-HY6VLXHZ.js → browser-WUL2B77M.js} +2 -2
  18. package/dist/cli/chunks/browser-workflow-ZMMKCGYW.js +2 -0
  19. package/dist/cli/chunks/{chunk-NHRBKOYD.js → chunk-2CPJCXV6.js} +2 -2
  20. package/dist/cli/chunks/{chunk-D72N5V2S.js → chunk-2HCMRGMO.js} +2 -2
  21. package/dist/cli/chunks/{chunk-UBPJQKYS.js → chunk-2LNDU7AW.js} +2 -2
  22. package/dist/cli/chunks/{chunk-ONSNNY6J.js → chunk-2OX74DOO.js} +1 -1
  23. package/dist/cli/chunks/{chunk-QORWBION.js → chunk-2YDZXFO2.js} +2 -2
  24. package/dist/cli/chunks/{chunk-QJXUK54J.js → chunk-32L7DKNQ.js} +2 -2
  25. package/dist/cli/chunks/{chunk-UZXDYT6O.js → chunk-3YC4YUGB.js} +2 -2
  26. package/dist/cli/chunks/{chunk-NOCPO55P.js → chunk-4EHW4TNA.js} +2 -2
  27. package/dist/cli/chunks/{chunk-QZBPXJ5C.js → chunk-4HP7N6SP.js} +2 -2
  28. package/dist/cli/chunks/{chunk-XTAXSKPC.js → chunk-5FAWIIWF.js} +2 -2
  29. package/dist/cli/chunks/{chunk-YGB3MT3R.js → chunk-67BCEHU5.js} +1 -1
  30. package/dist/cli/chunks/{chunk-3W2FZXFD.js → chunk-6E47R27C.js} +1 -1
  31. package/dist/cli/chunks/{chunk-74VIADSJ.js → chunk-6HQDPDN5.js} +2 -2
  32. package/dist/cli/chunks/chunk-6SQ72FG7.js +2 -0
  33. package/dist/cli/chunks/{chunk-RJ7TU2MP.js → chunk-6SUSRXXF.js} +1 -1
  34. package/dist/cli/chunks/{chunk-FFSS3Y6W.js → chunk-72QQDR3Y.js} +2 -2
  35. package/dist/cli/chunks/{chunk-CP4GSICY.js → chunk-7Q74K3HZ.js} +1 -1
  36. package/dist/cli/chunks/{chunk-UEC53US3.js → chunk-7WF3TW3G.js} +4 -4
  37. package/dist/cli/chunks/chunk-7XUM4LBC.js +2 -0
  38. package/dist/cli/chunks/{chunk-UGPBL7LX.js → chunk-ADQFQBFJ.js} +2 -2
  39. package/dist/cli/chunks/{chunk-BALFQQB7.js → chunk-AIWRYWK2.js} +2 -2
  40. package/dist/cli/chunks/{chunk-XJTGLG7G.js → chunk-AZ24ONMX.js} +1 -1
  41. package/dist/cli/chunks/{chunk-LRWBOJ5Y.js → chunk-BDGKB2PT.js} +2 -2
  42. package/dist/cli/chunks/{chunk-NK2Z6FGF.js → chunk-BEPP57C2.js} +2 -2
  43. package/dist/cli/chunks/{chunk-HGKSU4QV.js → chunk-BQ2K4BPD.js} +2 -2
  44. package/dist/cli/chunks/{chunk-QOAI6ETC.js → chunk-BSNNTOHY.js} +3 -3
  45. package/dist/cli/chunks/chunk-CHFTHSMM.js +9 -0
  46. package/dist/cli/chunks/{chunk-IHWWZOHP.js → chunk-CL6SNCFF.js} +1 -1
  47. package/dist/cli/chunks/{chunk-7N2SCRWJ.js → chunk-CXMOIE7D.js} +2 -2
  48. package/dist/cli/chunks/{chunk-PZ3Q34OT.js → chunk-CYSBM52D.js} +2 -2
  49. package/dist/cli/chunks/{chunk-X2CEX4KC.js → chunk-D4GMAUTP.js} +10 -10
  50. package/dist/cli/chunks/{chunk-JDZIBSMY.js → chunk-DCYBV6HV.js} +1 -1
  51. package/dist/cli/chunks/chunk-DDYP6FBC.js +2 -0
  52. package/dist/cli/chunks/{chunk-SFQFBLWQ.js → chunk-DHUZHT5D.js} +1 -1
  53. package/dist/cli/chunks/{chunk-X2K3BTI4.js → chunk-DMD6WVJ2.js} +2 -2
  54. package/dist/cli/chunks/{chunk-GW3M7GQH.js → chunk-DTZFZ5M7.js} +2 -2
  55. package/dist/cli/chunks/{chunk-WBDV4V3H.js → chunk-DW7OI5IF.js} +2 -2
  56. package/dist/cli/chunks/{chunk-CYYT6YEV.js → chunk-DZ775UGW.js} +2 -2
  57. package/dist/cli/chunks/{chunk-BNMV5DCM.js → chunk-E2U3LTGM.js} +1 -1
  58. package/dist/cli/chunks/{chunk-KQV5644J.js → chunk-E53UR2EW.js} +3 -3
  59. package/dist/cli/chunks/{chunk-XYV6YUWS.js → chunk-EH7TSJPS.js} +2 -2
  60. package/dist/cli/chunks/{chunk-42GFB7VX.js → chunk-EHO52NKU.js} +2 -2
  61. package/dist/cli/chunks/{chunk-75AVUS5U.js → chunk-EOUJ6X5H.js} +1 -1
  62. package/dist/cli/chunks/{chunk-ZNITDSWL.js → chunk-FHHCH7WL.js} +1 -1
  63. package/dist/cli/chunks/{chunk-PQ4NSXZM.js → chunk-FJACKKRL.js} +2 -2
  64. package/dist/cli/chunks/{chunk-45QNHMTP.js → chunk-FTM562PF.js} +1 -1
  65. package/dist/cli/chunks/{chunk-4KI72C2E.js → chunk-FXOOOJQD.js} +1 -1
  66. package/dist/cli/chunks/chunk-G5OGKVLO.js +2 -0
  67. package/dist/cli/chunks/{chunk-42PYEEYQ.js → chunk-GGTCD4MA.js} +1 -1
  68. package/dist/cli/chunks/{chunk-GASACVTU.js → chunk-GMFFMJD6.js} +2 -2
  69. package/dist/cli/chunks/{chunk-JRNDFC23.js → chunk-GS6G7AVS.js} +2 -2
  70. package/dist/cli/chunks/{chunk-BKKJEKNT.js → chunk-GV2BS5NC.js} +2 -2
  71. package/dist/cli/chunks/{chunk-JRHRC2MP.js → chunk-HGJQSTQD.js} +1 -1
  72. package/dist/cli/chunks/{chunk-M5P5WNXA.js → chunk-HJ2LG5IH.js} +1 -1
  73. package/dist/cli/chunks/{chunk-UR655D4K.js → chunk-HJ4U64BL.js} +2 -2
  74. package/dist/cli/chunks/chunk-ILRKO6A5.js +43 -0
  75. package/dist/cli/chunks/{chunk-LZ6TJ7XL.js → chunk-IWQHQLT6.js} +2 -2
  76. package/dist/cli/chunks/{chunk-SHKOPOPD.js → chunk-J2RJOJ5Q.js} +1 -1
  77. package/dist/cli/chunks/{chunk-JIM4VSLF.js → chunk-KA4EAMMQ.js} +3 -3
  78. package/dist/cli/chunks/{chunk-6432JORM.js → chunk-KE3RK35K.js} +1 -1
  79. package/dist/cli/chunks/{chunk-VTFYY4SH.js → chunk-KGHSKDC7.js} +2 -2
  80. package/dist/cli/chunks/{chunk-3I3Z4C5X.js → chunk-KKOFH26C.js} +1 -1
  81. package/dist/cli/chunks/{chunk-AGWKCY42.js → chunk-KNWBRMLL.js} +2 -2
  82. package/dist/cli/chunks/{chunk-C7HGYLNF.js → chunk-KRS4KGX5.js} +2 -2
  83. package/dist/cli/chunks/{chunk-VHJCQBD2.js → chunk-KVHCWH4H.js} +2 -2
  84. package/dist/cli/chunks/{chunk-N3PSRG6F.js → chunk-KXKACV3E.js} +2 -2
  85. package/dist/cli/chunks/{chunk-BLU7OLQZ.js → chunk-L2X3BWMN.js} +2 -2
  86. package/dist/cli/chunks/{chunk-4U5MJX2H.js → chunk-L6GZGEFQ.js} +2 -2
  87. package/dist/cli/chunks/{chunk-DSNFOX22.js → chunk-LCM7TY76.js} +2 -2
  88. package/dist/cli/chunks/{chunk-NVXSM7UO.js → chunk-LGYEOYQJ.js} +2 -2
  89. package/dist/cli/chunks/{chunk-J4IAMQZI.js → chunk-LHAUFY4Y.js} +2 -2
  90. package/dist/cli/chunks/{chunk-OJORNYN3.js → chunk-LNIHLNW4.js} +3 -3
  91. package/dist/cli/chunks/{chunk-PRA73XZY.js → chunk-M32DTUZM.js} +2 -2
  92. package/dist/cli/chunks/{chunk-GGF5FZWS.js → chunk-M7W6VJ65.js} +1 -1
  93. package/dist/cli/chunks/{chunk-HZGFER4N.js → chunk-MB7TZQW3.js} +3 -3
  94. package/dist/cli/chunks/{chunk-RIASOMB2.js → chunk-MOX25RZQ.js} +2 -2
  95. package/dist/cli/chunks/{chunk-BPM7NEHS.js → chunk-MOXKKY5Q.js} +6 -6
  96. package/dist/cli/chunks/{chunk-UKF4V7LE.js → chunk-MS6VOSPY.js} +5 -5
  97. package/dist/cli/chunks/{chunk-QXZOUETY.js → chunk-MSDIIRLM.js} +2 -2
  98. package/dist/cli/chunks/{chunk-BBNQDHGF.js → chunk-MZ7SIO6R.js} +2 -2
  99. package/dist/cli/chunks/{chunk-HDI3FD4G.js → chunk-N4ML23ZG.js} +1 -1
  100. package/dist/cli/chunks/{chunk-7KHIOWBN.js → chunk-NAMJGRGC.js} +1 -1
  101. package/dist/cli/chunks/{chunk-IE6FDICX.js → chunk-NJDLJ3KD.js} +2 -2
  102. package/dist/cli/chunks/{chunk-4LKQZW2H.js → chunk-NKTLKMUB.js} +1 -1
  103. package/dist/cli/chunks/{chunk-CXUHD2O5.js → chunk-NLDLUHOF.js} +2 -2
  104. package/dist/cli/chunks/{chunk-XDRAU3W6.js → chunk-NOSQI2OW.js} +2 -2
  105. package/dist/cli/chunks/{chunk-ZCDGLNJ7.js → chunk-NT66CT73.js} +2 -2
  106. package/dist/cli/chunks/{chunk-JWZNWVLG.js → chunk-NX522PRH.js} +2 -2
  107. package/dist/cli/chunks/{chunk-O65OPAZH.js → chunk-OBL6W4Z5.js} +2 -2
  108. package/dist/cli/chunks/chunk-OPG2HV2W.js +2 -0
  109. package/dist/cli/chunks/{chunk-BCBITOMT.js → chunk-PDX7IYTJ.js} +2 -2
  110. package/dist/cli/chunks/{chunk-IC6SOVGO.js → chunk-PEHEANAM.js} +2 -2
  111. package/dist/cli/chunks/{chunk-J6ZCULWG.js → chunk-PPUDKQ4X.js} +2 -2
  112. package/dist/cli/chunks/{chunk-WPEGG6DX.js → chunk-PSDH7CIL.js} +1 -1
  113. package/dist/cli/chunks/{chunk-NTMN2ZJY.js → chunk-PTPN6HQ7.js} +2 -2
  114. package/dist/cli/chunks/{chunk-C2K4LQI5.js → chunk-PXCJDB7J.js} +1 -1
  115. package/dist/cli/chunks/{chunk-WPG5LXR7.js → chunk-QILF6BZH.js} +2 -2
  116. package/dist/cli/chunks/{chunk-BAHXVVX3.js → chunk-R6WMGSEK.js} +2 -2
  117. package/dist/cli/chunks/{chunk-2PQ7YADF.js → chunk-RE42RJYR.js} +2 -2
  118. package/dist/cli/chunks/{chunk-BWNMAXV7.js → chunk-RLBNAB6Y.js} +1 -1
  119. package/dist/cli/chunks/{chunk-BXIJY6SB.js → chunk-ROFCS47F.js} +1 -1
  120. package/dist/cli/chunks/{chunk-7KK6XSYK.js → chunk-RSZOCQOL.js} +2 -2
  121. package/dist/cli/chunks/{chunk-NEXJUTHF.js → chunk-S47YGWXK.js} +2 -2
  122. package/dist/cli/chunks/{chunk-5H5A74U2.js → chunk-SFS3UHNF.js} +1 -1
  123. package/dist/cli/chunks/{chunk-U5ITD7ZD.js → chunk-SGMJ277D.js} +1 -1
  124. package/dist/cli/chunks/{chunk-OXVAGR64.js → chunk-SPI4LUJ6.js} +2 -2
  125. package/dist/cli/chunks/{chunk-FBYFDD7L.js → chunk-SV7J5FDW.js} +2 -2
  126. package/dist/cli/chunks/{chunk-S42RFOZJ.js → chunk-TP3UAWMB.js} +2 -2
  127. package/dist/cli/chunks/{chunk-OEXSBR72.js → chunk-TXLPOXAN.js} +1 -1
  128. package/dist/cli/chunks/{chunk-R4A6PY5D.js → chunk-UAPUA6OY.js} +2 -2
  129. package/dist/cli/chunks/{chunk-55MQ2SFP.js → chunk-UGW23T6S.js} +2 -2
  130. package/dist/cli/chunks/{chunk-774X6OJY.js → chunk-UGXHMQ6P.js} +2 -2
  131. package/dist/cli/chunks/{chunk-GLO53MUQ.js → chunk-UIHZ34SJ.js} +2 -2
  132. package/dist/cli/chunks/{chunk-TMPRR3FZ.js → chunk-ULQCEM7K.js} +2 -2
  133. package/dist/cli/chunks/{chunk-YNXQMJGJ.js → chunk-UZ7FXVH5.js} +1 -1
  134. package/dist/cli/chunks/{chunk-LAJHHR3Q.js → chunk-VFYMWDSJ.js} +1 -1
  135. package/dist/cli/chunks/{chunk-XS6BIOPQ.js → chunk-VSD6JE2H.js} +2 -2
  136. package/dist/cli/chunks/{chunk-MIAY35K6.js → chunk-VUCVSKJC.js} +2 -2
  137. package/dist/cli/chunks/{chunk-I4BZLVFE.js → chunk-WBZNLFTV.js} +3 -3
  138. package/dist/cli/chunks/{chunk-PDS5P5QD.js → chunk-WFPGIP4N.js} +2 -2
  139. package/dist/cli/chunks/{chunk-PZZDAECU.js → chunk-WKE6WL5C.js} +3 -3
  140. package/dist/cli/chunks/{chunk-VFRWLSQO.js → chunk-WQASUQ5P.js} +1 -1
  141. package/dist/cli/chunks/{chunk-GXMNCW2M.js → chunk-WUE53ZPH.js} +1 -1
  142. package/dist/cli/chunks/{chunk-UBWSYDO5.js → chunk-XBOCRCC6.js} +1 -1
  143. package/dist/cli/chunks/{chunk-HHMTQQUE.js → chunk-XDHGCBTS.js} +2 -2
  144. package/dist/cli/chunks/chunk-XQ5JT7KM.js +3 -0
  145. package/dist/cli/chunks/{chunk-USTUWUCE.js → chunk-XUUVAAHV.js} +2 -2
  146. package/dist/cli/chunks/{chunk-6RX5QZMU.js → chunk-XZGOXLZH.js} +1 -1
  147. package/dist/cli/chunks/{chunk-DQ3J7ZT6.js → chunk-Y5L37K7X.js} +2 -2
  148. package/dist/cli/chunks/{chunk-5HMGDB7B.js → chunk-Y625LP6K.js} +3 -3
  149. package/dist/cli/chunks/{chunk-REJGZP27.js → chunk-Y6XNISHP.js} +2 -2
  150. package/dist/cli/chunks/{chunk-LF5XOYR7.js → chunk-YDYKFSD2.js} +11 -11
  151. package/dist/cli/chunks/{chunk-U55X2ZUM.js → chunk-YEC55GO5.js} +2 -2
  152. package/dist/cli/chunks/{chunk-6ONUCDVL.js → chunk-YOG5KQZF.js} +2 -2
  153. package/dist/cli/chunks/{chunk-6BCVKCG5.js → chunk-YUDGQZJN.js} +2 -2
  154. package/dist/cli/chunks/{chunk-EOBZJDJR.js → chunk-Z3SXMYVI.js} +3 -3
  155. package/dist/cli/chunks/chunk-ZFLE4D4X.js +18 -0
  156. package/dist/cli/chunks/{chunk-W52R3G22.js → chunk-ZGKQCUPB.js} +2 -2
  157. package/dist/cli/chunks/{chunk-MCUILJ33.js → chunk-ZTKCGEB6.js} +1 -1
  158. package/dist/cli/chunks/{ci-IU5HVUL5.js → ci-MMLUV6L6.js} +2 -2
  159. package/dist/cli/chunks/{ci-output-CLI4A43F.js → ci-output-25GS6RXR.js} +2 -2
  160. package/dist/cli/chunks/{circuit-breaker-ZR5OFMW7.js → circuit-breaker-4OWAN6R6.js} +2 -2
  161. package/dist/cli/chunks/{claude-flow-setup-UBMA6ZHJ.js → claude-flow-setup-LR3SRBX6.js} +2 -2
  162. package/dist/cli/chunks/client-WI7RRUZO.js +2 -0
  163. package/dist/cli/chunks/{cline-installer-EWYELOBI.js → cline-installer-YSZWRZUI.js} +2 -2
  164. package/dist/cli/chunks/{code-YSPF4MXN.js → code-UUWUIXI7.js} +2 -2
  165. package/dist/cli/chunks/{code-index-extractor-WW5OKSTN.js → code-index-extractor-2LSPQORU.js} +2 -2
  166. package/dist/cli/chunks/{codex-installer-GLADK5PY.js → codex-installer-E5BVXZVA.js} +2 -2
  167. package/dist/cli/chunks/{completions-2KTWZ3AK.js → completions-YKXBKZSO.js} +2 -2
  168. package/dist/cli/chunks/{complexity-analyzer-KMX4OWKB.js → complexity-analyzer-HNT2QRWB.js} +2 -2
  169. package/dist/cli/chunks/{continuedev-installer-4FHU4OEJ.js → continuedev-installer-AW5VCB66.js} +2 -2
  170. package/dist/cli/chunks/{copilot-installer-AKR4WE7B.js → copilot-installer-B6SVZXQT.js} +2 -2
  171. package/dist/cli/chunks/core-handlers-T6URR57V.js +2 -0
  172. package/dist/cli/chunks/{cost-tracker-BUJ6WEWY.js → cost-tracker-POZMBN2V.js} +2 -2
  173. package/dist/cli/chunks/{coverage-OB6HVQS4.js → coverage-V5BGPN5Q.js} +3 -3
  174. package/dist/cli/chunks/cross-domain-router-WHTTKHWM.js +2 -0
  175. package/dist/cli/chunks/{cursor-installer-3AOE4O3Q.js → cursor-installer-EYBI4QVK.js} +2 -2
  176. package/dist/cli/chunks/{daemon-4RAL5URG.js → daemon-CF6ENQB2.js} +3 -3
  177. package/dist/cli/chunks/{daemon-JGSPLYGO.js → daemon-HKARXY2W.js} +4 -4
  178. package/dist/cli/chunks/{dag-attention-scheduler-DSBTHIMH.js → dag-attention-scheduler-XIL5IAP7.js} +2 -2
  179. package/dist/cli/chunks/{detect-6CVW2VUQ.js → detect-RRX2U2KK.js} +2 -2
  180. package/dist/cli/chunks/{dist-node-EWPKBTYA.js → dist-node-DOANNRCS.js} +2 -2
  181. package/dist/cli/chunks/{domain-handler-HLVIJU25.js → domain-handler-QMTJV5OR.js} +2 -2
  182. package/dist/cli/chunks/{domain-transfer-7Y3BR3YU.js → domain-transfer-FSNH75XW.js} +2 -2
  183. package/dist/cli/chunks/dream-QUL6SURC.js +2 -0
  184. package/dist/cli/chunks/{embed-and-insert-pattern-ZMJ3263X.js → embed-and-insert-pattern-NI7PGONV.js} +2 -2
  185. package/dist/cli/chunks/eval-6ZAF2RY3.js +17 -0
  186. package/dist/cli/chunks/{experience-capture-middleware-OGJ3JOSQ.js → experience-capture-middleware-JMXR7N5G.js} +3 -3
  187. package/dist/cli/chunks/{fast-paths-5XCY3Y6U.js → fast-paths-YB7XZZ76.js} +2 -2
  188. package/dist/cli/chunks/{feature-flags-R5V2FRJR.js → feature-flags-2RC4GFC4.js} +2 -2
  189. package/dist/cli/chunks/{feature-flags-VULQI6KY.js → feature-flags-KJSP7KR6.js} +2 -2
  190. package/dist/cli/chunks/{file-discovery-HW33C3HC.js → file-discovery-SUPBXFYI.js} +2 -2
  191. package/dist/cli/chunks/{fleet-NH3XR5OY.js → fleet-KSXFOLFW.js} +3 -3
  192. package/dist/cli/chunks/{gnn-wrapper-L3XMLPTG.js → gnn-wrapper-DFZ5KPPK.js} +2 -2
  193. package/dist/cli/chunks/{heartbeat-handler-TIQFBT4D.js → heartbeat-handler-G3EADK2H.js} +4 -4
  194. package/dist/cli/chunks/heartbeat-scheduler-VZNKE33K.js +2 -0
  195. package/dist/cli/chunks/hnsw-adapter-LGWLDZLC.js +2 -0
  196. package/dist/cli/chunks/hnsw-index-66FOOI7U.js +2 -0
  197. package/dist/cli/chunks/{hnsw-legacy-bridge-YL2SUIPA.js → hnsw-legacy-bridge-MA676GER.js} +2 -2
  198. package/dist/cli/chunks/{better-sqlite3-IPKCAVLS.js → hnswlib-node-SKTT5KIH.js} +2 -2
  199. package/dist/cli/chunks/{hooks-UR2ZF54G.js → hooks-HTCPMZNZ.js} +10 -10
  200. package/dist/cli/chunks/hybrid-router-I5MEVQDF.js +2 -0
  201. package/dist/cli/chunks/{hypergraph-engine-NX45AOPY.js → hypergraph-engine-QPB3IH4A.js} +2 -2
  202. package/dist/cli/chunks/{hypergraph-handler-LUM4YI4K.js → hypergraph-handler-GBFSVD7N.js} +3 -3
  203. package/dist/cli/chunks/impact-analyzer-K6ANYIY3.js +2 -0
  204. package/dist/cli/chunks/{init-handler-YTKKNTVV.js → init-handler-XYBTBCPD.js} +6 -6
  205. package/dist/cli/chunks/init-wizard-URHGXJ32.js +2 -0
  206. package/dist/cli/chunks/kernel-OKI5ZY5P.js +2 -0
  207. package/dist/cli/chunks/{kilocode-installer-ZW7DVH7T.js → kilocode-installer-LY6JOBFY.js} +2 -2
  208. package/dist/cli/chunks/{kiro-installer-IA7INW4N.js → kiro-installer-JF6NXTJL.js} +2 -2
  209. package/dist/cli/chunks/knowledge-graph-VQQSK7T5.js +2 -0
  210. package/dist/cli/chunks/{learning-4AZ5PGTT.js → learning-BIISN67N.js} +3 -3
  211. package/dist/cli/chunks/{llm-router-WQ4E3AOP.js → llm-router-YZUNVZQE.js} +5 -5
  212. package/dist/cli/chunks/llm-router-service-TISH33SY.js +2 -0
  213. package/dist/cli/chunks/{load-4FAH7CZO.js → load-MTWNBNLL.js} +2 -2
  214. package/dist/cli/chunks/load-test-KWKWC4Q7.js +2 -0
  215. package/dist/cli/chunks/{mcp-KLLHI6DG.js → mcp-37PYMNHQ.js} +2 -2
  216. package/dist/cli/chunks/{memory-Q5HLIUC6.js → memory-IXUUDCI3.js} +5 -5
  217. package/dist/cli/chunks/memory-backend-JSQQMXVS.js +2 -0
  218. package/dist/cli/chunks/memory-handlers-RM2VOFJX.js +2 -0
  219. package/dist/cli/chunks/{multi-model-executor-ABI73AFV.js → multi-model-executor-RKKS5XYG.js} +2 -2
  220. package/dist/cli/chunks/{opencode-installer-KRPQ6JOJ.js → opencode-installer-3VXI5MTR.js} +2 -2
  221. package/dist/cli/chunks/{orchestrator-SUPEONRG.js → orchestrator-UO3ZOGFZ.js} +5 -5
  222. package/dist/cli/chunks/pattern-null-store-SXBIUKE5.js +2 -0
  223. package/dist/cli/chunks/{pattern-usage-recorder-R4GKK6RZ.js → pattern-usage-recorder-YJKRL2GI.js} +2 -2
  224. package/dist/cli/chunks/{pipeline-LCUETNGD.js → pipeline-GJQJKXWX.js} +2 -2
  225. package/dist/cli/chunks/{platform-WJDIB4X3.js → platform-RHVCZK6C.js} +2 -2
  226. package/dist/cli/chunks/{plugin-2X5NY2RF.js → plugin-ZKAIW7O6.js} +2 -2
  227. package/dist/cli/chunks/{prime-radiant-advanced-wasm-3T665QC6.js → prime-radiant-advanced-wasm-4X3DSKQV.js} +2 -2
  228. package/dist/cli/chunks/protocol-executor-D3Q5P3WY.js +2 -0
  229. package/dist/cli/chunks/{protocol-handler-JTXRF7GU.js → protocol-handler-KKYQZMB2.js} +2 -2
  230. package/dist/cli/chunks/{prove-BFPWWPOC.js → prove-OD6RPKWX.js} +2 -2
  231. package/dist/cli/chunks/provider-manager-2EIX7E5Q.js +2 -0
  232. package/dist/cli/chunks/qe-reasoning-bank-ITOW2ZHC.js +2 -0
  233. package/dist/cli/chunks/{quality-F7UZU4RN.js → quality-ZRWBXCKO.js} +2 -2
  234. package/dist/cli/chunks/{quality-gate-R5L4UZIX.js → quality-gate-Y6BWQV7J.js} +3 -3
  235. package/dist/cli/chunks/queen-coordinator-TO5X2EXL.js +2 -0
  236. package/dist/cli/chunks/{real-embeddings-LZD6HTQF.js → real-embeddings-YYEUO4P2.js} +2 -2
  237. package/dist/cli/chunks/{roocode-installer-6TTG7VSH.js → roocode-installer-JBCPS3FK.js} +2 -2
  238. package/dist/cli/chunks/router-GZJQEJU3.js +2 -0
  239. package/dist/cli/chunks/routing-feedback-CRXSKFNS.js +2 -0
  240. package/dist/cli/chunks/{routing-handler-SW442GK7.js → routing-handler-KTPJOSBJ.js} +2 -2
  241. package/dist/cli/chunks/{ruvector-commands-CLFGKXMW.js → ruvector-commands-SCZZVRE7.js} +2 -2
  242. package/dist/cli/chunks/{rvf-dual-writer-EVPPXXXS.js → rvf-dual-writer-IP7GELQJ.js} +2 -2
  243. package/dist/cli/chunks/{rvf-migration-adapter-NOHDIRIP.js → rvf-migration-adapter-WLFTDARU.js} +2 -2
  244. package/dist/cli/chunks/{rvf-migration-coordinator-BYJ3M7WZ.js → rvf-migration-coordinator-MGFDQ5WD.js} +2 -2
  245. package/dist/cli/chunks/rvf-native-adapter-WHADT5HX.js +2 -0
  246. package/dist/cli/chunks/rvf-store-integrity-OTOAGT5W.js +2 -0
  247. package/dist/cli/chunks/safe-db-MIZ2OFWC.js +2 -0
  248. package/dist/cli/chunks/schedule-XFILYTYC.js +2 -0
  249. package/dist/cli/chunks/scheduler-EIPJ777A.js +2 -0
  250. package/dist/cli/chunks/{security-IXDKBPSG.js → security-B2CLZKRB.js} +3 -3
  251. package/dist/cli/chunks/shared-rvf-adapter-2PMFAQMN.js +2 -0
  252. package/dist/cli/chunks/{shared-rvf-dual-writer-FFKBKYNL.js → shared-rvf-dual-writer-B6P732AV.js} +2 -2
  253. package/dist/cli/chunks/sqlite-persistence-PFU3GSRD.js +2 -0
  254. package/dist/cli/chunks/status-handler-M6SN2W2D.js +47 -0
  255. package/dist/cli/chunks/{structural-health-55X6BTLT.js → structural-health-YCCTGI3K.js} +2 -2
  256. package/dist/cli/chunks/{sync-BUGDXW3Y.js → sync-3SDMVAIU.js} +2 -2
  257. package/dist/cli/chunks/{sync-NUG67HGK.js → sync-KSRF77ID.js} +2 -2
  258. package/dist/cli/chunks/{task-handler-T6ZKXV4S.js → task-handler-MIKRB2SL.js} +2 -2
  259. package/dist/cli/chunks/{task-handlers-H63TB2UI.js → task-handlers-YXKRUBQ4.js} +3 -3
  260. package/dist/cli/chunks/{test-VEK76SBT.js → test-MLOLQCB7.js} +4 -4
  261. package/dist/cli/chunks/{test-scheduling-QZM6PNZH.js → test-scheduling-3KXESUZS.js} +3 -3
  262. package/dist/cli/chunks/token-bootstrap-6V2PMDBJ.js +2 -0
  263. package/dist/cli/chunks/{token-usage-OBY6UEUR.js → token-usage-DP6THJ3I.js} +2 -2
  264. package/dist/cli/chunks/{transformers-EFNY2MRX.js → transformers-QFOBOP2Y.js} +2 -2
  265. package/dist/cli/chunks/{tree-sitter-wasm-parser-EU2S5NVM.js → tree-sitter-wasm-parser-COK2XERS.js} +2 -2
  266. package/dist/cli/chunks/{types-3DYRKX23.js → types-PYHUCVOZ.js} +2 -2
  267. package/dist/cli/chunks/unified-memory-OUVCMFGK.js +2 -0
  268. package/dist/cli/chunks/unified-memory-hnsw-YGQPOHXB.js +2 -0
  269. package/dist/cli/chunks/unified-persistence-GFRZVDOW.js +2 -0
  270. package/dist/cli/chunks/{upgrade-H5V53FRF.js → upgrade-ONP2HNGL.js} +2 -2
  271. package/dist/cli/chunks/{validate-IL22VB5I.js → validate-NWSICDAY.js} +2 -2
  272. package/dist/cli/chunks/{validate-swarm-WZKECK3W.js → validate-swarm-KXS5P3U7.js} +2 -2
  273. package/dist/cli/chunks/{vibium-KKM23OTQ.js → vibium-TZSGZRCQ.js} +2 -2
  274. package/dist/cli/chunks/visual-security-LVOOYQ64.js +2 -0
  275. package/dist/cli/chunks/{web-tree-sitter-NJM5YBOY.js → web-tree-sitter-V2FADNRA.js} +2 -2
  276. package/dist/cli/chunks/{windsurf-installer-SLP43TVT.js → windsurf-installer-GQM7KWDC.js} +2 -2
  277. package/dist/cli/chunks/{witness-chain-XBEPT4XD.js → witness-chain-GTITDIA2.js} +2 -2
  278. package/dist/cli/chunks/witness-chain-QNFPV4UL.js +2 -0
  279. package/dist/cli/chunks/{witness-key-manager-DAAMNYOW.js → witness-key-manager-AHRM2M52.js} +2 -2
  280. package/dist/cli/chunks/{workflow-SZOOU6D3.js → workflow-XCGHEL3I.js} +4 -4
  281. package/dist/cli/chunks/workflow-orchestrator-MIVBCALG.js +2 -0
  282. package/dist/cli/chunks/{wrappers-I2CBKWGF.js → wrappers-VGO2GO4J.js} +2 -2
  283. package/dist/cli/commands/eval.js +73 -3
  284. package/dist/cli/commands/llm-router.js +2 -0
  285. package/dist/cli/handlers/status-handler.d.ts +5 -0
  286. package/dist/cli/handlers/status-handler.js +35 -0
  287. package/dist/coordination/consensus/providers/index.js +11 -0
  288. package/dist/integrations/ruvector/brain-rvf-exporter.js +115 -13
  289. package/dist/integrations/ruvector/rvf-dual-writer.js +20 -3
  290. package/dist/integrations/ruvector/rvf-store-integrity.d.ts +49 -0
  291. package/dist/integrations/ruvector/rvf-store-integrity.js +137 -0
  292. package/dist/integrations/ruvector/shared-rvf-adapter.js +23 -5
  293. package/dist/learning/pattern-store.js +23 -5
  294. package/dist/learning/qe-flywheel/platform-signer.d.ts +32 -0
  295. package/dist/learning/qe-flywheel/platform-signer.js +60 -0
  296. package/dist/learning/qe-flywheel/receipt.js +9 -2
  297. package/dist/mcp/bundle.js +425 -406
  298. package/dist/shared/llm/billing-modes.d.ts +24 -0
  299. package/dist/shared/llm/billing-modes.js +56 -0
  300. package/dist/shared/llm/cost-tracker.js +2 -0
  301. package/dist/shared/llm/interfaces.d.ts +61 -3
  302. package/dist/shared/llm/provider-manager.d.ts +34 -0
  303. package/dist/shared/llm/provider-manager.js +152 -3
  304. package/dist/shared/llm/providers/claude-code.d.ts +57 -0
  305. package/dist/shared/llm/providers/claude-code.js +312 -0
  306. package/dist/shared/llm/providers/cognitum.d.ts +64 -0
  307. package/dist/shared/llm/providers/cognitum.js +369 -0
  308. package/dist/shared/llm/providers/index.d.ts +2 -0
  309. package/dist/shared/llm/providers/index.js +2 -0
  310. package/dist/shared/llm/router/config-store.d.ts +31 -11
  311. package/dist/shared/llm/router/config-store.js +82 -12
  312. package/dist/shared/llm/router/hybrid-router.js +16 -0
  313. package/dist/shared/llm/router/types.js +7 -0
  314. package/dist/shared/llm/spend-ledger.d.ts +64 -0
  315. package/dist/shared/llm/spend-ledger.js +115 -0
  316. package/dist/shared/llm/translation/message-formatter.js +2 -0
  317. package/dist/shared/llm/translation/prompt-translator.js +2 -0
  318. package/dist/shared/llm/translation/tool-translator.js +2 -0
  319. package/dist/validation/index.d.ts +1 -0
  320. package/dist/validation/index.js +2 -0
  321. package/dist/validation/provider-llm-executor.d.ts +45 -0
  322. package/dist/validation/provider-llm-executor.js +98 -0
  323. package/package.json +2 -2
  324. package/dist/cli/chunks/adapter-X4UEC6UJ.js +0 -2
  325. package/dist/cli/chunks/aqe-learning-engine-5FG7JCY7.js +0 -2
  326. package/dist/cli/chunks/base-CWPMFSZG.js +0 -2
  327. package/dist/cli/chunks/brain-handler-JF3OK35F.js +0 -89
  328. package/dist/cli/chunks/browser-workflow-A77OFBVY.js +0 -2
  329. package/dist/cli/chunks/chunk-CDVKFAYP.js +0 -18
  330. package/dist/cli/chunks/chunk-CJTXZI37.js +0 -2
  331. package/dist/cli/chunks/chunk-FNMEVLSN.js +0 -2
  332. package/dist/cli/chunks/chunk-P7G5LGUE.js +0 -3
  333. package/dist/cli/chunks/chunk-R7XEACKR.js +0 -2
  334. package/dist/cli/chunks/chunk-RAS7WRN5.js +0 -24
  335. package/dist/cli/chunks/chunk-TGIKKD43.js +0 -9
  336. package/dist/cli/chunks/client-KKCFGD7R.js +0 -2
  337. package/dist/cli/chunks/core-handlers-KRSSJEO5.js +0 -2
  338. package/dist/cli/chunks/cross-domain-router-27QGWU27.js +0 -2
  339. package/dist/cli/chunks/dream-M6K47Q4H.js +0 -2
  340. package/dist/cli/chunks/eval-73XW2WJD.js +0 -15
  341. package/dist/cli/chunks/heartbeat-scheduler-URXBF5RW.js +0 -2
  342. package/dist/cli/chunks/hnsw-adapter-WWAGM6HK.js +0 -2
  343. package/dist/cli/chunks/hnsw-index-UFV2HSZE.js +0 -2
  344. package/dist/cli/chunks/hybrid-router-3U6Q6OTL.js +0 -2
  345. package/dist/cli/chunks/impact-analyzer-EUEX6ZRO.js +0 -2
  346. package/dist/cli/chunks/init-wizard-POKY2LRY.js +0 -2
  347. package/dist/cli/chunks/kernel-HPAONLZY.js +0 -2
  348. package/dist/cli/chunks/knowledge-graph-2WCUFG63.js +0 -2
  349. package/dist/cli/chunks/llm-router-service-D5VMG6SD.js +0 -2
  350. package/dist/cli/chunks/load-test-DHG26REU.js +0 -2
  351. package/dist/cli/chunks/memory-backend-GLWQ4DAL.js +0 -2
  352. package/dist/cli/chunks/memory-handlers-P72I4VV4.js +0 -2
  353. package/dist/cli/chunks/pattern-null-store-Y2YFTE3V.js +0 -2
  354. package/dist/cli/chunks/protocol-executor-HNT67NN5.js +0 -2
  355. package/dist/cli/chunks/provider-manager-5YGPZIEZ.js +0 -2
  356. package/dist/cli/chunks/qe-reasoning-bank-Z5UGOA3F.js +0 -2
  357. package/dist/cli/chunks/queen-coordinator-P5LU5NWI.js +0 -2
  358. package/dist/cli/chunks/router-CRGHUAVR.js +0 -2
  359. package/dist/cli/chunks/routing-feedback-BVX5ZBCF.js +0 -2
  360. package/dist/cli/chunks/rvf-native-adapter-FZJSQOJM.js +0 -2
  361. package/dist/cli/chunks/safe-db-USYNEOC6.js +0 -2
  362. package/dist/cli/chunks/schedule-KCRCQ3PS.js +0 -2
  363. package/dist/cli/chunks/scheduler-CX3UHI4U.js +0 -2
  364. package/dist/cli/chunks/shared-rvf-adapter-VCOK3OVD.js +0 -2
  365. package/dist/cli/chunks/sqlite-persistence-K23C4TFH.js +0 -2
  366. package/dist/cli/chunks/status-handler-M5W64S5U.js +0 -46
  367. package/dist/cli/chunks/token-bootstrap-W5IAMJW4.js +0 -2
  368. package/dist/cli/chunks/unified-memory-NCDBQLLF.js +0 -2
  369. package/dist/cli/chunks/unified-memory-hnsw-T7NSGQ2H.js +0 -2
  370. package/dist/cli/chunks/unified-persistence-XUAYDCMM.js +0 -2
  371. package/dist/cli/chunks/visual-security-3TUC4GPP.js +0 -2
  372. package/dist/cli/chunks/witness-chain-QLOKUZXC.js +0 -2
  373. package/dist/cli/chunks/workflow-orchestrator-6JAYTZ7L.js +0 -2
@@ -0,0 +1,312 @@
1
+ /**
2
+ * Agentic QE v3 — Claude Code (subscription) Provider (ADR-123, issue #557)
3
+ *
4
+ * Runs QE analysis on the user's Claude Pro/Max subscription by shelling out
5
+ * to the Claude Code CLI (`claude -p --output-format json`) instead of calling
6
+ * `api.anthropic.com` with a paid API key. The CLI authenticates with the
7
+ * user's existing OAuth login and draws from the subscription's shared usage
8
+ * allowance, so the worst case is "hit the plan rate limit and pause" rather
9
+ * than a surprise per-token bill.
10
+ *
11
+ * LOAD-BEARING: the child process env has ANTHROPIC_API_KEY / CLAUDE_API_KEY /
12
+ * ANTHROPIC_AUTH_TOKEN stripped. If any is present, the CLI silently reverts
13
+ * to API-key billing and this provider would be a lie. `parity` test coverage
14
+ * asserts the strip.
15
+ */
16
+ import { spawn } from 'node:child_process';
17
+ import { createLLMError, } from '../interfaces';
18
+ import { TokenMetricsCollector } from '../../../learning/token-tracker.js';
19
+ /** Env vars whose presence flips the CLI from subscription to API billing. */
20
+ export const API_BILLING_ENV_VARS = [
21
+ 'ANTHROPIC_API_KEY',
22
+ 'CLAUDE_API_KEY',
23
+ 'ANTHROPIC_AUTH_TOKEN',
24
+ ];
25
+ export const DEFAULT_CLAUDE_CODE_CONFIG = {
26
+ model: 'sonnet',
27
+ maxTokens: 4096,
28
+ temperature: 0.7,
29
+ timeoutMs: 120000,
30
+ maxRetries: 1,
31
+ binaryPath: 'claude',
32
+ maxConcurrency: 2,
33
+ disallowedTools: ['Bash', 'Edit', 'Write', 'NotebookEdit', 'WebFetch', 'WebSearch', 'Task'],
34
+ };
35
+ export class ClaudeCodeProvider {
36
+ type = 'claude-code';
37
+ name = 'Claude Code (subscription)';
38
+ billingMode = 'subscription';
39
+ config;
40
+ requestId = 0;
41
+ availabilityCache;
42
+ active = 0;
43
+ queue = [];
44
+ constructor(config = {}) {
45
+ this.config = { ...DEFAULT_CLAUDE_CODE_CONFIG, ...config };
46
+ const envConc = Number.parseInt(process.env.AQE_CLAUDE_CODE_CONCURRENCY ?? '', 10);
47
+ if (Number.isFinite(envConc) && envConc > 0) {
48
+ this.config.maxConcurrency = envConc;
49
+ }
50
+ }
51
+ async isAvailable() {
52
+ // Cache for 60s — spawning `claude --version` per call is wasteful.
53
+ const now = Date.now();
54
+ if (this.availabilityCache && now - this.availabilityCache.at < 60_000) {
55
+ return this.availabilityCache.available;
56
+ }
57
+ let available = false;
58
+ try {
59
+ const { code } = await this.runProcess(['--version'], undefined, 5000);
60
+ available = code === 0;
61
+ }
62
+ catch {
63
+ available = false;
64
+ }
65
+ this.availabilityCache = { at: now, available };
66
+ return available;
67
+ }
68
+ async healthCheck() {
69
+ const start = Date.now();
70
+ const available = await this.isAvailable();
71
+ const latencyMs = Date.now() - start;
72
+ if (!available) {
73
+ return {
74
+ healthy: false,
75
+ latencyMs,
76
+ error: `Claude Code CLI ("${this.config.binaryPath}") not found or not runnable. ` +
77
+ `Install Claude Code and log in with your Pro/Max account.`,
78
+ };
79
+ }
80
+ return {
81
+ healthy: true,
82
+ latencyMs,
83
+ models: this.getSupportedModels(),
84
+ details: { binaryPath: this.config.binaryPath, billing: 'subscription' },
85
+ };
86
+ }
87
+ async generate(input, options) {
88
+ const model = this.toCliModel(options?.model ?? this.config.model);
89
+ const requestId = `claude-code-${++this.requestId}-${Date.now()}`;
90
+ const { prompt, systemPrompt } = this.flatten(input, options?.systemPrompt);
91
+ const args = ['-p', '--output-format', 'json', '--model', model];
92
+ if (systemPrompt) {
93
+ args.push('--append-system-prompt', systemPrompt);
94
+ }
95
+ const disallowed = this.config.disallowedTools ?? [];
96
+ if (disallowed.length > 0) {
97
+ args.push('--disallowedTools', ...disallowed);
98
+ }
99
+ const start = Date.now();
100
+ const timeoutMs = options?.timeoutMs ?? this.config.timeoutMs ?? 120000;
101
+ const { code, stdout, stderr } = await this.withConcurrency(() => this.runProcess(args, prompt, timeoutMs));
102
+ const latencyMs = Date.now() - start;
103
+ if (code !== 0 && !stdout.trim()) {
104
+ throw this.classifyError(stderr || `claude exited with code ${code}`, model);
105
+ }
106
+ let data;
107
+ try {
108
+ data = JSON.parse(stdout);
109
+ }
110
+ catch {
111
+ throw createLLMError(`Could not parse claude -p JSON output: ${stdout.slice(0, 200)}`, 'PROVIDER_UNAVAILABLE', { provider: 'claude-code', model, retryable: true });
112
+ }
113
+ if (data.is_error) {
114
+ throw this.classifyError(data.result ?? data.api_error_status ?? 'claude error', model);
115
+ }
116
+ const u = data.usage ?? {};
117
+ const usage = {
118
+ promptTokens: u.input_tokens ?? 0,
119
+ completionTokens: u.output_tokens ?? 0,
120
+ totalTokens: (u.input_tokens ?? 0) + (u.output_tokens ?? 0),
121
+ cacheCreationTokens: u.cache_creation_input_tokens ?? 0,
122
+ cacheReadTokens: u.cache_read_input_tokens ?? 0,
123
+ };
124
+ // The concrete model that actually served the request (modelUsage key).
125
+ const resolvedModel = (data.modelUsage && Object.keys(data.modelUsage)[0]) || model;
126
+ TokenMetricsCollector.recordTokenUsage(requestId, 'claude-code-provider', 'llm', 'generate', {
127
+ inputTokens: usage.promptTokens,
128
+ outputTokens: usage.completionTokens,
129
+ totalTokens: usage.totalTokens,
130
+ // Subscription: no marginal API charge. total_cost_usd is the
131
+ // API-equivalent figure, recorded for visibility only, not billed.
132
+ estimatedCostUsd: 0,
133
+ });
134
+ return {
135
+ content: data.result ?? '',
136
+ model: resolvedModel,
137
+ provider: 'claude-code',
138
+ usage,
139
+ // Subscription billing: marginal monetary cost is $0. The figure is
140
+ // authoritative (we know the subscription doesn't bill per token), so
141
+ // it's a provider receipt, not a local estimate.
142
+ cost: { inputCost: 0, outputCost: 0, totalCost: 0, currency: 'USD', source: 'provider-receipt' },
143
+ latencyMs,
144
+ finishReason: this.mapFinishReason(data.stop_reason),
145
+ cached: false,
146
+ requestId,
147
+ };
148
+ }
149
+ async embed(_text, _options) {
150
+ throw createLLMError('Claude Code provider does not support embeddings. Use openai, ollama, or cognitum.', 'MODEL_NOT_FOUND', { provider: 'claude-code', retryable: false });
151
+ }
152
+ async complete(prompt, options) {
153
+ const response = await this.generate(prompt, {
154
+ model: options?.model,
155
+ temperature: options?.temperature ?? 0.2,
156
+ maxTokens: options?.maxTokens ?? 256,
157
+ });
158
+ return {
159
+ completion: response.content,
160
+ model: response.model,
161
+ provider: 'claude-code',
162
+ usage: response.usage,
163
+ latencyMs: response.latencyMs,
164
+ cached: response.cached,
165
+ };
166
+ }
167
+ getConfig() {
168
+ return { ...this.config };
169
+ }
170
+ getSupportedModels() {
171
+ return ['opus', 'sonnet', 'haiku'];
172
+ }
173
+ getCostPerToken() {
174
+ // Subscription — no per-token monetary cost.
175
+ return { input: 0, output: 0 };
176
+ }
177
+ async dispose() {
178
+ // No persistent resources.
179
+ }
180
+ // -- internals -------------------------------------------------------------
181
+ /** Map an AQE canonical/model id to a CLI alias the `claude` binary accepts. */
182
+ toCliModel(model) {
183
+ const m = model.toLowerCase();
184
+ if (m.includes('opus'))
185
+ return 'opus';
186
+ if (m.includes('haiku'))
187
+ return 'haiku';
188
+ if (m.includes('sonnet'))
189
+ return 'sonnet';
190
+ return model;
191
+ }
192
+ flatten(input, systemPromptOpt) {
193
+ if (typeof input === 'string') {
194
+ return { prompt: input, systemPrompt: systemPromptOpt };
195
+ }
196
+ const systemParts = input.filter((m) => m.role === 'system').map((m) => m.content);
197
+ if (systemPromptOpt)
198
+ systemParts.unshift(systemPromptOpt);
199
+ const convo = input
200
+ .filter((m) => m.role !== 'system')
201
+ .map((m) => `${m.role === 'assistant' ? 'Assistant' : 'User'}: ${m.content}`)
202
+ .join('\n\n');
203
+ return {
204
+ prompt: convo,
205
+ systemPrompt: systemParts.length > 0 ? systemParts.join('\n\n') : undefined,
206
+ };
207
+ }
208
+ mapFinishReason(reason) {
209
+ switch (reason) {
210
+ case 'max_tokens':
211
+ return 'length';
212
+ case 'end_turn':
213
+ case 'stop_sequence':
214
+ default:
215
+ return 'stop';
216
+ }
217
+ }
218
+ classifyError(message, model) {
219
+ const lower = message.toLowerCase();
220
+ if (lower.includes('rate limit') ||
221
+ lower.includes('usage limit') ||
222
+ lower.includes('429') ||
223
+ lower.includes('quota')) {
224
+ // The *desired* failure mode: plan limit reached → pause and retry later.
225
+ return createLLMError(message, 'RATE_LIMITED', {
226
+ provider: 'claude-code',
227
+ model,
228
+ retryable: true,
229
+ retryAfterMs: 60_000,
230
+ });
231
+ }
232
+ return createLLMError(message, 'PROVIDER_UNAVAILABLE', {
233
+ provider: 'claude-code',
234
+ model,
235
+ retryable: true,
236
+ });
237
+ }
238
+ /**
239
+ * Build the child env with API-billing keys stripped (LOAD-BEARING).
240
+ * Exported logic tested by parity/env-strip tests.
241
+ */
242
+ static childEnv(base = process.env) {
243
+ const env = { ...base };
244
+ for (const key of API_BILLING_ENV_VARS) {
245
+ delete env[key];
246
+ }
247
+ return env;
248
+ }
249
+ runProcess(args, stdin, timeoutMs) {
250
+ return new Promise((resolve, reject) => {
251
+ const child = spawn(this.config.binaryPath ?? 'claude', args, {
252
+ env: ClaudeCodeProvider.childEnv(),
253
+ stdio: ['pipe', 'pipe', 'pipe'],
254
+ });
255
+ let stdout = '';
256
+ let stderr = '';
257
+ let settled = false;
258
+ const timer = setTimeout(() => {
259
+ if (settled)
260
+ return;
261
+ settled = true;
262
+ child.kill('SIGKILL');
263
+ reject(createLLMError('claude -p timed out', 'TIMEOUT', {
264
+ provider: 'claude-code',
265
+ retryable: true,
266
+ }));
267
+ }, timeoutMs);
268
+ child.stdout.on('data', (d) => (stdout += d.toString()));
269
+ child.stderr.on('data', (d) => (stderr += d.toString()));
270
+ child.on('error', (err) => {
271
+ if (settled)
272
+ return;
273
+ settled = true;
274
+ clearTimeout(timer);
275
+ reject(createLLMError(`Failed to spawn claude: ${err.message}`, 'PROVIDER_UNAVAILABLE', {
276
+ provider: 'claude-code',
277
+ retryable: false,
278
+ cause: err,
279
+ }));
280
+ });
281
+ child.on('close', (code) => {
282
+ if (settled)
283
+ return;
284
+ settled = true;
285
+ clearTimeout(timer);
286
+ resolve({ code: code ?? 0, stdout, stderr });
287
+ });
288
+ if (stdin !== undefined) {
289
+ child.stdin.write(stdin);
290
+ }
291
+ child.stdin.end();
292
+ });
293
+ }
294
+ /** Simple semaphore so we don't spawn unbounded `claude` subprocesses. */
295
+ async withConcurrency(fn) {
296
+ const limit = this.config.maxConcurrency ?? 2;
297
+ if (this.active >= limit) {
298
+ await new Promise((resolve) => this.queue.push(resolve));
299
+ }
300
+ this.active++;
301
+ try {
302
+ return await fn();
303
+ }
304
+ finally {
305
+ this.active--;
306
+ const next = this.queue.shift();
307
+ if (next)
308
+ next();
309
+ }
310
+ }
311
+ }
312
+ //# sourceMappingURL=claude-code.js.map
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Agentic QE v3 — Cognitum Provider (ADR-123)
3
+ *
4
+ * api.cognitum.one is an OpenAI-compatible (and Anthropic-compatible) LLM
5
+ * gateway with two properties that matter for issue #557:
6
+ * 1. Every response carries an `x_cognitum` receipt with an authoritative
7
+ * per-request `price_usd` — so cost is a provider receipt, not a local
8
+ * price-table estimate.
9
+ * 2. It enforces a server-side hard spend cap (`/v1/usage` → `hardCapUsd`),
10
+ * so the worst case is "provider pauses at the cap", not a surprise bill.
11
+ *
12
+ * Models are tiers (`cognitum-auto|low|mid|high`); the gateway resolves each
13
+ * to a concrete model and reports it back in the receipt (`resolved_model`).
14
+ */
15
+ import { LLMProvider, LLMProviderType, BillingMode, CognitumConfig, Message, GenerateOptions, EmbedOptions, CompleteOptions, LLMResponse, EmbeddingResponse, CompletionResponse, HealthCheckResult } from '../interfaces';
16
+ export type { CognitumConfig };
17
+ export declare const DEFAULT_COGNITUM_CONFIG: CognitumConfig;
18
+ /** Server-side budget snapshot from GET /v1/usage. */
19
+ export interface CognitumBudget {
20
+ servingBudgetUsd: number;
21
+ hardCapUsd: number;
22
+ committedUsd: number;
23
+ headroomUsd: number;
24
+ status: string;
25
+ headroomExhausted: boolean;
26
+ }
27
+ export declare class CognitumProvider implements LLMProvider {
28
+ readonly type: LLMProviderType;
29
+ readonly name: string;
30
+ readonly billingMode: BillingMode;
31
+ private config;
32
+ private requestId;
33
+ constructor(config?: Partial<CognitumConfig>);
34
+ isAvailable(): Promise<boolean>;
35
+ healthCheck(): Promise<HealthCheckResult>;
36
+ generate(input: string | Message[], options?: GenerateOptions): Promise<LLMResponse>;
37
+ embed(text: string, options?: EmbedOptions): Promise<EmbeddingResponse>;
38
+ complete(prompt: string, options?: CompleteOptions): Promise<CompletionResponse>;
39
+ getConfig(): CognitumConfig;
40
+ getSupportedModels(): string[];
41
+ getCostPerToken(): {
42
+ input: number;
43
+ output: number;
44
+ };
45
+ dispose(): Promise<void>;
46
+ /**
47
+ * ADR-123: read the provider's server-side budget so `aqe health` and the
48
+ * billing notice can show real remaining headroom. Returns undefined on any
49
+ * failure (best-effort — never throws).
50
+ */
51
+ getRemoteBudget(): Promise<CognitumBudget | undefined>;
52
+ /** Build a CostInfo from the authoritative receipt price. */
53
+ private receiptCost;
54
+ private getApiKey;
55
+ private getBaseUrl;
56
+ private getHeaders;
57
+ private formatMessages;
58
+ private mapFinishReason;
59
+ private toApiError;
60
+ private fetchWithTimeout;
61
+ private fetchWithRetry;
62
+ private sleep;
63
+ }
64
+ //# sourceMappingURL=cognitum.d.ts.map