@shareai-lab/kode 2.0.2 → 2.0.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 (343) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +649 -25
  3. package/README.zh-CN.md +579 -0
  4. package/cli-acp.js +3 -17
  5. package/cli.js +5 -7
  6. package/dist/chunks/Doctor-M3J7GRTJ.js +12 -0
  7. package/dist/chunks/LogList-ISWZ6DDD.js +121 -0
  8. package/dist/chunks/LogList-ISWZ6DDD.js.map +7 -0
  9. package/dist/chunks/REPL-RQ6LO6S7.js +56 -0
  10. package/dist/chunks/ResumeConversation-6DMVBEGH.js +56 -0
  11. package/dist/chunks/agentLoader-FCRG3TFJ.js +31 -0
  12. package/dist/{agentsValidate-XP3CFN6F.js → chunks/agentsValidate-PEWMYN4Q.js} +97 -69
  13. package/dist/chunks/agentsValidate-PEWMYN4Q.js.map +7 -0
  14. package/dist/{ask-3G5H5KD5.js → chunks/ask-D7SOHJ6Z.js} +36 -44
  15. package/dist/chunks/ask-D7SOHJ6Z.js.map +7 -0
  16. package/dist/chunks/autoUpdater-CNESBOKO.js +19 -0
  17. package/dist/{chunk-EH34V7CY.js → chunks/chunk-2JN5MY67.js} +12 -14
  18. package/dist/chunks/chunk-2JN5MY67.js.map +7 -0
  19. package/dist/chunks/chunk-2QONJ5MG.js +14 -0
  20. package/dist/chunks/chunk-2QONJ5MG.js.map +7 -0
  21. package/dist/chunks/chunk-2WEXPKHH.js +903 -0
  22. package/dist/chunks/chunk-2WEXPKHH.js.map +7 -0
  23. package/dist/{chunk-K2MI4TPB.js → chunks/chunk-3BYE3ME6.js} +717 -792
  24. package/dist/chunks/chunk-3BYE3ME6.js.map +7 -0
  25. package/dist/chunks/chunk-3JDNWX7W.js +1264 -0
  26. package/dist/chunks/chunk-3JDNWX7W.js.map +7 -0
  27. package/dist/chunks/chunk-3OEJVB5A.js +906 -0
  28. package/dist/chunks/chunk-3OEJVB5A.js.map +7 -0
  29. package/dist/chunks/chunk-3TNIOEBO.js +369 -0
  30. package/dist/chunks/chunk-3TNIOEBO.js.map +7 -0
  31. package/dist/chunks/chunk-4A46ZXMJ.js +67 -0
  32. package/dist/chunks/chunk-4A46ZXMJ.js.map +7 -0
  33. package/dist/{chunk-4GAIJGRH.js → chunks/chunk-4ATBQOFO.js} +107 -55
  34. package/dist/chunks/chunk-4ATBQOFO.js.map +7 -0
  35. package/dist/chunks/chunk-4CRUCZR4.js +0 -0
  36. package/dist/{chunk-54DNHKOD.js → chunks/chunk-4EO6SIQY.js} +32 -75
  37. package/dist/chunks/chunk-4EO6SIQY.js.map +7 -0
  38. package/dist/chunks/chunk-53M46S5I.js +64 -0
  39. package/dist/chunks/chunk-53M46S5I.js.map +7 -0
  40. package/dist/{chunk-JC6NCUG5.js → chunks/chunk-54KOYG5C.js} +0 -2
  41. package/dist/{chunk-EZXMVTDU.js → chunks/chunk-6BAS4WY6.js} +29 -45
  42. package/dist/chunks/chunk-6BAS4WY6.js.map +7 -0
  43. package/dist/{chunk-BHGTA6JQ.js → chunks/chunk-6KRRFSDN.js} +4 -6
  44. package/dist/chunks/chunk-6KRRFSDN.js.map +7 -0
  45. package/dist/chunks/chunk-6LJNZK4K.js +39 -0
  46. package/dist/chunks/chunk-6LJNZK4K.js.map +7 -0
  47. package/dist/chunks/chunk-6ZWEOSEI.js +666 -0
  48. package/dist/chunks/chunk-6ZWEOSEI.js.map +7 -0
  49. package/dist/chunks/chunk-77XDJMBP.js +3326 -0
  50. package/dist/chunks/chunk-77XDJMBP.js.map +7 -0
  51. package/dist/chunks/chunk-7RRW4NTB.js +6454 -0
  52. package/dist/chunks/chunk-7RRW4NTB.js.map +7 -0
  53. package/dist/chunks/chunk-7X3TW4JB.js +4520 -0
  54. package/dist/chunks/chunk-7X3TW4JB.js.map +7 -0
  55. package/dist/chunks/chunk-B3MW3YGY.js +1409 -0
  56. package/dist/chunks/chunk-B3MW3YGY.js.map +7 -0
  57. package/dist/chunks/chunk-BBJFHTBC.js +28 -0
  58. package/dist/chunks/chunk-BBJFHTBC.js.map +7 -0
  59. package/dist/chunks/chunk-BHDHXOXB.js +24 -0
  60. package/dist/chunks/chunk-BHDHXOXB.js.map +7 -0
  61. package/dist/{chunk-OZNRLY3E.js → chunks/chunk-BTA7SZ26.js} +152 -223
  62. package/dist/chunks/chunk-BTA7SZ26.js.map +7 -0
  63. package/dist/chunks/chunk-CDGRYGPZ.js +103 -0
  64. package/dist/chunks/chunk-CDGRYGPZ.js.map +7 -0
  65. package/dist/{chunk-S6HRABTA.js → chunks/chunk-CP6E5UG6.js} +1 -4
  66. package/dist/chunks/chunk-CP6E5UG6.js.map +7 -0
  67. package/dist/{chunk-2PMO2FS2.js → chunks/chunk-DQ4JHXMT.js} +462 -424
  68. package/dist/chunks/chunk-DQ4JHXMT.js.map +7 -0
  69. package/dist/chunks/chunk-DXD76CMV.js +208 -0
  70. package/dist/chunks/chunk-DXD76CMV.js.map +7 -0
  71. package/dist/chunks/chunk-GCQCAXJZ.js +0 -0
  72. package/dist/chunks/chunk-GELCZWMB.js +42 -0
  73. package/dist/chunks/chunk-GELCZWMB.js.map +7 -0
  74. package/dist/{chunk-NQLEUHMS.js → chunks/chunk-HJYOH4HC.js} +23 -18
  75. package/dist/chunks/chunk-HJYOH4HC.js.map +7 -0
  76. package/dist/chunks/chunk-HPYNW6TT.js +744 -0
  77. package/dist/chunks/chunk-HPYNW6TT.js.map +7 -0
  78. package/dist/{chunk-2KWKUXLT.js → chunks/chunk-HRJ3ICQK.js} +59 -55
  79. package/dist/chunks/chunk-HRJ3ICQK.js.map +7 -0
  80. package/dist/{chunk-ZQU3TXLC.js → chunks/chunk-IFCIADS3.js} +571 -573
  81. package/dist/chunks/chunk-IFCIADS3.js.map +7 -0
  82. package/dist/chunks/chunk-IN7XZ7BC.js +27 -0
  83. package/dist/chunks/chunk-IN7XZ7BC.js.map +7 -0
  84. package/dist/chunks/chunk-L7P4M4KW.js +193 -0
  85. package/dist/chunks/chunk-L7P4M4KW.js.map +7 -0
  86. package/dist/chunks/chunk-LB6TCPDI.js +0 -0
  87. package/dist/{chunk-3RUXVV4S.js → chunks/chunk-LOCXPQNJ.js} +1 -4
  88. package/dist/{chunk-3RUXVV4S.js.map → chunks/chunk-LOCXPQNJ.js.map} +2 -2
  89. package/dist/{chunk-IE2CG2TV.js → chunks/chunk-LOD5ZHCI.js} +213 -208
  90. package/dist/chunks/chunk-LOD5ZHCI.js.map +7 -0
  91. package/dist/{chunk-S3J2TLV6.js → chunks/chunk-M7P3QNRU.js} +1 -4
  92. package/dist/{chunk-S3J2TLV6.js.map → chunks/chunk-M7P3QNRU.js.map} +2 -2
  93. package/dist/chunks/chunk-PPHLQVL7.js +4234 -0
  94. package/dist/chunks/chunk-PPHLQVL7.js.map +7 -0
  95. package/dist/{chunk-ABLVTESJ.js → chunks/chunk-QAXE37B5.js} +1 -4
  96. package/dist/chunks/chunk-QAXE37B5.js.map +7 -0
  97. package/dist/chunks/chunk-QHQOBUF6.js +60 -0
  98. package/dist/chunks/chunk-QHQOBUF6.js.map +7 -0
  99. package/dist/{chunk-SRZZFAS7.js → chunks/chunk-RPJXO7GG.js} +241 -214
  100. package/dist/chunks/chunk-RPJXO7GG.js.map +7 -0
  101. package/dist/{chunk-NPFOMITO.js → chunks/chunk-SWQV4KSY.js} +1 -4
  102. package/dist/{chunk-NPFOMITO.js.map → chunks/chunk-SWQV4KSY.js.map} +2 -2
  103. package/dist/chunks/chunk-SZLAPULP.js +28 -0
  104. package/dist/chunks/chunk-SZLAPULP.js.map +7 -0
  105. package/dist/{chunk-SDGKPKDK.js → chunks/chunk-T7RB5V5J.js} +23 -25
  106. package/dist/chunks/chunk-T7RB5V5J.js.map +7 -0
  107. package/dist/{chunk-HN4E4UUQ.js → chunks/chunk-TI2CTTMA.js} +25 -17
  108. package/dist/chunks/chunk-TI2CTTMA.js.map +7 -0
  109. package/dist/{chunk-G6I7XROM.js → chunks/chunk-TNGVRTO5.js} +45 -20
  110. package/dist/chunks/chunk-TNGVRTO5.js.map +7 -0
  111. package/dist/chunks/chunk-TNWB3U5Y.js +2077 -0
  112. package/dist/chunks/chunk-TNWB3U5Y.js.map +7 -0
  113. package/dist/chunks/chunk-U2IHWPCU.js +12 -0
  114. package/dist/chunks/chunk-U2IHWPCU.js.map +7 -0
  115. package/dist/{chunk-KAA5BGMQ.js → chunks/chunk-UNOY3VJ2.js} +1 -4
  116. package/dist/{chunk-KAA5BGMQ.js.map → chunks/chunk-UNOY3VJ2.js.map} +2 -2
  117. package/dist/{chunk-3TXNP6HH.js → chunks/chunk-UVDJL6ZZ.js} +97 -58
  118. package/dist/chunks/chunk-UVDJL6ZZ.js.map +7 -0
  119. package/dist/chunks/chunk-VNCW4C2Z.js +13452 -0
  120. package/dist/chunks/chunk-VNCW4C2Z.js.map +7 -0
  121. package/dist/chunks/chunk-W5EGGA44.js +15 -0
  122. package/dist/chunks/chunk-W5EGGA44.js.map +7 -0
  123. package/dist/chunks/chunk-XR2W3MAM.js +1533 -0
  124. package/dist/chunks/chunk-XR2W3MAM.js.map +7 -0
  125. package/dist/{chunk-QYFKRZQC.js → chunks/chunk-YIO5EBMQ.js} +423 -377
  126. package/dist/chunks/chunk-YIO5EBMQ.js.map +7 -0
  127. package/dist/chunks/chunk-ZBVLKZ5V.js +1062 -0
  128. package/dist/chunks/chunk-ZBVLKZ5V.js.map +7 -0
  129. package/dist/{chunk-E6YNABER.js → chunks/chunk-ZCLTZIVP.js} +1 -4
  130. package/dist/chunks/chunk-ZCLTZIVP.js.map +7 -0
  131. package/dist/chunks/client-SILZNM5N.js +42 -0
  132. package/dist/{config-6ZMBCL23.js → chunks/config-25HRTPSP.js} +48 -10
  133. package/dist/chunks/cost-tracker-Z2UZT2J5.js +28 -0
  134. package/dist/{customCommands-DNEJS3ZU.js → chunks/customCommands-TYMYZRG5.js} +11 -8
  135. package/dist/chunks/engine-MRVF6FK6.js +39 -0
  136. package/dist/{env-OFAXZ3XG.js → chunks/env-TJ5NOBEB.js} +7 -5
  137. package/dist/{kodeAgentSessionId-X6XWQW7B.js → chunks/kodeAgentSessionId-VTNISJ2L.js} +2 -4
  138. package/dist/chunks/kodeAgentSessionLoad-YB2RKBGJ.js +15 -0
  139. package/dist/chunks/kodeAgentSessionResume-DZSIVKVA.js +13 -0
  140. package/dist/chunks/kodeAgentStreamJson-X5PLS2S6.js +11 -0
  141. package/dist/{kodeAgentStreamJsonSession-GRWG3SPE.js → chunks/kodeAgentStreamJsonSession-RDXM4XYF.js} +38 -24
  142. package/dist/chunks/kodeAgentStreamJsonSession-RDXM4XYF.js.map +7 -0
  143. package/dist/{chunk-4RTX4AG4.js → chunks/kodeAgentStructuredStdio-SVGDSB4P.js} +14 -9
  144. package/dist/chunks/kodeAgentStructuredStdio-SVGDSB4P.js.map +7 -0
  145. package/dist/{kodeHooks-TDMXFWSO.js → chunks/kodeHooks-RVKYRJHG.js} +11 -9
  146. package/dist/{llm-XVXWYOHK.js → chunks/llm-62N6T5ZT.js} +1734 -1526
  147. package/dist/chunks/llm-62N6T5ZT.js.map +7 -0
  148. package/dist/chunks/llmLazy-ZUSSE3ZA.js +13 -0
  149. package/dist/{mentionProcessor-YD7YXYGF.js → chunks/mentionProcessor-RJW5UPJD.js} +46 -16
  150. package/dist/chunks/mentionProcessor-RJW5UPJD.js.map +7 -0
  151. package/dist/{messages-OFUJSPRV.js → chunks/messages-EEWWLPHN.js} +2 -6
  152. package/dist/chunks/model-5TIEKQPD.js +37 -0
  153. package/dist/{openai-5G5D5Q4B.js → chunks/openai-XXK3YZG4.js} +13 -10
  154. package/dist/{outputStyles-HLDXFQK3.js → chunks/outputStyles-FAJTXN2A.js} +6 -9
  155. package/dist/chunks/permissions-HO7INPWM.js +27 -0
  156. package/dist/{pluginRuntime-FPTKK6NY.js → chunks/pluginRuntime-C7K5ULK2.js} +31 -48
  157. package/dist/chunks/pluginRuntime-C7K5ULK2.js.map +7 -0
  158. package/dist/chunks/pluginValidation-DAM7WRTC.js +20 -0
  159. package/dist/chunks/registry-XYJXMOA5.js +60 -0
  160. package/dist/chunks/responsesStreaming-JNGE2P3D.js +8 -0
  161. package/dist/chunks/runNonTextPrintMode-SVBLCZQX.js +577 -0
  162. package/dist/chunks/runNonTextPrintMode-SVBLCZQX.js.map +7 -0
  163. package/dist/chunks/server-REXXF5IK.js +46 -0
  164. package/dist/{skillMarketplace-PSNKDINM.js → chunks/skillMarketplace-N4HVHNST.js} +8 -6
  165. package/dist/chunks/src-OROQIWP3.js +44 -0
  166. package/dist/chunks/src-QXLGGMUW.js +1647 -0
  167. package/dist/chunks/src-QXLGGMUW.js.map +7 -0
  168. package/dist/{cli-SRV2INSL.js → chunks/src-SSDT6MVP.js} +2659 -3384
  169. package/dist/chunks/src-SSDT6MVP.js.map +7 -0
  170. package/dist/chunks/theme-YBJUIMWK.js +10 -0
  171. package/dist/{toolPermissionContext-65L65VEZ.js → chunks/toolPermissionContext-MOCTRR7N.js} +2 -4
  172. package/dist/chunks/toolPermissionSettings-EV2EJAXL.js +18 -0
  173. package/dist/chunks/toolPermissionSettings-EV2EJAXL.js.map +7 -0
  174. package/dist/chunks/uuid-6577SO6X.js +7 -0
  175. package/dist/chunks/uuid-6577SO6X.js.map +7 -0
  176. package/dist/chunks/webOnlyMode-ALXX7UQY.js +66 -0
  177. package/dist/chunks/webOnlyMode-ALXX7UQY.js.map +7 -0
  178. package/dist/entrypoints/cli.js +10 -0
  179. package/dist/entrypoints/cli.js.map +7 -0
  180. package/dist/entrypoints/daemon.js +10 -0
  181. package/dist/entrypoints/daemon.js.map +7 -0
  182. package/dist/entrypoints/mcp.js +71 -0
  183. package/dist/entrypoints/mcp.js.map +7 -0
  184. package/dist/index.js +6 -7
  185. package/dist/index.js.map +3 -3
  186. package/dist/sdk/client.cjs +391 -0
  187. package/dist/sdk/client.cjs.map +7 -0
  188. package/dist/sdk/client.js +364 -0
  189. package/dist/sdk/client.js.map +7 -0
  190. package/dist/sdk/core.cjs +19932 -0
  191. package/dist/sdk/core.cjs.map +7 -0
  192. package/dist/sdk/core.js +19893 -0
  193. package/dist/sdk/core.js.map +7 -0
  194. package/dist/sdk/daemon-client.cjs +257 -0
  195. package/dist/sdk/daemon-client.cjs.map +7 -0
  196. package/dist/sdk/daemon-client.js +221 -0
  197. package/dist/sdk/daemon-client.js.map +7 -0
  198. package/dist/sdk/protocol.cjs +170 -0
  199. package/dist/sdk/protocol.cjs.map +7 -0
  200. package/dist/sdk/protocol.js +140 -0
  201. package/dist/sdk/protocol.js.map +7 -0
  202. package/dist/sdk/runtime-node.cjs +236 -0
  203. package/dist/sdk/runtime-node.cjs.map +7 -0
  204. package/dist/sdk/runtime-node.js +222 -0
  205. package/dist/sdk/runtime-node.js.map +7 -0
  206. package/dist/sdk/runtime.cjs +17 -0
  207. package/dist/sdk/runtime.cjs.map +7 -0
  208. package/dist/sdk/runtime.js +0 -0
  209. package/dist/sdk/runtime.js.map +7 -0
  210. package/dist/sdk/tools.cjs +30300 -0
  211. package/dist/sdk/tools.cjs.map +7 -0
  212. package/dist/sdk/tools.js +30282 -0
  213. package/dist/sdk/tools.js.map +7 -0
  214. package/dist/webui/assets/index-5hlfByVS.css +1 -0
  215. package/dist/webui/assets/index-BR9lm1lA.js +82 -0
  216. package/dist/webui/index.html +28 -0
  217. package/package.json +93 -22
  218. package/scripts/binary-utils.cjs +12 -4
  219. package/scripts/cli-acp-wrapper.cjs +3 -17
  220. package/scripts/cli-wrapper.cjs +5 -7
  221. package/scripts/postinstall.js +8 -4
  222. package/dist/REPL-GIU4ZIXM.js +0 -42
  223. package/dist/acp-H3VJ77YG.js +0 -1357
  224. package/dist/acp-H3VJ77YG.js.map +0 -7
  225. package/dist/agentsValidate-XP3CFN6F.js.map +0 -7
  226. package/dist/ask-3G5H5KD5.js.map +0 -7
  227. package/dist/autoUpdater-DNRMJWFQ.js +0 -17
  228. package/dist/chunk-2KWKUXLT.js.map +0 -7
  229. package/dist/chunk-2PMO2FS2.js.map +0 -7
  230. package/dist/chunk-3TXNP6HH.js.map +0 -7
  231. package/dist/chunk-4GAIJGRH.js.map +0 -7
  232. package/dist/chunk-4RTX4AG4.js.map +0 -7
  233. package/dist/chunk-54DNHKOD.js.map +0 -7
  234. package/dist/chunk-67PY5IX6.js +0 -34
  235. package/dist/chunk-67PY5IX6.js.map +0 -7
  236. package/dist/chunk-6DRDLOLP.js +0 -2613
  237. package/dist/chunk-6DRDLOLP.js.map +0 -7
  238. package/dist/chunk-7CQVZNQV.js +0 -1609
  239. package/dist/chunk-7CQVZNQV.js.map +0 -7
  240. package/dist/chunk-ABLVTESJ.js.map +0 -7
  241. package/dist/chunk-AIMIPK4B.js +0 -835
  242. package/dist/chunk-AIMIPK4B.js.map +0 -7
  243. package/dist/chunk-BHGTA6JQ.js.map +0 -7
  244. package/dist/chunk-CIG63V4E.js +0 -72
  245. package/dist/chunk-CIG63V4E.js.map +0 -7
  246. package/dist/chunk-E6YNABER.js.map +0 -7
  247. package/dist/chunk-EH34V7CY.js.map +0 -7
  248. package/dist/chunk-EZXMVTDU.js.map +0 -7
  249. package/dist/chunk-FH5CHM6L.js +0 -148
  250. package/dist/chunk-FH5CHM6L.js.map +0 -7
  251. package/dist/chunk-G6I7XROM.js.map +0 -7
  252. package/dist/chunk-HN4E4UUQ.js.map +0 -7
  253. package/dist/chunk-HSPVVDIW.js +0 -30198
  254. package/dist/chunk-HSPVVDIW.js.map +0 -7
  255. package/dist/chunk-IE2CG2TV.js.map +0 -7
  256. package/dist/chunk-K2MI4TPB.js.map +0 -7
  257. package/dist/chunk-MN77D2F7.js +0 -2931
  258. package/dist/chunk-MN77D2F7.js.map +0 -7
  259. package/dist/chunk-NQLEUHMS.js.map +0 -7
  260. package/dist/chunk-OIFQB3S4.js +0 -515
  261. package/dist/chunk-OIFQB3S4.js.map +0 -7
  262. package/dist/chunk-OWTG2W3A.js +0 -164
  263. package/dist/chunk-OWTG2W3A.js.map +0 -7
  264. package/dist/chunk-OZNRLY3E.js.map +0 -7
  265. package/dist/chunk-QYFKRZQC.js.map +0 -7
  266. package/dist/chunk-S6HRABTA.js.map +0 -7
  267. package/dist/chunk-SDGKPKDK.js.map +0 -7
  268. package/dist/chunk-SRZZFAS7.js.map +0 -7
  269. package/dist/chunk-UKHTVRJM.js +0 -47
  270. package/dist/chunk-UKHTVRJM.js.map +0 -7
  271. package/dist/chunk-UYXEDKOZ.js +0 -24
  272. package/dist/chunk-UYXEDKOZ.js.map +0 -7
  273. package/dist/chunk-VBXVYQYY.js +0 -145
  274. package/dist/chunk-VBXVYQYY.js.map +0 -7
  275. package/dist/chunk-WVHORZQ5.js +0 -17
  276. package/dist/chunk-WVHORZQ5.js.map +0 -7
  277. package/dist/chunk-WWUWDNWW.js +0 -49
  278. package/dist/chunk-WWUWDNWW.js.map +0 -7
  279. package/dist/chunk-Z33T5YN5.js +0 -654
  280. package/dist/chunk-Z33T5YN5.js.map +0 -7
  281. package/dist/chunk-ZQU3TXLC.js.map +0 -7
  282. package/dist/cli-SRV2INSL.js.map +0 -7
  283. package/dist/commands-TWH6PGVG.js +0 -46
  284. package/dist/context-JQIOOI4W.js +0 -30
  285. package/dist/costTracker-6SL26FDB.js +0 -19
  286. package/dist/kodeAgentSessionLoad-6N27AC5K.js +0 -18
  287. package/dist/kodeAgentSessionResume-HUSAEO24.js +0 -16
  288. package/dist/kodeAgentStreamJson-NXFN7TXH.js +0 -13
  289. package/dist/kodeAgentStreamJsonSession-GRWG3SPE.js.map +0 -7
  290. package/dist/kodeAgentStructuredStdio-HGWJT7CU.js +0 -10
  291. package/dist/llm-XVXWYOHK.js.map +0 -7
  292. package/dist/llmLazy-7TD5N7XP.js +0 -15
  293. package/dist/loader-AUXIJTY6.js +0 -28
  294. package/dist/mcp-BXJ3K7NZ.js +0 -49
  295. package/dist/mentionProcessor-YD7YXYGF.js.map +0 -7
  296. package/dist/model-KPYCXWBK.js +0 -30
  297. package/dist/pluginRuntime-FPTKK6NY.js.map +0 -7
  298. package/dist/pluginValidation-DSFXZ4GF.js +0 -17
  299. package/dist/prompts-LWLAJRS2.js +0 -48
  300. package/dist/query-HVPWL27C.js +0 -50
  301. package/dist/responsesStreaming-AW344PQO.js +0 -10
  302. package/dist/ripgrep-YOPCY2GO.js +0 -17
  303. package/dist/state-KNRWP3FO.js +0 -16
  304. package/dist/theme-7S2QN2FO.js +0 -14
  305. package/dist/toolPermissionSettings-GPOBH4IV.js +0 -18
  306. package/dist/tools-FZU2FZBD.js +0 -47
  307. package/dist/userInput-VHNBN2MW.js +0 -311
  308. package/dist/userInput-VHNBN2MW.js.map +0 -7
  309. package/dist/uuid-QN2CNKKN.js +0 -9
  310. /package/dist/{REPL-GIU4ZIXM.js.map → chunks/Doctor-M3J7GRTJ.js.map} +0 -0
  311. /package/dist/{autoUpdater-DNRMJWFQ.js.map → chunks/REPL-RQ6LO6S7.js.map} +0 -0
  312. /package/dist/{chunk-JC6NCUG5.js.map → chunks/ResumeConversation-6DMVBEGH.js.map} +0 -0
  313. /package/dist/{commands-TWH6PGVG.js.map → chunks/agentLoader-FCRG3TFJ.js.map} +0 -0
  314. /package/dist/{config-6ZMBCL23.js.map → chunks/autoUpdater-CNESBOKO.js.map} +0 -0
  315. /package/dist/{context-JQIOOI4W.js.map → chunks/chunk-4CRUCZR4.js.map} +0 -0
  316. /package/dist/{costTracker-6SL26FDB.js.map → chunks/chunk-54KOYG5C.js.map} +0 -0
  317. /package/dist/{customCommands-DNEJS3ZU.js.map → chunks/chunk-GCQCAXJZ.js.map} +0 -0
  318. /package/dist/{env-OFAXZ3XG.js.map → chunks/chunk-LB6TCPDI.js.map} +0 -0
  319. /package/dist/{kodeAgentSessionId-X6XWQW7B.js.map → chunks/client-SILZNM5N.js.map} +0 -0
  320. /package/dist/{kodeAgentSessionLoad-6N27AC5K.js.map → chunks/config-25HRTPSP.js.map} +0 -0
  321. /package/dist/{kodeAgentSessionResume-HUSAEO24.js.map → chunks/cost-tracker-Z2UZT2J5.js.map} +0 -0
  322. /package/dist/{kodeAgentStreamJson-NXFN7TXH.js.map → chunks/customCommands-TYMYZRG5.js.map} +0 -0
  323. /package/dist/{kodeAgentStructuredStdio-HGWJT7CU.js.map → chunks/engine-MRVF6FK6.js.map} +0 -0
  324. /package/dist/{kodeHooks-TDMXFWSO.js.map → chunks/env-TJ5NOBEB.js.map} +0 -0
  325. /package/dist/{llmLazy-7TD5N7XP.js.map → chunks/kodeAgentSessionId-VTNISJ2L.js.map} +0 -0
  326. /package/dist/{loader-AUXIJTY6.js.map → chunks/kodeAgentSessionLoad-YB2RKBGJ.js.map} +0 -0
  327. /package/dist/{mcp-BXJ3K7NZ.js.map → chunks/kodeAgentSessionResume-DZSIVKVA.js.map} +0 -0
  328. /package/dist/{messages-OFUJSPRV.js.map → chunks/kodeAgentStreamJson-X5PLS2S6.js.map} +0 -0
  329. /package/dist/{model-KPYCXWBK.js.map → chunks/kodeHooks-RVKYRJHG.js.map} +0 -0
  330. /package/dist/{openai-5G5D5Q4B.js.map → chunks/llmLazy-ZUSSE3ZA.js.map} +0 -0
  331. /package/dist/{outputStyles-HLDXFQK3.js.map → chunks/messages-EEWWLPHN.js.map} +0 -0
  332. /package/dist/{pluginValidation-DSFXZ4GF.js.map → chunks/model-5TIEKQPD.js.map} +0 -0
  333. /package/dist/{prompts-LWLAJRS2.js.map → chunks/openai-XXK3YZG4.js.map} +0 -0
  334. /package/dist/{query-HVPWL27C.js.map → chunks/outputStyles-FAJTXN2A.js.map} +0 -0
  335. /package/dist/{responsesStreaming-AW344PQO.js.map → chunks/permissions-HO7INPWM.js.map} +0 -0
  336. /package/dist/{ripgrep-YOPCY2GO.js.map → chunks/pluginValidation-DAM7WRTC.js.map} +0 -0
  337. /package/dist/{skillMarketplace-PSNKDINM.js.map → chunks/registry-XYJXMOA5.js.map} +0 -0
  338. /package/dist/{state-KNRWP3FO.js.map → chunks/responsesStreaming-JNGE2P3D.js.map} +0 -0
  339. /package/dist/{theme-7S2QN2FO.js.map → chunks/server-REXXF5IK.js.map} +0 -0
  340. /package/dist/{toolPermissionContext-65L65VEZ.js.map → chunks/skillMarketplace-N4HVHNST.js.map} +0 -0
  341. /package/dist/{toolPermissionSettings-GPOBH4IV.js.map → chunks/src-OROQIWP3.js.map} +0 -0
  342. /package/dist/{tools-FZU2FZBD.js.map → chunks/theme-YBJUIMWK.js.map} +0 -0
  343. /package/dist/{uuid-QN2CNKKN.js.map → chunks/toolPermissionContext-MOCTRR7N.js.map} +0 -0
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/services/ai/llm.ts", "../src/utils/system/http.ts", "../src/services/system/vcr.ts", "../src/services/ai/adapters/base.ts", "../src/services/ai/adapters/openaiAdapter.ts", "../src/services/ai/adapters/responsesAPI.ts", "../src/services/ai/adapters/chatCompletions.ts", "../src/constants/modelCapabilities.ts", "../src/services/ai/modelAdapterFactory.ts", "../src/services/ai/responseStateManager.ts", "../src/utils/tooling/toolUsePartialJson.ts", "../src/utils/model/openaiMessageConversion.ts"],
4
- "sourcesContent": ["import '@anthropic-ai/sdk/shims/node'\nimport Anthropic, { APIConnectionError, APIError } from '@anthropic-ai/sdk'\nimport { StreamingEvent } from './adapters/base'\nimport { AnthropicBedrock } from '@anthropic-ai/bedrock-sdk'\nimport { AnthropicVertex } from '@anthropic-ai/vertex-sdk'\nimport type { BetaUsage } from '@anthropic-ai/sdk/resources/beta/messages/messages.mjs'\nimport chalk from 'chalk'\nimport { createHash, randomUUID, UUID } from 'crypto'\nimport 'dotenv/config'\n\nimport { addToTotalCost } from '@costTracker'\nimport models from '@constants/models'\nimport type { AssistantMessage, UserMessage } from '@query'\nimport { Tool, getToolDescription } from '@tool'\nimport {\n getAnthropicApiKey,\n getGlobalConfig,\n ModelProfile,\n} from '@utils/config'\nimport { logError } from '@utils/log'\nimport { USER_AGENT } from '@utils/system/http'\nimport {\n createAssistantAPIErrorMessage,\n normalizeContentFromAPI,\n} from '@utils/messages'\nimport { countTokens } from '@utils/model/tokens'\nimport { setRequestStatus } from '@utils/session/requestStatus'\nimport { withVCR } from '@services/vcr'\nimport {\n debug as debugLogger,\n markPhase,\n getCurrentRequest,\n logLLMInteraction,\n logSystemPromptConstruction,\n logErrorWithDiagnosis,\n} from '@utils/log/debugLogger'\nimport {\n MessageContextManager,\n createRetentionStrategy,\n} from '@utils/session/messageContextManager'\nimport { getModelManager } from '@utils/model'\nimport { zodToJsonSchema } from 'zod-to-json-schema'\nimport type { BetaMessageStream } from '@anthropic-ai/sdk/lib/BetaMessageStream.mjs'\nimport { ModelAdapterFactory } from './modelAdapterFactory'\nimport { UnifiedRequestParams } from '@kode-types/modelCapabilities'\nimport { responseStateManager, getConversationId } from './responseStateManager'\nimport type { ToolUseContext } from '@tool'\nimport type {\n Message as APIMessage,\n MessageParam,\n TextBlockParam,\n} from '@anthropic-ai/sdk/resources/index.mjs'\nimport { USE_BEDROCK, USE_VERTEX } from '@utils/model'\nimport { getCLISyspromptPrefix } from '@constants/prompts'\nimport { getVertexRegionForModel } from '@utils/model'\nimport OpenAI from 'openai'\nimport type { ChatCompletionStream } from 'openai/lib/ChatCompletionStream'\nimport { ContentBlock } from '@anthropic-ai/sdk/resources/messages/messages'\nimport { nanoid } from 'nanoid'\nimport {\n getCompletionWithProfile,\n getGPT5CompletionWithProfile,\n} from './openai'\nimport { getReasoningEffort } from '@utils/model/thinking'\nimport { parseToolUsePartialJsonOrThrow } from '@utils/tooling/toolUsePartialJson'\nimport { convertAnthropicMessagesToOpenAIMessages as convertAnthropicMessagesToOpenAIMessagesUtil } from '@utils/model/openaiMessageConversion'\nimport { generateKodeContext, refreshKodeContext } from '@services/kodeContext'\nimport {\n API_ERROR_MESSAGE_PREFIX,\n CREDIT_BALANCE_TOO_LOW_ERROR_MESSAGE,\n INVALID_API_KEY_ERROR_MESSAGE,\n MAIN_QUERY_TEMPERATURE,\n NO_CONTENT_MESSAGE,\n PROMPT_TOO_LONG_ERROR_MESSAGE,\n} from './llmConstants'\n\nfunction isGPT5Model(modelName: string): boolean {\n return modelName.startsWith('gpt-5')\n}\n\nfunction getModelConfigForDebug(model: string): {\n modelName: string\n provider: string\n apiKeyStatus: 'configured' | 'missing' | 'invalid'\n baseURL?: string\n maxTokens?: number\n reasoningEffort?: string\n isStream?: boolean\n temperature?: number\n} {\n const config = getGlobalConfig()\n const modelManager = getModelManager()\n\n const modelProfile = modelManager.getModel('main')\n\n let apiKeyStatus: 'configured' | 'missing' | 'invalid' = 'missing'\n let baseURL: string | undefined\n let maxTokens: number | undefined\n let reasoningEffort: string | undefined\n\n if (modelProfile) {\n apiKeyStatus = modelProfile.apiKey ? 'configured' : 'missing'\n baseURL = modelProfile.baseURL\n maxTokens = modelProfile.maxTokens\n reasoningEffort = modelProfile.reasoningEffort\n } else {\n apiKeyStatus = 'missing'\n maxTokens = undefined\n reasoningEffort = undefined\n }\n\n return {\n modelName: model,\n provider: modelProfile?.provider || config.primaryProvider || 'anthropic',\n apiKeyStatus,\n baseURL,\n maxTokens,\n reasoningEffort,\n isStream: config.stream || false,\n temperature: MAIN_QUERY_TEMPERATURE,\n }\n}\n\nexport { generateKodeContext, refreshKodeContext }\n\ninterface StreamResponse extends APIMessage {\n ttftMs?: number\n}\n\nexport {\n API_ERROR_MESSAGE_PREFIX,\n PROMPT_TOO_LONG_ERROR_MESSAGE,\n CREDIT_BALANCE_TOO_LOW_ERROR_MESSAGE,\n INVALID_API_KEY_ERROR_MESSAGE,\n NO_CONTENT_MESSAGE,\n MAIN_QUERY_TEMPERATURE,\n}\nconst PROMPT_CACHING_ENABLED = !process.env.DISABLE_PROMPT_CACHING\n\nconst HAIKU_COST_PER_MILLION_INPUT_TOKENS = 0.8\nconst HAIKU_COST_PER_MILLION_OUTPUT_TOKENS = 4\nconst HAIKU_COST_PER_MILLION_PROMPT_CACHE_WRITE_TOKENS = 1\nconst HAIKU_COST_PER_MILLION_PROMPT_CACHE_READ_TOKENS = 0.08\n\nconst SONNET_COST_PER_MILLION_INPUT_TOKENS = 3\nconst SONNET_COST_PER_MILLION_OUTPUT_TOKENS = 15\nconst SONNET_COST_PER_MILLION_PROMPT_CACHE_WRITE_TOKENS = 3.75\nconst SONNET_COST_PER_MILLION_PROMPT_CACHE_READ_TOKENS = 0.3\n\nconst MAX_RETRIES = process.env.USER_TYPE === 'SWE_BENCH' ? 100 : 10\nconst BASE_DELAY_MS = 500\n\ninterface RetryOptions {\n maxRetries?: number\n signal?: AbortSignal\n}\n\nfunction abortableDelay(delayMs: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n if (signal?.aborted) {\n reject(new Error('Request was aborted'))\n return\n }\n\n const timeoutId = setTimeout(() => {\n resolve()\n }, delayMs)\n\n if (signal) {\n const abortHandler = () => {\n clearTimeout(timeoutId)\n reject(new Error('Request was aborted'))\n }\n signal.addEventListener('abort', abortHandler, { once: true })\n }\n })\n}\n\nfunction getRetryDelay(\n attempt: number,\n retryAfterHeader?: string | null,\n): number {\n if (retryAfterHeader) {\n const seconds = parseInt(retryAfterHeader, 10)\n if (!isNaN(seconds)) {\n return seconds * 1000\n }\n }\n return Math.min(BASE_DELAY_MS * Math.pow(2, attempt - 1), 32000)\n}\n\nfunction shouldRetry(error: APIError): boolean {\n if (error.message?.includes('\"type\":\"overloaded_error\"')) {\n return process.env.USER_TYPE === 'SWE_BENCH'\n }\n\n const shouldRetryHeader = error.headers?.['x-should-retry']\n\n if (shouldRetryHeader === 'true') return true\n if (shouldRetryHeader === 'false') return false\n\n if (error instanceof APIConnectionError) {\n return true\n }\n\n if (!error.status) return false\n\n if (error.status === 408) return true\n\n if (error.status === 409) return true\n\n if (error.status === 429) return true\n\n if (error.status && error.status >= 500) return true\n\n return false\n}\n\nasync function withRetry<T>(\n operation: (attempt: number) => Promise<T>,\n options: RetryOptions = {},\n): Promise<T> {\n const maxRetries = options.maxRetries ?? MAX_RETRIES\n let lastError: unknown\n\n for (let attempt = 1; attempt <= maxRetries + 1; attempt++) {\n try {\n return await operation(attempt)\n } catch (error) {\n lastError = error\n if (\n attempt > maxRetries ||\n !(error instanceof APIError) ||\n !shouldRetry(error)\n ) {\n throw error\n }\n\n if (options.signal?.aborted) {\n throw new Error('Request cancelled by user')\n }\n\n const retryAfter = error.headers?.['retry-after'] ?? null\n const delayMs = getRetryDelay(attempt, retryAfter)\n\n debugLogger.warn('LLM_API_RETRY', {\n name: error.name,\n message: error.message,\n status: error.status,\n attempt,\n maxRetries,\n delayMs,\n })\n\n try {\n await abortableDelay(delayMs, options.signal)\n } catch (delayError) {\n if (delayError.message === 'Request was aborted') {\n throw new Error('Request cancelled by user')\n }\n throw delayError\n }\n }\n }\n\n throw lastError\n}\n\nexport async function fetchAnthropicModels(\n baseURL: string,\n apiKey: string,\n): Promise<any[]> {\n try {\n const modelsURL = baseURL\n ? `${baseURL.replace(/\\/+$/, '')}/v1/models`\n : 'https://api.anthropic.com/v1/models'\n\n const response = await fetch(modelsURL, {\n method: 'GET',\n headers: {\n 'x-api-key': apiKey,\n 'anthropic-version': '2023-06-01',\n 'User-Agent': USER_AGENT,\n },\n })\n\n if (!response.ok) {\n if (response.status === 401) {\n throw new Error(\n 'Invalid API key. Please check your Anthropic API key and try again.',\n )\n } else if (response.status === 403) {\n throw new Error(\n 'API key does not have permission to access models. Please check your API key permissions.',\n )\n } else if (response.status === 429) {\n throw new Error(\n 'Too many requests. Please wait a moment and try again.',\n )\n } else if (response.status >= 500) {\n throw new Error(\n 'Anthropic service is temporarily unavailable. Please try again later.',\n )\n } else {\n throw new Error(\n `Unable to connect to Anthropic API (${response.status}). Please check your internet connection and API key.`,\n )\n }\n }\n\n const data = await response.json()\n return data.data || []\n } catch (error) {\n if (\n (error instanceof Error && error.message.includes('API key')) ||\n (error instanceof Error && error.message.includes('Anthropic'))\n ) {\n throw error\n }\n\n logError(error)\n debugLogger.warn('ANTHROPIC_MODELS_FETCH_FAILED', {\n error: error instanceof Error ? error.message : String(error),\n })\n throw new Error(\n 'Unable to connect to Anthropic API. Please check your internet connection and try again.',\n )\n }\n}\n\nexport async function verifyApiKey(\n apiKey: string,\n baseURL?: string,\n provider?: string,\n): Promise<boolean> {\n if (!apiKey) {\n return false\n }\n\n if (provider && provider !== 'anthropic') {\n try {\n const headers: Record<string, string> = {\n Authorization: `Bearer ${apiKey}`,\n 'Content-Type': 'application/json',\n }\n\n if (!baseURL) {\n debugLogger.warn('API_VERIFICATION_MISSING_BASE_URL', { provider })\n return false\n }\n\n const modelsURL = `${baseURL.replace(/\\/+$/, '')}/models`\n\n const response = await fetch(modelsURL, {\n method: 'GET',\n headers,\n })\n\n return response.ok\n } catch (error) {\n logError(error)\n debugLogger.warn('API_VERIFICATION_FAILED', {\n provider,\n error: error instanceof Error ? error.message : String(error),\n })\n return false\n }\n }\n\n const clientConfig: any = {\n apiKey,\n dangerouslyAllowBrowser: true,\n maxRetries: 3,\n defaultHeaders: {\n 'User-Agent': USER_AGENT,\n },\n }\n\n if (baseURL && (provider === 'anthropic' || provider === 'minimax-coding')) {\n clientConfig.baseURL = baseURL\n }\n\n const anthropic = new Anthropic(clientConfig)\n\n try {\n await withRetry(\n async () => {\n const model = 'claude-sonnet-4-20250514'\n const messages: MessageParam[] = [{ role: 'user', content: 'test' }]\n await anthropic.messages.create({\n model,\n max_tokens: 1000,\n messages,\n temperature: 0,\n })\n return true\n },\n { maxRetries: 2 },\n )\n return true\n } catch (error) {\n logError(error)\n if (\n error instanceof Error &&\n error.message.includes(\n '{\"type\":\"error\",\"error\":{\"type\":\"authentication_error\",\"message\":\"invalid x-api-key\"}}',\n )\n ) {\n return false\n }\n throw error\n }\n}\n\nfunction convertAnthropicMessagesToOpenAIMessages(\n messages: (UserMessage | AssistantMessage)[],\n): (\n | OpenAI.ChatCompletionMessageParam\n | OpenAI.ChatCompletionToolMessageParam\n)[] {\n return convertAnthropicMessagesToOpenAIMessagesUtil(messages as any)\n}\n\nfunction messageReducer(\n previous: OpenAI.ChatCompletionMessage,\n item: OpenAI.ChatCompletionChunk,\n): OpenAI.ChatCompletionMessage {\n const reduce = (acc: any, delta: OpenAI.ChatCompletionChunk.Choice.Delta) => {\n acc = { ...acc }\n for (const [key, value] of Object.entries(delta)) {\n if (acc[key] === undefined || acc[key] === null) {\n acc[key] = value\n if (Array.isArray(acc[key])) {\n for (const arr of acc[key]) {\n delete arr.index\n }\n }\n } else if (typeof acc[key] === 'string' && typeof value === 'string') {\n acc[key] += value\n } else if (typeof acc[key] === 'number' && typeof value === 'number') {\n acc[key] = value\n } else if (Array.isArray(acc[key]) && Array.isArray(value)) {\n const accArray = acc[key]\n for (let i = 0; i < value.length; i++) {\n const { index, ...chunkTool } = value[i]\n if (index - accArray.length > 1) {\n throw new Error(\n `Error: An array has an empty value when tool_calls are constructed. tool_calls: ${accArray}; tool: ${value}`,\n )\n }\n accArray[index] = reduce(accArray[index], chunkTool)\n }\n } else if (typeof acc[key] === 'object' && typeof value === 'object') {\n acc[key] = reduce(acc[key], value)\n }\n }\n return acc\n }\n\n const choice = item.choices?.[0]\n if (!choice) {\n return previous\n }\n return reduce(previous, choice.delta) as OpenAI.ChatCompletionMessage\n}\nasync function handleMessageStream(\n stream: ChatCompletionStream,\n signal?: AbortSignal,\n): Promise<OpenAI.ChatCompletion> {\n const streamStartTime = Date.now()\n let ttftMs: number | undefined\n let chunkCount = 0\n let errorCount = 0\n\n debugLogger.api('OPENAI_STREAM_START', {\n streamStartTime: String(streamStartTime),\n })\n\n let message = {} as OpenAI.ChatCompletionMessage\n\n let id, model, created, object, usage\n try {\n for await (const chunk of stream) {\n if (signal?.aborted) {\n debugLogger.flow('OPENAI_STREAM_ABORTED', {\n chunkCount,\n timestamp: Date.now(),\n })\n throw new Error('Request was cancelled')\n }\n\n chunkCount++\n\n try {\n if (!id) {\n id = chunk.id\n debugLogger.api('OPENAI_STREAM_ID_RECEIVED', {\n id,\n chunkNumber: String(chunkCount),\n })\n }\n if (!model) {\n model = chunk.model\n debugLogger.api('OPENAI_STREAM_MODEL_RECEIVED', {\n model,\n chunkNumber: String(chunkCount),\n })\n }\n if (!created) {\n created = chunk.created\n }\n if (!object) {\n object = chunk.object\n }\n if (!usage) {\n usage = chunk.usage\n }\n\n message = messageReducer(message, chunk)\n\n if (chunk?.choices?.[0]?.delta?.content) {\n if (!ttftMs) {\n ttftMs = Date.now() - streamStartTime\n debugLogger.api('OPENAI_STREAM_FIRST_TOKEN', {\n ttftMs: String(ttftMs),\n chunkNumber: String(chunkCount),\n })\n }\n }\n } catch (chunkError) {\n errorCount++\n debugLogger.error('OPENAI_STREAM_CHUNK_ERROR', {\n chunkNumber: String(chunkCount),\n errorMessage:\n chunkError instanceof Error\n ? chunkError.message\n : String(chunkError),\n errorType:\n chunkError instanceof Error\n ? chunkError.constructor.name\n : typeof chunkError,\n })\n }\n }\n\n debugLogger.api('OPENAI_STREAM_COMPLETE', {\n totalChunks: String(chunkCount),\n errorCount: String(errorCount),\n totalDuration: String(Date.now() - streamStartTime),\n ttftMs: String(ttftMs || 0),\n finalMessageId: id || 'undefined',\n })\n } catch (streamError) {\n debugLogger.error('OPENAI_STREAM_FATAL_ERROR', {\n totalChunks: String(chunkCount),\n errorCount: String(errorCount),\n errorMessage:\n streamError instanceof Error\n ? streamError.message\n : String(streamError),\n errorType:\n streamError instanceof Error\n ? streamError.constructor.name\n : typeof streamError,\n })\n throw streamError\n }\n return {\n id,\n created,\n model,\n object,\n choices: [\n {\n index: 0,\n message,\n finish_reason: 'stop',\n logprobs: undefined,\n },\n ],\n usage,\n }\n}\n\nfunction convertOpenAIResponseToAnthropic(\n response: OpenAI.ChatCompletion,\n tools?: Tool[],\n) {\n let contentBlocks: ContentBlock[] = []\n const message = response.choices?.[0]?.message\n if (!message) {\n return {\n role: 'assistant',\n content: [],\n stop_reason: response.choices?.[0]?.finish_reason,\n type: 'message',\n usage: response.usage,\n }\n }\n\n if (message?.tool_calls) {\n for (const toolCall of message.tool_calls) {\n const tool = toolCall.function\n const toolName = tool?.name\n let toolArgs = {}\n try {\n toolArgs = tool?.arguments ? JSON.parse(tool.arguments) : {}\n } catch (e) {\n }\n\n contentBlocks.push({\n type: 'tool_use',\n input: toolArgs,\n name: toolName,\n id: toolCall.id?.length > 0 ? toolCall.id : nanoid(),\n })\n }\n }\n\n if ((message as any).reasoning) {\n contentBlocks.push({\n type: 'thinking',\n thinking: (message as any).reasoning,\n signature: '',\n })\n }\n\n if ((message as any).reasoning_content) {\n contentBlocks.push({\n type: 'thinking',\n thinking: (message as any).reasoning_content,\n signature: '',\n })\n }\n\n if (message.content) {\n contentBlocks.push({\n type: 'text',\n text: message?.content,\n citations: [],\n })\n }\n\n const finalMessage = {\n role: 'assistant',\n content: contentBlocks,\n stop_reason: response.choices?.[0]?.finish_reason,\n type: 'message',\n usage: response.usage,\n }\n\n return finalMessage\n}\n\nlet anthropicClient: Anthropic | AnthropicBedrock | AnthropicVertex | null =\n null\n\nexport function getAnthropicClient(\n model?: string,\n): Anthropic | AnthropicBedrock | AnthropicVertex {\n const config = getGlobalConfig()\n const provider = config.primaryProvider\n\n if (anthropicClient && provider) {\n anthropicClient = null\n }\n\n if (anthropicClient) {\n return anthropicClient\n }\n\n const region = getVertexRegionForModel(model)\n\n const modelManager = getModelManager()\n const modelProfile = modelManager.getModel('main')\n\n const defaultHeaders: { [key: string]: string } = {\n 'x-app': 'cli',\n 'User-Agent': USER_AGENT,\n }\n\n if (process.env.ANTHROPIC_AUTH_TOKEN) {\n defaultHeaders['Authorization'] =\n `Bearer ${process.env.ANTHROPIC_AUTH_TOKEN}`\n }\n\n const ARGS = {\n defaultHeaders,\n maxRetries: 0,\n timeout: parseInt(process.env.API_TIMEOUT_MS || String(60 * 1000), 10),\n }\n if (USE_BEDROCK) {\n const client = new AnthropicBedrock(ARGS)\n anthropicClient = client\n return client\n }\n if (USE_VERTEX) {\n const vertexArgs = {\n ...ARGS,\n region: region || process.env.CLOUD_ML_REGION || 'us-east5',\n }\n const client = new AnthropicVertex(vertexArgs)\n anthropicClient = client\n return client\n }\n\n let apiKey: string\n let baseURL: string | undefined\n\n if (modelProfile) {\n apiKey = modelProfile.apiKey || ''\n baseURL = modelProfile.baseURL\n } else {\n apiKey = getAnthropicApiKey()\n baseURL = undefined\n }\n\n if (process.env.USER_TYPE === 'ant' && !apiKey && provider === 'anthropic') {\n console.error(\n chalk.red(\n '[ANT-ONLY] Missing API key. Configure an API key in your model profile or environment variables.',\n ),\n )\n }\n\n const clientConfig = {\n apiKey,\n dangerouslyAllowBrowser: true,\n ...ARGS,\n ...(baseURL && { baseURL }),\n }\n\n anthropicClient = new Anthropic(clientConfig)\n return anthropicClient\n}\n\nexport function resetAnthropicClient(): void {\n anthropicClient = null\n}\n\n\nfunction applyCacheControlWithLimits(\n systemBlocks: TextBlockParam[],\n messageParams: MessageParam[],\n): { systemBlocks: TextBlockParam[]; messageParams: MessageParam[] } {\n if (!PROMPT_CACHING_ENABLED) {\n return { systemBlocks, messageParams }\n }\n\n const maxCacheBlocks = 4\n let usedCacheBlocks = 0\n\n const processedSystemBlocks = systemBlocks.map((block, index) => {\n if (usedCacheBlocks < maxCacheBlocks && block.text.length > 1000) {\n usedCacheBlocks++\n return {\n ...block,\n cache_control: { type: 'ephemeral' as const },\n }\n }\n const { cache_control, ...blockWithoutCache } = block\n return blockWithoutCache\n })\n\n const processedMessageParams = messageParams.map((message, messageIndex) => {\n if (Array.isArray(message.content)) {\n const processedContent = message.content.map(\n (contentBlock, blockIndex) => {\n const shouldCache =\n usedCacheBlocks < maxCacheBlocks &&\n contentBlock.type === 'text' &&\n typeof contentBlock.text === 'string' &&\n (contentBlock.text.length > 2000 ||\n (messageIndex === messageParams.length - 1 &&\n blockIndex === message.content.length - 1 &&\n contentBlock.text.length > 500))\n\n if (shouldCache) {\n usedCacheBlocks++\n return {\n ...contentBlock,\n cache_control: { type: 'ephemeral' as const },\n }\n }\n\n const { cache_control, ...blockWithoutCache } = contentBlock as any\n return blockWithoutCache\n },\n )\n\n return {\n ...message,\n content: processedContent,\n }\n }\n\n return message\n })\n\n return {\n systemBlocks: processedSystemBlocks,\n messageParams: processedMessageParams,\n }\n}\n\nexport function userMessageToMessageParam(\n message: UserMessage,\n addCache = false,\n): MessageParam {\n if (addCache) {\n if (typeof message.message.content === 'string') {\n return {\n role: 'user',\n content: [\n {\n type: 'text',\n text: message.message.content,\n },\n ],\n }\n } else {\n return {\n role: 'user',\n content: message.message.content.map(_ => ({ ..._ })),\n }\n }\n }\n return {\n role: 'user',\n content: message.message.content,\n }\n}\n\nexport function assistantMessageToMessageParam(\n message: AssistantMessage,\n addCache = false,\n): MessageParam {\n if (addCache) {\n if (typeof message.message.content === 'string') {\n return {\n role: 'assistant',\n content: [\n {\n type: 'text',\n text: message.message.content,\n },\n ],\n }\n } else {\n return {\n role: 'assistant',\n content: message.message.content.map(_ => ({ ..._ })),\n }\n }\n }\n return {\n role: 'assistant',\n content: message.message.content,\n }\n}\n\nfunction splitSysPromptPrefix(systemPrompt: string[]): string[] {\n\n const systemPromptFirstBlock = systemPrompt[0] || ''\n const systemPromptRest = systemPrompt.slice(1)\n return [systemPromptFirstBlock, systemPromptRest.join('\\n')].filter(Boolean)\n}\n\nexport async function queryLLM(\n messages: (UserMessage | AssistantMessage)[],\n systemPrompt: string[],\n maxThinkingTokens: number,\n tools: Tool[],\n signal: AbortSignal,\n options: {\n safeMode: boolean\n model: string | import('@utils/config').ModelPointerType\n prependCLISysprompt: boolean\n temperature?: number\n maxTokens?: number\n stopSequences?: string[]\n toolUseContext?: ToolUseContext\n __testModelManager?: any\n __testQueryLLMWithPromptCaching?: any\n },\n): Promise<AssistantMessage> {\n const modelManager = options.__testModelManager ?? getModelManager()\n const modelResolution = modelManager.resolveModelWithInfo(options.model)\n\n if (!modelResolution.success || !modelResolution.profile) {\n const fallbackProfile = modelManager.resolveModel(options.model)\n if (!fallbackProfile) {\n throw new Error(\n modelResolution.error || `Failed to resolve model: ${options.model}`,\n )\n }\n\n debugLogger.warn('MODEL_RESOLUTION_FALLBACK', {\n inputParam: options.model,\n error: modelResolution.error,\n fallbackModelName: fallbackProfile.modelName,\n fallbackProvider: fallbackProfile.provider,\n requestId: getCurrentRequest()?.id,\n })\n\n modelResolution.success = true\n modelResolution.profile = fallbackProfile\n }\n\n const modelProfile = modelResolution.profile\n const resolvedModel = modelProfile.modelName\n\n const toolUseContext = options.toolUseContext\n if (toolUseContext && !toolUseContext.responseState) {\n const conversationId = getConversationId(\n toolUseContext.agentId,\n toolUseContext.messageId,\n )\n const previousResponseId =\n responseStateManager.getPreviousResponseId(conversationId)\n\n toolUseContext.responseState = {\n previousResponseId,\n conversationId,\n }\n }\n\n debugLogger.api('MODEL_RESOLVED', {\n inputParam: options.model,\n resolvedModelName: resolvedModel,\n provider: modelProfile.provider,\n isPointer: ['main', 'task', 'compact', 'quick'].includes(options.model),\n hasResponseState: !!toolUseContext?.responseState,\n conversationId: toolUseContext?.responseState?.conversationId,\n requestId: getCurrentRequest()?.id,\n })\n\n const currentRequest = getCurrentRequest()\n debugLogger.api('LLM_REQUEST_START', {\n messageCount: messages.length,\n systemPromptLength: systemPrompt.join(' ').length,\n toolCount: tools.length,\n model: resolvedModel,\n originalModelParam: options.model,\n requestId: getCurrentRequest()?.id,\n })\n\n markPhase('LLM_CALL')\n\n try {\n const queryFn =\n options.__testQueryLLMWithPromptCaching ?? queryLLMWithPromptCaching\n const cleanOptions: any = { ...options }\n delete cleanOptions.__testModelManager\n delete cleanOptions.__testQueryLLMWithPromptCaching\n\n const runQuery = () =>\n queryFn(\n messages,\n systemPrompt,\n maxThinkingTokens,\n tools,\n signal,\n {\n ...cleanOptions,\n model: resolvedModel,\n modelProfile,\n toolUseContext,\n },\n )\n\n const result = options.__testQueryLLMWithPromptCaching\n ? await runQuery()\n : await withVCR(messages, runQuery)\n\n debugLogger.api('LLM_REQUEST_SUCCESS', {\n costUSD: result.costUSD,\n durationMs: result.durationMs,\n responseLength: result.message.content?.length || 0,\n requestId: getCurrentRequest()?.id,\n })\n\n if (toolUseContext?.responseState?.conversationId && result.responseId) {\n responseStateManager.setPreviousResponseId(\n toolUseContext.responseState.conversationId,\n result.responseId,\n )\n\n debugLogger.api('RESPONSE_STATE_UPDATED', {\n conversationId: toolUseContext.responseState.conversationId,\n responseId: result.responseId,\n requestId: getCurrentRequest()?.id,\n })\n }\n\n return result\n } catch (error) {\n logErrorWithDiagnosis(\n error,\n {\n messageCount: messages.length,\n systemPromptLength: systemPrompt.join(' ').length,\n model: options.model,\n toolCount: tools.length,\n phase: 'LLM_CALL',\n },\n currentRequest?.id,\n )\n\n throw error\n }\n}\n\nexport { formatSystemPromptWithContext } from '@services/systemPrompt'\n\nasync function queryLLMWithPromptCaching(\n messages: (UserMessage | AssistantMessage)[],\n systemPrompt: string[],\n maxThinkingTokens: number,\n tools: Tool[],\n signal: AbortSignal,\n options: {\n safeMode: boolean\n model: string\n prependCLISysprompt: boolean\n temperature?: number\n maxTokens?: number\n stopSequences?: string[]\n modelProfile?: ModelProfile | null\n toolUseContext?: ToolUseContext\n },\n): Promise<AssistantMessage> {\n const config = getGlobalConfig()\n const modelManager = getModelManager()\n const toolUseContext = options.toolUseContext\n\n const modelProfile = options.modelProfile || modelManager.getModel('main')\n let provider: string\n\n if (modelProfile) {\n provider = modelProfile.provider || config.primaryProvider || 'anthropic'\n } else {\n provider = config.primaryProvider || 'anthropic'\n }\n\n if (\n provider === 'anthropic' ||\n provider === 'bigdream' ||\n provider === 'opendev' ||\n provider === 'minimax-coding'\n ) {\n return queryAnthropicNative(\n messages,\n systemPrompt,\n maxThinkingTokens,\n tools,\n signal,\n { ...options, modelProfile, toolUseContext },\n )\n }\n\n return queryOpenAI(messages, systemPrompt, maxThinkingTokens, tools, signal, {\n ...options,\n modelProfile,\n toolUseContext,\n })\n}\n\nasync function queryAnthropicNative(\n messages: (UserMessage | AssistantMessage)[],\n systemPrompt: string[],\n maxThinkingTokens: number,\n tools: Tool[],\n signal: AbortSignal,\n options?: {\n safeMode: boolean\n model: string\n prependCLISysprompt: boolean\n temperature?: number\n maxTokens?: number\n stopSequences?: string[]\n modelProfile?: ModelProfile | null\n toolUseContext?: ToolUseContext\n },\n): Promise<AssistantMessage> {\n const config = getGlobalConfig()\n const modelManager = getModelManager()\n const toolUseContext = options?.toolUseContext\n\n const modelProfile = options?.modelProfile || modelManager.getModel('main')\n let anthropic: Anthropic | AnthropicBedrock | AnthropicVertex\n let model: string\n let provider: string\n\n debugLogger.api('MODEL_CONFIG_ANTHROPIC', {\n modelProfileFound: !!modelProfile,\n modelProfileId: modelProfile?.modelName,\n modelProfileName: modelProfile?.name,\n modelProfileModelName: modelProfile?.modelName,\n modelProfileProvider: modelProfile?.provider,\n modelProfileBaseURL: modelProfile?.baseURL,\n modelProfileApiKeyExists: !!modelProfile?.apiKey,\n optionsModel: options?.model,\n requestId: getCurrentRequest()?.id,\n })\n\n if (modelProfile) {\n model = modelProfile.modelName\n provider = modelProfile.provider || config.primaryProvider || 'anthropic'\n\n if (\n modelProfile.provider === 'anthropic' ||\n modelProfile.provider === 'minimax-coding'\n ) {\n const clientConfig: any = {\n apiKey: modelProfile.apiKey,\n dangerouslyAllowBrowser: true,\n maxRetries: 0,\n timeout: parseInt(process.env.API_TIMEOUT_MS || String(60 * 1000), 10),\n defaultHeaders: {\n 'x-app': 'cli',\n 'User-Agent': USER_AGENT,\n },\n }\n\n if (modelProfile.baseURL) {\n clientConfig.baseURL = modelProfile.baseURL\n }\n\n anthropic = new Anthropic(clientConfig)\n } else {\n anthropic = getAnthropicClient(model)\n }\n } else {\n const errorDetails = {\n modelProfileExists: !!modelProfile,\n modelProfileModelName: modelProfile?.modelName,\n requestedModel: options?.model,\n requestId: getCurrentRequest()?.id,\n }\n debugLogger.error('ANTHROPIC_FALLBACK_ERROR', errorDetails)\n throw new Error(\n `No valid ModelProfile available for Anthropic provider. Please configure model through /model command. Debug: ${JSON.stringify(errorDetails)}`,\n )\n }\n\n if (options?.prependCLISysprompt) {\n const [firstSyspromptBlock] = splitSysPromptPrefix(systemPrompt)\n\n systemPrompt = [getCLISyspromptPrefix(), ...systemPrompt]\n }\n\n const system: TextBlockParam[] = splitSysPromptPrefix(systemPrompt).map(\n _ => ({\n text: _,\n type: 'text',\n }),\n )\n\n const toolSchemas = await Promise.all(\n tools.map(\n async tool =>\n ({\n name: tool.name,\n description: getToolDescription(tool),\n input_schema:\n 'inputJSONSchema' in tool && tool.inputJSONSchema\n ? tool.inputJSONSchema\n : (zodToJsonSchema(tool.inputSchema as any) as any),\n }) as unknown as Anthropic.Beta.Messages.BetaTool,\n ),\n )\n\n const anthropicMessages = addCacheBreakpoints(messages)\n\n const { systemBlocks: processedSystem, messageParams: processedMessages } =\n applyCacheControlWithLimits(system, anthropicMessages)\n const startIncludingRetries = Date.now()\n\n logSystemPromptConstruction({\n basePrompt: systemPrompt.join('\\n'),\n kodeContext: generateKodeContext() || '',\n reminders: [],\n finalPrompt: systemPrompt.join('\\n'),\n })\n\n let start = Date.now()\n let attemptNumber = 0\n let response\n\n try {\n response = await withRetry(\n async attempt => {\n attemptNumber = attempt\n start = Date.now()\n\n const params: Anthropic.Beta.Messages.MessageCreateParams = {\n model,\n max_tokens:\n options?.maxTokens ?? getMaxTokensFromProfile(modelProfile),\n messages: processedMessages,\n system: processedSystem,\n tools: toolSchemas.length > 0 ? toolSchemas : undefined,\n tool_choice: toolSchemas.length > 0 ? { type: 'auto' } : undefined,\n ...(options?.temperature !== undefined\n ? { temperature: options.temperature }\n : {}),\n ...(options?.stopSequences && options.stopSequences.length > 0\n ? { stop_sequences: options.stopSequences }\n : {}),\n }\n\n if (maxThinkingTokens > 0) {\n ;(params as any).extra_headers = {\n 'anthropic-beta': 'max-tokens-3-5-sonnet-2024-07-15',\n }\n ;(params as any).thinking = { max_tokens: maxThinkingTokens }\n }\n\n debugLogger.api('ANTHROPIC_API_CALL_START_STREAMING', {\n endpoint: modelProfile?.baseURL || 'DEFAULT_ANTHROPIC',\n model,\n provider,\n apiKeyConfigured: !!modelProfile?.apiKey,\n apiKeyPrefix: modelProfile?.apiKey\n ? modelProfile.apiKey.substring(0, 8)\n : null,\n maxTokens: params.max_tokens,\n temperature: options?.temperature ?? MAIN_QUERY_TEMPERATURE,\n params: params,\n messageCount: params.messages?.length || 0,\n streamMode: true,\n toolsCount: toolSchemas.length,\n thinkingTokens: maxThinkingTokens,\n timestamp: new Date().toISOString(),\n modelProfileId: modelProfile?.modelName,\n modelProfileName: modelProfile?.name,\n })\n\n if (config.stream) {\n const stream = await anthropic.beta.messages.create(\n {\n ...params,\n stream: true,\n },\n {\n signal: signal,\n },\n )\n\n let finalResponse: any | null = null\n let messageStartEvent: any = null\n const contentBlocks: any[] = []\n const inputJSONBuffers = new Map<number, string>()\n let usage: any = null\n let stopReason: string | null = null\n let stopSequence: string | null = null\n let hasMarkedStreaming = false\n\n for await (const event of stream) {\n if (signal.aborted) {\n debugLogger.flow('STREAM_ABORTED', {\n eventType: event.type,\n timestamp: Date.now(),\n })\n throw new Error('Request was cancelled')\n }\n\n switch (event.type) {\n case 'message_start':\n messageStartEvent = event\n finalResponse = {\n ...event.message,\n content: [],\n }\n break\n\n case 'content_block_start':\n contentBlocks[event.index] = { ...event.content_block }\n const contentBlockType = (event.content_block as any).type\n if (\n contentBlockType === 'tool_use' ||\n contentBlockType === 'server_tool_use' ||\n contentBlockType === 'mcp_tool_use'\n ) {\n setRequestStatus({\n kind: 'tool',\n detail: (event.content_block as any).name,\n })\n inputJSONBuffers.set(event.index, '')\n }\n break\n\n case 'content_block_delta':\n const blockIndex = event.index\n\n if (!contentBlocks[blockIndex]) {\n contentBlocks[blockIndex] = {\n type:\n event.delta.type === 'text_delta' ? 'text' : 'tool_use',\n text: event.delta.type === 'text_delta' ? '' : undefined,\n }\n if (event.delta.type === 'input_json_delta') {\n inputJSONBuffers.set(blockIndex, '')\n }\n }\n\n if (event.delta.type === 'text_delta') {\n if (!hasMarkedStreaming) {\n setRequestStatus({ kind: 'streaming' })\n hasMarkedStreaming = true\n }\n contentBlocks[blockIndex].text += event.delta.text\n } else if (event.delta.type === 'input_json_delta') {\n const currentBuffer = inputJSONBuffers.get(blockIndex) || ''\n const nextBuffer = currentBuffer + event.delta.partial_json\n inputJSONBuffers.set(blockIndex, nextBuffer)\n\n const trimmed = nextBuffer.trim()\n if (trimmed.length === 0) {\n contentBlocks[blockIndex].input = {}\n break\n }\n\n contentBlocks[blockIndex].input =\n parseToolUsePartialJsonOrThrow(nextBuffer) ?? {}\n }\n break\n\n case 'message_delta':\n if (event.delta.stop_reason)\n stopReason = event.delta.stop_reason\n if (event.delta.stop_sequence)\n stopSequence = event.delta.stop_sequence\n if (event.usage) usage = { ...usage, ...event.usage }\n break\n\n case 'content_block_stop':\n const stopIndex = event.index\n const block = contentBlocks[stopIndex]\n\n if (\n (block?.type === 'tool_use' ||\n block?.type === 'server_tool_use' ||\n block?.type === 'mcp_tool_use') &&\n inputJSONBuffers.has(stopIndex)\n ) {\n const jsonStr = inputJSONBuffers.get(stopIndex) ?? ''\n if (block.input === undefined) {\n const trimmed = jsonStr.trim()\n if (trimmed.length === 0) {\n block.input = {}\n } else {\n block.input =\n parseToolUsePartialJsonOrThrow(jsonStr) ?? {}\n }\n }\n\n inputJSONBuffers.delete(stopIndex)\n }\n break\n\n case 'message_stop':\n inputJSONBuffers.clear()\n break\n }\n\n if (event.type === 'message_stop') {\n break\n }\n }\n\n if (!finalResponse || !messageStartEvent) {\n throw new Error('Stream ended without proper message structure')\n }\n\n finalResponse = {\n ...messageStartEvent.message,\n content: contentBlocks.filter(Boolean),\n stop_reason: stopReason,\n stop_sequence: stopSequence,\n usage: {\n ...messageStartEvent.message.usage,\n ...usage,\n },\n }\n\n return finalResponse\n } else {\n debugLogger.api('ANTHROPIC_API_CALL_START_NON_STREAMING', {\n endpoint: modelProfile?.baseURL || 'DEFAULT_ANTHROPIC',\n model,\n provider,\n apiKeyConfigured: !!modelProfile?.apiKey,\n apiKeyPrefix: modelProfile?.apiKey\n ? modelProfile.apiKey.substring(0, 8)\n : null,\n maxTokens: params.max_tokens,\n temperature: options?.temperature ?? MAIN_QUERY_TEMPERATURE,\n messageCount: params.messages?.length || 0,\n streamMode: false,\n toolsCount: toolSchemas.length,\n thinkingTokens: maxThinkingTokens,\n timestamp: new Date().toISOString(),\n modelProfileId: modelProfile?.modelName,\n modelProfileName: modelProfile?.name,\n })\n\n return await anthropic.beta.messages.create(params, {\n signal: signal,\n })\n }\n },\n { signal },\n )\n\n debugLogger.api('ANTHROPIC_API_CALL_SUCCESS', {\n content: response.content,\n })\n\n const ttftMs = start - Date.now()\n const durationMs = Date.now() - startIncludingRetries\n\n const content = response.content.map((block: ContentBlock) => {\n if (block.type === 'text') {\n return {\n type: 'text' as const,\n text: block.text,\n }\n } else if (block.type === 'tool_use') {\n return {\n type: 'tool_use' as const,\n id: block.id,\n name: block.name,\n input: block.input,\n }\n }\n return block\n })\n\n const assistantMessage: AssistantMessage = {\n message: {\n id: response.id,\n content,\n model: response.model,\n role: 'assistant',\n stop_reason: response.stop_reason,\n stop_sequence: response.stop_sequence,\n type: 'message',\n usage: response.usage,\n },\n type: 'assistant',\n uuid: nanoid() as UUID,\n durationMs,\n costUSD: 0,\n }\n\n const systemMessages = system.map(block => ({\n role: 'system',\n content: block.text,\n }))\n\n logLLMInteraction({\n systemPrompt: systemPrompt.join('\\n'),\n messages: [...systemMessages, ...anthropicMessages],\n response: response,\n usage: response.usage\n ? {\n inputTokens: response.usage.input_tokens,\n outputTokens: response.usage.output_tokens,\n }\n : undefined,\n timing: {\n start: start,\n end: Date.now(),\n },\n apiFormat: 'anthropic',\n })\n\n const inputTokens = response.usage.input_tokens\n const outputTokens = response.usage.output_tokens\n const cacheCreationInputTokens =\n response.usage.cache_creation_input_tokens ?? 0\n const cacheReadInputTokens = response.usage.cache_read_input_tokens ?? 0\n\n const costUSD =\n (inputTokens / 1_000_000) * getModelInputTokenCostUSD(model) +\n (outputTokens / 1_000_000) * getModelOutputTokenCostUSD(model) +\n (cacheCreationInputTokens / 1_000_000) *\n getModelInputTokenCostUSD(model) +\n (cacheReadInputTokens / 1_000_000) *\n (getModelInputTokenCostUSD(model) * 0.1)\n\n assistantMessage.costUSD = costUSD\n addToTotalCost(costUSD, durationMs)\n\n return assistantMessage\n } catch (error) {\n return getAssistantMessageFromError(error)\n }\n}\n\nfunction getAssistantMessageFromError(error: unknown): AssistantMessage {\n if (error instanceof Error && error.message.includes('prompt is too long')) {\n return createAssistantAPIErrorMessage(PROMPT_TOO_LONG_ERROR_MESSAGE)\n }\n if (\n error instanceof Error &&\n error.message.includes('Your credit balance is too low')\n ) {\n return createAssistantAPIErrorMessage(CREDIT_BALANCE_TOO_LOW_ERROR_MESSAGE)\n }\n if (\n error instanceof Error &&\n error.message.toLowerCase().includes('x-api-key')\n ) {\n return createAssistantAPIErrorMessage(INVALID_API_KEY_ERROR_MESSAGE)\n }\n if (error instanceof Error) {\n if (process.env.NODE_ENV === 'development') {\n debugLogger.error('ANTHROPIC_API_ERROR', {\n message: error.message,\n stack: error.stack,\n })\n }\n return createAssistantAPIErrorMessage(\n `${API_ERROR_MESSAGE_PREFIX}: ${error.message}`,\n )\n }\n return createAssistantAPIErrorMessage(API_ERROR_MESSAGE_PREFIX)\n}\n\nfunction addCacheBreakpoints(\n messages: (UserMessage | AssistantMessage)[],\n): MessageParam[] {\n return messages.map((msg, index) => {\n return msg.type === 'user'\n ? userMessageToMessageParam(msg, index > messages.length - 3)\n : assistantMessageToMessageParam(msg, index > messages.length - 3)\n })\n}\n\nasync function queryOpenAI(\n messages: (UserMessage | AssistantMessage)[],\n systemPrompt: string[],\n maxThinkingTokens: number,\n tools: Tool[],\n signal: AbortSignal,\n options?: {\n safeMode: boolean\n model: string\n prependCLISysprompt: boolean\n temperature?: number\n maxTokens?: number\n stopSequences?: string[]\n modelProfile?: ModelProfile | null\n toolUseContext?: ToolUseContext\n },\n): Promise<AssistantMessage> {\n const config = getGlobalConfig()\n const modelManager = getModelManager()\n const toolUseContext = options?.toolUseContext\n\n const modelProfile = options?.modelProfile || modelManager.getModel('main')\n let model: string\n\n const currentRequest = getCurrentRequest()\n debugLogger.api('MODEL_CONFIG_OPENAI', {\n modelProfileFound: !!modelProfile,\n modelProfileId: modelProfile?.modelName,\n modelProfileName: modelProfile?.name,\n modelProfileModelName: modelProfile?.modelName,\n modelProfileProvider: modelProfile?.provider,\n modelProfileBaseURL: modelProfile?.baseURL,\n modelProfileApiKeyExists: !!modelProfile?.apiKey,\n optionsModel: options?.model,\n requestId: getCurrentRequest()?.id,\n })\n\n if (modelProfile) {\n model = modelProfile.modelName\n } else {\n model = options?.model || modelProfile?.modelName || ''\n }\n if (options?.prependCLISysprompt) {\n const [firstSyspromptBlock] = splitSysPromptPrefix(systemPrompt)\n\n systemPrompt = [getCLISyspromptPrefix() + systemPrompt]\n }\n\n const system: TextBlockParam[] = splitSysPromptPrefix(systemPrompt).map(\n _ => ({\n ...(PROMPT_CACHING_ENABLED\n ? { cache_control: { type: 'ephemeral' } }\n : {}),\n text: _,\n type: 'text',\n }),\n )\n\n const toolSchemas = await Promise.all(\n tools.map(\n async _ =>\n ({\n type: 'function',\n function: {\n name: _.name,\n description: await _.prompt({\n safeMode: options?.safeMode,\n }),\n parameters:\n 'inputJSONSchema' in _ && _.inputJSONSchema\n ? _.inputJSONSchema\n : (zodToJsonSchema(_.inputSchema as any) as any),\n },\n }) as OpenAI.ChatCompletionTool,\n ),\n )\n\n const openaiSystem = system.map(\n s =>\n ({\n role: 'system',\n content: s.text,\n }) as OpenAI.ChatCompletionMessageParam,\n )\n\n const openaiMessages = convertAnthropicMessagesToOpenAIMessages(messages)\n\n logSystemPromptConstruction({\n basePrompt: systemPrompt.join('\\n'),\n kodeContext: generateKodeContext() || '',\n reminders: [],\n finalPrompt: systemPrompt.join('\\n'),\n })\n\n let start = Date.now()\n\n type AdapterExecutionContext = {\n adapter: ReturnType<typeof ModelAdapterFactory.createAdapter>\n request: any\n shouldUseResponses: boolean\n }\n\n type QueryResult = {\n assistantMessage: AssistantMessage\n rawResponse?: any\n apiFormat: 'openai'\n }\n\n let adapterContext: AdapterExecutionContext | null = null\n\n if (modelProfile && modelProfile.modelName) {\n debugLogger.api('CHECKING_ADAPTER_SYSTEM', {\n modelProfileName: modelProfile.modelName,\n modelName: modelProfile.modelName,\n provider: modelProfile.provider,\n requestId: getCurrentRequest()?.id,\n })\n\n const USE_NEW_ADAPTER_SYSTEM = process.env.USE_NEW_ADAPTERS !== 'false'\n\n if (USE_NEW_ADAPTER_SYSTEM) {\n const shouldUseResponses =\n ModelAdapterFactory.shouldUseResponsesAPI(modelProfile)\n\n if (shouldUseResponses) {\n const adapter = ModelAdapterFactory.createAdapter(modelProfile)\n const reasoningEffort = await getReasoningEffort(modelProfile, messages)\n\n let verbosity: 'low' | 'medium' | 'high' = 'medium'\n const modelNameLower = modelProfile.modelName.toLowerCase()\n if (modelNameLower.includes('high')) {\n verbosity = 'high'\n } else if (modelNameLower.includes('low')) {\n verbosity = 'low'\n }\n\n const unifiedParams: UnifiedRequestParams = {\n messages: openaiMessages,\n systemPrompt: openaiSystem.map(s => s.content as string),\n tools,\n maxTokens:\n options?.maxTokens ?? getMaxTokensFromProfile(modelProfile),\n stream: config.stream,\n reasoningEffort: reasoningEffort as any,\n temperature:\n options?.temperature ??\n (isGPT5Model(model) ? 1 : MAIN_QUERY_TEMPERATURE),\n previousResponseId: toolUseContext?.responseState?.previousResponseId,\n verbosity,\n ...(options?.stopSequences && options.stopSequences.length > 0\n ? { stopSequences: options.stopSequences }\n : {}),\n }\n\n adapterContext = {\n adapter,\n request: adapter.createRequest(unifiedParams),\n shouldUseResponses: true,\n }\n }\n }\n }\n\n let queryResult: QueryResult\n let startIncludingRetries = Date.now()\n\n try {\n queryResult = await withRetry(\n async () => {\n start = Date.now()\n\n if (adapterContext) {\n if (adapterContext.shouldUseResponses) {\n const { callGPT5ResponsesAPI } = await import('./openai')\n\n const response = await callGPT5ResponsesAPI(\n modelProfile,\n adapterContext.request,\n signal,\n )\n\n const unifiedResponse =\n await adapterContext.adapter.parseResponse(response)\n\n const assistantMessage = buildAssistantMessageFromUnifiedResponse(\n unifiedResponse,\n start,\n )\n assistantMessage.message.usage = normalizeUsage(\n assistantMessage.message.usage,\n )\n\n return {\n assistantMessage,\n rawResponse: unifiedResponse,\n apiFormat: 'openai',\n }\n }\n\n const s = await getCompletionWithProfile(\n modelProfile,\n adapterContext.request,\n 0,\n 10,\n signal,\n )\n let finalResponse\n if (config.stream) {\n finalResponse = await handleMessageStream(\n s as ChatCompletionStream,\n signal,\n )\n } else {\n finalResponse = s\n }\n\n const message = convertOpenAIResponseToAnthropic(finalResponse, tools)\n const assistantMsg: AssistantMessage = {\n type: 'assistant',\n message: message as any,\n costUSD: 0,\n durationMs: Date.now() - start,\n uuid: `${Date.now()}-${Math.random()\n .toString(36)\n .substr(2, 9)}` as any,\n }\n\n return {\n assistantMessage: assistantMsg,\n rawResponse: finalResponse,\n apiFormat: 'openai',\n }\n }\n\n const maxTokens =\n options?.maxTokens ?? getMaxTokensFromProfile(modelProfile)\n const isGPT5 = isGPT5Model(model)\n\n const opts: OpenAI.ChatCompletionCreateParams = {\n model,\n ...(isGPT5\n ? { max_completion_tokens: maxTokens }\n : { max_tokens: maxTokens }),\n messages: [...openaiSystem, ...openaiMessages],\n temperature:\n options?.temperature ?? (isGPT5 ? 1 : MAIN_QUERY_TEMPERATURE),\n }\n if (options?.stopSequences && options.stopSequences.length > 0) {\n ;(opts as any).stop = options.stopSequences\n }\n if (config.stream) {\n ;(opts as OpenAI.ChatCompletionCreateParams).stream = true\n opts.stream_options = {\n include_usage: true,\n }\n }\n\n if (toolSchemas.length > 0) {\n opts.tools = toolSchemas\n opts.tool_choice = 'auto'\n }\n const reasoningEffort = await getReasoningEffort(modelProfile, messages)\n if (reasoningEffort) {\n opts.reasoning_effort = reasoningEffort\n }\n\n const completionFunction = isGPT5Model(modelProfile?.modelName || '')\n ? getGPT5CompletionWithProfile\n : getCompletionWithProfile\n const s = await completionFunction(modelProfile, opts, 0, 10, signal)\n let finalResponse\n if (opts.stream) {\n finalResponse = await handleMessageStream(\n s as ChatCompletionStream,\n signal,\n )\n } else {\n finalResponse = s\n }\n const message = convertOpenAIResponseToAnthropic(finalResponse, tools)\n const assistantMsg: AssistantMessage = {\n type: 'assistant',\n message: message as any,\n costUSD: 0,\n durationMs: Date.now() - start,\n uuid: `${Date.now()}-${Math.random()\n .toString(36)\n .substr(2, 9)}` as any,\n }\n return {\n assistantMessage: assistantMsg,\n rawResponse: finalResponse,\n apiFormat: 'openai',\n }\n },\n { signal },\n )\n } catch (error) {\n logError(error)\n return getAssistantMessageFromError(error)\n }\n\n const durationMs = Date.now() - start\n const durationMsIncludingRetries = Date.now() - startIncludingRetries\n\n const assistantMessage = queryResult.assistantMessage\n assistantMessage.message.content = normalizeContentFromAPI(\n assistantMessage.message.content || [],\n )\n\n const normalizedUsage = normalizeUsage(assistantMessage.message.usage)\n assistantMessage.message.usage = normalizedUsage\n\n const inputTokens = normalizedUsage.input_tokens ?? 0\n const outputTokens = normalizedUsage.output_tokens ?? 0\n const cacheReadInputTokens = normalizedUsage.cache_read_input_tokens ?? 0\n const cacheCreationInputTokens =\n normalizedUsage.cache_creation_input_tokens ?? 0\n\n const costUSD =\n (inputTokens / 1_000_000) * SONNET_COST_PER_MILLION_INPUT_TOKENS +\n (outputTokens / 1_000_000) * SONNET_COST_PER_MILLION_OUTPUT_TOKENS +\n (cacheReadInputTokens / 1_000_000) *\n SONNET_COST_PER_MILLION_PROMPT_CACHE_READ_TOKENS +\n (cacheCreationInputTokens / 1_000_000) *\n SONNET_COST_PER_MILLION_PROMPT_CACHE_WRITE_TOKENS\n\n addToTotalCost(costUSD, durationMsIncludingRetries)\n\n logLLMInteraction({\n systemPrompt: systemPrompt.join('\\n'),\n messages: [...openaiSystem, ...openaiMessages],\n response: assistantMessage.message || queryResult.rawResponse,\n usage: {\n inputTokens,\n outputTokens,\n },\n timing: {\n start,\n end: Date.now(),\n },\n apiFormat: queryResult.apiFormat,\n })\n\n assistantMessage.costUSD = costUSD\n assistantMessage.durationMs = durationMs\n assistantMessage.uuid = assistantMessage.uuid || (randomUUID() as UUID)\n\n return assistantMessage\n}\n\nfunction getMaxTokensFromProfile(modelProfile: any): number {\n return modelProfile?.maxTokens || 8000\n}\n\nfunction buildAssistantMessageFromUnifiedResponse(\n unifiedResponse: any,\n startTime: number,\n): AssistantMessage {\n const contentBlocks = [...(unifiedResponse.content || [])]\n\n if (unifiedResponse.toolCalls && unifiedResponse.toolCalls.length > 0) {\n for (const toolCall of unifiedResponse.toolCalls) {\n const tool = toolCall.function\n const toolName = tool?.name\n let toolArgs = {}\n try {\n toolArgs = tool?.arguments ? JSON.parse(tool.arguments) : {}\n } catch (e) {\n }\n\n contentBlocks.push({\n type: 'tool_use',\n input: toolArgs,\n name: toolName,\n id: toolCall.id?.length > 0 ? toolCall.id : nanoid(),\n })\n }\n }\n\n return {\n type: 'assistant',\n message: {\n role: 'assistant',\n content: contentBlocks,\n usage: {\n input_tokens:\n unifiedResponse.usage?.promptTokens ??\n unifiedResponse.usage?.input_tokens ??\n 0,\n output_tokens:\n unifiedResponse.usage?.completionTokens ??\n unifiedResponse.usage?.output_tokens ??\n 0,\n prompt_tokens:\n unifiedResponse.usage?.promptTokens ??\n unifiedResponse.usage?.input_tokens ??\n 0,\n completion_tokens:\n unifiedResponse.usage?.completionTokens ??\n unifiedResponse.usage?.output_tokens ??\n 0,\n promptTokens:\n unifiedResponse.usage?.promptTokens ??\n unifiedResponse.usage?.input_tokens ??\n 0,\n completionTokens:\n unifiedResponse.usage?.completionTokens ??\n unifiedResponse.usage?.output_tokens ??\n 0,\n totalTokens:\n unifiedResponse.usage?.totalTokens ??\n (unifiedResponse.usage?.promptTokens ??\n unifiedResponse.usage?.input_tokens ??\n 0) +\n (unifiedResponse.usage?.completionTokens ??\n unifiedResponse.usage?.output_tokens ??\n 0),\n },\n },\n costUSD: 0,\n durationMs: Date.now() - startTime,\n uuid: `${Date.now()}-${Math.random().toString(36).substr(2, 9)}` as any,\n responseId: unifiedResponse.responseId,\n }\n}\n\nfunction normalizeUsage(usage?: any) {\n if (!usage) {\n return {\n input_tokens: 0,\n output_tokens: 0,\n cache_read_input_tokens: 0,\n cache_creation_input_tokens: 0,\n }\n }\n\n const inputTokens =\n usage.input_tokens ?? usage.prompt_tokens ?? usage.inputTokens ?? 0\n const outputTokens =\n usage.output_tokens ?? usage.completion_tokens ?? usage.outputTokens ?? 0\n const cacheReadInputTokens =\n usage.cache_read_input_tokens ??\n usage.prompt_token_details?.cached_tokens ??\n usage.cacheReadInputTokens ??\n 0\n const cacheCreationInputTokens =\n usage.cache_creation_input_tokens ?? usage.cacheCreatedInputTokens ?? 0\n\n return {\n ...usage,\n input_tokens: inputTokens,\n output_tokens: outputTokens,\n cache_read_input_tokens: cacheReadInputTokens,\n cache_creation_input_tokens: cacheCreationInputTokens,\n }\n}\n\nfunction getModelInputTokenCostUSD(model: string): number {\n for (const providerModels of Object.values(models)) {\n const modelInfo = providerModels.find((m: any) => m.model === model)\n if (modelInfo) {\n return modelInfo.input_cost_per_token || 0\n }\n }\n return 0.000003\n}\n\nfunction getModelOutputTokenCostUSD(model: string): number {\n for (const providerModels of Object.values(models)) {\n const modelInfo = providerModels.find((m: any) => m.model === model)\n if (modelInfo) {\n return modelInfo.output_cost_per_token || 0\n }\n }\n return 0.000015\n}\n\nexport async function queryModel(\n modelPointer: import('@utils/config').ModelPointerType,\n messages: (UserMessage | AssistantMessage)[],\n systemPrompt: string[] = [],\n signal?: AbortSignal,\n): Promise<AssistantMessage> {\n return queryLLM(\n messages,\n systemPrompt,\n 0,\n [],\n signal || new AbortController().signal,\n {\n safeMode: false,\n model: modelPointer,\n prependCLISysprompt: true,\n },\n )\n}\n\n\nexport async function queryQuick({\n systemPrompt = [],\n userPrompt,\n assistantPrompt,\n enablePromptCaching = false,\n signal,\n}: {\n systemPrompt?: string[]\n userPrompt: string\n assistantPrompt?: string\n enablePromptCaching?: boolean\n signal?: AbortSignal\n}): Promise<AssistantMessage> {\n const messages = [\n {\n message: { role: 'user', content: userPrompt },\n type: 'user',\n uuid: randomUUID(),\n },\n ] as (UserMessage | AssistantMessage)[]\n\n return queryModel('quick', messages, systemPrompt, signal)\n}\n", "\nimport { MACRO } from '@constants/macros'\nimport { PRODUCT_COMMAND } from '@constants/product'\n\nexport const USER_AGENT = `${PRODUCT_COMMAND}/${MACRO.VERSION} (${process.env.USER_TYPE})`\n", "import { createHash, type UUID } from 'crypto'\nimport { mkdirSync, readFileSync, writeFileSync } from 'fs'\nimport { dirname } from 'path'\nimport type { AssistantMessage, UserMessage } from '@query'\nimport { existsSync } from 'fs'\nimport { env } from '@utils/config/env'\nimport { getCwd } from '@utils/state'\nimport * as path from 'path'\nimport { mapValues } from 'lodash-es'\nimport type { ContentBlock } from '@anthropic-ai/sdk/resources/index.mjs'\n\nexport async function withVCR(\n messages: (UserMessage | AssistantMessage)[],\n f: () => Promise<AssistantMessage>,\n): Promise<AssistantMessage> {\n if (process.env.NODE_ENV !== 'test') {\n return await f()\n }\n\n const dehydratedInput = mapMessages(\n messages.map(_ => _.message.content),\n dehydrateValue,\n )\n const filename = `./fixtures/${dehydratedInput.map(_ => createHash('sha1').update(JSON.stringify(_)).digest('hex').slice(0, 6)).join('-')}.json`\n\n if (existsSync(filename)) {\n const cached = JSON.parse(readFileSync(filename, 'utf-8'))\n return mapAssistantMessage(cached.output, hydrateValue)\n }\n\n if (env.isCI) {\n process.stderr.write(\n `Anthropic API fixture missing. Re-run bun test locally, then commit the result. ${JSON.stringify({ input: dehydratedInput }, null, 2)}\\n`,\n )\n }\n\n const result = await f()\n if (env.isCI) {\n return result\n }\n\n if (!existsSync(dirname(filename))) {\n mkdirSync(dirname(filename), { recursive: true })\n }\n writeFileSync(\n filename,\n JSON.stringify(\n {\n input: dehydratedInput,\n output: mapAssistantMessage(result, dehydrateValue),\n },\n null,\n 2,\n ),\n )\n return result\n}\n\nfunction mapMessages(\n messages: (UserMessage | AssistantMessage)['message']['content'][],\n f: (s: unknown) => unknown,\n): (UserMessage | AssistantMessage)['message']['content'][] {\n return messages.map(_ => {\n if (typeof _ === 'string') {\n return f(_)\n }\n return _.map(_ => {\n switch (_.type) {\n case 'tool_result':\n if (typeof _.content === 'string') {\n return { ..._, content: f(_.content) }\n }\n if (Array.isArray(_.content)) {\n return {\n ..._,\n content: _.content.map(_ => {\n switch (_.type) {\n case 'text':\n return { ..._, text: f(_.text) }\n case 'image':\n return _\n }\n }),\n }\n }\n return _\n case 'text':\n return { ..._, text: f(_.text) }\n case 'tool_use':\n return {\n ..._,\n input: mapValues(_.input as Record<string, unknown>, f),\n }\n case 'image':\n return _\n }\n })\n }) as (UserMessage | AssistantMessage)['message']['content'][]\n}\n\nfunction mapAssistantMessage(\n message: AssistantMessage,\n f: (s: unknown) => unknown,\n): AssistantMessage {\n return {\n durationMs: 'DURATION' as unknown as number,\n costUSD: 'COST' as unknown as number,\n uuid: 'UUID' as unknown as UUID,\n message: {\n ...message.message,\n content: message.message.content\n .map(_ => {\n switch (_.type) {\n case 'text':\n return {\n ..._,\n text: f(_.text) as string,\n citations: _.citations || [],\n }\n case 'tool_use':\n return {\n ..._,\n input: mapValues(_.input as Record<string, unknown>, f),\n }\n default:\n return _\n }\n })\n .filter(Boolean) as ContentBlock[],\n },\n type: 'assistant',\n }\n}\n\nfunction dehydrateValue(s: unknown): unknown {\n if (typeof s !== 'string') {\n return s\n }\n const s1 = s\n .replace(/num_files=\"\\d+\"/g, 'num_files=\"[NUM]\"')\n .replace(/duration_ms=\"\\d+\"/g, 'duration_ms=\"[DURATION]\"')\n .replace(/cost_usd=\"\\d+\"/g, 'cost_usd=\"[COST]\"')\n .replace(/\\//g, path.sep)\n .replaceAll(getCwd(), '[CWD]')\n if (s1.includes('Files modified by user:')) {\n return 'Files modified by user: [FILES]'\n }\n return s1\n}\n\nfunction hydrateValue(s: unknown): unknown {\n if (typeof s !== 'string') {\n return s\n }\n return s\n .replaceAll('[NUM]', '1')\n .replaceAll('[DURATION]', '100')\n .replaceAll('[CWD]', getCwd())\n}\n", "import {\n ModelCapabilities,\n UnifiedRequestParams,\n UnifiedResponse,\n} from '@kode-types/modelCapabilities'\nimport { ModelProfile } from '@utils/config'\nimport { Tool } from '@tool'\n\ninterface TokenUsage {\n input: number\n output: number\n total?: number\n reasoning?: number\n}\n\nexport type StreamingEvent =\n | { type: 'message_start'; message: any; responseId: string }\n | { type: 'text_delta'; delta: string; responseId: string }\n | { type: 'tool_request'; tool: any }\n | { type: 'usage'; usage: TokenUsage }\n | { type: 'message_stop'; message: any }\n | { type: 'error'; error: string }\n\nfunction normalizeTokens(apiResponse: any): TokenUsage {\n if (!apiResponse || typeof apiResponse !== 'object') {\n return { input: 0, output: 0 }\n }\n\n const input =\n Number(\n apiResponse.prompt_tokens ??\n apiResponse.input_tokens ??\n apiResponse.promptTokens,\n ) || 0\n const output =\n Number(\n apiResponse.completion_tokens ??\n apiResponse.output_tokens ??\n apiResponse.completionTokens,\n ) || 0\n const total =\n Number(apiResponse.total_tokens ?? apiResponse.totalTokens) || undefined\n const reasoning =\n Number(apiResponse.reasoning_tokens ?? apiResponse.reasoningTokens) ||\n undefined\n\n return {\n input,\n output,\n total: total && total > 0 ? total : undefined,\n reasoning: reasoning && reasoning > 0 ? reasoning : undefined,\n }\n}\n\nexport { type TokenUsage, normalizeTokens }\n\nexport abstract class ModelAPIAdapter {\n protected cumulativeUsage: TokenUsage = { input: 0, output: 0 }\n\n constructor(\n protected capabilities: ModelCapabilities,\n protected modelProfile: ModelProfile,\n ) {}\n\n abstract createRequest(params: UnifiedRequestParams): any\n abstract parseResponse(response: any): Promise<UnifiedResponse>\n abstract buildTools(tools: Tool[]): any\n\n async *parseStreamingResponse?(\n response: any,\n signal?: AbortSignal,\n ): AsyncGenerator<StreamingEvent> {\n return\n yield\n }\n\n protected resetCumulativeUsage(): void {\n this.cumulativeUsage = { input: 0, output: 0 }\n }\n\n protected updateCumulativeUsage(usage: TokenUsage): void {\n this.cumulativeUsage.input += usage.input\n this.cumulativeUsage.output += usage.output\n if (usage.total) {\n this.cumulativeUsage.total =\n (this.cumulativeUsage.total || 0) + usage.total\n }\n if (usage.reasoning) {\n this.cumulativeUsage.reasoning =\n (this.cumulativeUsage.reasoning || 0) + usage.reasoning\n }\n }\n\n protected getMaxTokensParam(): string {\n return this.capabilities.parameters.maxTokensField\n }\n\n protected getTemperature(): number {\n if (this.capabilities.parameters.temperatureMode === 'fixed_one') {\n return 1\n }\n if (this.capabilities.parameters.temperatureMode === 'restricted') {\n return Math.min(1, 0.7)\n }\n return 0.7\n }\n\n protected shouldIncludeReasoningEffort(): boolean {\n return this.capabilities.parameters.supportsReasoningEffort\n }\n\n protected shouldIncludeVerbosity(): boolean {\n return this.capabilities.parameters.supportsVerbosity\n }\n}\n", "import { ModelAPIAdapter, StreamingEvent, normalizeTokens } from './base'\nimport {\n UnifiedRequestParams,\n UnifiedResponse,\n ModelCapabilities,\n ReasoningStreamingContext,\n} from '@kode-types/modelCapabilities'\nimport { ModelProfile } from '@utils/config'\nimport { Tool, getToolDescription } from '@tool'\nimport { zodToJsonSchema } from 'zod-to-json-schema'\nimport { debug as debugLogger } from '@utils/log/debugLogger'\nimport { logError } from '@utils/log'\n\nexport { normalizeTokens, type StreamingEvent }\n\nexport abstract class OpenAIAdapter extends ModelAPIAdapter {\n constructor(capabilities: ModelCapabilities, modelProfile: ModelProfile) {\n super(capabilities, modelProfile)\n }\n\n async parseResponse(response: any): Promise<UnifiedResponse> {\n if (response?.body instanceof ReadableStream) {\n const { assistantMessage } =\n await this.parseStreamingOpenAIResponse(response)\n\n return {\n id: assistantMessage.responseId,\n content: assistantMessage.message.content,\n toolCalls: assistantMessage.message.content\n .filter((block: any) => block.type === 'tool_use')\n .map((block: any) => ({\n id: block.id,\n type: 'function',\n function: {\n name: block.name,\n arguments: JSON.stringify(block.input),\n },\n })),\n usage: this.normalizeUsageForAdapter(assistantMessage.message.usage),\n responseId: assistantMessage.responseId,\n }\n }\n\n return this.parseNonStreamingResponse(response)\n }\n\n async *parseStreamingResponse(response: any): AsyncGenerator<StreamingEvent> {\n const reader = response.body.getReader()\n const decoder = new TextDecoder()\n let buffer = ''\n\n let responseId = response.id || `openai_${Date.now()}`\n let hasStarted = false\n let accumulatedContent = ''\n\n const reasoningContext: ReasoningStreamingContext = {\n thinkOpen: false,\n thinkClosed: false,\n sawAnySummary: false,\n pendingSummaryParagraph: false,\n }\n\n try {\n while (true) {\n const { done, value } = await reader.read()\n if (done) break\n\n buffer += decoder.decode(value, { stream: true })\n const lines = buffer.split('\\n')\n buffer = lines.pop() || ''\n\n for (const line of lines) {\n if (line.trim()) {\n const parsed = this.parseSSEChunk(line)\n if (parsed) {\n if (parsed.id) {\n responseId = parsed.id\n }\n\n yield* this.processStreamingChunk(\n parsed,\n responseId,\n hasStarted,\n accumulatedContent,\n reasoningContext,\n )\n\n const stateUpdate = this.updateStreamingState(\n parsed,\n accumulatedContent,\n )\n if (stateUpdate.content) accumulatedContent = stateUpdate.content\n if (stateUpdate.hasStarted) hasStarted = true\n }\n }\n }\n }\n } catch (error) {\n logError(error)\n debugLogger.warn('OPENAI_ADAPTER_STREAM_READ_ERROR', {\n error: error instanceof Error ? error.message : String(error),\n })\n yield {\n type: 'error',\n error: error instanceof Error ? error.message : String(error),\n }\n } finally {\n reader.releaseLock()\n }\n\n const finalContent = accumulatedContent\n ? [{ type: 'text', text: accumulatedContent, citations: [] }]\n : [{ type: 'text', text: '', citations: [] }]\n\n yield {\n type: 'message_stop',\n message: {\n id: responseId,\n role: 'assistant',\n content: finalContent,\n responseId,\n },\n }\n }\n\n protected parseSSEChunk(line: string): any | null {\n if (line.startsWith('data: ')) {\n const data = line.slice(6).trim()\n if (data === '[DONE]') {\n return null\n }\n if (data) {\n try {\n return JSON.parse(data)\n } catch (error) {\n logError(error)\n debugLogger.warn('OPENAI_ADAPTER_SSE_PARSE_ERROR', {\n error: error instanceof Error ? error.message : String(error),\n })\n return null\n }\n }\n }\n return null\n }\n\n protected handleTextDelta(\n delta: string,\n responseId: string,\n hasStarted: boolean,\n ): StreamingEvent[] {\n const events: StreamingEvent[] = []\n\n if (!hasStarted && delta) {\n events.push({\n type: 'message_start',\n message: {\n role: 'assistant',\n content: [],\n },\n responseId,\n })\n }\n\n if (delta) {\n events.push({\n type: 'text_delta',\n delta,\n responseId,\n })\n }\n\n return events\n }\n\n protected normalizeUsageForAdapter(usage?: any) {\n if (!usage) {\n return {\n input_tokens: 0,\n output_tokens: 0,\n promptTokens: 0,\n completionTokens: 0,\n totalTokens: 0,\n reasoningTokens: 0,\n }\n }\n\n const inputTokens =\n usage.input_tokens ?? usage.prompt_tokens ?? usage.promptTokens ?? 0\n const outputTokens =\n usage.output_tokens ??\n usage.completion_tokens ??\n usage.completionTokens ??\n 0\n\n return {\n ...usage,\n input_tokens: inputTokens,\n output_tokens: outputTokens,\n promptTokens: inputTokens,\n completionTokens: outputTokens,\n totalTokens: usage.totalTokens ?? inputTokens + outputTokens,\n reasoningTokens: usage.reasoningTokens ?? 0,\n }\n }\n\n protected abstract processStreamingChunk(\n parsed: any,\n responseId: string,\n hasStarted: boolean,\n accumulatedContent: string,\n reasoningContext?: ReasoningStreamingContext,\n ): AsyncGenerator<StreamingEvent>\n\n protected abstract updateStreamingState(\n parsed: any,\n accumulatedContent: string,\n ): { content?: string; hasStarted?: boolean }\n\n protected abstract parseNonStreamingResponse(response: any): UnifiedResponse\n\n protected abstract parseStreamingOpenAIResponse(\n response: any,\n ): Promise<{ assistantMessage: any; rawResponse: any }>\n\n public buildTools(tools: Tool[]): any[] {\n return tools.map(tool => ({\n type: 'function',\n function: {\n name: tool.name,\n description: getToolDescription(tool),\n parameters: zodToJsonSchema(tool.inputSchema as any) as any,\n },\n }))\n }\n}\n", "import { OpenAIAdapter, StreamingEvent, normalizeTokens } from './openaiAdapter'\nimport {\n UnifiedRequestParams,\n UnifiedResponse,\n ReasoningStreamingContext,\n} from '@kode-types/modelCapabilities'\nimport { Tool, getToolDescription } from '@tool'\nimport { zodToJsonSchema } from 'zod-to-json-schema'\nimport { processResponsesStream } from './responsesStreaming'\nimport { debug as debugLogger } from '@utils/log/debugLogger'\nimport { logError } from '@utils/log'\n\nexport class ResponsesAPIAdapter extends OpenAIAdapter {\n createRequest(params: UnifiedRequestParams): any {\n const {\n messages,\n systemPrompt,\n tools,\n maxTokens,\n reasoningEffort,\n stopSequences,\n } = params\n\n const request: any = {\n model: this.modelProfile.modelName,\n input: this.convertMessagesToInput(messages),\n instructions: this.buildInstructions(systemPrompt),\n }\n\n const maxTokensField = this.getMaxTokensParam()\n request[maxTokensField] = maxTokens\n\n if (stopSequences && stopSequences.length > 0) {\n request.stop = stopSequences\n }\n\n request.stream =\n params.stream !== false && this.capabilities.streaming.supported\n\n const temperature = this.getTemperature()\n if (temperature !== undefined) {\n request.temperature = temperature\n }\n\n const include: string[] = []\n if (\n this.capabilities.parameters.supportsReasoningEffort &&\n (this.shouldIncludeReasoningEffort() || reasoningEffort)\n ) {\n include.push('reasoning.encrypted_content')\n request.reasoning = {\n effort:\n reasoningEffort || this.modelProfile.reasoningEffort || 'medium',\n }\n }\n\n if (\n this.capabilities.parameters.supportsVerbosity &&\n this.shouldIncludeVerbosity()\n ) {\n let defaultVerbosity: 'low' | 'medium' | 'high' = 'medium'\n if (params.verbosity) {\n defaultVerbosity = params.verbosity\n } else {\n const modelNameLower = this.modelProfile.modelName.toLowerCase()\n if (modelNameLower.includes('high')) {\n defaultVerbosity = 'high'\n } else if (modelNameLower.includes('low')) {\n defaultVerbosity = 'low'\n }\n }\n\n request.text = {\n verbosity: defaultVerbosity,\n }\n }\n\n if (tools && tools.length > 0) {\n request.tools = this.buildTools(tools)\n }\n\n request.tool_choice = 'auto'\n\n if (this.capabilities.toolCalling.supportsParallelCalls) {\n request.parallel_tool_calls = true\n }\n\n request.store = false\n\n if (\n params.previousResponseId &&\n this.capabilities.stateManagement.supportsPreviousResponseId\n ) {\n request.previous_response_id = params.previousResponseId\n }\n\n if (include.length > 0) {\n request.include = include\n }\n\n return request\n }\n\n buildTools(tools: Tool[]): any[] {\n return tools.map(tool => {\n let parameters: Record<string, unknown> | undefined =\n tool.inputJSONSchema as any\n\n if (!parameters && tool.inputSchema) {\n const isPlainObject = (obj: any): boolean => {\n return obj !== null && typeof obj === 'object' && !Array.isArray(obj)\n }\n\n if (\n isPlainObject(tool.inputSchema) &&\n ('type' in (tool.inputSchema as any) ||\n 'properties' in (tool.inputSchema as any))\n ) {\n parameters = tool.inputSchema as any\n } else {\n try {\n parameters = zodToJsonSchema(tool.inputSchema as any) as any\n } catch (error) {\n logError(error)\n debugLogger.warn('RESPONSES_API_TOOL_SCHEMA_CONVERSION_FAILED', {\n toolName: tool.name,\n error: error instanceof Error ? error.message : String(error),\n })\n parameters = { type: 'object', properties: {} }\n }\n }\n }\n\n return {\n type: 'function',\n name: tool.name,\n description: getToolDescription(tool),\n parameters: (parameters as any) || { type: 'object', properties: {} },\n }\n })\n }\n\n async parseResponse(response: any): Promise<UnifiedResponse> {\n if (response?.body instanceof ReadableStream) {\n const { assistantMessage } = await processResponsesStream(\n this.parseStreamingResponse(response),\n Date.now(),\n response.id ?? `resp_${Date.now()}`,\n )\n\n const hasToolUseBlocks = assistantMessage.message.content.some(\n (block: any) => block.type === 'tool_use',\n )\n\n return {\n id: assistantMessage.responseId,\n content: assistantMessage.message.content,\n toolCalls: hasToolUseBlocks ? [] : [],\n usage: this.normalizeUsageForAdapter(assistantMessage.message.usage),\n responseId: assistantMessage.responseId,\n }\n }\n\n return this.parseNonStreamingResponse(response)\n }\n\n protected parseNonStreamingResponse(response: any): UnifiedResponse {\n let content = response.output_text || ''\n\n let reasoningContent = ''\n if (response.output && Array.isArray(response.output)) {\n const messageItems = response.output.filter(\n item => item.type === 'message',\n )\n if (messageItems.length > 0) {\n content = messageItems\n .map(item => {\n if (item.content && Array.isArray(item.content)) {\n return item.content\n .filter(c => c.type === 'text')\n .map(c => c.text)\n .join('\\n')\n }\n return item.content || ''\n })\n .filter(Boolean)\n .join('\\n\\n')\n }\n\n const reasoningItems = response.output.filter(\n item => item.type === 'reasoning',\n )\n if (reasoningItems.length > 0) {\n reasoningContent = reasoningItems\n .map(item => item.content || '')\n .filter(Boolean)\n .join('\\n\\n')\n }\n }\n\n if (reasoningContent) {\n const thinkBlock = `\n\n${reasoningContent}\n\n`\n content = thinkBlock + content\n }\n\n const toolCalls = this.parseToolCalls(response)\n\n const contentArray = content\n ? [{ type: 'text', text: content, citations: [] }]\n : [{ type: 'text', text: '', citations: [] }]\n\n const promptTokens = response.usage?.input_tokens || 0\n const completionTokens = response.usage?.output_tokens || 0\n const totalTokens =\n response.usage?.total_tokens ?? promptTokens + completionTokens\n\n return {\n id: response.id || `resp_${Date.now()}`,\n content: contentArray,\n toolCalls,\n usage: {\n promptTokens,\n completionTokens,\n reasoningTokens:\n response.usage?.output_tokens_details?.reasoning_tokens,\n },\n responseId: response.id,\n }\n }\n\n protected async *processStreamingChunk(\n parsed: any,\n responseId: string,\n hasStarted: boolean,\n accumulatedContent: string,\n reasoningContext?: ReasoningStreamingContext,\n ): AsyncGenerator<StreamingEvent> {\n if (parsed.type === 'response.reasoning_summary_part.added') {\n const partIndex = parsed.summary_index || 0\n\n if (!reasoningContext?.thinkingContent) {\n reasoningContext!.thinkingContent = ''\n reasoningContext!.currentPartIndex = -1\n }\n\n reasoningContext!.currentPartIndex = partIndex\n\n if (partIndex > 0 && reasoningContext!.thinkingContent) {\n reasoningContext!.thinkingContent += '\\n\\n'\n\n yield {\n type: 'text_delta',\n delta: '\\n\\n',\n responseId,\n }\n }\n\n return\n }\n\n if (parsed.type === 'response.reasoning_summary_text.delta') {\n const delta = parsed.delta || ''\n\n if (delta && reasoningContext) {\n reasoningContext.thinkingContent += delta\n\n yield {\n type: 'text_delta',\n delta,\n responseId,\n }\n }\n\n return\n }\n\n if (parsed.type === 'response.reasoning_text.delta') {\n const delta = parsed.delta || ''\n\n if (delta && reasoningContext) {\n reasoningContext.thinkingContent += delta\n\n yield {\n type: 'text_delta',\n delta,\n responseId,\n }\n }\n\n return\n }\n\n if (parsed.type === 'response.output_text.delta') {\n const delta = parsed.delta || ''\n if (delta) {\n const textEvents = this.handleTextDelta(delta, responseId, hasStarted)\n for (const event of textEvents) {\n yield event\n }\n }\n }\n\n if (parsed.type === 'response.output_item.done') {\n const item = parsed.item || {}\n if (item.type === 'function_call') {\n const callId = item.call_id || item.id\n const name = item.name\n const args = item.arguments\n\n if (\n typeof callId === 'string' &&\n typeof name === 'string' &&\n typeof args === 'string'\n ) {\n yield {\n type: 'tool_request',\n tool: {\n id: callId,\n name: name,\n input: args,\n },\n }\n }\n }\n }\n\n if (parsed.usage) {\n const normalizedUsage = normalizeTokens(parsed.usage)\n\n if (parsed.usage.output_tokens_details?.reasoning_tokens) {\n normalizedUsage.reasoning =\n parsed.usage.output_tokens_details.reasoning_tokens\n }\n\n yield {\n type: 'usage',\n usage: normalizedUsage,\n }\n }\n }\n\n protected updateStreamingState(\n parsed: any,\n accumulatedContent: string,\n ): { content?: string; hasStarted?: boolean } {\n const state: { content?: string; hasStarted?: boolean } = {}\n\n if (parsed.type === 'response.output_text.delta' && parsed.delta) {\n state.content = accumulatedContent + parsed.delta\n state.hasStarted = true\n }\n\n return state\n }\n\n\n protected async parseStreamingOpenAIResponse(\n response: any,\n ): Promise<{ assistantMessage: any; rawResponse: any }> {\n const { processResponsesStream } = await import('./responsesStreaming')\n\n return await processResponsesStream(\n this.parseStreamingResponse(response),\n Date.now(),\n response.id ?? `resp_${Date.now()}`,\n )\n }\n\n protected normalizeUsageForAdapter(usage?: any) {\n const baseUsage = super.normalizeUsageForAdapter(usage)\n\n return {\n ...baseUsage,\n reasoningTokens: usage?.output_tokens_details?.reasoning_tokens ?? 0,\n }\n }\n\n private convertMessagesToInput(messages: any[]): any[] {\n const inputItems = []\n\n for (const message of messages) {\n const role = message.role\n\n if (role === 'tool') {\n const callId = message.tool_call_id || message.id\n if (typeof callId === 'string' && callId) {\n let content = message.content || ''\n if (Array.isArray(content)) {\n const texts = []\n for (const part of content) {\n if (typeof part === 'object' && part !== null) {\n const t = part.text || part.content\n if (typeof t === 'string' && t) {\n texts.push(t)\n }\n }\n }\n content = texts.join('\\n')\n }\n if (typeof content === 'string') {\n inputItems.push({\n type: 'function_call_output',\n call_id: callId,\n output: content,\n })\n }\n }\n continue\n }\n\n if (role === 'assistant' && Array.isArray(message.tool_calls)) {\n for (const tc of message.tool_calls) {\n if (typeof tc !== 'object' || tc === null) {\n continue\n }\n const tcType = tc.type || 'function'\n if (tcType !== 'function') {\n continue\n }\n const callId = tc.id || tc.call_id\n const fn = tc.function\n const name = typeof fn === 'object' && fn !== null ? fn.name : null\n const args =\n typeof fn === 'object' && fn !== null ? fn.arguments : null\n\n if (\n typeof callId === 'string' &&\n typeof name === 'string' &&\n typeof args === 'string'\n ) {\n inputItems.push({\n type: 'function_call',\n name: name,\n arguments: args,\n call_id: callId,\n })\n }\n }\n continue\n }\n\n const content = message.content || ''\n const contentItems = []\n\n if (Array.isArray(content)) {\n for (const part of content) {\n if (typeof part !== 'object' || part === null) continue\n const ptype = part.type\n if (ptype === 'text') {\n const text = part.text || part.content || ''\n if (typeof text === 'string' && text) {\n const kind = role === 'assistant' ? 'output_text' : 'input_text'\n contentItems.push({ type: kind, text: text })\n }\n } else if (ptype === 'image_url') {\n const image = part.image_url\n const url =\n typeof image === 'object' && image !== null ? image.url : image\n if (typeof url === 'string' && url) {\n contentItems.push({ type: 'input_image', image_url: url })\n }\n }\n }\n } else if (typeof content === 'string' && content) {\n const kind = role === 'assistant' ? 'output_text' : 'input_text'\n contentItems.push({ type: kind, text: content })\n }\n\n if (contentItems.length) {\n const roleOut = role === 'assistant' ? 'assistant' : 'user'\n inputItems.push({\n type: 'message',\n role: roleOut,\n content: contentItems,\n })\n }\n }\n\n return inputItems\n }\n\n private buildInstructions(systemPrompt: string[]): string {\n const systemContent = systemPrompt\n .filter(content => content.trim())\n .join('\\n\\n')\n\n return systemContent\n }\n\n private parseToolCalls(response: any): any[] {\n if (!response.output || !Array.isArray(response.output)) {\n return []\n }\n\n const toolCalls = []\n\n for (const item of response.output) {\n if (item.type === 'function_call') {\n const callId = item.call_id || item.id\n const name = item.name || ''\n const args = item.arguments || '{}'\n\n if (\n typeof callId === 'string' &&\n typeof name === 'string' &&\n typeof args === 'string'\n ) {\n toolCalls.push({\n id: callId,\n type: 'function',\n function: {\n name: name,\n arguments: args,\n },\n })\n }\n } else if (item.type === 'tool_call') {\n const callId =\n item.id || `tool_${Math.random().toString(36).substring(2, 15)}`\n toolCalls.push({\n id: callId,\n type: 'tool_call',\n name: item.name,\n arguments: item.arguments,\n })\n }\n }\n\n return toolCalls\n }\n\n private applyReasoningToMessage(\n message: any,\n reasoningSummaryText: string,\n reasoningFullText: string,\n ): any {\n const rtxtParts = []\n if (\n typeof reasoningSummaryText === 'string' &&\n reasoningSummaryText.trim()\n ) {\n rtxtParts.push(reasoningSummaryText)\n }\n if (typeof reasoningFullText === 'string' && reasoningFullText.trim()) {\n rtxtParts.push(reasoningFullText)\n }\n const rtxt = rtxtParts.filter(p => p).join('\\n\\n')\n if (rtxt) {\n const thinkBlock = `<think>\\n${rtxt}\\n</think>\\n`\n const contentText = message.content || ''\n message.content =\n thinkBlock + (typeof contentText === 'string' ? contentText : '')\n }\n return message\n }\n}\n", "import { OpenAIAdapter, StreamingEvent, normalizeTokens } from './openaiAdapter'\nimport {\n UnifiedRequestParams,\n UnifiedResponse,\n ReasoningStreamingContext,\n} from '@kode-types/modelCapabilities'\nimport { Tool, getToolDescription } from '@tool'\nimport { zodToJsonSchema } from 'zod-to-json-schema'\nimport { setRequestStatus } from '@utils/session/requestStatus'\n\nexport class ChatCompletionsAdapter extends OpenAIAdapter {\n createRequest(params: UnifiedRequestParams): any {\n const { messages, systemPrompt, tools, maxTokens, stream } = params\n\n const fullMessages = this.buildMessages(systemPrompt, messages)\n\n const request: any = {\n model: this.modelProfile.modelName,\n messages: fullMessages,\n [this.getMaxTokensParam()]: maxTokens,\n temperature: this.getTemperature(),\n }\n\n if (tools && tools.length > 0) {\n request.tools = this.buildTools(tools)\n request.tool_choice = 'auto'\n }\n\n if (\n this.capabilities.parameters.supportsReasoningEffort &&\n params.reasoningEffort\n ) {\n request.reasoning_effort = params.reasoningEffort\n }\n\n if (this.capabilities.parameters.supportsVerbosity && params.verbosity) {\n request.verbosity = params.verbosity\n }\n\n if (stream && this.capabilities.streaming.supported) {\n request.stream = true\n if (this.capabilities.streaming.includesUsage) {\n request.stream_options = {\n include_usage: true,\n }\n }\n }\n\n if (this.capabilities.parameters.temperatureMode === 'fixed_one') {\n delete request.temperature\n }\n\n if (!this.capabilities.streaming.supported) {\n delete request.stream\n delete request.stream_options\n }\n\n return request\n }\n\n buildTools(tools: Tool[]): any[] {\n return tools.map(tool => ({\n type: 'function',\n function: {\n name: tool.name,\n description: getToolDescription(tool),\n parameters:\n tool.inputJSONSchema ||\n (zodToJsonSchema(tool.inputSchema as any) as any),\n },\n }))\n }\n\n\n protected parseNonStreamingResponse(response: any): UnifiedResponse {\n if (!response || typeof response !== 'object') {\n throw new Error('Invalid response: response must be an object')\n }\n\n const choice = response.choices?.[0]\n if (!choice) {\n throw new Error('Invalid response: no choices found in response')\n }\n\n const message = choice.message || {}\n const content = typeof message.content === 'string' ? message.content : ''\n const toolCalls = Array.isArray(message.tool_calls)\n ? message.tool_calls\n : []\n\n const usage = response.usage || {}\n const promptTokens = Number(usage.prompt_tokens) || 0\n const completionTokens = Number(usage.completion_tokens) || 0\n\n return {\n id: response.id || `chatcmpl_${Date.now()}`,\n content,\n toolCalls,\n usage: {\n promptTokens,\n completionTokens,\n },\n }\n }\n\n private buildMessages(systemPrompt: string[], messages: any[]): any[] {\n const systemMessages = systemPrompt.map(prompt => ({\n role: 'system',\n content: prompt,\n }))\n\n const normalizedMessages = this.normalizeToolMessages(messages)\n\n return [...systemMessages, ...normalizedMessages]\n }\n\n private normalizeToolMessages(messages: any[]): any[] {\n if (!Array.isArray(messages)) {\n return []\n }\n\n return messages.map(msg => {\n if (!msg || typeof msg !== 'object') {\n return msg\n }\n\n if (msg.role === 'tool') {\n if (Array.isArray(msg.content)) {\n return {\n ...msg,\n content:\n msg.content\n .map(c => c?.text || '')\n .filter(Boolean)\n .join('\\n\\n') || '(empty content)',\n }\n } else if (typeof msg.content !== 'string') {\n return {\n ...msg,\n content:\n msg.content === null || msg.content === undefined\n ? '(empty content)'\n : JSON.stringify(msg.content),\n }\n }\n }\n return msg\n })\n }\n\n protected async *processStreamingChunk(\n parsed: any,\n responseId: string,\n hasStarted: boolean,\n accumulatedContent: string,\n reasoningContext?: ReasoningStreamingContext,\n ): AsyncGenerator<StreamingEvent> {\n if (!parsed || typeof parsed !== 'object') {\n return\n }\n\n const choice = parsed.choices?.[0]\n if (choice?.delta && typeof choice.delta === 'object') {\n const delta =\n typeof choice.delta.content === 'string' ? choice.delta.content : ''\n const reasoningDelta =\n typeof choice.delta.reasoning_content === 'string'\n ? choice.delta.reasoning_content\n : ''\n const fullDelta = delta + reasoningDelta\n\n if (fullDelta) {\n const textEvents = this.handleTextDelta(\n fullDelta,\n responseId,\n hasStarted,\n )\n for (const event of textEvents) {\n yield event\n }\n }\n }\n\n if (choice?.delta?.tool_calls && Array.isArray(choice.delta.tool_calls)) {\n for (const toolCall of choice.delta.tool_calls) {\n if (toolCall && typeof toolCall === 'object') {\n yield {\n type: 'tool_request',\n tool: {\n id: toolCall.id || `tool_${Date.now()}`,\n name: toolCall.function?.name || 'unknown',\n input: toolCall.function?.arguments || '{}',\n },\n }\n }\n }\n }\n\n if (parsed.usage && typeof parsed.usage === 'object') {\n const normalizedUsage = normalizeTokens(parsed.usage)\n this.updateCumulativeUsage(normalizedUsage)\n yield {\n type: 'usage',\n usage: { ...this.cumulativeUsage },\n }\n }\n }\n\n protected updateStreamingState(\n parsed: any,\n accumulatedContent: string,\n ): { content?: string; hasStarted?: boolean } {\n const state: { content?: string; hasStarted?: boolean } = {}\n\n const choice = parsed.choices?.[0]\n if (choice?.delta) {\n const delta = choice.delta.content || ''\n const reasoningDelta = choice.delta.reasoning_content || ''\n const fullDelta = delta + reasoningDelta\n\n if (fullDelta) {\n state.content = accumulatedContent + fullDelta\n state.hasStarted = true\n }\n }\n\n return state\n }\n\n protected async parseStreamingOpenAIResponse(\n response: any,\n signal?: AbortSignal,\n ): Promise<{ assistantMessage: any; rawResponse: any }> {\n const contentBlocks: any[] = []\n const usage: any = {\n prompt_tokens: 0,\n completion_tokens: 0,\n }\n\n let responseId = response.id || `chatcmpl_${Date.now()}`\n const pendingToolCalls: any[] = []\n let hasMarkedStreaming = false\n\n try {\n this.resetCumulativeUsage()\n\n for await (const event of this.parseStreamingResponse(response)) {\n if (signal?.aborted) {\n throw new Error('Stream aborted by user')\n }\n\n if (event.type === 'message_start') {\n responseId = event.responseId || responseId\n continue\n }\n\n if (event.type === 'text_delta') {\n if (!hasMarkedStreaming) {\n setRequestStatus({ kind: 'streaming' })\n hasMarkedStreaming = true\n }\n const last = contentBlocks[contentBlocks.length - 1]\n if (!last || last.type !== 'text') {\n contentBlocks.push({\n type: 'text',\n text: event.delta,\n citations: [],\n })\n } else {\n last.text += event.delta\n }\n continue\n }\n\n if (event.type === 'tool_request') {\n setRequestStatus({ kind: 'tool', detail: event.tool?.name })\n pendingToolCalls.push(event.tool)\n continue\n }\n\n if (event.type === 'usage') {\n usage.prompt_tokens = event.usage.input\n usage.completion_tokens = event.usage.output\n usage.totalTokens =\n event.usage.total ?? event.usage.input + event.usage.output\n usage.promptTokens = event.usage.input\n usage.completionTokens = event.usage.output\n continue\n }\n }\n } catch (error) {\n if (signal?.aborted) {\n const assistantMessage = {\n type: 'assistant',\n message: {\n role: 'assistant',\n content: contentBlocks,\n usage: {\n input_tokens: usage.prompt_tokens ?? 0,\n output_tokens: usage.completion_tokens ?? 0,\n prompt_tokens: usage.prompt_tokens ?? 0,\n completion_tokens: usage.completion_tokens ?? 0,\n totalTokens:\n (usage.prompt_tokens || 0) + (usage.completion_tokens || 0),\n },\n },\n costUSD: 0,\n durationMs: Date.now() - Date.now(),\n uuid: `${Date.now()}-${Math.random().toString(36).slice(2, 11)}` as any,\n responseId,\n }\n\n return {\n assistantMessage,\n rawResponse: {\n id: responseId,\n content: contentBlocks,\n usage,\n aborted: true,\n },\n }\n }\n throw error\n }\n\n for (const toolCall of pendingToolCalls) {\n let toolArgs = {}\n try {\n toolArgs = toolCall.input ? JSON.parse(toolCall.input) : {}\n } catch {}\n\n contentBlocks.push({\n type: 'tool_use',\n id: toolCall.id,\n name: toolCall.name,\n input: toolArgs,\n })\n }\n\n const assistantMessage = {\n type: 'assistant',\n message: {\n role: 'assistant',\n content: contentBlocks,\n usage: {\n input_tokens: usage.prompt_tokens ?? 0,\n output_tokens: usage.completion_tokens ?? 0,\n prompt_tokens: usage.prompt_tokens ?? 0,\n completion_tokens: usage.completion_tokens ?? 0,\n totalTokens:\n usage.totalTokens ??\n (usage.prompt_tokens || 0) + (usage.completion_tokens || 0),\n },\n },\n costUSD: 0,\n durationMs: Date.now() - Date.now(),\n uuid: `${Date.now()}-${Math.random().toString(36).slice(2, 11)}` as any,\n responseId,\n }\n\n return {\n assistantMessage,\n rawResponse: {\n id: responseId,\n content: contentBlocks,\n usage,\n },\n }\n }\n\n protected normalizeUsageForAdapter(usage?: any) {\n return super.normalizeUsageForAdapter(usage)\n }\n}\n", "import { ModelCapabilities } from '@kode-types/modelCapabilities'\n\nconst GPT5_CAPABILITIES: ModelCapabilities = {\n apiArchitecture: {\n primary: 'responses_api',\n fallback: 'chat_completions',\n },\n parameters: {\n maxTokensField: 'max_output_tokens',\n supportsReasoningEffort: true,\n supportsVerbosity: true,\n temperatureMode: 'fixed_one',\n },\n toolCalling: {\n mode: 'custom_tools',\n supportsFreeform: true,\n supportsAllowedTools: true,\n supportsParallelCalls: true,\n },\n stateManagement: {\n supportsResponseId: true,\n supportsConversationChaining: true,\n supportsPreviousResponseId: true,\n },\n streaming: {\n supported: true,\n includesUsage: true,\n },\n}\n\nconst CHAT_COMPLETIONS_CAPABILITIES: ModelCapabilities = {\n apiArchitecture: {\n primary: 'chat_completions',\n },\n parameters: {\n maxTokensField: 'max_tokens',\n supportsReasoningEffort: false,\n supportsVerbosity: false,\n temperatureMode: 'flexible',\n },\n toolCalling: {\n mode: 'function_calling',\n supportsFreeform: false,\n supportsAllowedTools: false,\n supportsParallelCalls: true,\n },\n stateManagement: {\n supportsResponseId: false,\n supportsConversationChaining: false,\n supportsPreviousResponseId: false,\n },\n streaming: {\n supported: true,\n includesUsage: true,\n },\n}\n\nexport const MODEL_CAPABILITIES_REGISTRY: Record<string, ModelCapabilities> = {\n 'gpt-5': GPT5_CAPABILITIES,\n 'gpt-5-mini': GPT5_CAPABILITIES,\n 'gpt-5-nano': GPT5_CAPABILITIES,\n 'gpt-5-chat-latest': GPT5_CAPABILITIES,\n 'gpt-5-codex': GPT5_CAPABILITIES,\n\n 'gpt-4o': CHAT_COMPLETIONS_CAPABILITIES,\n 'gpt-4o-mini': CHAT_COMPLETIONS_CAPABILITIES,\n 'gpt-4-turbo': CHAT_COMPLETIONS_CAPABILITIES,\n 'gpt-4': CHAT_COMPLETIONS_CAPABILITIES,\n\n 'claude-3-5-sonnet-20241022': CHAT_COMPLETIONS_CAPABILITIES,\n 'claude-3-5-haiku-20241022': CHAT_COMPLETIONS_CAPABILITIES,\n 'claude-3-opus-20240229': CHAT_COMPLETIONS_CAPABILITIES,\n\n o1: {\n ...CHAT_COMPLETIONS_CAPABILITIES,\n parameters: {\n ...CHAT_COMPLETIONS_CAPABILITIES.parameters,\n maxTokensField: 'max_completion_tokens',\n temperatureMode: 'fixed_one',\n },\n },\n 'o1-mini': {\n ...CHAT_COMPLETIONS_CAPABILITIES,\n parameters: {\n ...CHAT_COMPLETIONS_CAPABILITIES.parameters,\n maxTokensField: 'max_completion_tokens',\n temperatureMode: 'fixed_one',\n },\n },\n 'o1-preview': {\n ...CHAT_COMPLETIONS_CAPABILITIES,\n parameters: {\n ...CHAT_COMPLETIONS_CAPABILITIES.parameters,\n maxTokensField: 'max_completion_tokens',\n temperatureMode: 'fixed_one',\n },\n },\n}\n\nexport function inferModelCapabilities(\n modelName: string,\n): ModelCapabilities | null {\n if (!modelName) return null\n\n const lowerName = modelName.toLowerCase()\n\n if (lowerName.includes('gpt-5') || lowerName.includes('gpt5')) {\n return GPT5_CAPABILITIES\n }\n\n if (lowerName.includes('gpt-6') || lowerName.includes('gpt6')) {\n return {\n ...GPT5_CAPABILITIES,\n streaming: { supported: true, includesUsage: true },\n }\n }\n\n if (lowerName.includes('glm-5') || lowerName.includes('glm5')) {\n return {\n ...CHAT_COMPLETIONS_CAPABILITIES,\n toolCalling: {\n ...CHAT_COMPLETIONS_CAPABILITIES.toolCalling,\n supportsAllowedTools: false,\n },\n }\n }\n\n if (lowerName.startsWith('o1') || lowerName.includes('o1-')) {\n return {\n ...CHAT_COMPLETIONS_CAPABILITIES,\n parameters: {\n ...CHAT_COMPLETIONS_CAPABILITIES.parameters,\n maxTokensField: 'max_completion_tokens',\n temperatureMode: 'fixed_one',\n },\n }\n }\n\n return null\n}\n\nconst capabilityCache = new Map<string, ModelCapabilities>()\n\nexport function getModelCapabilities(modelName: string): ModelCapabilities {\n if (capabilityCache.has(modelName)) {\n return capabilityCache.get(modelName)!\n }\n\n if (MODEL_CAPABILITIES_REGISTRY[modelName]) {\n const capabilities = MODEL_CAPABILITIES_REGISTRY[modelName]\n capabilityCache.set(modelName, capabilities)\n return capabilities\n }\n\n const inferred = inferModelCapabilities(modelName)\n if (inferred) {\n capabilityCache.set(modelName, inferred)\n return inferred\n }\n\n const defaultCapabilities = CHAT_COMPLETIONS_CAPABILITIES\n capabilityCache.set(modelName, defaultCapabilities)\n return defaultCapabilities\n}\n", "import { ModelAPIAdapter } from './adapters/base'\nimport { ResponsesAPIAdapter } from './adapters/responsesAPI'\nimport { ChatCompletionsAdapter } from './adapters/chatCompletions'\nimport { getModelCapabilities } from '@constants/modelCapabilities'\nimport { ModelProfile, getGlobalConfig } from '@utils/config'\nimport { ModelCapabilities } from '@kode-types/modelCapabilities'\n\nexport class ModelAdapterFactory {\n static createAdapter(modelProfile: ModelProfile): ModelAPIAdapter {\n const capabilities = getModelCapabilities(modelProfile.modelName)\n\n const apiType = this.determineAPIType(modelProfile, capabilities)\n\n switch (apiType) {\n case 'responses_api':\n return new ResponsesAPIAdapter(capabilities, modelProfile)\n case 'chat_completions':\n default:\n return new ChatCompletionsAdapter(capabilities, modelProfile)\n }\n }\n\n private static determineAPIType(\n modelProfile: ModelProfile,\n capabilities: ModelCapabilities,\n ): 'responses_api' | 'chat_completions' {\n if (capabilities.apiArchitecture.primary !== 'responses_api') {\n return 'chat_completions'\n }\n\n const isOfficialOpenAI =\n !modelProfile.baseURL || modelProfile.baseURL.includes('api.openai.com')\n\n if (!isOfficialOpenAI) {\n if (capabilities.apiArchitecture.fallback === 'chat_completions') {\n return capabilities.apiArchitecture.primary\n }\n return capabilities.apiArchitecture.primary\n }\n\n\n return capabilities.apiArchitecture.primary\n }\n\n static shouldUseResponsesAPI(modelProfile: ModelProfile): boolean {\n const capabilities = getModelCapabilities(modelProfile.modelName)\n const apiType = this.determineAPIType(modelProfile, capabilities)\n return apiType === 'responses_api'\n }\n}\n", "interface ConversationState {\n previousResponseId?: string\n lastUpdate: number\n}\n\nclass ResponseStateManager {\n private conversationStates = new Map<string, ConversationState>()\n\n private readonly CLEANUP_INTERVAL = 60 * 60 * 1000\n\n constructor() {\n setInterval(() => {\n this.cleanup()\n }, this.CLEANUP_INTERVAL)\n }\n\n setPreviousResponseId(conversationId: string, responseId: string): void {\n this.conversationStates.set(conversationId, {\n previousResponseId: responseId,\n lastUpdate: Date.now(),\n })\n }\n\n getPreviousResponseId(conversationId: string): string | undefined {\n const state = this.conversationStates.get(conversationId)\n if (state) {\n state.lastUpdate = Date.now()\n return state.previousResponseId\n }\n return undefined\n }\n\n clearConversation(conversationId: string): void {\n this.conversationStates.delete(conversationId)\n }\n\n clearAll(): void {\n this.conversationStates.clear()\n }\n\n private cleanup(): void {\n const now = Date.now()\n for (const [conversationId, state] of this.conversationStates.entries()) {\n if (now - state.lastUpdate > this.CLEANUP_INTERVAL) {\n this.conversationStates.delete(conversationId)\n }\n }\n }\n\n getStateSize(): number {\n return this.conversationStates.size\n }\n}\n\nexport const responseStateManager = new ResponseStateManager()\n\nexport function getConversationId(\n agentId?: string,\n messageId?: string,\n): string {\n return (\n agentId ||\n messageId ||\n `conv_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`\n )\n}\n", "type PartialJsonToken =\n | { type: 'brace'; value: '{' | '}' }\n | { type: 'paren'; value: '[' | ']' }\n | { type: 'separator'; value: ':' }\n | { type: 'delimiter'; value: ',' }\n | { type: 'string'; value: string }\n | { type: 'number'; value: string }\n | { type: 'name'; value: 'true' | 'false' | 'null' }\n\nfunction tokenizePartialJson(input: string): PartialJsonToken[] {\n let index = 0\n const tokens: PartialJsonToken[] = []\n\n while (index < input.length) {\n let ch = input[index]\n\n if (ch === '\\\\') {\n index++\n continue\n }\n\n if (ch === '{') {\n tokens.push({ type: 'brace', value: '{' })\n index++\n continue\n }\n if (ch === '}') {\n tokens.push({ type: 'brace', value: '}' })\n index++\n continue\n }\n if (ch === '[') {\n tokens.push({ type: 'paren', value: '[' })\n index++\n continue\n }\n if (ch === ']') {\n tokens.push({ type: 'paren', value: ']' })\n index++\n continue\n }\n if (ch === ':') {\n tokens.push({ type: 'separator', value: ':' })\n index++\n continue\n }\n if (ch === ',') {\n tokens.push({ type: 'delimiter', value: ',' })\n index++\n continue\n }\n\n if (ch === '\"') {\n let value = ''\n let incomplete = false\n\n ch = input[++index]\n while (ch !== '\"') {\n if (index === input.length) {\n incomplete = true\n break\n }\n if (ch === '\\\\') {\n if (++index === input.length) {\n incomplete = true\n break\n }\n value += ch + input[index]\n ch = input[++index]\n } else {\n value += ch\n ch = input[++index]\n }\n }\n\n ch = input[++index]\n if (!incomplete) tokens.push({ type: 'string', value })\n continue\n }\n\n if (ch && /\\s/.test(ch)) {\n index++\n continue\n }\n\n const digit = /[0-9]/\n if ((ch && digit.test(ch)) || ch === '-' || ch === '.') {\n let value = ''\n if (ch === '-') {\n value += ch\n ch = input[++index]\n }\n while ((ch && digit.test(ch)) || ch === '.') {\n value += ch\n ch = input[++index]\n }\n tokens.push({ type: 'number', value })\n continue\n }\n\n const alpha = /[a-z]/i\n if (ch && alpha.test(ch)) {\n let value = ''\n while (ch && alpha.test(ch)) {\n if (index === input.length) break\n value += ch\n ch = input[++index]\n }\n\n if (value === 'true' || value === 'false' || value === 'null') {\n tokens.push({ type: 'name', value })\n } else {\n index++\n }\n continue\n }\n\n index++\n }\n\n return tokens\n}\n\nfunction trimTrailingIncompleteTokens(\n tokens: PartialJsonToken[],\n): PartialJsonToken[] {\n if (tokens.length === 0) return tokens\n const last = tokens[tokens.length - 1]!\n\n if (last.type === 'separator') {\n return trimTrailingIncompleteTokens(tokens.slice(0, -1))\n }\n\n if (last.type === 'number') {\n const lastChar = last.value[last.value.length - 1]\n if (lastChar === '.' || lastChar === '-') {\n return trimTrailingIncompleteTokens(tokens.slice(0, -1))\n }\n }\n\n if (last.type === 'string' || last.type === 'number') {\n const previous = tokens[tokens.length - 2]\n if (previous?.type === 'delimiter') {\n return trimTrailingIncompleteTokens(tokens.slice(0, -1))\n }\n if (previous?.type === 'brace' && previous.value === '{') {\n return trimTrailingIncompleteTokens(tokens.slice(0, -1))\n }\n }\n\n if (last.type === 'delimiter') {\n return trimTrailingIncompleteTokens(tokens.slice(0, -1))\n }\n\n return tokens\n}\n\nfunction closeOpenBrackets(tokens: PartialJsonToken[]): PartialJsonToken[] {\n const missingClosers: Array<'}' | ']'> = []\n\n for (const token of tokens) {\n if (token.type === 'brace') {\n if (token.value === '{') missingClosers.push('}')\n else missingClosers.splice(missingClosers.lastIndexOf('}'), 1)\n continue\n }\n\n if (token.type === 'paren') {\n if (token.value === '[') missingClosers.push(']')\n else missingClosers.splice(missingClosers.lastIndexOf(']'), 1)\n }\n }\n\n if (missingClosers.length > 0) {\n missingClosers.reverse()\n for (const closer of missingClosers) {\n if (closer === '}') tokens.push({ type: 'brace', value: '}' })\n else tokens.push({ type: 'paren', value: ']' })\n }\n }\n\n return tokens\n}\n\nfunction tokensToJson(tokens: PartialJsonToken[]): string {\n let out = ''\n for (const token of tokens) {\n if (token.type === 'string') out += `\"${token.value}\"`\n else out += token.value\n }\n return out\n}\n\nexport function parseToolUsePartialJson(input: string): unknown {\n const tokens = tokenizePartialJson(input)\n const trimmed = trimTrailingIncompleteTokens(tokens)\n const completed = closeOpenBrackets(trimmed)\n return JSON.parse(tokensToJson(completed))\n}\n\nexport function parseToolUsePartialJsonOrThrow(input: string): unknown {\n try {\n return parseToolUsePartialJson(input)\n } catch (error) {\n throw new Error(\n `Unable to parse tool parameter JSON from model. Please retry your request or adjust your prompt. Error: ${String(error)}. JSON: ${input}`,\n )\n }\n}\n", "import OpenAI from 'openai'\n\ntype AnthropicImageBlock = {\n type: 'image'\n source:\n | { type: 'base64'; media_type: string; data: string }\n | { type: 'url'; url: string }\n}\n\ntype AnthropicTextBlock = { type: 'text'; text: string }\ntype AnthropicToolUseBlock = {\n type: 'tool_use'\n id: string\n name: string\n input: unknown\n}\ntype AnthropicToolResultBlock = {\n type: 'tool_result'\n tool_use_id: string\n content: unknown\n}\n\ntype AnthropicBlock =\n | AnthropicTextBlock\n | AnthropicImageBlock\n | AnthropicToolUseBlock\n | AnthropicToolResultBlock\n | { type: string; [key: string]: unknown }\n\ntype AnthropicLikeMessage = {\n message: {\n role: 'user' | 'assistant'\n content: string | AnthropicBlock[] | AnthropicBlock\n }\n}\n\nexport function convertAnthropicMessagesToOpenAIMessages(\n messages: AnthropicLikeMessage[],\n): (\n | OpenAI.ChatCompletionMessageParam\n | OpenAI.ChatCompletionToolMessageParam\n)[] {\n const openaiMessages: any[] = []\n\n const toolResults: Record<string, OpenAI.ChatCompletionToolMessageParam> = {}\n\n for (const message of messages) {\n const blocks: AnthropicBlock[] = []\n if (typeof message.message.content === 'string') {\n blocks.push({ type: 'text', text: message.message.content })\n } else if (Array.isArray(message.message.content)) {\n blocks.push(...message.message.content)\n } else if (message.message.content) {\n blocks.push(message.message.content)\n }\n\n const role = message.message.role\n\n const userContentParts: any[] = []\n const assistantTextParts: string[] = []\n const assistantToolCalls: any[] = []\n\n for (const block of blocks) {\n if (block.type === 'text') {\n const text =\n typeof (block as any).text === 'string' ? (block as any).text : ''\n if (!text) continue\n if (role === 'user') {\n userContentParts.push({ type: 'text', text })\n } else if (role === 'assistant') {\n assistantTextParts.push(text)\n }\n continue\n }\n\n if (block.type === 'image' && role === 'user') {\n const source = (block as AnthropicImageBlock).source\n if (source?.type === 'base64') {\n userContentParts.push({\n type: 'image_url',\n image_url: {\n url: `data:${source.media_type};base64,${source.data}`,\n },\n })\n } else if (source?.type === 'url') {\n userContentParts.push({\n type: 'image_url',\n image_url: { url: source.url },\n })\n }\n continue\n }\n\n if (block.type === 'tool_use') {\n assistantToolCalls.push({\n type: 'function',\n function: {\n name: (block as AnthropicToolUseBlock).name,\n arguments: JSON.stringify((block as AnthropicToolUseBlock).input),\n },\n id: (block as AnthropicToolUseBlock).id,\n })\n continue\n }\n\n if (block.type === 'tool_result') {\n const toolUseId = (block as AnthropicToolResultBlock).tool_use_id\n const rawToolContent = (block as AnthropicToolResultBlock).content\n const toolContent =\n typeof rawToolContent === 'string'\n ? rawToolContent\n : JSON.stringify(rawToolContent)\n toolResults[toolUseId] = {\n role: 'tool',\n content: toolContent,\n tool_call_id: toolUseId,\n }\n continue\n }\n }\n\n if (role === 'user') {\n if (\n userContentParts.length === 1 &&\n userContentParts[0]?.type === 'text'\n ) {\n openaiMessages.push({\n role: 'user',\n content: userContentParts[0].text,\n } as any)\n } else if (userContentParts.length > 0) {\n openaiMessages.push({ role: 'user', content: userContentParts } as any)\n }\n continue\n }\n\n if (role === 'assistant') {\n const text = assistantTextParts.filter(Boolean).join('\\n')\n if (assistantToolCalls.length > 0) {\n openaiMessages.push({\n role: 'assistant',\n content: text ? text : undefined,\n tool_calls: assistantToolCalls,\n } as any)\n continue\n }\n if (text) {\n openaiMessages.push({ role: 'assistant', content: text } as any)\n }\n }\n }\n\n const finalMessages: any[] = []\n\n for (const message of openaiMessages) {\n finalMessages.push(message)\n\n if ('tool_calls' in message && message.tool_calls) {\n for (const toolCall of message.tool_calls) {\n if (toolResults[toolCall.id]) {\n finalMessages.push(toolResults[toolCall.id])\n }\n }\n }\n }\n\n return finalMessages\n}\n"],
5
- "mappings": "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",
6
- "names": ["_", "zodToJsonSchema", "zodToJsonSchema", "zodToJsonSchema", "processResponsesStream", "content", "zodToJsonSchema", "zodToJsonSchema", "assistantMessage", "convertAnthropicMessagesToOpenAIMessages", "zodToJsonSchema", "assistantMessage", "s", "finalResponse", "message", "assistantMsg"]
7
- }
@@ -1,15 +0,0 @@
1
- import { createRequire as __kodeCreateRequire } from "node:module";
2
- const require = __kodeCreateRequire(import.meta.url);
3
- import {
4
- fetchAnthropicModels,
5
- queryLLM,
6
- queryQuick,
7
- verifyApiKey
8
- } from "./chunk-67PY5IX6.js";
9
- import "./chunk-JC6NCUG5.js";
10
- export {
11
- fetchAnthropicModels,
12
- queryLLM,
13
- queryQuick,
14
- verifyApiKey
15
- };
@@ -1,28 +0,0 @@
1
- import { createRequire as __kodeCreateRequire } from "node:module";
2
- const require = __kodeCreateRequire(import.meta.url);
3
- import {
4
- clearAgentCache,
5
- getActiveAgents,
6
- getAgentByType,
7
- getAllAgents,
8
- getAvailableAgentTypes,
9
- setFlagAgentsFromCliJson,
10
- startAgentWatcher,
11
- stopAgentWatcher
12
- } from "./chunk-OZNRLY3E.js";
13
- import "./chunk-UKHTVRJM.js";
14
- import "./chunk-S3J2TLV6.js";
15
- import "./chunk-QYFKRZQC.js";
16
- import "./chunk-MN77D2F7.js";
17
- import "./chunk-FH5CHM6L.js";
18
- import "./chunk-JC6NCUG5.js";
19
- export {
20
- clearAgentCache,
21
- getActiveAgents,
22
- getAgentByType,
23
- getAllAgents,
24
- getAvailableAgentTypes,
25
- setFlagAgentsFromCliJson,
26
- startAgentWatcher,
27
- stopAgentWatcher
28
- };
@@ -1,49 +0,0 @@
1
- import { createRequire as __kodeCreateRequire } from "node:module";
2
- const require = __kodeCreateRequire(import.meta.url);
3
- import {
4
- addMcpServer,
5
- ensureConfigScope,
6
- getClients,
7
- getClientsForCliMcpConfig,
8
- getMCPCommands,
9
- getMCPTools,
10
- getMcpServer,
11
- getMcprcServerStatus,
12
- listMCPServers,
13
- listPluginMCPServers,
14
- looksLikeMcpUrl,
15
- normalizeMcpScopeForCli,
16
- normalizeMcpTransport,
17
- parseEnvVars,
18
- parseMcpHeaders,
19
- removeMcpServer,
20
- runCommand
21
- } from "./chunk-7CQVZNQV.js";
22
- import "./chunk-VBXVYQYY.js";
23
- import "./chunk-S3J2TLV6.js";
24
- import "./chunk-SDGKPKDK.js";
25
- import "./chunk-AIMIPK4B.js";
26
- import "./chunk-UYXEDKOZ.js";
27
- import "./chunk-QYFKRZQC.js";
28
- import "./chunk-MN77D2F7.js";
29
- import "./chunk-FH5CHM6L.js";
30
- import "./chunk-JC6NCUG5.js";
31
- export {
32
- addMcpServer,
33
- ensureConfigScope,
34
- getClients,
35
- getClientsForCliMcpConfig,
36
- getMCPCommands,
37
- getMCPTools,
38
- getMcpServer,
39
- getMcprcServerStatus,
40
- listMCPServers,
41
- listPluginMCPServers,
42
- looksLikeMcpUrl,
43
- normalizeMcpScopeForCli,
44
- normalizeMcpTransport,
45
- parseEnvVars,
46
- parseMcpHeaders,
47
- removeMcpServer,
48
- runCommand
49
- };
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/services/context/mentionProcessor.ts"],
4
- "sourcesContent": ["import { emitReminderEvent } from '@services/systemReminder'\nimport { getAvailableAgentTypes } from '@utils/agent/loader'\nimport { existsSync } from 'fs'\nimport { resolve } from 'path'\nimport { getCwd } from '@utils/state'\nimport { debug as debugLogger } from '@utils/log/debugLogger'\nimport { logError } from '@utils/log'\n\nexport interface MentionContext {\n type: 'agent' | 'file'\n mention: string\n resolved: string\n exists: boolean\n metadata?: any\n}\n\nexport interface ProcessedMentions {\n agents: MentionContext[]\n files: MentionContext[]\n hasAgentMentions: boolean\n hasFileMentions: boolean\n}\n\nclass MentionProcessorService {\n private static readonly MENTION_PATTERNS = {\n runAgent: /@(run-agent-[\\w\\-]+)/g,\n agent: /@(agent-[\\w\\-]+)/g,\n askModel: /@(ask-[\\w\\-]+)/g,\n file: /@(?:\"([^\"\\n]+)\"|'([^'\\n]+)'|([a-zA-Z0-9/._~:\\\\\\\\-]+))/g,\n } as const\n\n private agentCache: Map<string, boolean> = new Map()\n private lastAgentCheck: number = 0\n private CACHE_TTL = 60_000\n\n public async processMentions(input: string): Promise<ProcessedMentions> {\n const result: ProcessedMentions = {\n agents: [],\n files: [],\n hasAgentMentions: false,\n hasFileMentions: false,\n }\n\n try {\n const agentMentions = this.extractAgentMentions(input)\n if (agentMentions.length > 0) {\n await this.refreshAgentCache()\n\n for (const { mention, agentType, isAskModel } of agentMentions) {\n if (isAskModel || this.agentCache.has(agentType)) {\n result.agents.push({\n type: 'agent',\n mention,\n resolved: agentType,\n exists: true,\n metadata: isAskModel ? { type: 'ask-model' } : undefined,\n })\n result.hasAgentMentions = true\n\n this.emitAgentMentionEvent(mention, agentType, isAskModel)\n }\n }\n }\n\n const fileMatches = [\n ...input.matchAll(MentionProcessorService.MENTION_PATTERNS.file),\n ]\n const processedAgentMentions = new Set(\n agentMentions.map(am => am.mention),\n )\n\n for (const match of fileMatches) {\n const rawMention = match[0]?.slice(1) || ''\n const mention = (match[1] ?? match[2] ?? match[3] ?? '').trim()\n\n if (\n mention.startsWith('run-agent-') ||\n mention.startsWith('agent-') ||\n mention.startsWith('ask-') ||\n processedAgentMentions.has(mention)\n ) {\n continue\n }\n\n if (!mention) continue\n const filePath = this.resolveFilePath(\n this.normalizeFileMentionPath(mention),\n )\n if (existsSync(filePath)) {\n result.files.push({\n type: 'file',\n mention: rawMention || mention,\n resolved: filePath,\n exists: true,\n })\n result.hasFileMentions = true\n\n emitReminderEvent('file:mentioned', {\n filePath: filePath,\n originalMention: rawMention || mention,\n timestamp: Date.now(),\n })\n }\n }\n\n return result\n } catch (error) {\n logError(error)\n debugLogger.warn('MENTION_PROCESSOR_PROCESS_FAILED', {\n input: input.substring(0, 100) + (input.length > 100 ? '...' : ''),\n error: error instanceof Error ? error.message : error,\n })\n\n return {\n agents: [],\n files: [],\n hasAgentMentions: false,\n hasFileMentions: false,\n }\n }\n }\n\n private resolveFilePath(mention: string): string {\n return resolve(getCwd(), mention)\n }\n\n private normalizeFileMentionPath(mention: string): string {\n return mention.replace(/\\\\ /g, ' ')\n }\n\n private async refreshAgentCache(): Promise<void> {\n const now = Date.now()\n if (now - this.lastAgentCheck < this.CACHE_TTL) {\n return\n }\n\n try {\n const agents = await getAvailableAgentTypes()\n const previousCacheSize = this.agentCache.size\n this.agentCache.clear()\n\n for (const agent of agents) {\n this.agentCache.set(agent.agentType, true)\n }\n\n this.lastAgentCheck = now\n\n if (agents.length !== previousCacheSize) {\n debugLogger.info('MENTION_PROCESSOR_CACHE_REFRESHED', {\n agentCount: agents.length,\n previousCacheSize,\n cacheAge: now - this.lastAgentCheck,\n })\n }\n } catch (error) {\n logError(error)\n debugLogger.warn('MENTION_PROCESSOR_CACHE_REFRESH_FAILED', {\n error: error instanceof Error ? error.message : error,\n cacheSize: this.agentCache.size,\n lastRefresh: new Date(this.lastAgentCheck).toISOString(),\n })\n }\n }\n\n private extractAgentMentions(\n input: string,\n ): Array<{ mention: string; agentType: string; isAskModel: boolean }> {\n const mentions: Array<{\n mention: string\n agentType: string\n isAskModel: boolean\n }> = []\n\n const runAgentMatches = [\n ...input.matchAll(MentionProcessorService.MENTION_PATTERNS.runAgent),\n ]\n for (const match of runAgentMatches) {\n const mention = match[1]\n const agentType = mention.replace(/^run-agent-/, '')\n mentions.push({ mention, agentType, isAskModel: false })\n }\n\n const agentMatches = [\n ...input.matchAll(MentionProcessorService.MENTION_PATTERNS.agent),\n ]\n for (const match of agentMatches) {\n const mention = match[1]\n const agentType = mention.replace(/^agent-/, '')\n mentions.push({ mention, agentType, isAskModel: false })\n }\n\n const askModelMatches = [\n ...input.matchAll(MentionProcessorService.MENTION_PATTERNS.askModel),\n ]\n for (const match of askModelMatches) {\n const mention = match[1]\n mentions.push({ mention, agentType: mention, isAskModel: true })\n }\n\n return mentions\n }\n\n private emitAgentMentionEvent(\n mention: string,\n agentType: string,\n isAskModel: boolean,\n ): void {\n try {\n const eventData = {\n originalMention: mention,\n timestamp: Date.now(),\n }\n\n if (isAskModel) {\n emitReminderEvent('ask-model:mentioned', {\n ...eventData,\n modelName: mention,\n })\n } else {\n emitReminderEvent('agent:mentioned', {\n ...eventData,\n agentType,\n })\n }\n\n debugLogger.info('MENTION_PROCESSOR_EVENT_EMITTED', {\n type: isAskModel ? 'ask-model' : 'agent',\n mention,\n agentType: isAskModel ? undefined : agentType,\n })\n } catch (error) {\n debugLogger.error('MENTION_PROCESSOR_EVENT_FAILED', {\n mention,\n agentType,\n isAskModel,\n error: error instanceof Error ? error.message : error,\n })\n }\n }\n\n public clearCache(): void {\n this.agentCache.clear()\n this.lastAgentCheck = 0\n }\n}\n\nexport const mentionProcessor = new MentionProcessorService()\n\nexport const processMentions = (input: string) =>\n mentionProcessor.processMentions(input)\n\nexport const clearMentionCache = () => mentionProcessor.clearCache()\n"],
5
- "mappings": "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",
6
- "names": []
7
- }
@@ -1,30 +0,0 @@
1
- import { createRequire as __kodeCreateRequire } from "node:module";
2
- const require = __kodeCreateRequire(import.meta.url);
3
- import {
4
- ModelManager,
5
- USE_BEDROCK,
6
- USE_VERTEX,
7
- getModelManager,
8
- getQuickModel,
9
- getSlowAndCapableModel,
10
- getVertexRegionForModel,
11
- isDefaultSlowAndCapableModel,
12
- reloadModelManager
13
- } from "./chunk-Z33T5YN5.js";
14
- import "./chunk-AIMIPK4B.js";
15
- import "./chunk-UYXEDKOZ.js";
16
- import "./chunk-QYFKRZQC.js";
17
- import "./chunk-MN77D2F7.js";
18
- import "./chunk-FH5CHM6L.js";
19
- import "./chunk-JC6NCUG5.js";
20
- export {
21
- ModelManager,
22
- USE_BEDROCK,
23
- USE_VERTEX,
24
- getModelManager,
25
- getQuickModel,
26
- getSlowAndCapableModel,
27
- getVertexRegionForModel,
28
- isDefaultSlowAndCapableModel,
29
- reloadModelManager
30
- };