@shareai-lab/kode 2.0.1 → 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-7LH4HTNR.js → chunks/agentsValidate-PEWMYN4Q.js} +97 -69
  13. package/dist/chunks/agentsValidate-PEWMYN4Q.js.map +7 -0
  14. package/dist/{ask-3NHFFUQG.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-AFFSCMYS.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-ARZSBOAO.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-UHYRLID6.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-YC6LJCDE.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-3IN27HA5.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-73WGVYLQ.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-QVLYOPO5.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-K2CWOTI2.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-RZWOUA25.js → chunks/chunk-HRJ3ICQK.js} +59 -55
  79. package/dist/chunks/chunk-HRJ3ICQK.js.map +7 -0
  80. package/dist/{chunk-DZE5YA7L.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-7M2YN6TU.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-W7GRKO7Q.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-7U7L4NMD.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-ZVDRDPII.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-MWRSY4X6.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-STSX7GIX.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-RUSD6G5Y.js → chunks/config-25HRTPSP.js} +48 -10
  133. package/dist/chunks/cost-tracker-Z2UZT2J5.js +28 -0
  134. package/dist/{customCommands-TOIJFZAL.js → chunks/customCommands-TYMYZRG5.js} +11 -8
  135. package/dist/chunks/engine-MRVF6FK6.js +39 -0
  136. package/dist/{env-XGKBLU3D.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-UGEZJJEB.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-QWM36A3D.js → chunks/kodeHooks-RVKYRJHG.js} +11 -9
  146. package/dist/{llm-ZUQC4WYM.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-EE3XFHCJ.js → chunks/mentionProcessor-RJW5UPJD.js} +46 -16
  150. package/dist/chunks/mentionProcessor-RJW5UPJD.js.map +7 -0
  151. package/dist/{messages-EOYQKPGM.js → chunks/messages-EEWWLPHN.js} +2 -6
  152. package/dist/chunks/model-5TIEKQPD.js +37 -0
  153. package/dist/{openai-RRCWW33N.js → chunks/openai-XXK3YZG4.js} +13 -10
  154. package/dist/{outputStyles-62Q3VH2J.js → chunks/outputStyles-FAJTXN2A.js} +6 -9
  155. package/dist/chunks/permissions-HO7INPWM.js +27 -0
  156. package/dist/{pluginRuntime-6ETCZ2LL.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-3RXQBVOL.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-DOPVY2CW.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-CW7AYLVL.js +0 -42
  223. package/dist/acp-VEPJ74LT.js +0 -1357
  224. package/dist/acp-VEPJ74LT.js.map +0 -7
  225. package/dist/agentsValidate-7LH4HTNR.js.map +0 -7
  226. package/dist/ask-3NHFFUQG.js.map +0 -7
  227. package/dist/autoUpdater-ITPIHCOI.js +0 -17
  228. package/dist/chunk-3IN27HA5.js.map +0 -7
  229. package/dist/chunk-4FX3IVPT.js +0 -164
  230. package/dist/chunk-4FX3IVPT.js.map +0 -7
  231. package/dist/chunk-4RTX4AG4.js.map +0 -7
  232. package/dist/chunk-5PDP7R6N.js +0 -515
  233. package/dist/chunk-5PDP7R6N.js.map +0 -7
  234. package/dist/chunk-73WGVYLQ.js.map +0 -7
  235. package/dist/chunk-7M2YN6TU.js.map +0 -7
  236. package/dist/chunk-7U7L4NMD.js.map +0 -7
  237. package/dist/chunk-ABLVTESJ.js.map +0 -7
  238. package/dist/chunk-AFFSCMYS.js.map +0 -7
  239. package/dist/chunk-ARZSBOAO.js.map +0 -7
  240. package/dist/chunk-CIG63V4E.js +0 -72
  241. package/dist/chunk-CIG63V4E.js.map +0 -7
  242. package/dist/chunk-CM3EGTG6.js +0 -1609
  243. package/dist/chunk-CM3EGTG6.js.map +0 -7
  244. package/dist/chunk-DZE5YA7L.js.map +0 -7
  245. package/dist/chunk-E6YNABER.js.map +0 -7
  246. package/dist/chunk-EZXMVTDU.js.map +0 -7
  247. package/dist/chunk-F2SJXUDI.js +0 -148
  248. package/dist/chunk-F2SJXUDI.js.map +0 -7
  249. package/dist/chunk-FC5ZCKBI.js +0 -30167
  250. package/dist/chunk-FC5ZCKBI.js.map +0 -7
  251. package/dist/chunk-HCBELH4J.js +0 -145
  252. package/dist/chunk-HCBELH4J.js.map +0 -7
  253. package/dist/chunk-HN4E4UUQ.js.map +0 -7
  254. package/dist/chunk-IZVMU4S2.js +0 -654
  255. package/dist/chunk-IZVMU4S2.js.map +0 -7
  256. package/dist/chunk-K2CWOTI2.js.map +0 -7
  257. package/dist/chunk-LC4TVOCZ.js +0 -835
  258. package/dist/chunk-LC4TVOCZ.js.map +0 -7
  259. package/dist/chunk-MIW7N2MY.js +0 -2613
  260. package/dist/chunk-MIW7N2MY.js.map +0 -7
  261. package/dist/chunk-MWRSY4X6.js.map +0 -7
  262. package/dist/chunk-ND3XWFO6.js +0 -34
  263. package/dist/chunk-ND3XWFO6.js.map +0 -7
  264. package/dist/chunk-QVLYOPO5.js.map +0 -7
  265. package/dist/chunk-RZWOUA25.js.map +0 -7
  266. package/dist/chunk-S6HRABTA.js.map +0 -7
  267. package/dist/chunk-STSX7GIX.js.map +0 -7
  268. package/dist/chunk-UHYRLID6.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-W7GRKO7Q.js.map +0 -7
  274. package/dist/chunk-WVHORZQ5.js +0 -17
  275. package/dist/chunk-WVHORZQ5.js.map +0 -7
  276. package/dist/chunk-WWUWDNWW.js +0 -49
  277. package/dist/chunk-WWUWDNWW.js.map +0 -7
  278. package/dist/chunk-YC6LJCDE.js.map +0 -7
  279. package/dist/chunk-YXYYDIMI.js +0 -2931
  280. package/dist/chunk-YXYYDIMI.js.map +0 -7
  281. package/dist/chunk-ZVDRDPII.js.map +0 -7
  282. package/dist/cli-DOPVY2CW.js.map +0 -7
  283. package/dist/commands-2BF2CJ3A.js +0 -46
  284. package/dist/context-6FXPETYH.js +0 -30
  285. package/dist/costTracker-6SL26FDB.js +0 -19
  286. package/dist/kodeAgentSessionLoad-MITZADPB.js +0 -18
  287. package/dist/kodeAgentSessionResume-GVRWB4WO.js +0 -16
  288. package/dist/kodeAgentStreamJson-NXFN7TXH.js +0 -13
  289. package/dist/kodeAgentStreamJsonSession-UGEZJJEB.js.map +0 -7
  290. package/dist/kodeAgentStructuredStdio-HGWJT7CU.js +0 -10
  291. package/dist/llm-ZUQC4WYM.js.map +0 -7
  292. package/dist/llmLazy-54QQHA54.js +0 -15
  293. package/dist/loader-FYHJQES5.js +0 -28
  294. package/dist/mcp-J332IKT3.js +0 -49
  295. package/dist/mentionProcessor-EE3XFHCJ.js.map +0 -7
  296. package/dist/model-FV3JDJKH.js +0 -30
  297. package/dist/pluginRuntime-6ETCZ2LL.js.map +0 -7
  298. package/dist/pluginValidation-I4YKUWGS.js +0 -17
  299. package/dist/prompts-ZLEKDD77.js +0 -48
  300. package/dist/query-VFRJPBGD.js +0 -50
  301. package/dist/responsesStreaming-AW344PQO.js +0 -10
  302. package/dist/ripgrep-3NTIKQYW.js +0 -17
  303. package/dist/state-P5G6CO5V.js +0 -16
  304. package/dist/theme-3LWP3BG7.js +0 -14
  305. package/dist/toolPermissionSettings-3ROBVTUK.js +0 -18
  306. package/dist/tools-RO7HSSE5.js +0 -47
  307. package/dist/userInput-JSBJRFSK.js +0 -311
  308. package/dist/userInput-JSBJRFSK.js.map +0 -7
  309. package/dist/uuid-QN2CNKKN.js +0 -9
  310. /package/dist/{REPL-CW7AYLVL.js.map → chunks/Doctor-M3J7GRTJ.js.map} +0 -0
  311. /package/dist/{autoUpdater-ITPIHCOI.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-2BF2CJ3A.js.map → chunks/agentLoader-FCRG3TFJ.js.map} +0 -0
  314. /package/dist/{config-RUSD6G5Y.js.map → chunks/autoUpdater-CNESBOKO.js.map} +0 -0
  315. /package/dist/{context-6FXPETYH.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-TOIJFZAL.js.map → chunks/chunk-GCQCAXJZ.js.map} +0 -0
  318. /package/dist/{env-XGKBLU3D.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-MITZADPB.js.map → chunks/config-25HRTPSP.js.map} +0 -0
  321. /package/dist/{kodeAgentSessionResume-GVRWB4WO.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-QWM36A3D.js.map → chunks/env-TJ5NOBEB.js.map} +0 -0
  325. /package/dist/{llmLazy-54QQHA54.js.map → chunks/kodeAgentSessionId-VTNISJ2L.js.map} +0 -0
  326. /package/dist/{loader-FYHJQES5.js.map → chunks/kodeAgentSessionLoad-YB2RKBGJ.js.map} +0 -0
  327. /package/dist/{mcp-J332IKT3.js.map → chunks/kodeAgentSessionResume-DZSIVKVA.js.map} +0 -0
  328. /package/dist/{messages-EOYQKPGM.js.map → chunks/kodeAgentStreamJson-X5PLS2S6.js.map} +0 -0
  329. /package/dist/{model-FV3JDJKH.js.map → chunks/kodeHooks-RVKYRJHG.js.map} +0 -0
  330. /package/dist/{openai-RRCWW33N.js.map → chunks/llmLazy-ZUSSE3ZA.js.map} +0 -0
  331. /package/dist/{outputStyles-62Q3VH2J.js.map → chunks/messages-EEWWLPHN.js.map} +0 -0
  332. /package/dist/{pluginValidation-I4YKUWGS.js.map → chunks/model-5TIEKQPD.js.map} +0 -0
  333. /package/dist/{prompts-ZLEKDD77.js.map → chunks/openai-XXK3YZG4.js.map} +0 -0
  334. /package/dist/{query-VFRJPBGD.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-3NTIKQYW.js.map → chunks/pluginValidation-DAM7WRTC.js.map} +0 -0
  337. /package/dist/{skillMarketplace-3RXQBVOL.js.map → chunks/registry-XYJXMOA5.js.map} +0 -0
  338. /package/dist/{state-P5G6CO5V.js.map → chunks/responsesStreaming-JNGE2P3D.js.map} +0 -0
  339. /package/dist/{theme-3LWP3BG7.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-3ROBVTUK.js.map → chunks/src-OROQIWP3.js.map} +0 -0
  342. /package/dist/{tools-RO7HSSE5.js.map → chunks/theme-YBJUIMWK.js.map} +0 -0
  343. /package/dist/{uuid-QN2CNKKN.js.map → chunks/toolPermissionContext-MOCTRR7N.js.map} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../packages/core/src/ai/llm.ts", "../../packages/core/src/ai/llm/openai/queryOpenAI.ts", "../../packages/core/src/ai/llm/systemPromptUtils.ts", "../../packages/core/src/ai/llm/retry.ts", "../../packages/core/src/ai/llm/errors.ts", "../../packages/core/src/ai/adapters/base.ts", "../../packages/core/src/tooling/Tool.ts", "../../packages/core/src/ai/adapters/openaiAdapter.ts", "../../packages/core/src/ai/adapters/responsesAPI.ts", "../../packages/core/src/ai/adapters/responsesAPI/messageInput.ts", "../../packages/core/src/ai/adapters/responsesAPI/nonStreaming.ts", "../../packages/core/src/ai/adapters/chatCompletions.ts", "../../packages/core/src/constants/modelCapabilities.ts", "../../packages/core/src/ai/modelAdapterFactory.ts", "../../packages/core/src/ai/llm/openai/conversion.ts", "../../packages/core/src/utils/openaiMessageConversion.ts", "../../packages/core/src/ai/llm/openai/usage.ts", "../../packages/core/src/ai/llm/openai/params.ts", "../../packages/core/src/ai/llm/openai/stream.ts", "../../packages/core/src/ai/llm/openai/unifiedResponse.ts", "../../packages/core/src/ai/llm/anthropic/native.ts", "../../packages/core/src/utils/http.ts", "../../packages/core/src/ai/llm/maxTokens.ts", "../../packages/core/src/ai/llm/anthropic/client.ts", "../../packages/core/src/ai/llm/anthropic/cacheControl.ts", "../../packages/core/src/ai/llm/anthropic/messageParams.ts", "../../packages/core/src/utils/toolUsePartialJson.ts", "../../packages/core/src/ai/llm/anthropic/streaming.ts", "../../packages/core/src/ai/llm/anthropic/cost.ts", "../../packages/core/src/services/vcr.ts", "../../packages/core/src/services/responseStateManager.ts", "../../packages/core/src/ai/llm/apiKey.ts"],
4
+ "sourcesContent": ["import '@anthropic-ai/sdk/shims/node'\nimport Anthropic from '@anthropic-ai/sdk'\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 } from 'crypto'\nimport type { UUID } from 'crypto'\nimport 'dotenv/config'\nimport { addToTotalCost } from '#core/cost-tracker'\nimport models from '#core/constants/models'\nimport type { AssistantMessage, UserMessage } from '#core/query'\nimport { Tool, getToolDescription } from '#core/tooling/Tool'\nimport { queryOpenAI } from '#core/ai/llm/openai'\nimport { queryAnthropicNative } from '#core/ai/llm/anthropic'\nimport {\n getAnthropicApiKey,\n getGlobalConfig,\n ModelProfile,\n} from '#core/utils/config'\nimport { logError } from '#core/utils/log'\nimport { USER_AGENT } from '#core/utils/http'\nimport { countTokens } from '#core/utils/tokens'\nimport { setRequestStatus } from '#core/utils/requestStatus'\nimport { withVCR } from '#core/services/vcr'\nimport {\n debug as debugLogger,\n markPhase,\n getCurrentRequest,\n logLLMInteraction,\n logSystemPromptConstruction,\n logErrorWithDiagnosis,\n} from '#core/utils/debugLogger'\nimport { getModelManager } from '#core/utils/model'\nimport { getAssistantMessageFromError } from '#core/ai/llm/errors'\nimport { withRetry } from '#core/ai/llm/retry'\nimport {\n PROMPT_CACHING_ENABLED,\n splitSysPromptPrefix,\n} from '#core/ai/llm/systemPromptUtils'\nimport { getMaxTokensFromProfile } from '#core/ai/llm/maxTokens'\nimport { zodToJsonSchema } from 'zod-to-json-schema'\nimport type { BetaMessageStream } from '@anthropic-ai/sdk/lib/BetaMessageStream.mjs'\nimport {\n responseStateManager,\n getConversationId,\n} from '#core/services/responseStateManager'\nimport type { ToolUseContext } from '#core/tooling/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 '#core/utils/model'\nimport { getCLISyspromptPrefix } from '#core/constants/prompts'\nimport { getVertexRegionForModel } from '#core/utils/model'\nimport { ContentBlock } from '@anthropic-ai/sdk/resources/messages/messages'\nimport { nanoid } from 'nanoid'\nimport { parseToolUsePartialJsonOrThrow } from '#core/utils/toolUsePartialJson'\nimport { generateKodeContext, refreshKodeContext } from './llm/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 './constants'\nexport { fetchAnthropicModels, verifyApiKey } from './llm/apiKey'\n// Helper function to extract model configuration for debug logging\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 // \uD83D\uDEA8 No ModelProfile available - this should not happen in modern system\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// KodeContext helpers are implemented in `./kodeContext` to keep this module lean.\nexport { generateKodeContext, refreshKodeContext }\nexport {\n getAnthropicClient,\n resetAnthropicClient,\n userMessageToMessageParam,\n assistantMessageToMessageParam,\n} from '#core/ai/llm/anthropic'\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}\n\n// @see https://docs.anthropic.com/en/docs/about-claude/models#model-comparison-table\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\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('#core/utils/config').ModelPointerType\n prependCLISysprompt: boolean\n temperature?: number\n /**\n * Optional per-call max tokens override (used for small deterministic sub-queries like safety gates).\n */\n maxTokens?: number\n /**\n * Optional per-call stop sequences (best-effort; ignored by providers that don't support it).\n */\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 // Initialize response state if toolUseContext is provided\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 }, // Pass resolved ModelProfile and toolUseContext\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 // Update response state for GPT-5 Responses API continuation\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 // \u4F7F\u7528\u9519\u8BEF\u8BCA\u65AD\u7CFB\u7EDF\u8BB0\u5F55 LLM \u76F8\u5173\u9519\u8BEF\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 '#core/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 // Use native Anthropic SDK for Anthropic and some Anthropic-compatible providers\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 // Use OpenAI-compatible interface for all other providers\n return queryOpenAI(messages, systemPrompt, maxThinkingTokens, tools, signal, {\n ...options,\n modelProfile,\n toolUseContext,\n })\n}\n\nexport async function queryModel(\n modelPointer: import('#core/utils/config').ModelPointerType,\n messages: (UserMessage | AssistantMessage)[],\n systemPrompt: string[] = [],\n signal?: AbortSignal,\n): Promise<AssistantMessage> {\n // Use queryLLM with the pointer directly\n return queryLLM(\n messages,\n systemPrompt,\n 0, // maxThinkingTokens\n [], // tools\n signal || new AbortController().signal,\n {\n safeMode: false,\n model: modelPointer,\n prependCLISysprompt: true,\n },\n )\n}\n\n// Note: Use queryModel(pointer, ...) directly instead of these convenience functions\n\n// Simplified query function using quick model pointer\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", "import OpenAI from 'openai'\nimport type { ChatCompletionStream } from 'openai/lib/ChatCompletionStream'\nimport { randomUUID } from 'crypto'\nimport type { UUID } from 'crypto'\nimport { zodToJsonSchema } from 'zod-to-json-schema'\nimport type { TextBlockParam } from '@anthropic-ai/sdk/resources/index.mjs'\nimport type { Tool, ToolUseContext } from '#core/tooling/Tool'\nimport type { AssistantMessage, UserMessage } from '#core/query'\nimport type { ModelProfile } from '#core/utils/config'\nimport { getGlobalConfig } from '#core/utils/config'\nimport { getModelManager } from '#core/utils/model'\nimport {\n debug as debugLogger,\n getCurrentRequest,\n logLLMInteraction,\n logSystemPromptConstruction,\n} from '#core/utils/debugLogger'\nimport { logError } from '#core/utils/log'\nimport { addToTotalCost } from '#core/cost-tracker'\nimport { normalizeContentFromAPI } from '#core/utils/messages'\nimport { getCLISyspromptPrefix } from '#core/constants/prompts'\nimport { getReasoningEffort } from '#core/utils/thinking'\nimport { generateKodeContext } from '#core/ai/llm/kodeContext'\nimport { MAIN_QUERY_TEMPERATURE } from '#core/ai/llm/constants'\nimport {\n PROMPT_CACHING_ENABLED,\n splitSysPromptPrefix,\n} from '#core/ai/llm/systemPromptUtils'\nimport { withRetry } from '#core/ai/llm/retry'\nimport { getAssistantMessageFromError } from '#core/ai/llm/errors'\nimport { ModelAdapterFactory } from '#core/ai/modelAdapterFactory'\nimport {\n getCompletionWithProfile,\n getGPT5CompletionWithProfile,\n} from '#core/ai/openai'\nimport type { UnifiedRequestParams } from '#core/types/modelCapabilities'\n\nimport {\n convertAnthropicMessagesToOpenAIMessages,\n convertOpenAIResponseToAnthropic,\n} from './conversion'\nimport { buildOpenAIChatCompletionCreateParams, isGPT5Model } from './params'\nimport { handleMessageStream } from './stream'\nimport { buildAssistantMessageFromUnifiedResponse } from './unifiedResponse'\nimport { getMaxTokensFromProfile, normalizeUsage } from './usage'\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\nexport { buildOpenAIChatCompletionCreateParams, isGPT5Model } from './params'\n\nexport async 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 // \uD83D\uDD0D Debug: \u8BB0\u5F55\u6A21\u578B\u914D\u7F6E\u8BE6\u60C5\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 // Prepend system prompt block for easy API identification\n if (options?.prependCLISysprompt) {\n const [firstSyspromptBlock] = splitSysPromptPrefix(systemPrompt)\n\n systemPrompt = [getCLISyspromptPrefix() + systemPrompt] // some openai-like providers need the entire system prompt as a single block\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 // Use tool's JSON schema directly if provided, otherwise convert Zod schema\n parameters:\n 'inputJSONSchema' in _ && _.inputJSONSchema\n ? _.inputJSONSchema\n : (zodToJsonSchema(_.inputSchema) as Record<string, unknown>),\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 // \u8BB0\u5F55\u7CFB\u7EDF\u63D0\u793A\u6784\u5EFA\u8FC7\u7A0B (OpenAI path)\n logSystemPromptConstruction({\n basePrompt: systemPrompt.join('\\n'),\n kodeContext: generateKodeContext() || '',\n reminders: [], // \u8FD9\u91CC\u53EF\u4EE5\u4ECE generateSystemReminders \u83B7\u53D6\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 // Only use new adapters for Responses API models\n // Chat Completions models use legacy path for stability\n if (shouldUseResponses) {\n const adapter = ModelAdapterFactory.createAdapter(modelProfile)\n const reasoningEffort = await getReasoningEffort(modelProfile, messages)\n\n // Determine verbosity based on model name\n // Most GPT-5 codex models only support 'medium', so default to that unless we detect 'high' in the name\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 // Default to 'medium' for all other cases, including mini, codex, etc.\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 ?? undefined,\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('#core/ai/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,\n costUSD: 0,\n durationMs: Date.now() - start,\n uuid: randomUUID() as UUID,\n }\n return {\n assistantMessage: assistantMsg,\n rawResponse: finalResponse,\n apiFormat: 'openai',\n }\n }\n\n const maxTokens =\n options?.maxTokens ?? getMaxTokensFromProfile(modelProfile)\n\n const opts = buildOpenAIChatCompletionCreateParams({\n model,\n maxTokens,\n messages: [...openaiSystem, ...openaiMessages],\n temperature:\n options?.temperature ??\n (isGPT5Model(model) ? 1 : MAIN_QUERY_TEMPERATURE),\n stream: config.stream,\n toolSchemas: toolSchemas,\n stopSequences: options?.stopSequences,\n reasoningEffort: await getReasoningEffort(modelProfile, messages),\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,\n costUSD: 0,\n durationMs: Date.now() - start,\n uuid: randomUUID() as UUID,\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", "export const PROMPT_CACHING_ENABLED = !process.env.DISABLE_PROMPT_CACHING\n\nexport function splitSysPromptPrefix(systemPrompt: string[]): string[] {\n // split out the first block of the system prompt as the \"prefix\" for API\n\n const systemPromptFirstBlock = systemPrompt[0] || ''\n const systemPromptRest = systemPrompt.slice(1)\n return [systemPromptFirstBlock, systemPromptRest.join('\\n')].filter(Boolean)\n}\n", "import '@anthropic-ai/sdk/shims/node'\nimport { APIConnectionError, APIError } from '@anthropic-ai/sdk'\nimport { debug as debugLogger } from '#core/utils/debugLogger'\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 if (error.status === 409) return true\n if (error.status === 429) return true\n if (error.status && error.status >= 500) return true\n\n return false\n}\n\nexport async 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", "import type { AssistantMessage } from '#core/query'\nimport { debug as debugLogger } from '#core/utils/debugLogger'\nimport { createAssistantAPIErrorMessage } from '#core/utils/messages'\nimport {\n API_ERROR_MESSAGE_PREFIX,\n CREDIT_BALANCE_TOO_LOW_ERROR_MESSAGE,\n INVALID_API_KEY_ERROR_MESSAGE,\n PROMPT_TOO_LONG_ERROR_MESSAGE,\n} from './constants'\n\nexport function 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", "import {\n ModelCapabilities,\n UnifiedRequestParams,\n UnifiedResponse,\n} from '#core/types/modelCapabilities'\nimport { ModelProfile } from '#core/utils/config'\nimport { Tool } from '#core/tooling/Tool'\n\n// Canonical token representation - normalize once at the boundary\ninterface TokenUsage {\n input: number\n output: number\n total?: number\n reasoning?: number\n}\n\n// Streaming event types for async generator streaming\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\n// Normalize API-specific token names to canonical representation - do this ONCE at the boundary\nfunction normalizeTokens(apiResponse: any): TokenUsage {\n // Validate input to prevent runtime errors\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 // Subclasses must implement these methods\n abstract createRequest(params: UnifiedRequestParams): any\n abstract parseResponse(response: any): Promise<UnifiedResponse>\n abstract buildTools(tools: Tool[]): any\n\n // Optional: subclasses can implement streaming for real-time updates\n // Default implementation yields no events (not supported)\n async *parseStreamingResponse?(\n response: any,\n signal?: AbortSignal,\n ): AsyncGenerator<StreamingEvent> {\n return\n }\n\n // Reset cumulative usage for new requests\n protected resetCumulativeUsage(): void {\n this.cumulativeUsage = { input: 0, output: 0 }\n }\n\n // Safely update cumulative usage\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 // Shared utility methods\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 { z } from 'zod'\nimport type { PermissionMode } from '#core/types/PermissionMode'\nimport type { ToolPermissionContext } from '#core/types/toolPermissionContext'\nimport type { CommandSource } from '#protocol/commandSource'\n\n/**\n * Core Tool interface for Kode's extensible tool system\n * Provides standardized contract for all tool implementations\n */\n\n/**\n * Tool-facing render output type.\n *\n * Core must stay UI-framework-agnostic, so we intentionally avoid importing\n * React/Ink types here. Hosts (Ink/Web/etc.) may treat this as a renderable\n * node and narrow as needed.\n */\nexport type ToolRenderOutput = any\n\nexport type SetToolJSXFn<TRenderable = ToolRenderOutput> = (\n jsx: {\n jsx: TRenderable | null\n shouldHidePromptInput: boolean\n } | null,\n) => void\n\nexport interface ToolUseContext {\n messageId: string | undefined\n toolUseId?: string\n agentId?: string\n safeMode?: boolean\n /**\n * Used to distinguish user-initiated shell commands from agent-initiated ones.\n * Impacts sandboxing + safety gates for tools like Bash.\n */\n commandSource?: CommandSource\n abortController: AbortController\n readFileTimestamps: { [filePath: string]: number }\n options?: {\n commands?: any[]\n tools?: any[]\n verbose?: boolean\n slowAndCapableModel?: string\n safeMode?: boolean\n permissionMode?: PermissionMode\n toolPermissionContext?: ToolPermissionContext\n /**\n * Plain-text content of the most recent user message before any internal\n * reminder injections. Used for intent-alignment checks (e.g. Bash gate).\n */\n lastUserPrompt?: string\n forkNumber?: number\n messageLogName?: string\n maxThinkingTokens?: any\n model?: string\n commandAllowedTools?: string[]\n isKodingRequest?: boolean\n kodingContext?: string\n isCustomCommand?: boolean\n mcpClients?: any[]\n /**\n * Test-only override for the Bash LLM intent gate query function.\n * Allows unit tests to force deterministic gate results without calling real models.\n */\n bashLlmGateQuery?: (args: {\n systemPrompt: string[]\n userInput: string\n signal: AbortSignal\n model?: 'quick' | 'main'\n }) => Promise<string>\n disableSlashCommands?: boolean\n /**\n * When false, suppress reference CLI-compatible session persistence (.jsonl under config/projects).\n * Default: true for CLI sessions; some internal tools may opt out to avoid polluting session logs.\n */\n persistSession?: boolean\n /**\n * When true, the current execution context cannot show interactive permission prompts.\n * Any permission decision that would normally prompt should be auto-denied.\n */\n shouldAvoidPermissionPrompts?: boolean\n /**\n * Host-provided interactive permission prompt for tool-like permission flows that\n * happen inside a tool call (e.g. Bash sandbox network proxy bootstrap on macOS).\n *\n * When not provided, tools must fail closed (deny) without prompting.\n */\n requestToolUsePermission?: (\n request: {\n tool: any\n description: string\n input: { [key: string]: unknown }\n commandPrefix: any | null\n suggestions?: any[]\n riskScore: number | null\n },\n toolUseContext: ToolUseContext,\n ) => Promise<\n | { result: true; type: 'permanent' | 'temporary' }\n | { result: false; rejectionMessage?: string }\n >\n /**\n * Test-only overrides for sandbox runtime decisions.\n * Used by the Bash sandbox permission matrix tests to emulate different\n * project/home/platform environments without touching the real filesystem.\n */\n __sandboxProjectDir?: string\n __sandboxHomeDir?: string\n __sandboxPlatform?: NodeJS.Platform\n __sandboxBwrapPath?: string | null\n }\n // GPT-5 Responses API state management\n responseState?: {\n previousResponseId?: string\n conversationId?: string\n }\n}\n\nexport interface ExtendedToolUseContext extends ToolUseContext {\n setToolJSX: SetToolJSXFn\n}\n\nexport interface ValidationResult {\n result: boolean\n message?: string\n errorCode?: number\n meta?: any\n}\n\nexport interface Tool<\n TInput extends z.ZodTypeAny = z.ZodTypeAny,\n TOutput = any,\n> {\n name: string\n description?: string | ((input?: z.infer<TInput>) => Promise<string>)\n inputSchema: TInput\n inputJSONSchema?: Record<string, unknown>\n prompt: (options?: { safeMode?: boolean }) => Promise<string>\n userFacingName?: (input?: z.infer<TInput>) => string\n /** Cached description for synchronous access by adapters */\n cachedDescription?: string\n isEnabled: () => Promise<boolean>\n isReadOnly: (input?: z.infer<TInput>) => boolean\n isConcurrencySafe: (input?: z.infer<TInput>) => boolean\n needsPermissions: (input?: z.infer<TInput>) => boolean\n /**\n * True when the tool requires an interactive UI round-trip with the user.\n * Default behavior: these tools should still prompt even in bypass modes.\n */\n requiresUserInteraction?: (input?: z.infer<TInput>) => boolean\n validateInput?: (\n input: z.infer<TInput>,\n context?: ToolUseContext,\n ) => Promise<ValidationResult>\n renderResultForAssistant: (output: TOutput) => string | any[]\n renderToolUseMessage: (\n input: z.infer<TInput>,\n options: { verbose: boolean },\n ) => ToolRenderOutput\n renderToolUseRejectedMessage?: (...args: any[]) => ToolRenderOutput\n renderToolResultMessage?: (\n output: TOutput,\n options: { verbose: boolean },\n ) => ToolRenderOutput\n call: (\n input: z.infer<TInput>,\n context: ToolUseContext,\n ) => AsyncGenerator<\n | {\n type: 'result'\n data: TOutput\n resultForAssistant?: string | any[]\n newMessages?: unknown[]\n contextModifier?: {\n modifyContext: (ctx: ToolUseContext) => ToolUseContext\n }\n }\n | {\n type: 'progress'\n content: any\n normalizedMessages?: any[]\n tools?: any[]\n },\n void,\n unknown\n >\n}\n\n/**\n * Get tool description synchronously for adapter usage.\n * Adapter code cannot await async descriptions, so we use cached or fallback values.\n */\nexport function getToolDescription(tool: Tool): string {\n // First try cached description (populated by tool initialization)\n if (tool.cachedDescription) {\n return tool.cachedDescription\n }\n\n // Then try string description\n if (typeof tool.description === 'string') {\n return tool.description\n }\n\n // Finally, use fallback name if description is async function\n return `Tool: ${tool.name}`\n}\n", "import { ModelAPIAdapter, StreamingEvent, normalizeTokens } from './base'\nimport {\n UnifiedRequestParams,\n UnifiedResponse,\n ModelCapabilities,\n ReasoningStreamingContext,\n} from '#core/types/modelCapabilities'\nimport { ModelProfile } from '#core/utils/config'\nimport { Tool, getToolDescription } from '#core/tooling/Tool'\nimport { zodToJsonSchema } from 'zod-to-json-schema'\nimport { debug as debugLogger } from '#core/utils/debugLogger'\nimport { logError } from '#core/utils/log'\n\n// Re-export normalizeTokens and StreamingEvent for subclasses\nexport { normalizeTokens, type StreamingEvent }\n\n/**\n * Base adapter for all OpenAI-compatible APIs (Chat Completions and Responses API)\n * Handles common streaming logic, SSE parsing, and usage normalization\n */\nexport abstract class OpenAIAdapter extends ModelAPIAdapter {\n constructor(capabilities: ModelCapabilities, modelProfile: ModelProfile) {\n super(capabilities, modelProfile)\n }\n\n /**\n * Unified parseResponse that handles both streaming and non-streaming responses\n */\n async parseResponse(response: any): Promise<UnifiedResponse> {\n // Check if this is a streaming response (has ReadableStream body)\n if (response?.body instanceof ReadableStream) {\n // Use streaming helper for streaming responses\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 // Process non-streaming response - delegate to subclass\n return this.parseNonStreamingResponse(response)\n }\n\n /**\n * Common streaming response parser for all OpenAI APIs\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 // Initialize reasoning context for Responses API\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 // Extract response ID\n if (parsed.id) {\n responseId = parsed.id\n }\n\n // Delegate to subclass for specific processing\n yield* this.processStreamingChunk(\n parsed,\n responseId,\n hasStarted,\n accumulatedContent,\n reasoningContext,\n )\n\n // Update state based on subclass processing\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 // Build final response\n const finalContent = accumulatedContent\n ? [{ type: 'text', text: accumulatedContent, citations: [] }]\n : [{ type: 'text', text: '', citations: [] }]\n\n // Yield final message stop\n yield {\n type: 'message_stop',\n message: {\n id: responseId,\n role: 'assistant',\n content: finalContent,\n responseId,\n },\n }\n }\n\n /**\n * Parse SSE chunk - common for all OpenAI APIs\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 /**\n * Common helper for processing text deltas\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 /**\n * Common usage normalization\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 /**\n * Abstract methods that subclasses must implement\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 /**\n * Common tool building logic\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),\n },\n }))\n }\n}\n", "import { OpenAIAdapter, StreamingEvent, normalizeTokens } from './openaiAdapter'\nimport {\n UnifiedRequestParams,\n UnifiedResponse,\n ReasoningStreamingContext,\n} from '#core/types/modelCapabilities'\nimport { Tool, getToolDescription } from '#core/tooling/Tool'\nimport { zodToJsonSchema } from 'zod-to-json-schema'\nimport { processResponsesStream } from './responsesStreaming'\nimport { debug as debugLogger } from '#core/utils/debugLogger'\nimport { logError } from '#core/utils/log'\nimport {\n buildInstructions,\n convertMessagesToInput,\n} from './responsesAPI/messageInput'\nimport { parseNonStreamingResponse as parseResponsesApiNonStreamingResponse } from './responsesAPI/nonStreaming'\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 // Build base request\n const request: any = {\n model: this.modelProfile.modelName,\n input: convertMessagesToInput(messages),\n instructions: buildInstructions(systemPrompt),\n }\n\n // Add token limit using model capabilities\n const maxTokensField = this.getMaxTokensParam()\n request[maxTokensField] = maxTokens\n\n if (stopSequences && stopSequences.length > 0) {\n request.stop = stopSequences\n }\n\n // Add streaming support using model capabilities\n request.stream =\n params.stream !== false && this.capabilities.streaming.supported\n\n // Add temperature using model capabilities\n const temperature = this.getTemperature()\n if (temperature !== undefined) {\n request.temperature = temperature\n }\n\n // Add reasoning control using model capabilities\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 // Add verbosity control using model capabilities\n if (\n this.capabilities.parameters.supportsVerbosity &&\n this.shouldIncludeVerbosity()\n ) {\n // Determine default verbosity based on model name if not provided\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 // Default to 'medium' for all other cases\n }\n\n request.text = {\n verbosity: defaultVerbosity,\n }\n }\n\n // Add tools\n if (tools && tools.length > 0) {\n request.tools = this.buildTools(tools)\n }\n\n // Add tool choice using model capabilities\n request.tool_choice = 'auto'\n\n // Add parallel tool calls flag using model capabilities\n if (this.capabilities.toolCalling.supportsParallelCalls) {\n request.parallel_tool_calls = true\n }\n\n // Add store flag\n request.store = false\n\n // Add state management\n if (\n params.previousResponseId &&\n this.capabilities.stateManagement.supportsPreviousResponseId\n ) {\n request.previous_response_id = params.previousResponseId\n }\n\n // Add include array for reasoning and other content\n if (include.length > 0) {\n request.include = include\n }\n\n return request\n }\n\n buildTools(tools: Tool[]): any[] {\n // Use flat function schema shape (Responses API)\n const isPlainObject = (obj: unknown): obj is Record<string, unknown> => {\n return obj !== null && typeof obj === 'object' && !Array.isArray(obj)\n }\n\n return tools.map(tool => {\n // Prefer pre-built JSON schema if available\n let parameters: Record<string, unknown> | undefined = tool.inputJSONSchema\n\n // Otherwise, check if inputSchema is already a JSON schema (not Zod)\n if (!parameters && tool.inputSchema) {\n const inputSchema: unknown = tool.inputSchema\n if (\n isPlainObject(inputSchema) &&\n ('type' in inputSchema || 'properties' in inputSchema)\n ) {\n parameters = inputSchema\n } else {\n // Try to convert Zod schema\n try {\n const converted: unknown = zodToJsonSchema(tool.inputSchema)\n parameters =\n isPlainObject(converted) &&\n ('type' in converted || 'properties' in converted)\n ? converted\n : { type: 'object', properties: {} }\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 // Use minimal schema as fallback\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 ?? { type: 'object', properties: {} },\n }\n })\n }\n\n // Override parseResponse to handle Response API directly without double conversion\n async parseResponse(response: any): Promise<UnifiedResponse> {\n // Check if this is a streaming response (has ReadableStream body)\n if (response?.body instanceof ReadableStream) {\n // Handle streaming directly - don't go through OpenAIAdapter conversion\n const { assistantMessage } = await processResponsesStream(\n this.parseStreamingResponse(response),\n Date.now(),\n response.id ?? `resp_${Date.now()}`,\n )\n\n // LINUX WAY: ONE representation only - tool_use blocks in content\n // NO toolCalls array when we have tool_use blocks\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 // Process non-streaming response - delegate to existing method\n return this.parseNonStreamingResponse(response)\n }\n\n // Implement abstract method from OpenAIAdapter\n protected parseNonStreamingResponse(response: any): UnifiedResponse {\n return parseResponsesApiNonStreamingResponse(response)\n }\n\n // Implement abstract method from OpenAIAdapter - Responses API specific streaming logic\n protected async *processStreamingChunk(\n parsed: any,\n responseId: string,\n hasStarted: boolean,\n accumulatedContent: string,\n reasoningContext?: ReasoningStreamingContext,\n ): AsyncGenerator<StreamingEvent> {\n // Handle reasoning summary part events\n if (parsed.type === 'response.reasoning_summary_part.added') {\n const partIndex = parsed.summary_index || 0\n\n // Initialize reasoning state if not already done\n if (!reasoningContext?.thinkingContent) {\n reasoningContext!.thinkingContent = ''\n reasoningContext!.currentPartIndex = -1\n }\n\n reasoningContext!.currentPartIndex = partIndex\n\n // If this is not the first part and we have content, add newline separator\n if (partIndex > 0 && reasoningContext!.thinkingContent) {\n reasoningContext!.thinkingContent += '\\n\\n'\n\n // Emit newline separator as thinking delta\n yield {\n type: 'text_delta',\n delta: '\\n\\n',\n responseId,\n }\n }\n\n return\n }\n\n // Handle reasoning summary text delta\n if (parsed.type === 'response.reasoning_summary_text.delta') {\n const delta = parsed.delta || ''\n\n if (delta && reasoningContext) {\n // Accumulate thinking content\n reasoningContext.thinkingContent += delta\n\n // Stream thinking delta\n yield {\n type: 'text_delta',\n delta,\n responseId,\n }\n }\n\n return\n }\n\n // Handle reasoning text delta\n if (parsed.type === 'response.reasoning_text.delta') {\n const delta = parsed.delta || ''\n\n if (delta && reasoningContext) {\n // Accumulate thinking content\n reasoningContext.thinkingContent += delta\n\n // Stream thinking delta\n yield {\n type: 'text_delta',\n delta,\n responseId,\n }\n }\n\n return\n }\n\n // Handle text content deltas (Responses API format)\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 // Handle tool calls (Responses API format)\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 // Handle usage information - normalize to canonical structure\n if (parsed.usage) {\n const normalizedUsage = normalizeTokens(parsed.usage)\n\n // Add reasoning tokens if available in Responses API format\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 // Check if we have content delta\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 // parseStreamingResponse and parseSSEChunk are now handled by the base OpenAIAdapter class\n\n // Implement abstract method for parsing streaming OpenAI responses\n protected async parseStreamingOpenAIResponse(\n response: any,\n ): Promise<{ assistantMessage: any; rawResponse: any }> {\n // Delegate to the processResponsesStream helper for consistency\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 // Implement abstract method for usage normalization\n protected normalizeUsageForAdapter(usage?: any) {\n // Call the base implementation with Responses API specific defaults\n const baseUsage = super.normalizeUsageForAdapter(usage)\n\n // Add any Responses API specific usage fields\n return {\n ...baseUsage,\n reasoningTokens: usage?.output_tokens_details?.reasoning_tokens ?? 0,\n }\n }\n}\n", "export function convertMessagesToInput(messages: any[]): any[] {\n // Convert Chat Completions messages to Response API input format\n const inputItems = []\n\n for (const message of messages) {\n const role = message.role\n\n if (role === 'tool') {\n // Handle tool call results\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 // Handle assistant 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 = 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 // Handle regular text content\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\nexport function buildInstructions(systemPrompt: string[]): string {\n // Join system prompts into instructions\n const systemContent = systemPrompt\n .filter(content => content.trim())\n .join('\\n\\n')\n\n return systemContent\n}\n", "import type { UnifiedResponse } from '#core/types/modelCapabilities'\n\nfunction parseToolCalls(response: any): any[] {\n // Tool call parsing (Responses API)\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 // Parse tool call with better structure\n const callId = item.call_id || item.id\n const name = item.name || ''\n const args = item.arguments || '{}'\n\n // Validate required fields\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 // Handle alternative tool_call type\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\nexport function parseNonStreamingResponse(response: any): UnifiedResponse {\n // Process basic text output\n let content = response.output_text || ''\n\n // Extract reasoning content from structured output\n let reasoningContent = ''\n if (response.output && Array.isArray(response.output)) {\n const messageItems = response.output.filter(\n (item: any) => item.type === 'message',\n )\n if (messageItems.length > 0) {\n content = messageItems\n .map((item: any) => {\n if (item.content && Array.isArray(item.content)) {\n return item.content\n .filter((c: any) => c.type === 'text')\n .map((c: any) => c.text)\n .join('\\n')\n }\n return item.content || ''\n })\n .filter(Boolean)\n .join('\\n\\n')\n }\n\n // Extract reasoning content\n const reasoningItems = response.output.filter(\n (item: any) => item.type === 'reasoning',\n )\n if (reasoningItems.length > 0) {\n reasoningContent = reasoningItems\n .map((item: any) => item.content || '')\n .filter(Boolean)\n .join('\\n\\n')\n }\n }\n\n // Apply reasoning formatting\n if (reasoningContent) {\n const thinkBlock = `\\n\\n${reasoningContent}\\n\\n`\n content = thinkBlock + content\n }\n\n // Parse tool calls\n const toolCalls = parseToolCalls(response)\n\n // Build unified response\n // Convert content to array format for Anthropic compatibility\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, // Return as array (Anthropic format)\n toolCalls,\n usage: {\n promptTokens,\n completionTokens,\n reasoningTokens: response.usage?.output_tokens_details?.reasoning_tokens,\n },\n responseId: response.id, // Save for state management\n }\n}\n", "import { OpenAIAdapter, StreamingEvent, normalizeTokens } from './openaiAdapter'\nimport {\n UnifiedRequestParams,\n UnifiedResponse,\n ReasoningStreamingContext,\n} from '#core/types/modelCapabilities'\nimport { randomUUID } from 'crypto'\nimport { Tool, getToolDescription } from '#core/tooling/Tool'\nimport { zodToJsonSchema } from 'zod-to-json-schema'\nimport { setRequestStatus } from '#core/utils/requestStatus'\n\nexport class ChatCompletionsAdapter extends OpenAIAdapter {\n createRequest(params: UnifiedRequestParams): any {\n const { messages, systemPrompt, tools, maxTokens, stream } = params\n\n // Build complete message list (including system prompts)\n const fullMessages = this.buildMessages(systemPrompt, messages)\n\n // Build request\n const request: any = {\n model: this.modelProfile.modelName,\n messages: fullMessages,\n [this.getMaxTokensParam()]: maxTokens,\n temperature: this.getTemperature(),\n }\n\n // Add tools\n if (tools && tools.length > 0) {\n request.tools = this.buildTools(tools)\n request.tool_choice = 'auto'\n }\n\n // Add reasoning effort using model capabilities\n if (\n this.capabilities.parameters.supportsReasoningEffort &&\n params.reasoningEffort\n ) {\n request.reasoning_effort = params.reasoningEffort // Chat Completions format\n }\n\n // Add verbosity using model capabilities\n if (this.capabilities.parameters.supportsVerbosity && params.verbosity) {\n request.verbosity = params.verbosity // Chat Completions format\n }\n\n // Add streaming options using model capabilities\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 // Apply model-specific constraints based on capabilities\n if (this.capabilities.parameters.temperatureMode === 'fixed_one') {\n // Models like O1 that don't support temperature\n delete request.temperature\n }\n\n if (!this.capabilities.streaming.supported) {\n // Models that don't support streaming\n delete request.stream\n delete request.stream_options\n }\n\n return request\n }\n\n buildTools(tools: Tool[]): any[] {\n // Use tool calling capabilities from model configuration\n return tools.map(tool => ({\n type: 'function',\n function: {\n name: tool.name,\n description: getToolDescription(tool),\n parameters: tool.inputJSONSchema || zodToJsonSchema(tool.inputSchema),\n },\n }))\n }\n\n // parseResponse is now handled by the base OpenAIAdapter class\n\n // Implement abstract method from OpenAIAdapter - Chat Completions specific non-streaming\n protected parseNonStreamingResponse(response: any): UnifiedResponse {\n // Validate response structure\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 // Extract message content safely\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 // Extract usage safely\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 // Merge system prompts and messages\n const systemMessages = systemPrompt.map(prompt => ({\n role: 'system',\n content: prompt,\n }))\n\n // Normalize tool messages (logic from original openai.ts:527-550)\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 // Implement abstract method from OpenAIAdapter - Chat Completions specific streaming logic\n protected async *processStreamingChunk(\n parsed: any,\n responseId: string,\n hasStarted: boolean,\n accumulatedContent: string,\n reasoningContext?: ReasoningStreamingContext,\n ): AsyncGenerator<StreamingEvent> {\n // Validate input\n if (!parsed || typeof parsed !== 'object') {\n return\n }\n\n // Handle content deltas (Chat Completions format)\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 // Handle tool calls (Chat Completions format)\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 // Handle usage information - normalize to canonical structure and track cumulatively\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 // Check if we have content delta\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 // Implement abstract method for parsing streaming OpenAI responses\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() // Reset usage for new request\n\n for await (const event of this.parseStreamingResponse(response)) {\n // Check for abort signal\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 is now in canonical format - just extract the values\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 // Return partial response on abort\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: randomUUID(),\n responseId,\n }\n return {\n assistantMessage,\n rawResponse: {\n id: responseId,\n content: contentBlocks,\n usage,\n aborted: true,\n },\n }\n }\n throw error // Re-throw other errors\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 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(), // Placeholder\n uuid: randomUUID(),\n responseId,\n }\n return {\n assistantMessage,\n rawResponse: {\n id: responseId,\n content: contentBlocks,\n usage,\n },\n }\n }\n protected normalizeUsageForAdapter(usage?: any) {\n return super.normalizeUsageForAdapter(usage)\n }\n}\n", "import { ModelCapabilities } from '#core/types/modelCapabilities'\n\n// GPT-5 standard capability definition\nconst GPT5_CAPABILITIES: ModelCapabilities = {\n apiArchitecture: {\n primary: 'responses_api',\n fallback: 'chat_completions',\n },\n parameters: {\n maxTokensField: 'max_output_tokens', // Responses API uses 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, // Responses API supports streaming\n includesUsage: true,\n },\n}\n\n// Chat Completions standard capability definition\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\n// Complete model capability mapping table\nexport const MODEL_CAPABILITIES_REGISTRY: Record<string, ModelCapabilities> = {\n // GPT-5 series\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-4 series\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 series (supported through conversion layer)\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 series (special reasoning models)\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\n// Intelligently infer capabilities for unregistered models\nexport function inferModelCapabilities(\n modelName: string,\n): ModelCapabilities | null {\n if (!modelName) return null\n\n const lowerName = modelName.toLowerCase()\n\n // GPT-5 series\n if (lowerName.includes('gpt-5') || lowerName.includes('gpt5')) {\n return GPT5_CAPABILITIES\n }\n\n // GPT-6 series (reserved for future)\n if (lowerName.includes('gpt-6') || lowerName.includes('gpt6')) {\n return {\n ...GPT5_CAPABILITIES,\n streaming: { supported: true, includesUsage: true },\n }\n }\n\n // GLM series - Use Chat Completions API\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, // GLM might not support this\n },\n }\n }\n\n // O1 series\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 // Default to null, let system use default behavior\n return null\n}\n\n// Get model capabilities (with caching)\nconst capabilityCache = new Map<string, ModelCapabilities>()\n\nexport function getModelCapabilities(modelName: string): ModelCapabilities {\n // Check cache\n if (capabilityCache.has(modelName)) {\n return capabilityCache.get(modelName)!\n }\n\n // Look up in registry\n if (MODEL_CAPABILITIES_REGISTRY[modelName]) {\n const capabilities = MODEL_CAPABILITIES_REGISTRY[modelName]\n capabilityCache.set(modelName, capabilities)\n return capabilities\n }\n\n // Try to infer\n const inferred = inferModelCapabilities(modelName)\n if (inferred) {\n capabilityCache.set(modelName, inferred)\n return inferred\n }\n\n // Default to Chat Completions\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 '#core/constants/modelCapabilities'\nimport { ModelProfile, getGlobalConfig } from '#core/utils/config'\nimport { ModelCapabilities } from '#core/types/modelCapabilities'\n\nexport class ModelAdapterFactory {\n /**\n * Create appropriate adapter based on model configuration\n */\n static createAdapter(modelProfile: ModelProfile): ModelAPIAdapter {\n const capabilities = getModelCapabilities(modelProfile.modelName)\n\n // Determine which API to use\n const apiType = this.determineAPIType(modelProfile, capabilities)\n\n // Create corresponding adapter\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 /**\n * Determine which API should be used\n */\n private static determineAPIType(\n modelProfile: ModelProfile,\n capabilities: ModelCapabilities,\n ): 'responses_api' | 'chat_completions' {\n // If model doesn't support Responses API, use Chat Completions directly\n if (capabilities.apiArchitecture.primary !== 'responses_api') {\n return 'chat_completions'\n }\n\n // Check if this is official OpenAI endpoint\n const isOfficialOpenAI =\n !modelProfile.baseURL || modelProfile.baseURL.includes('api.openai.com')\n\n // Non-official endpoints can use Responses API if model supports it\n if (!isOfficialOpenAI) {\n // If there's a fallback option, use fallback\n if (capabilities.apiArchitecture.fallback === 'chat_completions') {\n return capabilities.apiArchitecture.primary // \u2190 FIXED: Use primary instead of fallback\n }\n // Otherwise use primary (might fail, but let it try)\n return capabilities.apiArchitecture.primary\n }\n\n // For now, always use Responses API for supported models when on official endpoint\n // Streaming fallback will be handled at runtime if needed\n\n // Use primary API type\n return capabilities.apiArchitecture.primary\n }\n\n /**\n * Check if model should use Responses API\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", "import OpenAI from 'openai'\nimport { nanoid } from 'nanoid'\nimport type {\n ContentBlock,\n Message as AnthropicMessage,\n} from '@anthropic-ai/sdk/resources/index.mjs'\nimport type { Tool } from '#core/tooling/Tool'\nimport type { AssistantMessage, UserMessage } from '#core/query'\nimport { convertAnthropicMessagesToOpenAIMessages as convertAnthropicMessagesToOpenAIMessagesUtil } from '#core/utils/openaiMessageConversion'\nimport { normalizeUsage } from './usage'\n\nfunction mapFinishReasonToStopReason(\n reason: OpenAI.ChatCompletion.Choice['finish_reason'] | null | undefined,\n): AnthropicMessage['stop_reason'] {\n switch (reason) {\n case 'stop':\n return 'end_turn'\n case 'length':\n return 'max_tokens'\n case 'tool_calls':\n case 'function_call':\n return 'tool_use'\n default:\n return null\n }\n}\n\nexport function convertAnthropicMessagesToOpenAIMessages(\n messages: (UserMessage | AssistantMessage)[],\n): (\n | OpenAI.ChatCompletionMessageParam\n | OpenAI.ChatCompletionToolMessageParam\n)[] {\n return convertAnthropicMessagesToOpenAIMessagesUtil(messages)\n}\n\nexport function convertOpenAIResponseToAnthropic(\n response: OpenAI.ChatCompletion,\n tools?: Tool[],\n): AnthropicMessage {\n const normalizedUsage = normalizeUsage(response.usage)\n let contentBlocks: ContentBlock[] = []\n const message = response.choices?.[0]?.message\n if (!message) {\n return {\n id: nanoid(),\n model: response.model ?? '<openai>',\n role: 'assistant',\n content: [],\n stop_reason: mapFinishReasonToStopReason(\n response.choices?.[0]?.finish_reason,\n ),\n stop_sequence: null,\n type: 'message',\n usage: {\n input_tokens: normalizedUsage.input_tokens ?? 0,\n output_tokens: normalizedUsage.output_tokens ?? 0,\n cache_creation_input_tokens:\n normalizedUsage.cache_creation_input_tokens ?? 0,\n cache_read_input_tokens: normalizedUsage.cache_read_input_tokens ?? 0,\n },\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 // Invalid JSON in tool arguments\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 const record = message as unknown as Record<string, unknown>\n if (typeof record.reasoning === 'string' && record.reasoning) {\n contentBlocks.push({\n type: 'thinking',\n thinking: record.reasoning,\n signature: '',\n })\n }\n\n // NOTE: For deepseek api, the key for its returned reasoning process is reasoning_content\n if (\n typeof record.reasoning_content === 'string' &&\n record.reasoning_content\n ) {\n contentBlocks.push({\n type: 'thinking',\n thinking: record.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: AnthropicMessage = {\n id: nanoid(),\n model: response.model ?? '<openai>',\n role: 'assistant',\n content: contentBlocks,\n stop_reason: mapFinishReasonToStopReason(\n response.choices?.[0]?.finish_reason,\n ),\n stop_sequence: null,\n type: 'message',\n usage: {\n input_tokens: normalizedUsage.input_tokens ?? 0,\n output_tokens: normalizedUsage.output_tokens ?? 0,\n cache_creation_input_tokens:\n normalizedUsage.cache_creation_input_tokens ?? 0,\n cache_read_input_tokens: normalizedUsage.cache_read_input_tokens ?? 0,\n },\n }\n\n return finalMessage\n}\n", "import OpenAI from 'openai'\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n if (!value || typeof value !== 'object') return null\n return value as Record<string, unknown>\n}\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 }\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: OpenAI.ChatCompletionMessageParam[] = []\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: OpenAI.ChatCompletionContentPart[] = []\n const assistantTextParts: string[] = []\n const assistantToolCalls: OpenAI.ChatCompletionMessageToolCall[] = []\n\n for (const block of blocks) {\n if (block.type === 'text') {\n const record = asRecord(block)\n const text =\n record && typeof record.text === 'string' ? record.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(<OpenAI.ChatCompletionUserMessageParam>{\n role: 'user',\n content: userContentParts[0].text,\n })\n } else if (userContentParts.length > 0) {\n openaiMessages.push(<OpenAI.ChatCompletionUserMessageParam>{\n role: 'user',\n content: userContentParts,\n })\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(<OpenAI.ChatCompletionAssistantMessageParam>{\n role: 'assistant',\n content: text ? text : undefined,\n tool_calls: assistantToolCalls,\n })\n continue\n }\n if (text) {\n openaiMessages.push(<OpenAI.ChatCompletionAssistantMessageParam>{\n role: 'assistant',\n content: text,\n })\n }\n }\n }\n\n const finalMessages: OpenAI.ChatCompletionMessageParam[] = []\n\n for (const message of openaiMessages) {\n finalMessages.push(message)\n\n if (message.role === 'assistant' && Array.isArray(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", "export function getMaxTokensFromProfile(modelProfile: any): number {\n return modelProfile?.maxTokens || 8000\n}\n\nexport function 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 return {\n input_tokens:\n usage.input_tokens ??\n usage.prompt_tokens ??\n usage.promptTokens ??\n usage.inputTokens ??\n 0,\n output_tokens:\n usage.output_tokens ??\n usage.completion_tokens ??\n usage.completionTokens ??\n usage.outputTokens ??\n 0,\n cache_read_input_tokens: usage.cache_read_input_tokens ?? 0,\n cache_creation_input_tokens: usage.cache_creation_input_tokens ?? 0,\n prompt_tokens:\n usage.prompt_tokens ?? usage.input_tokens ?? usage.promptTokens ?? 0,\n completion_tokens:\n usage.completion_tokens ??\n usage.output_tokens ??\n usage.completionTokens ??\n 0,\n promptTokens:\n usage.promptTokens ?? usage.prompt_tokens ?? usage.input_tokens ?? 0,\n completionTokens:\n usage.completionTokens ??\n usage.completion_tokens ??\n usage.output_tokens ??\n 0,\n totalTokens:\n usage.totalTokens ??\n (usage.prompt_tokens ?? usage.input_tokens ?? usage.promptTokens ?? 0) +\n (usage.completion_tokens ??\n usage.output_tokens ??\n usage.completionTokens ??\n 0),\n reasoningTokens: usage.reasoningTokens,\n }\n}\n", "import OpenAI from 'openai'\n\nexport function isGPT5Model(modelName: string): boolean {\n return modelName.startsWith('gpt-5')\n}\n\nexport function buildOpenAIChatCompletionCreateParams(args: {\n model: string\n maxTokens: number\n messages: OpenAI.ChatCompletionMessageParam[]\n temperature: number\n stream: boolean\n toolSchemas: OpenAI.ChatCompletionTool[]\n stopSequences?: string[]\n reasoningEffort?: any\n}): OpenAI.ChatCompletionCreateParams {\n const isGPT5 = isGPT5Model(args.model)\n\n const opts: OpenAI.ChatCompletionCreateParams = {\n model: args.model,\n ...(isGPT5\n ? { max_completion_tokens: args.maxTokens }\n : { max_tokens: args.maxTokens }),\n messages: args.messages,\n temperature: args.temperature,\n }\n if (args.stopSequences && args.stopSequences.length > 0) {\n opts.stop = args.stopSequences\n }\n if (args.stream) {\n ;(opts as OpenAI.ChatCompletionCreateParams).stream = true\n opts.stream_options = {\n include_usage: true,\n }\n }\n\n if (args.toolSchemas.length > 0) {\n opts.tools = args.toolSchemas\n opts.tool_choice = 'auto'\n }\n if (args.reasoningEffort) {\n opts.reasoning_effort = args.reasoningEffort\n }\n\n return opts\n}\n", "import type { ChatCompletionStream } from 'openai/lib/ChatCompletionStream'\nimport type OpenAI from 'openai'\nimport { debug as debugLogger } from '#core/utils/debugLogger'\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 // OpenAI.Chat.Completions.ChatCompletionMessageToolCall does not have a key, .index\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 // chunk contains information about usage and token counts\n return previous\n }\n return reduce(previous, choice.delta) as OpenAI.ChatCompletionMessage\n}\n\nexport async 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 // Continue processing other chunks\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", "import { nanoid } from 'nanoid'\nimport { randomUUID } from 'crypto'\nimport type { UUID } from 'crypto'\nimport type { AssistantMessage } from '#core/query'\n\nexport function 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 // Invalid JSON in tool arguments\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 const inputTokens =\n unifiedResponse.usage?.promptTokens ??\n unifiedResponse.usage?.input_tokens ??\n 0\n const outputTokens =\n unifiedResponse.usage?.completionTokens ??\n unifiedResponse.usage?.output_tokens ??\n 0\n\n return {\n type: 'assistant',\n message: {\n id: unifiedResponse.responseId ?? nanoid(),\n model: unifiedResponse.model ?? '',\n role: 'assistant',\n type: 'message',\n stop_reason: unifiedResponse.stopReason ?? null,\n stop_sequence: null,\n content: contentBlocks,\n usage: {\n input_tokens: inputTokens,\n output_tokens: outputTokens,\n cache_creation_input_tokens: 0,\n cache_read_input_tokens: 0,\n },\n },\n costUSD: 0,\n durationMs: Date.now() - startTime,\n uuid: randomUUID() as UUID,\n responseId: unifiedResponse.responseId,\n }\n}\n", "import Anthropic from '@anthropic-ai/sdk'\nimport { AnthropicBedrock } from '@anthropic-ai/bedrock-sdk'\nimport { AnthropicVertex } from '@anthropic-ai/vertex-sdk'\nimport type { ContentBlock } from '@anthropic-ai/sdk/resources/messages/messages'\nimport type {\n MessageParam,\n TextBlockParam,\n} from '@anthropic-ai/sdk/resources/index.mjs'\nimport type { UUID } from 'crypto'\nimport { nanoid } from 'nanoid'\nimport { zodToJsonSchema } from 'zod-to-json-schema'\n\nimport { getCLISyspromptPrefix } from '#core/constants/prompts'\nimport type { AssistantMessage, UserMessage } from '#core/query'\nimport { getToolDescription } from '#core/tooling/Tool'\nimport type { Tool, ToolUseContext } from '#core/tooling/Tool'\nimport { getGlobalConfig, type ModelProfile } from '#core/utils/config'\nimport { USER_AGENT } from '#core/utils/http'\nimport {\n debug as debugLogger,\n getCurrentRequest,\n logLLMInteraction,\n logSystemPromptConstruction,\n} from '#core/utils/debugLogger'\nimport { getModelManager } from '#core/utils/model'\n\nimport { addToTotalCost } from '#core/cost-tracker'\nimport { getAssistantMessageFromError } from '#core/ai/llm/errors'\nimport { withRetry } from '#core/ai/llm/retry'\nimport { getMaxTokensFromProfile } from '#core/ai/llm/maxTokens'\nimport { splitSysPromptPrefix } from '#core/ai/llm/systemPromptUtils'\nimport { generateKodeContext } from '#core/ai/llm/kodeContext'\nimport { MAIN_QUERY_TEMPERATURE } from '#core/ai/llm/constants'\n\nimport { getAnthropicClient, resetAnthropicClient } from './client'\nimport { applyCacheControlWithLimits } from './cacheControl'\nimport {\n addCacheBreakpoints,\n assistantMessageToMessageParam,\n userMessageToMessageParam,\n} from './messageParams'\nimport { createAnthropicStreamingMessage } from './streaming'\nimport { getModelInputTokenCostUSD, getModelOutputTokenCostUSD } from './cost'\n\nexport { getAnthropicClient, resetAnthropicClient }\nexport { assistantMessageToMessageParam, userMessageToMessageParam }\n\n/**\n * Environment variables for different client types:\n *\n * Direct API:\n * - ANTHROPIC_API_KEY: Required for direct API access\n *\n * AWS Bedrock:\n * - AWS credentials configured via aws-sdk defaults\n *\n * Vertex AI:\n * - Model-specific region variables (highest priority):\n * - VERTEX_REGION_CLAUDE_3_5_HAIKU: Region for Claude 3.5 Haiku model\n * - VERTEX_REGION_CLAUDE_3_5_SONNET: Region for Claude 3.5 Sonnet model\n * - VERTEX_REGION_CLAUDE_3_7_SONNET: Region for Claude 3.7 Sonnet model\n * - CLOUD_ML_REGION: Optional. The default GCP region to use for all models\n * If specific model region not specified above\n * - ANTHROPIC_VERTEX_PROJECT_ID: Required. Your GCP project ID\n * - Standard GCP credentials configured via google-auth-library\n *\n * Priority for determining region:\n * 1. Hardcoded model-specific environment variables\n * 2. Global CLOUD_ML_REGION variable\n * 3. Default region from config\n * 4. Fallback region (us-east5)\n */\n\nexport async 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 // \uD83D\uDD0D Debug: \u8BB0\u5F55\u6A21\u578B\u914D\u7F6E\u8BE6\u60C5\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 // \u4F7F\u7528ModelProfile\u7684\u5B8C\u6574\u914D\u7F6E\n model = modelProfile.modelName\n provider = modelProfile.provider || config.primaryProvider || 'anthropic'\n\n // \u57FA\u4E8EModelProfile\u521B\u5EFA\u4E13\u7528\u7684API\u5BA2\u6237\u7AEF\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 // \u4F7F\u7528ModelProfile\u7684baseURL\u800C\u4E0D\u662F\u5168\u5C40\u914D\u7F6E\n if (modelProfile.baseURL) {\n clientConfig.baseURL = modelProfile.baseURL\n }\n\n anthropic = new Anthropic(clientConfig)\n } else {\n // \u5176\u4ED6\u63D0\u4F9B\u5546\u7684\u5904\u7406\u903B\u8F91\n anthropic = getAnthropicClient(model)\n }\n } else {\n // \uD83D\uDEA8 \u964D\u7EA7\uFF1A\u6CA1\u6709\u6709\u6548\u7684ModelProfile\u65F6\uFF0C\u5E94\u8BE5\u629B\u51FA\u9519\u8BEF\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 // Prepend system prompt block for easy API identification\n if (options?.prependCLISysprompt) {\n // Log stats about first block for analyzing prefix matching config\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 Record<string, unknown>),\n }) as unknown as Anthropic.Beta.Messages.BetaTool,\n ),\n )\n\n const anthropicMessages = addCacheBreakpoints(messages)\n\n // apply cache control\n const { systemBlocks: processedSystem, messageParams: processedMessages } =\n applyCacheControlWithLimits(system, anthropicMessages)\n const startIncludingRetries = Date.now()\n\n // \u8BB0\u5F55\u7CFB\u7EDF\u63D0\u793A\u6784\u5EFA\u8FC7\u7A0B\n logSystemPromptConstruction({\n basePrompt: systemPrompt.join('\\n'),\n kodeContext: generateKodeContext() || '',\n reminders: [], // \u8FD9\u91CC\u53EF\u4EE5\u4ECE generateSystemReminders \u83B7\u53D6\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 extra_headers?: Record<string, string>\n } = {\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.extra_headers = {\n 'anthropic-beta': 'max-tokens-3-5-sonnet-2024-07-15',\n }\n params.thinking = {\n type: 'enabled',\n budget_tokens: maxThinkingTokens,\n }\n }\n\n if (config.stream) {\n // \uD83D\uDD25 REAL-TIME API CALL DEBUG - \u4F7F\u7528\u5168\u5C40\u65E5\u5FD7\u7CFB\u7EDF (Anthropic Streaming)\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 return await createAnthropicStreamingMessage(\n anthropic,\n params,\n signal,\n )\n } else {\n // \uD83D\uDD25 REAL-TIME API CALL DEBUG - \u4F7F\u7528\u5168\u5C40\u65E5\u5FD7\u7CFB\u7EDF (Anthropic Non-Streaming)\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, // \u2190 CRITICAL: Connect the AbortSignal to API call\n })\n }\n },\n { signal },\n )\n\n debugLogger.api('ANTHROPIC_API_CALL_SUCCESS', {\n content: response.content,\n })\n\n const ttftMs = Date.now() - start\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, // Will be calculated below\n }\n\n // \u8BB0\u5F55\u5B8C\u6574\u7684 LLM \u4EA4\u4E92\u8C03\u8BD5\u4FE1\u606F (Anthropic path)\n // \u6CE8\u610F\uFF1AAnthropic API\u5C06system prompt\u548Cmessages\u5206\u5F00\uFF0C\u8FD9\u91CC\u91CD\u6784\u4E3A\u5B8C\u6574\u7684API\u8C03\u7528\u89C6\u56FE\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 // Calculate cost using native Anthropic usage data\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) // Cache reads are 10% of input cost\n\n assistantMessage.costUSD = costUSD\n addToTotalCost(costUSD, durationMs)\n\n return assistantMessage\n } catch (error) {\n return getAssistantMessageFromError(error)\n }\n}\n", "/**\n * HTTP utility constants and helpers\n */\n\nimport { MACRO } from '#core/constants/macros'\nimport { PRODUCT_COMMAND } from '#core/constants/product'\n\n// Keep the user agent stable so upstream providers can reliably attribute requests.\nexport const USER_AGENT = `${PRODUCT_COMMAND}/${MACRO.VERSION} (${process.env.USER_TYPE})`\n", "export function getMaxTokensFromProfile(modelProfile: any): number {\n return modelProfile?.maxTokens || 8000\n}\n", "import '@anthropic-ai/sdk/shims/node'\nimport Anthropic from '@anthropic-ai/sdk'\nimport { AnthropicBedrock } from '@anthropic-ai/bedrock-sdk'\nimport { AnthropicVertex } from '@anthropic-ai/vertex-sdk'\nimport chalk from 'chalk'\n\nimport { getAnthropicApiKey, getGlobalConfig } from '#core/utils/config'\nimport { USER_AGENT } from '#core/utils/http'\nimport {\n getModelManager,\n getVertexRegionForModel,\n USE_BEDROCK,\n USE_VERTEX,\n} from '#core/utils/model'\n\nlet anthropicClient: Anthropic | AnthropicBedrock | AnthropicVertex | null =\n null\n\n/**\n * Get the Anthropic client, creating it if it doesn't exist\n */\nexport function getAnthropicClient(\n model?: string,\n): Anthropic | AnthropicBedrock | AnthropicVertex {\n const config = getGlobalConfig()\n const provider = config.primaryProvider\n\n // Reset client if provider has changed to ensure correct configuration\n if (anthropicClient && provider) {\n // Always recreate client for provider-specific configurations\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, // Disabled auto-retry in favor of manual implementation\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 // Create client with custom baseURL for BigDream/OpenDev\n // Anthropic SDK will append the appropriate paths (like /v1/messages)\n const clientConfig = {\n apiKey,\n dangerouslyAllowBrowser: true,\n ...ARGS,\n ...(baseURL && { baseURL }), // Use baseURL directly, SDK will handle API versioning\n }\n\n anthropicClient = new Anthropic(clientConfig)\n return anthropicClient\n}\n\n/**\n * Reset the Anthropic client to null, forcing a new client to be created on next use\n */\nexport function resetAnthropicClient(): void {\n anthropicClient = null\n}\n", "import type {\n MessageParam,\n TextBlockParam,\n} from '@anthropic-ai/sdk/resources/index.mjs'\nimport { PROMPT_CACHING_ENABLED } from '#core/ai/llm/systemPromptUtils'\n\n/**\n * Manage cache control to ensure it doesn't exceed Claude's 4 cache block limit\n * Priority:\n * 1. System prompts (high priority)\n * 2. Long documents or reference materials (high priority)\n * 3. Reusable context (medium priority)\n * 4. Short messages or one-time content (no caching)\n */\nexport function 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 // 1. Prioritize adding cache to system prompts (highest priority)\n const processedSystemBlocks = systemBlocks.map(block => {\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 // 2. Add cache to message content based on priority\n const processedMessageParams = messageParams.map((message, messageIndex) => {\n if (Array.isArray(message.content)) {\n const processedContent = message.content.map(\n (contentBlock, blockIndex) => {\n // Determine whether this content block should be cached\n const shouldCache =\n usedCacheBlocks < maxCacheBlocks &&\n contentBlock.type === 'text' &&\n typeof contentBlock.text === 'string' &&\n // Long documents (over 2000 characters)\n (contentBlock.text.length > 2000 ||\n // Last content block of the last message (may be important context)\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 // Remove existing cache_control\n if ('cache_control' in contentBlock) {\n return { ...contentBlock, cache_control: undefined }\n }\n return contentBlock\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", "import type { MessageParam } from '@anthropic-ai/sdk/resources/index.mjs'\nimport type { AssistantMessage, UserMessage } from '#core/query'\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\nexport function 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", "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 type Anthropic from '@anthropic-ai/sdk'\nimport type { AnthropicBedrock } from '@anthropic-ai/bedrock-sdk'\nimport type { AnthropicVertex } from '@anthropic-ai/vertex-sdk'\nimport { setRequestStatus } from '#core/utils/requestStatus'\nimport { debug as debugLogger } from '#core/utils/debugLogger'\nimport { parseToolUsePartialJsonOrThrow } from '#core/utils/toolUsePartialJson'\n\ntype AnthropicClient = Anthropic | AnthropicBedrock | AnthropicVertex\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n if (!value || typeof value !== 'object') return null\n if (Array.isArray(value)) return null\n return value as Record<string, unknown>\n}\n\nexport async function createAnthropicStreamingMessage(\n anthropic: AnthropicClient,\n params: Anthropic.Beta.Messages.MessageCreateParams,\n signal: AbortSignal,\n): Promise<any> {\n const stream = await anthropic.beta.messages.create(\n {\n ...params,\n stream: true,\n },\n {\n signal: signal, // \u2190 CRITICAL: Connect the AbortSignal to API call\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: [], // Will be populated from content blocks\n }\n break\n\n case 'content_block_start':\n contentBlocks[event.index] = { ...event.content_block }\n // Initialize JSON buffer for tool_use blocks\n {\n const contentBlock = asRecord(event.content_block)\n const blockType = contentBlock?.type\n if (\n blockType === 'tool_use' ||\n blockType === 'server_tool_use' ||\n blockType === 'mcp_tool_use'\n ) {\n setRequestStatus({\n kind: 'tool',\n detail:\n typeof contentBlock?.name === 'string'\n ? contentBlock.name\n : undefined,\n })\n inputJSONBuffers.set(event.index, '')\n }\n }\n break\n\n case 'content_block_delta':\n const blockIndex = event.index\n\n // Ensure content block exists\n if (!contentBlocks[blockIndex]) {\n contentBlocks[blockIndex] = {\n type: 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) stopReason = event.delta.stop_reason\n if (event.delta.stop_sequence) 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 = parseToolUsePartialJsonOrThrow(jsonStr) ?? {}\n }\n }\n\n inputJSONBuffers.delete(stopIndex)\n }\n break\n\n case 'message_stop':\n // Clear any remaining buffers\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 // Construct the final response\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}\n", "import models from '#core/constants/models'\n\nexport function getModelInputTokenCostUSD(model: string): number {\n // Find the model in the models object\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 // Default fallback cost for unknown models\n return 0.000003 // Default to Claude 3 Haiku cost\n}\n\nexport function getModelOutputTokenCostUSD(model: string): number {\n // Find the model in the models object\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 // Default fallback cost for unknown models\n return 0.000015 // Default to Claude 3 Haiku cost\n}\n", "import { createHash, type UUID } from 'crypto'\nimport { mkdirSync, readFileSync, writeFileSync } from 'fs'\nimport { dirname } from 'path'\nimport type { AssistantMessage, UserMessage } from '#core/query'\nimport { existsSync } from 'fs'\nimport { env } from '#core/utils/env'\nimport { getCwd } from '#core/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 // Fetch cached fixture\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 // Create & write new fixture\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 } // Ensure citations\n case 'tool_use':\n return {\n ..._,\n input: mapValues(_.input as Record<string, unknown>, f),\n }\n default:\n return _ // Handle other block types unchanged\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", "/**\n * GPT-5 Responses API state management\n * Manages previous_response_id for conversation continuity and reasoning context reuse\n */\n\ninterface ConversationState {\n previousResponseId?: string\n lastUpdate: number\n}\n\nclass ResponseStateManager {\n private conversationStates = new Map<string, ConversationState>()\n\n // Cache cleanup after 1 hour of inactivity\n private readonly CLEANUP_INTERVAL = 60 * 60 * 1000\n\n constructor() {\n // Periodic cleanup of stale conversations\n setInterval(() => {\n this.cleanup()\n }, this.CLEANUP_INTERVAL)\n }\n\n /**\n * Set the previous response ID for a conversation\n */\n setPreviousResponseId(conversationId: string, responseId: string): void {\n this.conversationStates.set(conversationId, {\n previousResponseId: responseId,\n lastUpdate: Date.now(),\n })\n }\n\n /**\n * Get the previous response ID for a conversation\n */\n getPreviousResponseId(conversationId: string): string | undefined {\n const state = this.conversationStates.get(conversationId)\n if (state) {\n // Update last access time\n state.lastUpdate = Date.now()\n return state.previousResponseId\n }\n return undefined\n }\n\n /**\n * Clear state for a conversation\n */\n clearConversation(conversationId: string): void {\n this.conversationStates.delete(conversationId)\n }\n\n /**\n * Clear all conversation states\n */\n clearAll(): void {\n this.conversationStates.clear()\n }\n\n /**\n * Clean up stale conversations\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 /**\n * Get current state size (for debugging/monitoring)\n */\n getStateSize(): number {\n return this.conversationStates.size\n }\n}\n\n// Singleton instance\nexport const responseStateManager = new ResponseStateManager()\n\n/**\n * Helper to generate conversation ID from context\n */\nexport function getConversationId(\n agentId?: string,\n messageId?: string,\n): string {\n // Use agentId as primary identifier, fallback to messageId or timestamp\n return (\n agentId ||\n messageId ||\n `conv_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`\n )\n}\n", "import '@anthropic-ai/sdk/shims/node'\nimport Anthropic from '@anthropic-ai/sdk'\nimport type { MessageParam } from '@anthropic-ai/sdk/resources/index.mjs'\n\nimport { logError } from '#core/utils/log'\nimport { USER_AGENT } from '#core/utils/http'\nimport { withRetry } from '#core/ai/llm/retry'\nimport { debug as debugLogger } from '#core/utils/debugLogger'\n\n/**\n * Fetch available models from Anthropic API.\n */\nexport async function fetchAnthropicModels(\n baseURL: string,\n apiKey: string,\n): Promise<any[]> {\n try {\n // Use provided baseURL or default to official Anthropic API\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 // Provide user-friendly error messages based on status code\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 it's already our custom error, pass it through\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 // For network errors or other issues\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 // For non-Anthropic providers, use OpenAI-compatible verification\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 // For Anthropic and Anthropic-compatible APIs\n const clientConfig: any = {\n apiKey,\n dangerouslyAllowBrowser: true,\n maxRetries: 3,\n defaultHeaders: {\n 'User-Agent': USER_AGENT,\n },\n }\n\n // Only add baseURL for true Anthropic-compatible APIs\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, // Simple test token limit for API verification\n messages,\n temperature: 0,\n })\n return true\n },\n { maxRetries: 2 }, // Use fewer retries for API key verification\n )\n return true\n } catch (error) {\n logError(error)\n // Check for authentication 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"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO;AAMP,SAAqB,cAAAA,mBAAkB;AAEvC,OAAO;;;ACNP,SAAS,cAAAC,mBAAkB;AAE3B,SAAS,mBAAAC,wBAAuB;;;ACJzB,IAAM,yBAAyB,CAAC,QAAQ,IAAI;AAE5C,SAAS,qBAAqB,cAAkC;AAGrE,QAAM,yBAAyB,aAAa,CAAC,KAAK;AAClD,QAAM,mBAAmB,aAAa,MAAM,CAAC;AAC7C,SAAO,CAAC,wBAAwB,iBAAiB,KAAK,IAAI,CAAC,EAAE,OAAO,OAAO;AAC7E;;;ACRA,OAAO;AACP,SAAS,oBAAoB,gBAAgB;AAG7C,IAAM,cAAc,QAAQ,IAAI,cAAc,cAAc,MAAM;AAClE,IAAM,gBAAgB;AAOtB,SAAS,eAAe,SAAiB,QAAqC;AAC5E,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,QAAI,QAAQ,SAAS;AACnB,aAAO,IAAI,MAAM,qBAAqB,CAAC;AACvC;AAAA,IACF;AAEA,UAAM,YAAY,WAAW,MAAM;AACjC,cAAQ;AAAA,IACV,GAAG,OAAO;AAEV,QAAI,QAAQ;AACV,YAAM,eAAe,MAAM;AACzB,qBAAa,SAAS;AACtB,eAAO,IAAI,MAAM,qBAAqB,CAAC;AAAA,MACzC;AACA,aAAO,iBAAiB,SAAS,cAAc,EAAE,MAAM,KAAK,CAAC;AAAA,IAC/D;AAAA,EACF,CAAC;AACH;AAEA,SAAS,cACP,SACA,kBACQ;AACR,MAAI,kBAAkB;AACpB,UAAM,UAAU,SAAS,kBAAkB,EAAE;AAC7C,QAAI,CAAC,MAAM,OAAO,GAAG;AACnB,aAAO,UAAU;AAAA,IACnB;AAAA,EACF;AACA,SAAO,KAAK,IAAI,gBAAgB,KAAK,IAAI,GAAG,UAAU,CAAC,GAAG,IAAK;AACjE;AAEA,SAAS,YAAY,OAA0B;AAC7C,MAAI,MAAM,SAAS,SAAS,2BAA2B,GAAG;AACxD,WAAO,QAAQ,IAAI,cAAc;AAAA,EACnC;AAEA,QAAM,oBAAoB,MAAM,UAAU,gBAAgB;AAE1D,MAAI,sBAAsB,OAAQ,QAAO;AACzC,MAAI,sBAAsB,QAAS,QAAO;AAE1C,MAAI,iBAAiB,oBAAoB;AACvC,WAAO;AAAA,EACT;AAEA,MAAI,CAAC,MAAM,OAAQ,QAAO;AAE1B,MAAI,MAAM,WAAW,IAAK,QAAO;AACjC,MAAI,MAAM,WAAW,IAAK,QAAO;AACjC,MAAI,MAAM,WAAW,IAAK,QAAO;AACjC,MAAI,MAAM,UAAU,MAAM,UAAU,IAAK,QAAO;AAEhD,SAAO;AACT;AAEA,eAAsB,UACpB,WACA,UAAwB,CAAC,GACb;AACZ,QAAM,aAAa,QAAQ,cAAc;AACzC,MAAI;AAEJ,WAAS,UAAU,GAAG,WAAW,aAAa,GAAG,WAAW;AAC1D,QAAI;AACF,aAAO,MAAM,UAAU,OAAO;AAAA,IAChC,SAAS,OAAO;AACd,kBAAY;AACZ,UACE,UAAU,cACV,EAAE,iBAAiB,aACnB,CAAC,YAAY,KAAK,GAClB;AACA,cAAM;AAAA,MACR;AAEA,UAAI,QAAQ,QAAQ,SAAS;AAC3B,cAAM,IAAI,MAAM,2BAA2B;AAAA,MAC7C;AAEA,YAAM,aAAa,MAAM,UAAU,aAAa,KAAK;AACrD,YAAM,UAAU,cAAc,SAAS,UAAU;AAEjD,YAAY,KAAK,iBAAiB;AAAA,QAChC,MAAM,MAAM;AAAA,QACZ,SAAS,MAAM;AAAA,QACf,QAAQ,MAAM;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAED,UAAI;AACF,cAAM,eAAe,SAAS,QAAQ,MAAM;AAAA,MAC9C,SAAS,YAAY;AACnB,YAAI,WAAW,YAAY,uBAAuB;AAChD,gBAAM,IAAI,MAAM,2BAA2B;AAAA,QAC7C;AACA,cAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,QAAM;AACR;;;AC5GO,SAAS,6BAA6B,OAAkC;AAC7E,MAAI,iBAAiB,SAAS,MAAM,QAAQ,SAAS,oBAAoB,GAAG;AAC1E,WAAO,+BAA+B,6BAA6B;AAAA,EACrE;AACA,MACE,iBAAiB,SACjB,MAAM,QAAQ,SAAS,gCAAgC,GACvD;AACA,WAAO,+BAA+B,oCAAoC;AAAA,EAC5E;AACA,MACE,iBAAiB,SACjB,MAAM,QAAQ,YAAY,EAAE,SAAS,WAAW,GAChD;AACA,WAAO,+BAA+B,6BAA6B;AAAA,EACrE;AACA,MAAI,iBAAiB,OAAO;AAC1B,QAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,YAAY,MAAM,uBAAuB;AAAA,QACvC,SAAS,MAAM;AAAA,QACf,OAAO,MAAM;AAAA,MACf,CAAC;AAAA,IACH;AACA,WAAO;AAAA,MACL,GAAG,wBAAwB,KAAK,MAAM,OAAO;AAAA,IAC/C;AAAA,EACF;AACA,SAAO,+BAA+B,wBAAwB;AAChE;;;ACZA,SAAS,gBAAgB,aAA8B;AAErD,MAAI,CAAC,eAAe,OAAO,gBAAgB,UAAU;AACnD,WAAO,EAAE,OAAO,GAAG,QAAQ,EAAE;AAAA,EAC/B;AAEA,QAAM,QACJ;AAAA,IACE,YAAY,iBACV,YAAY,gBACZ,YAAY;AAAA,EAChB,KAAK;AACP,QAAM,SACJ;AAAA,IACE,YAAY,qBACV,YAAY,iBACZ,YAAY;AAAA,EAChB,KAAK;AACP,QAAM,QACJ,OAAO,YAAY,gBAAgB,YAAY,WAAW,KAAK;AACjE,QAAM,YACJ,OAAO,YAAY,oBAAoB,YAAY,eAAe,KAClE;AAEF,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,OAAO,SAAS,QAAQ,IAAI,QAAQ;AAAA,IACpC,WAAW,aAAa,YAAY,IAAI,YAAY;AAAA,EACtD;AACF;AAIO,IAAe,kBAAf,MAA+B;AAAA,EAGpC,YACY,cACA,cACV;AAFU;AACA;AAAA,EACT;AAAA,EALO,kBAA8B,EAAE,OAAO,GAAG,QAAQ,EAAE;AAAA;AAAA;AAAA,EAc9D,OAAO,uBACL,UACA,QACgC;AAChC;AAAA,EACF;AAAA;AAAA,EAGU,uBAA6B;AACrC,SAAK,kBAAkB,EAAE,OAAO,GAAG,QAAQ,EAAE;AAAA,EAC/C;AAAA;AAAA,EAGU,sBAAsB,OAAyB;AACvD,SAAK,gBAAgB,SAAS,MAAM;AACpC,SAAK,gBAAgB,UAAU,MAAM;AACrC,QAAI,MAAM,OAAO;AACf,WAAK,gBAAgB,SAClB,KAAK,gBAAgB,SAAS,KAAK,MAAM;AAAA,IAC9C;AACA,QAAI,MAAM,WAAW;AACnB,WAAK,gBAAgB,aAClB,KAAK,gBAAgB,aAAa,KAAK,MAAM;AAAA,IAClD;AAAA,EACF;AAAA;AAAA,EAGU,oBAA4B;AACpC,WAAO,KAAK,aAAa,WAAW;AAAA,EACtC;AAAA,EAEU,iBAAyB;AACjC,QAAI,KAAK,aAAa,WAAW,oBAAoB,aAAa;AAChE,aAAO;AAAA,IACT;AACA,QAAI,KAAK,aAAa,WAAW,oBAAoB,cAAc;AACjE,aAAO,KAAK,IAAI,GAAG,GAAG;AAAA,IACxB;AACA,WAAO;AAAA,EACT;AAAA,EAEU,+BAAwC;AAChD,WAAO,KAAK,aAAa,WAAW;AAAA,EACtC;AAAA,EAEU,yBAAkC;AAC1C,WAAO,KAAK,aAAa,WAAW;AAAA,EACtC;AACF;;;ACqEO,SAAS,mBAAmB,MAAoB;AAErD,MAAI,KAAK,mBAAmB;AAC1B,WAAO,KAAK;AAAA,EACd;AAGA,MAAI,OAAO,KAAK,gBAAgB,UAAU;AACxC,WAAO,KAAK;AAAA,EACd;AAGA,SAAO,SAAS,KAAK,IAAI;AAC3B;;;ACpMA,SAAS,uBAAuB;AAWzB,IAAe,gBAAf,cAAqC,gBAAgB;AAAA,EAC1D,YAAY,cAAiC,cAA4B;AACvE,UAAM,cAAc,YAAY;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAc,UAAyC;AAE3D,QAAI,UAAU,gBAAgB,gBAAgB;AAE5C,YAAM,EAAE,iBAAiB,IACvB,MAAM,KAAK,6BAA6B,QAAQ;AAElD,aAAO;AAAA,QACL,IAAI,iBAAiB;AAAA,QACrB,SAAS,iBAAiB,QAAQ;AAAA,QAClC,WAAW,iBAAiB,QAAQ,QACjC,OAAO,CAAC,UAAe,MAAM,SAAS,UAAU,EAChD,IAAI,CAAC,WAAgB;AAAA,UACpB,IAAI,MAAM;AAAA,UACV,MAAM;AAAA,UACN,UAAU;AAAA,YACR,MAAM,MAAM;AAAA,YACZ,WAAW,KAAK,UAAU,MAAM,KAAK;AAAA,UACvC;AAAA,QACF,EAAE;AAAA,QACJ,OAAO,KAAK,yBAAyB,iBAAiB,QAAQ,KAAK;AAAA,QACnE,YAAY,iBAAiB;AAAA,MAC/B;AAAA,IACF;AAGA,WAAO,KAAK,0BAA0B,QAAQ;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,uBAAuB,UAA+C;AAC3E,UAAM,SAAS,SAAS,KAAK,UAAU;AACvC,UAAM,UAAU,IAAI,YAAY;AAChC,QAAI,SAAS;AAEb,QAAI,aAAa,SAAS,MAAM,UAAU,KAAK,IAAI,CAAC;AACpD,QAAI,aAAa;AACjB,QAAI,qBAAqB;AAGzB,UAAM,mBAA8C;AAAA,MAClD,WAAW;AAAA,MACX,aAAa;AAAA,MACb,eAAe;AAAA,MACf,yBAAyB;AAAA,IAC3B;AAEA,QAAI;AACF,aAAO,MAAM;AACX,cAAM,EAAE,MAAM,MAAM,IAAI,MAAM,OAAO,KAAK;AAC1C,YAAI,KAAM;AAEV,kBAAU,QAAQ,OAAO,OAAO,EAAE,QAAQ,KAAK,CAAC;AAChD,cAAM,QAAQ,OAAO,MAAM,IAAI;AAC/B,iBAAS,MAAM,IAAI,KAAK;AAExB,mBAAW,QAAQ,OAAO;AACxB,cAAI,KAAK,KAAK,GAAG;AACf,kBAAM,SAAS,KAAK,cAAc,IAAI;AACtC,gBAAI,QAAQ;AAEV,kBAAI,OAAO,IAAI;AACb,6BAAa,OAAO;AAAA,cACtB;AAGA,qBAAO,KAAK;AAAA,gBACV;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,cACF;AAGA,oBAAM,cAAc,KAAK;AAAA,gBACvB;AAAA,gBACA;AAAA,cACF;AACA,kBAAI,YAAY,QAAS,sBAAqB,YAAY;AAC1D,kBAAI,YAAY,WAAY,cAAa;AAAA,YAC3C;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,eAAS,KAAK;AACd,YAAY,KAAK,oCAAoC;AAAA,QACnD,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,MAC9D,CAAC;AACD,YAAM;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,MAC9D;AAAA,IACF,UAAE;AACA,aAAO,YAAY;AAAA,IACrB;AAGA,UAAM,eAAe,qBACjB,CAAC,EAAE,MAAM,QAAQ,MAAM,oBAAoB,WAAW,CAAC,EAAE,CAAC,IAC1D,CAAC,EAAE,MAAM,QAAQ,MAAM,IAAI,WAAW,CAAC,EAAE,CAAC;AAG9C,UAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,QACP,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,SAAS;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKU,cAAc,MAA0B;AAChD,QAAI,KAAK,WAAW,QAAQ,GAAG;AAC7B,YAAM,OAAO,KAAK,MAAM,CAAC,EAAE,KAAK;AAChC,UAAI,SAAS,UAAU;AACrB,eAAO;AAAA,MACT;AACA,UAAI,MAAM;AACR,YAAI;AACF,iBAAO,KAAK,MAAM,IAAI;AAAA,QACxB,SAAS,OAAO;AACd,mBAAS,KAAK;AACd,gBAAY,KAAK,kCAAkC;AAAA,YACjD,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,UAC9D,CAAC;AACD,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKU,gBACR,OACA,YACA,YACkB;AAClB,UAAM,SAA2B,CAAC;AAElC,QAAI,CAAC,cAAc,OAAO;AACxB,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA,UACN,SAAS,CAAC;AAAA,QACZ;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAEA,QAAI,OAAO;AACT,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKU,yBAAyB,OAAa;AAC9C,QAAI,CAAC,OAAO;AACV,aAAO;AAAA,QACL,cAAc;AAAA,QACd,eAAe;AAAA,QACf,cAAc;AAAA,QACd,kBAAkB;AAAA,QAClB,aAAa;AAAA,QACb,iBAAiB;AAAA,MACnB;AAAA,IACF;AAEA,UAAM,cACJ,MAAM,gBAAgB,MAAM,iBAAiB,MAAM,gBAAgB;AACrE,UAAM,eACJ,MAAM,iBACN,MAAM,qBACN,MAAM,oBACN;AAEF,WAAO;AAAA,MACL,GAAG;AAAA,MACH,cAAc;AAAA,MACd,eAAe;AAAA,MACf,cAAc;AAAA,MACd,kBAAkB;AAAA,MAClB,aAAa,MAAM,eAAe,cAAc;AAAA,MAChD,iBAAiB,MAAM,mBAAmB;AAAA,IAC5C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EA2BO,WAAW,OAAsB;AACtC,WAAO,MAAM,IAAI,WAAS;AAAA,MACxB,MAAM;AAAA,MACN,UAAU;AAAA,QACR,MAAM,KAAK;AAAA,QACX,aAAa,mBAAmB,IAAI;AAAA,QACpC,YAAY,gBAAgB,KAAK,WAAW;AAAA,MAC9C;AAAA,IACF,EAAE;AAAA,EACJ;AACF;;;ACvQA,SAAS,mBAAAC,wBAAuB;;;ACPzB,SAAS,uBAAuB,UAAwB;AAE7D,QAAM,aAAa,CAAC;AAEpB,aAAW,WAAW,UAAU;AAC9B,UAAM,OAAO,QAAQ;AAErB,QAAI,SAAS,QAAQ;AAEnB,YAAM,SAAS,QAAQ,gBAAgB,QAAQ;AAC/C,UAAI,OAAO,WAAW,YAAY,QAAQ;AACxC,YAAIC,WAAU,QAAQ,WAAW;AACjC,YAAI,MAAM,QAAQA,QAAO,GAAG;AAC1B,gBAAM,QAAQ,CAAC;AACf,qBAAW,QAAQA,UAAS;AAC1B,gBAAI,OAAO,SAAS,YAAY,SAAS,MAAM;AAC7C,oBAAM,IAAI,KAAK,QAAQ,KAAK;AAC5B,kBAAI,OAAO,MAAM,YAAY,GAAG;AAC9B,sBAAM,KAAK,CAAC;AAAA,cACd;AAAA,YACF;AAAA,UACF;AACA,UAAAA,WAAU,MAAM,KAAK,IAAI;AAAA,QAC3B;AACA,YAAI,OAAOA,aAAY,UAAU;AAC/B,qBAAW,KAAK;AAAA,YACd,MAAM;AAAA,YACN,SAAS;AAAA,YACT,QAAQA;AAAA,UACV,CAAC;AAAA,QACH;AAAA,MACF;AACA;AAAA,IACF;AAEA,QAAI,SAAS,eAAe,MAAM,QAAQ,QAAQ,UAAU,GAAG;AAE7D,iBAAW,MAAM,QAAQ,YAAY;AACnC,YAAI,OAAO,OAAO,YAAY,OAAO,MAAM;AACzC;AAAA,QACF;AACA,cAAM,SAAS,GAAG,QAAQ;AAC1B,YAAI,WAAW,YAAY;AACzB;AAAA,QACF;AACA,cAAM,SAAS,GAAG,MAAM,GAAG;AAC3B,cAAM,KAAK,GAAG;AACd,cAAM,OAAO,OAAO,OAAO,YAAY,OAAO,OAAO,GAAG,OAAO;AAC/D,cAAM,OAAO,OAAO,OAAO,YAAY,OAAO,OAAO,GAAG,YAAY;AAEpE,YACE,OAAO,WAAW,YAClB,OAAO,SAAS,YAChB,OAAO,SAAS,UAChB;AACA,qBAAW,KAAK;AAAA,YACd,MAAM;AAAA,YACN;AAAA,YACA,WAAW;AAAA,YACX,SAAS;AAAA,UACX,CAAC;AAAA,QACH;AAAA,MACF;AACA;AAAA,IACF;AAGA,UAAM,UAAU,QAAQ,WAAW;AACnC,UAAM,eAAe,CAAC;AAEtB,QAAI,MAAM,QAAQ,OAAO,GAAG;AAC1B,iBAAW,QAAQ,SAAS;AAC1B,YAAI,OAAO,SAAS,YAAY,SAAS,KAAM;AAC/C,cAAM,QAAQ,KAAK;AACnB,YAAI,UAAU,QAAQ;AACpB,gBAAM,OAAO,KAAK,QAAQ,KAAK,WAAW;AAC1C,cAAI,OAAO,SAAS,YAAY,MAAM;AACpC,kBAAM,OAAO,SAAS,cAAc,gBAAgB;AACpD,yBAAa,KAAK,EAAE,MAAM,MAAM,KAAW,CAAC;AAAA,UAC9C;AAAA,QACF,WAAW,UAAU,aAAa;AAChC,gBAAM,QAAQ,KAAK;AACnB,gBAAM,MACJ,OAAO,UAAU,YAAY,UAAU,OAAO,MAAM,MAAM;AAC5D,cAAI,OAAO,QAAQ,YAAY,KAAK;AAClC,yBAAa,KAAK,EAAE,MAAM,eAAe,WAAW,IAAI,CAAC;AAAA,UAC3D;AAAA,QACF;AAAA,MACF;AAAA,IACF,WAAW,OAAO,YAAY,YAAY,SAAS;AACjD,YAAM,OAAO,SAAS,cAAc,gBAAgB;AACpD,mBAAa,KAAK,EAAE,MAAM,MAAM,MAAM,QAAQ,CAAC;AAAA,IACjD;AAEA,QAAI,aAAa,QAAQ;AACvB,YAAM,UAAU,SAAS,cAAc,cAAc;AACrD,iBAAW,KAAK;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,kBAAkB,cAAgC;AAEhE,QAAM,gBAAgB,aACnB,OAAO,aAAW,QAAQ,KAAK,CAAC,EAChC,KAAK,MAAM;AAEd,SAAO;AACT;;;AChHA,SAAS,eAAe,UAAsB;AAE5C,MAAI,CAAC,SAAS,UAAU,CAAC,MAAM,QAAQ,SAAS,MAAM,GAAG;AACvD,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,YAAY,CAAC;AAEnB,aAAW,QAAQ,SAAS,QAAQ;AAClC,QAAI,KAAK,SAAS,iBAAiB;AAEjC,YAAM,SAAS,KAAK,WAAW,KAAK;AACpC,YAAM,OAAO,KAAK,QAAQ;AAC1B,YAAM,OAAO,KAAK,aAAa;AAG/B,UACE,OAAO,WAAW,YAClB,OAAO,SAAS,YAChB,OAAO,SAAS,UAChB;AACA,kBAAU,KAAK;AAAA,UACb,IAAI;AAAA,UACJ,MAAM;AAAA,UACN,UAAU;AAAA,YACR;AAAA,YACA,WAAW;AAAA,UACb;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF,WAAW,KAAK,SAAS,aAAa;AAEpC,YAAM,SACJ,KAAK,MAAM,QAAQ,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,UAAU,GAAG,EAAE,CAAC;AAChE,gBAAU,KAAK;AAAA,QACb,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,MAAM,KAAK;AAAA,QACX,WAAW,KAAK;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,0BAA0B,UAAgC;AAExE,MAAI,UAAU,SAAS,eAAe;AAGtC,MAAI,mBAAmB;AACvB,MAAI,SAAS,UAAU,MAAM,QAAQ,SAAS,MAAM,GAAG;AACrD,UAAM,eAAe,SAAS,OAAO;AAAA,MACnC,CAAC,SAAc,KAAK,SAAS;AAAA,IAC/B;AACA,QAAI,aAAa,SAAS,GAAG;AAC3B,gBAAU,aACP,IAAI,CAAC,SAAc;AAClB,YAAI,KAAK,WAAW,MAAM,QAAQ,KAAK,OAAO,GAAG;AAC/C,iBAAO,KAAK,QACT,OAAO,CAAC,MAAW,EAAE,SAAS,MAAM,EACpC,IAAI,CAAC,MAAW,EAAE,IAAI,EACtB,KAAK,IAAI;AAAA,QACd;AACA,eAAO,KAAK,WAAW;AAAA,MACzB,CAAC,EACA,OAAO,OAAO,EACd,KAAK,MAAM;AAAA,IAChB;AAGA,UAAM,iBAAiB,SAAS,OAAO;AAAA,MACrC,CAAC,SAAc,KAAK,SAAS;AAAA,IAC/B;AACA,QAAI,eAAe,SAAS,GAAG;AAC7B,yBAAmB,eAChB,IAAI,CAAC,SAAc,KAAK,WAAW,EAAE,EACrC,OAAO,OAAO,EACd,KAAK,MAAM;AAAA,IAChB;AAAA,EACF;AAGA,MAAI,kBAAkB;AACpB,UAAM,aAAa;AAAA;AAAA,EAAO,gBAAgB;AAAA;AAAA;AAC1C,cAAU,aAAa;AAAA,EACzB;AAGA,QAAM,YAAY,eAAe,QAAQ;AAIzC,QAAM,eAAe,UACjB,CAAC,EAAE,MAAM,QAAQ,MAAM,SAAS,WAAW,CAAC,EAAE,CAAC,IAC/C,CAAC,EAAE,MAAM,QAAQ,MAAM,IAAI,WAAW,CAAC,EAAE,CAAC;AAE9C,QAAM,eAAe,SAAS,OAAO,gBAAgB;AACrD,QAAM,mBAAmB,SAAS,OAAO,iBAAiB;AAC1D,QAAM,cACJ,SAAS,OAAO,gBAAgB,eAAe;AAEjD,SAAO;AAAA,IACL,IAAI,SAAS,MAAM,QAAQ,KAAK,IAAI,CAAC;AAAA,IACrC,SAAS;AAAA;AAAA,IACT;AAAA,IACA,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,iBAAiB,SAAS,OAAO,uBAAuB;AAAA,IAC1D;AAAA,IACA,YAAY,SAAS;AAAA;AAAA,EACvB;AACF;;;AFnGO,IAAM,sBAAN,cAAkC,cAAc;AAAA,EACrD,cAAc,QAAmC;AAC/C,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI;AAGJ,UAAM,UAAe;AAAA,MACnB,OAAO,KAAK,aAAa;AAAA,MACzB,OAAO,uBAAuB,QAAQ;AAAA,MACtC,cAAc,kBAAkB,YAAY;AAAA,IAC9C;AAGA,UAAM,iBAAiB,KAAK,kBAAkB;AAC9C,YAAQ,cAAc,IAAI;AAE1B,QAAI,iBAAiB,cAAc,SAAS,GAAG;AAC7C,cAAQ,OAAO;AAAA,IACjB;AAGA,YAAQ,SACN,OAAO,WAAW,SAAS,KAAK,aAAa,UAAU;AAGzD,UAAM,cAAc,KAAK,eAAe;AACxC,QAAI,gBAAgB,QAAW;AAC7B,cAAQ,cAAc;AAAA,IACxB;AAGA,UAAM,UAAoB,CAAC;AAC3B,QACE,KAAK,aAAa,WAAW,4BAC5B,KAAK,6BAA6B,KAAK,kBACxC;AACA,cAAQ,KAAK,6BAA6B;AAC1C,cAAQ,YAAY;AAAA,QAClB,QACE,mBAAmB,KAAK,aAAa,mBAAmB;AAAA,MAC5D;AAAA,IACF;AAGA,QACE,KAAK,aAAa,WAAW,qBAC7B,KAAK,uBAAuB,GAC5B;AAEA,UAAI,mBAA8C;AAClD,UAAI,OAAO,WAAW;AACpB,2BAAmB,OAAO;AAAA,MAC5B,OAAO;AACL,cAAM,iBAAiB,KAAK,aAAa,UAAU,YAAY;AAC/D,YAAI,eAAe,SAAS,MAAM,GAAG;AACnC,6BAAmB;AAAA,QACrB,WAAW,eAAe,SAAS,KAAK,GAAG;AACzC,6BAAmB;AAAA,QACrB;AAAA,MAEF;AAEA,cAAQ,OAAO;AAAA,QACb,WAAW;AAAA,MACb;AAAA,IACF;AAGA,QAAI,SAAS,MAAM,SAAS,GAAG;AAC7B,cAAQ,QAAQ,KAAK,WAAW,KAAK;AAAA,IACvC;AAGA,YAAQ,cAAc;AAGtB,QAAI,KAAK,aAAa,YAAY,uBAAuB;AACvD,cAAQ,sBAAsB;AAAA,IAChC;AAGA,YAAQ,QAAQ;AAGhB,QACE,OAAO,sBACP,KAAK,aAAa,gBAAgB,4BAClC;AACA,cAAQ,uBAAuB,OAAO;AAAA,IACxC;AAGA,QAAI,QAAQ,SAAS,GAAG;AACtB,cAAQ,UAAU;AAAA,IACpB;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,WAAW,OAAsB;AAE/B,UAAM,gBAAgB,CAAC,QAAiD;AACtE,aAAO,QAAQ,QAAQ,OAAO,QAAQ,YAAY,CAAC,MAAM,QAAQ,GAAG;AAAA,IACtE;AAEA,WAAO,MAAM,IAAI,UAAQ;AAEvB,UAAI,aAAkD,KAAK;AAG3D,UAAI,CAAC,cAAc,KAAK,aAAa;AACnC,cAAM,cAAuB,KAAK;AAClC,YACE,cAAc,WAAW,MACxB,UAAU,eAAe,gBAAgB,cAC1C;AACA,uBAAa;AAAA,QACf,OAAO;AAEL,cAAI;AACF,kBAAM,YAAqBC,iBAAgB,KAAK,WAAW;AAC3D,yBACE,cAAc,SAAS,MACtB,UAAU,aAAa,gBAAgB,aACpC,YACA,EAAE,MAAM,UAAU,YAAY,CAAC,EAAE;AAAA,UACzC,SAAS,OAAO;AACd,qBAAS,KAAK;AACd,kBAAY,KAAK,+CAA+C;AAAA,cAC9D,UAAU,KAAK;AAAA,cACf,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,YAC9D,CAAC;AAED,yBAAa,EAAE,MAAM,UAAU,YAAY,CAAC,EAAE;AAAA,UAChD;AAAA,QACF;AAAA,MACF;AAEA,aAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM,KAAK;AAAA,QACX,aAAa,mBAAmB,IAAI;AAAA,QACpC,YAAY,cAAc,EAAE,MAAM,UAAU,YAAY,CAAC,EAAE;AAAA,MAC7D;AAAA,IACF,CAAC;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,cAAc,UAAyC;AAE3D,QAAI,UAAU,gBAAgB,gBAAgB;AAE5C,YAAM,EAAE,iBAAiB,IAAI,MAAM;AAAA,QACjC,KAAK,uBAAuB,QAAQ;AAAA,QACpC,KAAK,IAAI;AAAA,QACT,SAAS,MAAM,QAAQ,KAAK,IAAI,CAAC;AAAA,MACnC;AAIA,YAAM,mBAAmB,iBAAiB,QAAQ,QAAQ;AAAA,QACxD,CAAC,UAAe,MAAM,SAAS;AAAA,MACjC;AAEA,aAAO;AAAA,QACL,IAAI,iBAAiB;AAAA,QACrB,SAAS,iBAAiB,QAAQ;AAAA,QAClC,WAAW,mBAAmB,CAAC,IAAI,CAAC;AAAA,QACpC,OAAO,KAAK,yBAAyB,iBAAiB,QAAQ,KAAK;AAAA,QACnE,YAAY,iBAAiB;AAAA,MAC/B;AAAA,IACF;AAGA,WAAO,KAAK,0BAA0B,QAAQ;AAAA,EAChD;AAAA;AAAA,EAGU,0BAA0B,UAAgC;AAClE,WAAO,0BAAsC,QAAQ;AAAA,EACvD;AAAA;AAAA,EAGA,OAAiB,sBACf,QACA,YACA,YACA,oBACA,kBACgC;AAEhC,QAAI,OAAO,SAAS,yCAAyC;AAC3D,YAAM,YAAY,OAAO,iBAAiB;AAG1C,UAAI,CAAC,kBAAkB,iBAAiB;AACtC,yBAAkB,kBAAkB;AACpC,yBAAkB,mBAAmB;AAAA,MACvC;AAEA,uBAAkB,mBAAmB;AAGrC,UAAI,YAAY,KAAK,iBAAkB,iBAAiB;AACtD,yBAAkB,mBAAmB;AAGrC,cAAM;AAAA,UACJ,MAAM;AAAA,UACN,OAAO;AAAA,UACP;AAAA,QACF;AAAA,MACF;AAEA;AAAA,IACF;AAGA,QAAI,OAAO,SAAS,yCAAyC;AAC3D,YAAM,QAAQ,OAAO,SAAS;AAE9B,UAAI,SAAS,kBAAkB;AAE7B,yBAAiB,mBAAmB;AAGpC,cAAM;AAAA,UACJ,MAAM;AAAA,UACN;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAEA;AAAA,IACF;AAGA,QAAI,OAAO,SAAS,iCAAiC;AACnD,YAAM,QAAQ,OAAO,SAAS;AAE9B,UAAI,SAAS,kBAAkB;AAE7B,yBAAiB,mBAAmB;AAGpC,cAAM;AAAA,UACJ,MAAM;AAAA,UACN;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAEA;AAAA,IACF;AAGA,QAAI,OAAO,SAAS,8BAA8B;AAChD,YAAM,QAAQ,OAAO,SAAS;AAC9B,UAAI,OAAO;AACT,cAAM,aAAa,KAAK,gBAAgB,OAAO,YAAY,UAAU;AACrE,mBAAW,SAAS,YAAY;AAC9B,gBAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAGA,QAAI,OAAO,SAAS,6BAA6B;AAC/C,YAAM,OAAO,OAAO,QAAQ,CAAC;AAC7B,UAAI,KAAK,SAAS,iBAAiB;AACjC,cAAM,SAAS,KAAK,WAAW,KAAK;AACpC,cAAM,OAAO,KAAK;AAClB,cAAM,OAAO,KAAK;AAElB,YACE,OAAO,WAAW,YAClB,OAAO,SAAS,YAChB,OAAO,SAAS,UAChB;AACA,gBAAM;AAAA,YACJ,MAAM;AAAA,YACN,MAAM;AAAA,cACJ,IAAI;AAAA,cACJ;AAAA,cACA,OAAO;AAAA,YACT;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAGA,QAAI,OAAO,OAAO;AAChB,YAAM,kBAAkB,gBAAgB,OAAO,KAAK;AAGpD,UAAI,OAAO,MAAM,uBAAuB,kBAAkB;AACxD,wBAAgB,YACd,OAAO,MAAM,sBAAsB;AAAA,MACvC;AAEA,YAAM;AAAA,QACJ,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAAA,EAEU,qBACR,QACA,oBAC4C;AAC5C,UAAM,QAAoD,CAAC;AAG3D,QAAI,OAAO,SAAS,gCAAgC,OAAO,OAAO;AAChE,YAAM,UAAU,qBAAqB,OAAO;AAC5C,YAAM,aAAa;AAAA,IACrB;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA,EAKA,MAAgB,6BACd,UACsD;AAEtD,UAAM,EAAE,wBAAAC,wBAAuB,IAAI,MAAM,OAAO,kCAAsB;AAEtE,WAAO,MAAMA;AAAA,MACX,KAAK,uBAAuB,QAAQ;AAAA,MACpC,KAAK,IAAI;AAAA,MACT,SAAS,MAAM,QAAQ,KAAK,IAAI,CAAC;AAAA,IACnC;AAAA,EACF;AAAA;AAAA,EAGU,yBAAyB,OAAa;AAE9C,UAAM,YAAY,MAAM,yBAAyB,KAAK;AAGtD,WAAO;AAAA,MACL,GAAG;AAAA,MACH,iBAAiB,OAAO,uBAAuB,oBAAoB;AAAA,IACrE;AAAA,EACF;AACF;;;AG/WA,SAAS,kBAAkB;AAE3B,SAAS,mBAAAC,wBAAuB;AAGzB,IAAM,yBAAN,cAAqC,cAAc;AAAA,EACxD,cAAc,QAAmC;AAC/C,UAAM,EAAE,UAAU,cAAc,OAAO,WAAW,OAAO,IAAI;AAG7D,UAAM,eAAe,KAAK,cAAc,cAAc,QAAQ;AAG9D,UAAM,UAAe;AAAA,MACnB,OAAO,KAAK,aAAa;AAAA,MACzB,UAAU;AAAA,MACV,CAAC,KAAK,kBAAkB,CAAC,GAAG;AAAA,MAC5B,aAAa,KAAK,eAAe;AAAA,IACnC;AAGA,QAAI,SAAS,MAAM,SAAS,GAAG;AAC7B,cAAQ,QAAQ,KAAK,WAAW,KAAK;AACrC,cAAQ,cAAc;AAAA,IACxB;AAGA,QACE,KAAK,aAAa,WAAW,2BAC7B,OAAO,iBACP;AACA,cAAQ,mBAAmB,OAAO;AAAA,IACpC;AAGA,QAAI,KAAK,aAAa,WAAW,qBAAqB,OAAO,WAAW;AACtE,cAAQ,YAAY,OAAO;AAAA,IAC7B;AAGA,QAAI,UAAU,KAAK,aAAa,UAAU,WAAW;AACnD,cAAQ,SAAS;AACjB,UAAI,KAAK,aAAa,UAAU,eAAe;AAC7C,gBAAQ,iBAAiB;AAAA,UACvB,eAAe;AAAA,QACjB;AAAA,MACF;AAAA,IACF;AAGA,QAAI,KAAK,aAAa,WAAW,oBAAoB,aAAa;AAEhE,aAAO,QAAQ;AAAA,IACjB;AAEA,QAAI,CAAC,KAAK,aAAa,UAAU,WAAW;AAE1C,aAAO,QAAQ;AACf,aAAO,QAAQ;AAAA,IACjB;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,WAAW,OAAsB;AAE/B,WAAO,MAAM,IAAI,WAAS;AAAA,MACxB,MAAM;AAAA,MACN,UAAU;AAAA,QACR,MAAM,KAAK;AAAA,QACX,aAAa,mBAAmB,IAAI;AAAA,QACpC,YAAY,KAAK,mBAAmBC,iBAAgB,KAAK,WAAW;AAAA,MACtE;AAAA,IACF,EAAE;AAAA,EACJ;AAAA;AAAA;AAAA,EAKU,0BAA0B,UAAgC;AAElE,QAAI,CAAC,YAAY,OAAO,aAAa,UAAU;AAC7C,YAAM,IAAI,MAAM,8CAA8C;AAAA,IAChE;AAEA,UAAM,SAAS,SAAS,UAAU,CAAC;AACnC,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI,MAAM,gDAAgD;AAAA,IAClE;AAGA,UAAM,UAAU,OAAO,WAAW,CAAC;AACnC,UAAM,UAAU,OAAO,QAAQ,YAAY,WAAW,QAAQ,UAAU;AACxE,UAAM,YAAY,MAAM,QAAQ,QAAQ,UAAU,IAC9C,QAAQ,aACR,CAAC;AAGL,UAAM,QAAQ,SAAS,SAAS,CAAC;AACjC,UAAM,eAAe,OAAO,MAAM,aAAa,KAAK;AACpD,UAAM,mBAAmB,OAAO,MAAM,iBAAiB,KAAK;AAE5D,WAAO;AAAA,MACL,IAAI,SAAS,MAAM,YAAY,KAAK,IAAI,CAAC;AAAA,MACzC;AAAA,MACA;AAAA,MACA,OAAO;AAAA,QACL;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,cAAc,cAAwB,UAAwB;AAEpE,UAAM,iBAAiB,aAAa,IAAI,aAAW;AAAA,MACjD,MAAM;AAAA,MACN,SAAS;AAAA,IACX,EAAE;AAGF,UAAM,qBAAqB,KAAK,sBAAsB,QAAQ;AAE9D,WAAO,CAAC,GAAG,gBAAgB,GAAG,kBAAkB;AAAA,EAClD;AAAA,EAEQ,sBAAsB,UAAwB;AACpD,QAAI,CAAC,MAAM,QAAQ,QAAQ,GAAG;AAC5B,aAAO,CAAC;AAAA,IACV;AAEA,WAAO,SAAS,IAAI,SAAO;AACzB,UAAI,CAAC,OAAO,OAAO,QAAQ,UAAU;AACnC,eAAO;AAAA,MACT;AAEA,UAAI,IAAI,SAAS,QAAQ;AACvB,YAAI,MAAM,QAAQ,IAAI,OAAO,GAAG;AAC9B,iBAAO;AAAA,YACL,GAAG;AAAA,YACH,SACE,IAAI,QACD,IAAI,OAAK,GAAG,QAAQ,EAAE,EACtB,OAAO,OAAO,EACd,KAAK,MAAM,KAAK;AAAA,UACvB;AAAA,QACF,WAAW,OAAO,IAAI,YAAY,UAAU;AAC1C,iBAAO;AAAA,YACL,GAAG;AAAA,YACH,SACE,IAAI,YAAY,QAAQ,IAAI,YAAY,SACpC,oBACA,KAAK,UAAU,IAAI,OAAO;AAAA,UAClC;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAAA;AAAA,EAGA,OAAiB,sBACf,QACA,YACA,YACA,oBACA,kBACgC;AAEhC,QAAI,CAAC,UAAU,OAAO,WAAW,UAAU;AACzC;AAAA,IACF;AAGA,UAAM,SAAS,OAAO,UAAU,CAAC;AACjC,QAAI,QAAQ,SAAS,OAAO,OAAO,UAAU,UAAU;AACrD,YAAM,QACJ,OAAO,OAAO,MAAM,YAAY,WAAW,OAAO,MAAM,UAAU;AACpE,YAAM,iBACJ,OAAO,OAAO,MAAM,sBAAsB,WACtC,OAAO,MAAM,oBACb;AACN,YAAM,YAAY,QAAQ;AAE1B,UAAI,WAAW;AACb,cAAM,aAAa,KAAK;AAAA,UACtB;AAAA,UACA;AAAA,UACA;AAAA,QACF;AACA,mBAAW,SAAS,YAAY;AAC9B,gBAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAGA,QAAI,QAAQ,OAAO,cAAc,MAAM,QAAQ,OAAO,MAAM,UAAU,GAAG;AACvE,iBAAW,YAAY,OAAO,MAAM,YAAY;AAC9C,YAAI,YAAY,OAAO,aAAa,UAAU;AAC5C,gBAAM;AAAA,YACJ,MAAM;AAAA,YACN,MAAM;AAAA,cACJ,IAAI,SAAS,MAAM,QAAQ,KAAK,IAAI,CAAC;AAAA,cACrC,MAAM,SAAS,UAAU,QAAQ;AAAA,cACjC,OAAO,SAAS,UAAU,aAAa;AAAA,YACzC;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAGA,QAAI,OAAO,SAAS,OAAO,OAAO,UAAU,UAAU;AACpD,YAAM,kBAAkB,gBAAgB,OAAO,KAAK;AACpD,WAAK,sBAAsB,eAAe;AAC1C,YAAM;AAAA,QACJ,MAAM;AAAA,QACN,OAAO,EAAE,GAAG,KAAK,gBAAgB;AAAA,MACnC;AAAA,IACF;AAAA,EACF;AAAA,EAEU,qBACR,QACA,oBAC4C;AAC5C,UAAM,QAAoD,CAAC;AAG3D,UAAM,SAAS,OAAO,UAAU,CAAC;AACjC,QAAI,QAAQ,OAAO;AACjB,YAAM,QAAQ,OAAO,MAAM,WAAW;AACtC,YAAM,iBAAiB,OAAO,MAAM,qBAAqB;AACzD,YAAM,YAAY,QAAQ;AAE1B,UAAI,WAAW;AACb,cAAM,UAAU,qBAAqB;AACrC,cAAM,aAAa;AAAA,MACrB;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,MAAgB,6BACd,UACA,QACsD;AACtD,UAAM,gBAAuB,CAAC;AAC9B,UAAM,QAAa;AAAA,MACjB,eAAe;AAAA,MACf,mBAAmB;AAAA,IACrB;AAEA,QAAI,aAAa,SAAS,MAAM,YAAY,KAAK,IAAI,CAAC;AACtD,UAAM,mBAA0B,CAAC;AACjC,QAAI,qBAAqB;AAEzB,QAAI;AACF,WAAK,qBAAqB;AAE1B,uBAAiB,SAAS,KAAK,uBAAuB,QAAQ,GAAG;AAE/D,YAAI,QAAQ,SAAS;AACnB,gBAAM,IAAI,MAAM,wBAAwB;AAAA,QAC1C;AAEA,YAAI,MAAM,SAAS,iBAAiB;AAClC,uBAAa,MAAM,cAAc;AACjC;AAAA,QACF;AAEA,YAAI,MAAM,SAAS,cAAc;AAC/B,cAAI,CAAC,oBAAoB;AACvB,6BAAiB,EAAE,MAAM,YAAY,CAAC;AACtC,iCAAqB;AAAA,UACvB;AACA,gBAAM,OAAO,cAAc,cAAc,SAAS,CAAC;AACnD,cAAI,CAAC,QAAQ,KAAK,SAAS,QAAQ;AACjC,0BAAc,KAAK;AAAA,cACjB,MAAM;AAAA,cACN,MAAM,MAAM;AAAA,cACZ,WAAW,CAAC;AAAA,YACd,CAAC;AAAA,UACH,OAAO;AACL,iBAAK,QAAQ,MAAM;AAAA,UACrB;AACA;AAAA,QACF;AAEA,YAAI,MAAM,SAAS,gBAAgB;AACjC,2BAAiB,EAAE,MAAM,QAAQ,QAAQ,MAAM,MAAM,KAAK,CAAC;AAC3D,2BAAiB,KAAK,MAAM,IAAI;AAChC;AAAA,QACF;AAEA,YAAI,MAAM,SAAS,SAAS;AAE1B,gBAAM,gBAAgB,MAAM,MAAM;AAClC,gBAAM,oBAAoB,MAAM,MAAM;AACtC,gBAAM,cACJ,MAAM,MAAM,SAAS,MAAM,MAAM,QAAQ,MAAM,MAAM;AACvD,gBAAM,eAAe,MAAM,MAAM;AACjC,gBAAM,mBAAmB,MAAM,MAAM;AACrC;AAAA,QACF;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,UAAI,QAAQ,SAAS;AAEnB,cAAMC,oBAAmB;AAAA,UACvB,MAAM;AAAA,UACN,SAAS;AAAA,YACP,MAAM;AAAA,YACN,SAAS;AAAA,YACT,OAAO;AAAA,cACL,cAAc,MAAM,iBAAiB;AAAA,cACrC,eAAe,MAAM,qBAAqB;AAAA,cAC1C,eAAe,MAAM,iBAAiB;AAAA,cACtC,mBAAmB,MAAM,qBAAqB;AAAA,cAC9C,cACG,MAAM,iBAAiB,MAAM,MAAM,qBAAqB;AAAA,YAC7D;AAAA,UACF;AAAA,UACA,SAAS;AAAA,UACT,YAAY,KAAK,IAAI,IAAI,KAAK,IAAI;AAAA,UAClC,MAAM,WAAW;AAAA,UACjB;AAAA,QACF;AACA,eAAO;AAAA,UACL,kBAAAA;AAAA,UACA,aAAa;AAAA,YACX,IAAI;AAAA,YACJ,SAAS;AAAA,YACT;AAAA,YACA,SAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF;AACA,YAAM;AAAA,IACR;AACA,eAAW,YAAY,kBAAkB;AACvC,UAAI,WAAW,CAAC;AAChB,UAAI;AACF,mBAAW,SAAS,QAAQ,KAAK,MAAM,SAAS,KAAK,IAAI,CAAC;AAAA,MAC5D,QAAQ;AAAA,MAAC;AAET,oBAAc,KAAK;AAAA,QACjB,MAAM;AAAA,QACN,IAAI,SAAS;AAAA,QACb,MAAM,SAAS;AAAA,QACf,OAAO;AAAA,MACT,CAAC;AAAA,IACH;AACA,UAAM,mBAAmB;AAAA,MACvB,MAAM;AAAA,MACN,SAAS;AAAA,QACP,MAAM;AAAA,QACN,SAAS;AAAA,QACT,OAAO;AAAA,UACL,cAAc,MAAM,iBAAiB;AAAA,UACrC,eAAe,MAAM,qBAAqB;AAAA,UAC1C,eAAe,MAAM,iBAAiB;AAAA,UACtC,mBAAmB,MAAM,qBAAqB;AAAA,UAC9C,aACE,MAAM,gBACL,MAAM,iBAAiB,MAAM,MAAM,qBAAqB;AAAA,QAC7D;AAAA,MACF;AAAA,MACA,SAAS;AAAA,MACT,YAAY,KAAK,IAAI,IAAI,KAAK,IAAI;AAAA;AAAA,MAClC,MAAM,WAAW;AAAA,MACjB;AAAA,IACF;AACA,WAAO;AAAA,MACL;AAAA,MACA,aAAa;AAAA,QACX,IAAI;AAAA,QACJ,SAAS;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACU,yBAAyB,OAAa;AAC9C,WAAO,MAAM,yBAAyB,KAAK;AAAA,EAC7C;AACF;;;ACvYA,IAAM,oBAAuC;AAAA,EAC3C,iBAAiB;AAAA,IACf,SAAS;AAAA,IACT,UAAU;AAAA,EACZ;AAAA,EACA,YAAY;AAAA,IACV,gBAAgB;AAAA;AAAA,IAChB,yBAAyB;AAAA,IACzB,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,EACnB;AAAA,EACA,aAAa;AAAA,IACX,MAAM;AAAA,IACN,kBAAkB;AAAA,IAClB,sBAAsB;AAAA,IACtB,uBAAuB;AAAA,EACzB;AAAA,EACA,iBAAiB;AAAA,IACf,oBAAoB;AAAA,IACpB,8BAA8B;AAAA,IAC9B,4BAA4B;AAAA,EAC9B;AAAA,EACA,WAAW;AAAA,IACT,WAAW;AAAA;AAAA,IACX,eAAe;AAAA,EACjB;AACF;AAGA,IAAM,gCAAmD;AAAA,EACvD,iBAAiB;AAAA,IACf,SAAS;AAAA,EACX;AAAA,EACA,YAAY;AAAA,IACV,gBAAgB;AAAA,IAChB,yBAAyB;AAAA,IACzB,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,EACnB;AAAA,EACA,aAAa;AAAA,IACX,MAAM;AAAA,IACN,kBAAkB;AAAA,IAClB,sBAAsB;AAAA,IACtB,uBAAuB;AAAA,EACzB;AAAA,EACA,iBAAiB;AAAA,IACf,oBAAoB;AAAA,IACpB,8BAA8B;AAAA,IAC9B,4BAA4B;AAAA,EAC9B;AAAA,EACA,WAAW;AAAA,IACT,WAAW;AAAA,IACX,eAAe;AAAA,EACjB;AACF;AAGO,IAAM,8BAAiE;AAAA;AAAA,EAE5E,SAAS;AAAA,EACT,cAAc;AAAA,EACd,cAAc;AAAA,EACd,qBAAqB;AAAA,EACrB,eAAe;AAAA;AAAA,EAGf,UAAU;AAAA,EACV,eAAe;AAAA,EACf,eAAe;AAAA,EACf,SAAS;AAAA;AAAA,EAGT,8BAA8B;AAAA,EAC9B,6BAA6B;AAAA,EAC7B,0BAA0B;AAAA;AAAA,EAG1B,IAAI;AAAA,IACF,GAAG;AAAA,IACH,YAAY;AAAA,MACV,GAAG,8BAA8B;AAAA,MACjC,gBAAgB;AAAA,MAChB,iBAAiB;AAAA,IACnB;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACT,GAAG;AAAA,IACH,YAAY;AAAA,MACV,GAAG,8BAA8B;AAAA,MACjC,gBAAgB;AAAA,MAChB,iBAAiB;AAAA,IACnB;AAAA,EACF;AAAA,EACA,cAAc;AAAA,IACZ,GAAG;AAAA,IACH,YAAY;AAAA,MACV,GAAG,8BAA8B;AAAA,MACjC,gBAAgB;AAAA,MAChB,iBAAiB;AAAA,IACnB;AAAA,EACF;AACF;AAGO,SAAS,uBACd,WAC0B;AAC1B,MAAI,CAAC,UAAW,QAAO;AAEvB,QAAM,YAAY,UAAU,YAAY;AAGxC,MAAI,UAAU,SAAS,OAAO,KAAK,UAAU,SAAS,MAAM,GAAG;AAC7D,WAAO;AAAA,EACT;AAGA,MAAI,UAAU,SAAS,OAAO,KAAK,UAAU,SAAS,MAAM,GAAG;AAC7D,WAAO;AAAA,MACL,GAAG;AAAA,MACH,WAAW,EAAE,WAAW,MAAM,eAAe,KAAK;AAAA,IACpD;AAAA,EACF;AAGA,MAAI,UAAU,SAAS,OAAO,KAAK,UAAU,SAAS,MAAM,GAAG;AAC7D,WAAO;AAAA,MACL,GAAG;AAAA,MACH,aAAa;AAAA,QACX,GAAG,8BAA8B;AAAA,QACjC,sBAAsB;AAAA;AAAA,MACxB;AAAA,IACF;AAAA,EACF;AAGA,MAAI,UAAU,WAAW,IAAI,KAAK,UAAU,SAAS,KAAK,GAAG;AAC3D,WAAO;AAAA,MACL,GAAG;AAAA,MACH,YAAY;AAAA,QACV,GAAG,8BAA8B;AAAA,QACjC,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,MACnB;AAAA,IACF;AAAA,EACF;AAGA,SAAO;AACT;AAGA,IAAM,kBAAkB,oBAAI,IAA+B;AAEpD,SAAS,qBAAqB,WAAsC;AAEzE,MAAI,gBAAgB,IAAI,SAAS,GAAG;AAClC,WAAO,gBAAgB,IAAI,SAAS;AAAA,EACtC;AAGA,MAAI,4BAA4B,SAAS,GAAG;AAC1C,UAAM,eAAe,4BAA4B,SAAS;AAC1D,oBAAgB,IAAI,WAAW,YAAY;AAC3C,WAAO;AAAA,EACT;AAGA,QAAM,WAAW,uBAAuB,SAAS;AACjD,MAAI,UAAU;AACZ,oBAAgB,IAAI,WAAW,QAAQ;AACvC,WAAO;AAAA,EACT;AAGA,QAAM,sBAAsB;AAC5B,kBAAgB,IAAI,WAAW,mBAAmB;AAClD,SAAO;AACT;;;AC9KO,IAAM,sBAAN,MAA0B;AAAA;AAAA;AAAA;AAAA,EAI/B,OAAO,cAAc,cAA6C;AAChE,UAAM,eAAe,qBAAqB,aAAa,SAAS;AAGhE,UAAM,UAAU,KAAK,iBAAiB,cAAc,YAAY;AAGhE,YAAQ,SAAS;AAAA,MACf,KAAK;AACH,eAAO,IAAI,oBAAoB,cAAc,YAAY;AAAA,MAC3D,KAAK;AAAA,MACL;AACE,eAAO,IAAI,uBAAuB,cAAc,YAAY;AAAA,IAChE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,iBACb,cACA,cACsC;AAEtC,QAAI,aAAa,gBAAgB,YAAY,iBAAiB;AAC5D,aAAO;AAAA,IACT;AAGA,UAAM,mBACJ,CAAC,aAAa,WAAW,aAAa,QAAQ,SAAS,gBAAgB;AAGzE,QAAI,CAAC,kBAAkB;AAErB,UAAI,aAAa,gBAAgB,aAAa,oBAAoB;AAChE,eAAO,aAAa,gBAAgB;AAAA,MACtC;AAEA,aAAO,aAAa,gBAAgB;AAAA,IACtC;AAMA,WAAO,aAAa,gBAAgB;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,sBAAsB,cAAqC;AAChE,UAAM,eAAe,qBAAqB,aAAa,SAAS;AAChE,UAAM,UAAU,KAAK,iBAAiB,cAAc,YAAY;AAChE,WAAO,YAAY;AAAA,EACrB;AACF;;;ACnEA,SAAS,cAAc;;;ACCvB,SAAS,SAAS,OAAgD;AAChE,MAAI,CAAC,SAAS,OAAO,UAAU,SAAU,QAAO;AAChD,SAAO;AACT;AAoCO,SAAS,yCACd,UAIE;AACF,QAAM,iBAAsD,CAAC;AAE7D,QAAM,cAAqE,CAAC;AAE5E,aAAW,WAAW,UAAU;AAC9B,UAAM,SAA2B,CAAC;AAClC,QAAI,OAAO,QAAQ,QAAQ,YAAY,UAAU;AAC/C,aAAO,KAAK,EAAE,MAAM,QAAQ,MAAM,QAAQ,QAAQ,QAAQ,CAAC;AAAA,IAC7D,WAAW,MAAM,QAAQ,QAAQ,QAAQ,OAAO,GAAG;AACjD,aAAO,KAAK,GAAG,QAAQ,QAAQ,OAAO;AAAA,IACxC,WAAW,QAAQ,QAAQ,SAAS;AAClC,aAAO,KAAK,QAAQ,QAAQ,OAAO;AAAA,IACrC;AAEA,UAAM,OAAO,QAAQ,QAAQ;AAE7B,UAAM,mBAAuD,CAAC;AAC9D,UAAM,qBAA+B,CAAC;AACtC,UAAM,qBAA6D,CAAC;AAEpE,eAAW,SAAS,QAAQ;AAC1B,UAAI,MAAM,SAAS,QAAQ;AACzB,cAAM,SAAS,SAAS,KAAK;AAC7B,cAAM,OACJ,UAAU,OAAO,OAAO,SAAS,WAAW,OAAO,OAAO;AAC5D,YAAI,CAAC,KAAM;AACX,YAAI,SAAS,QAAQ;AACnB,2BAAiB,KAAK,EAAE,MAAM,QAAQ,KAAK,CAAC;AAAA,QAC9C,WAAW,SAAS,aAAa;AAC/B,6BAAmB,KAAK,IAAI;AAAA,QAC9B;AACA;AAAA,MACF;AAEA,UAAI,MAAM,SAAS,WAAW,SAAS,QAAQ;AAC7C,cAAM,SAAU,MAA8B;AAC9C,YAAI,QAAQ,SAAS,UAAU;AAC7B,2BAAiB,KAAK;AAAA,YACpB,MAAM;AAAA,YACN,WAAW;AAAA,cACT,KAAK,QAAQ,OAAO,UAAU,WAAW,OAAO,IAAI;AAAA,YACtD;AAAA,UACF,CAAC;AAAA,QACH,WAAW,QAAQ,SAAS,OAAO;AACjC,2BAAiB,KAAK;AAAA,YACpB,MAAM;AAAA,YACN,WAAW,EAAE,KAAK,OAAO,IAAI;AAAA,UAC/B,CAAC;AAAA,QACH;AACA;AAAA,MACF;AAEA,UAAI,MAAM,SAAS,YAAY;AAC7B,2BAAmB,KAAK;AAAA,UACtB,MAAM;AAAA,UACN,UAAU;AAAA,YACR,MAAO,MAAgC;AAAA,YACvC,WAAW,KAAK,UAAW,MAAgC,KAAK;AAAA,UAClE;AAAA,UACA,IAAK,MAAgC;AAAA,QACvC,CAAC;AACD;AAAA,MACF;AAEA,UAAI,MAAM,SAAS,eAAe;AAChC,cAAM,YAAa,MAAmC;AACtD,cAAM,iBAAkB,MAAmC;AAC3D,cAAM,cACJ,OAAO,mBAAmB,WACtB,iBACA,KAAK,UAAU,cAAc;AACnC,oBAAY,SAAS,IAAI;AAAA,UACvB,MAAM;AAAA,UACN,SAAS;AAAA,UACT,cAAc;AAAA,QAChB;AACA;AAAA,MACF;AAAA,IACF;AAEA,QAAI,SAAS,QAAQ;AACnB,UACE,iBAAiB,WAAW,KAC5B,iBAAiB,CAAC,GAAG,SAAS,QAC9B;AACA,uBAAe,KAA4C;AAAA,UACzD,MAAM;AAAA,UACN,SAAS,iBAAiB,CAAC,EAAE;AAAA,QAC/B,CAAC;AAAA,MACH,WAAW,iBAAiB,SAAS,GAAG;AACtC,uBAAe,KAA4C;AAAA,UACzD,MAAM;AAAA,UACN,SAAS;AAAA,QACX,CAAC;AAAA,MACH;AACA;AAAA,IACF;AAEA,QAAI,SAAS,aAAa;AACxB,YAAM,OAAO,mBAAmB,OAAO,OAAO,EAAE,KAAK,IAAI;AACzD,UAAI,mBAAmB,SAAS,GAAG;AACjC,uBAAe,KAAiD;AAAA,UAC9D,MAAM;AAAA,UACN,SAAS,OAAO,OAAO;AAAA,UACvB,YAAY;AAAA,QACd,CAAC;AACD;AAAA,MACF;AACA,UAAI,MAAM;AACR,uBAAe,KAAiD;AAAA,UAC9D,MAAM;AAAA,UACN,SAAS;AAAA,QACX,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,QAAM,gBAAqD,CAAC;AAE5D,aAAW,WAAW,gBAAgB;AACpC,kBAAc,KAAK,OAAO;AAE1B,QAAI,QAAQ,SAAS,eAAe,MAAM,QAAQ,QAAQ,UAAU,GAAG;AACrE,iBAAW,YAAY,QAAQ,YAAY;AACzC,YAAI,YAAY,SAAS,EAAE,GAAG;AAC5B,wBAAc,KAAK,YAAY,SAAS,EAAE,CAAC;AAAA,QAC7C;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;;;ACnLO,SAAS,wBAAwB,cAA2B;AACjE,SAAO,cAAc,aAAa;AACpC;AAEO,SAAS,eAAe,OAAa;AAC1C,MAAI,CAAC,OAAO;AACV,WAAO;AAAA,MACL,cAAc;AAAA,MACd,eAAe;AAAA,MACf,yBAAyB;AAAA,MACzB,6BAA6B;AAAA,IAC/B;AAAA,EACF;AAEA,SAAO;AAAA,IACL,cACE,MAAM,gBACN,MAAM,iBACN,MAAM,gBACN,MAAM,eACN;AAAA,IACF,eACE,MAAM,iBACN,MAAM,qBACN,MAAM,oBACN,MAAM,gBACN;AAAA,IACF,yBAAyB,MAAM,2BAA2B;AAAA,IAC1D,6BAA6B,MAAM,+BAA+B;AAAA,IAClE,eACE,MAAM,iBAAiB,MAAM,gBAAgB,MAAM,gBAAgB;AAAA,IACrE,mBACE,MAAM,qBACN,MAAM,iBACN,MAAM,oBACN;AAAA,IACF,cACE,MAAM,gBAAgB,MAAM,iBAAiB,MAAM,gBAAgB;AAAA,IACrE,kBACE,MAAM,oBACN,MAAM,qBACN,MAAM,iBACN;AAAA,IACF,aACE,MAAM,gBACL,MAAM,iBAAiB,MAAM,gBAAgB,MAAM,gBAAgB,MACjE,MAAM,qBACL,MAAM,iBACN,MAAM,oBACN;AAAA,IACN,iBAAiB,MAAM;AAAA,EACzB;AACF;;;AFzCA,SAAS,4BACP,QACiC;AACjC,UAAQ,QAAQ;AAAA,IACd,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAEO,SAASC,0CACd,UAIE;AACF,SAAO,yCAA6C,QAAQ;AAC9D;AAEO,SAAS,iCACd,UACA,OACkB;AAClB,QAAM,kBAAkB,eAAe,SAAS,KAAK;AACrD,MAAI,gBAAgC,CAAC;AACrC,QAAM,UAAU,SAAS,UAAU,CAAC,GAAG;AACvC,MAAI,CAAC,SAAS;AACZ,WAAO;AAAA,MACL,IAAI,OAAO;AAAA,MACX,OAAO,SAAS,SAAS;AAAA,MACzB,MAAM;AAAA,MACN,SAAS,CAAC;AAAA,MACV,aAAa;AAAA,QACX,SAAS,UAAU,CAAC,GAAG;AAAA,MACzB;AAAA,MACA,eAAe;AAAA,MACf,MAAM;AAAA,MACN,OAAO;AAAA,QACL,cAAc,gBAAgB,gBAAgB;AAAA,QAC9C,eAAe,gBAAgB,iBAAiB;AAAA,QAChD,6BACE,gBAAgB,+BAA+B;AAAA,QACjD,yBAAyB,gBAAgB,2BAA2B;AAAA,MACtE;AAAA,IACF;AAAA,EACF;AAEA,MAAI,SAAS,YAAY;AACvB,eAAW,YAAY,QAAQ,YAAY;AACzC,YAAM,OAAO,SAAS;AACtB,YAAM,WAAW,KAAK;AACtB,UAAI,WAAW,CAAC;AAChB,UAAI;AACF,mBAAW,KAAK,YAAY,KAAK,MAAM,KAAK,SAAS,IAAI,CAAC;AAAA,MAC5D,SAAS,GAAG;AAAA,MAEZ;AAEA,oBAAc,KAAK;AAAA,QACjB,MAAM;AAAA,QACN,OAAO;AAAA,QACP,MAAM;AAAA,QACN,IAAI,SAAS,IAAI,SAAS,IAAI,SAAS,KAAK,OAAO;AAAA,MACrD,CAAC;AAAA,IACH;AAAA,EACF;AAEA,QAAM,SAAS;AACf,MAAI,OAAO,OAAO,cAAc,YAAY,OAAO,WAAW;AAC5D,kBAAc,KAAK;AAAA,MACjB,MAAM;AAAA,MACN,UAAU,OAAO;AAAA,MACjB,WAAW;AAAA,IACb,CAAC;AAAA,EACH;AAGA,MACE,OAAO,OAAO,sBAAsB,YACpC,OAAO,mBACP;AACA,kBAAc,KAAK;AAAA,MACjB,MAAM;AAAA,MACN,UAAU,OAAO;AAAA,MACjB,WAAW;AAAA,IACb,CAAC;AAAA,EACH;AAEA,MAAI,QAAQ,SAAS;AACnB,kBAAc,KAAK;AAAA,MACjB,MAAM;AAAA,MACN,MAAM,QAAQ;AAAA,MACd,WAAW,CAAC;AAAA,IACd,CAAC;AAAA,EACH;AAEA,QAAM,eAAiC;AAAA,IACrC,IAAI,OAAO;AAAA,IACX,OAAO,SAAS,SAAS;AAAA,IACzB,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,MACX,SAAS,UAAU,CAAC,GAAG;AAAA,IACzB;AAAA,IACA,eAAe;AAAA,IACf,MAAM;AAAA,IACN,OAAO;AAAA,MACL,cAAc,gBAAgB,gBAAgB;AAAA,MAC9C,eAAe,gBAAgB,iBAAiB;AAAA,MAChD,6BACE,gBAAgB,+BAA+B;AAAA,MACjD,yBAAyB,gBAAgB,2BAA2B;AAAA,IACtE;AAAA,EACF;AAEA,SAAO;AACT;;;AGnIO,SAAS,YAAY,WAA4B;AACtD,SAAO,UAAU,WAAW,OAAO;AACrC;AAEO,SAAS,sCAAsC,MAShB;AACpC,QAAM,SAAS,YAAY,KAAK,KAAK;AAErC,QAAM,OAA0C;AAAA,IAC9C,OAAO,KAAK;AAAA,IACZ,GAAI,SACA,EAAE,uBAAuB,KAAK,UAAU,IACxC,EAAE,YAAY,KAAK,UAAU;AAAA,IACjC,UAAU,KAAK;AAAA,IACf,aAAa,KAAK;AAAA,EACpB;AACA,MAAI,KAAK,iBAAiB,KAAK,cAAc,SAAS,GAAG;AACvD,SAAK,OAAO,KAAK;AAAA,EACnB;AACA,MAAI,KAAK,QAAQ;AACf;AAAC,IAAC,KAA2C,SAAS;AACtD,SAAK,iBAAiB;AAAA,MACpB,eAAe;AAAA,IACjB;AAAA,EACF;AAEA,MAAI,KAAK,YAAY,SAAS,GAAG;AAC/B,SAAK,QAAQ,KAAK;AAClB,SAAK,cAAc;AAAA,EACrB;AACA,MAAI,KAAK,iBAAiB;AACxB,SAAK,mBAAmB,KAAK;AAAA,EAC/B;AAEA,SAAO;AACT;;;ACzCA,SAAS,eACP,UACA,MAC8B;AAC9B,QAAM,SAAS,CAAC,KAAU,UAAmD;AAC3E,UAAM,EAAE,GAAG,IAAI;AACf,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,KAAK,GAAG;AAChD,UAAI,IAAI,GAAG,MAAM,UAAa,IAAI,GAAG,MAAM,MAAM;AAC/C,YAAI,GAAG,IAAI;AAEX,YAAI,MAAM,QAAQ,IAAI,GAAG,CAAC,GAAG;AAC3B,qBAAW,OAAO,IAAI,GAAG,GAAG;AAC1B,mBAAO,IAAI;AAAA,UACb;AAAA,QACF;AAAA,MACF,WAAW,OAAO,IAAI,GAAG,MAAM,YAAY,OAAO,UAAU,UAAU;AACpE,YAAI,GAAG,KAAK;AAAA,MACd,WAAW,OAAO,IAAI,GAAG,MAAM,YAAY,OAAO,UAAU,UAAU;AACpE,YAAI,GAAG,IAAI;AAAA,MACb,WAAW,MAAM,QAAQ,IAAI,GAAG,CAAC,KAAK,MAAM,QAAQ,KAAK,GAAG;AAC1D,cAAM,WAAW,IAAI,GAAG;AACxB,iBAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,gBAAM,EAAE,OAAO,GAAG,UAAU,IAAI,MAAM,CAAC;AACvC,cAAI,QAAQ,SAAS,SAAS,GAAG;AAC/B,kBAAM,IAAI;AAAA,cACR,mFAAmF,QAAQ,WAAW,KAAK;AAAA,YAC7G;AAAA,UACF;AACA,mBAAS,KAAK,IAAI,OAAO,SAAS,KAAK,GAAG,SAAS;AAAA,QACrD;AAAA,MACF,WAAW,OAAO,IAAI,GAAG,MAAM,YAAY,OAAO,UAAU,UAAU;AACpE,YAAI,GAAG,IAAI,OAAO,IAAI,GAAG,GAAG,KAAK;AAAA,MACnC;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,KAAK,UAAU,CAAC;AAC/B,MAAI,CAAC,QAAQ;AAEX,WAAO;AAAA,EACT;AACA,SAAO,OAAO,UAAU,OAAO,KAAK;AACtC;AAEA,eAAsB,oBACpB,QACA,QACgC;AAChC,QAAM,kBAAkB,KAAK,IAAI;AACjC,MAAI;AACJ,MAAI,aAAa;AACjB,MAAI,aAAa;AAEjB,QAAY,IAAI,uBAAuB;AAAA,IACrC,iBAAiB,OAAO,eAAe;AAAA,EACzC,CAAC;AAED,MAAI,UAAU,CAAC;AAEf,MAAI,IAAI,OAAO,SAAS,QAAQ;AAChC,MAAI;AACF,qBAAiB,SAAS,QAAQ;AAChC,UAAI,QAAQ,SAAS;AACnB,cAAY,KAAK,yBAAyB;AAAA,UACxC;AAAA,UACA,WAAW,KAAK,IAAI;AAAA,QACtB,CAAC;AACD,cAAM,IAAI,MAAM,uBAAuB;AAAA,MACzC;AAEA;AAEA,UAAI;AACF,YAAI,CAAC,IAAI;AACP,eAAK,MAAM;AACX,gBAAY,IAAI,6BAA6B;AAAA,YAC3C;AAAA,YACA,aAAa,OAAO,UAAU;AAAA,UAChC,CAAC;AAAA,QACH;AACA,YAAI,CAAC,OAAO;AACV,kBAAQ,MAAM;AACd,gBAAY,IAAI,gCAAgC;AAAA,YAC9C;AAAA,YACA,aAAa,OAAO,UAAU;AAAA,UAChC,CAAC;AAAA,QACH;AACA,YAAI,CAAC,SAAS;AACZ,oBAAU,MAAM;AAAA,QAClB;AACA,YAAI,CAAC,QAAQ;AACX,mBAAS,MAAM;AAAA,QACjB;AACA,YAAI,CAAC,OAAO;AACV,kBAAQ,MAAM;AAAA,QAChB;AAEA,kBAAU,eAAe,SAAS,KAAK;AAEvC,YAAI,OAAO,UAAU,CAAC,GAAG,OAAO,SAAS;AACvC,cAAI,CAAC,QAAQ;AACX,qBAAS,KAAK,IAAI,IAAI;AACtB,kBAAY,IAAI,6BAA6B;AAAA,cAC3C,QAAQ,OAAO,MAAM;AAAA,cACrB,aAAa,OAAO,UAAU;AAAA,YAChC,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF,SAAS,YAAY;AACnB;AACA,cAAY,MAAM,6BAA6B;AAAA,UAC7C,aAAa,OAAO,UAAU;AAAA,UAC9B,cACE,sBAAsB,QAClB,WAAW,UACX,OAAO,UAAU;AAAA,UACvB,WACE,sBAAsB,QAClB,WAAW,YAAY,OACvB,OAAO;AAAA,QACf,CAAC;AAAA,MAEH;AAAA,IACF;AAEA,UAAY,IAAI,0BAA0B;AAAA,MACxC,aAAa,OAAO,UAAU;AAAA,MAC9B,YAAY,OAAO,UAAU;AAAA,MAC7B,eAAe,OAAO,KAAK,IAAI,IAAI,eAAe;AAAA,MAClD,QAAQ,OAAO,UAAU,CAAC;AAAA,MAC1B,gBAAgB,MAAM;AAAA,IACxB,CAAC;AAAA,EACH,SAAS,aAAa;AACpB,UAAY,MAAM,6BAA6B;AAAA,MAC7C,aAAa,OAAO,UAAU;AAAA,MAC9B,YAAY,OAAO,UAAU;AAAA,MAC7B,cACE,uBAAuB,QACnB,YAAY,UACZ,OAAO,WAAW;AAAA,MACxB,WACE,uBAAuB,QACnB,YAAY,YAAY,OACxB,OAAO;AAAA,IACf,CAAC;AACD,UAAM;AAAA,EACR;AACA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS;AAAA,MACP;AAAA,QACE,OAAO;AAAA,QACP;AAAA,QACA,eAAe;AAAA,QACf,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,IACA;AAAA,EACF;AACF;;;ACvKA,SAAS,UAAAC,eAAc;AACvB,SAAS,cAAAC,mBAAkB;AAIpB,SAAS,yCACd,iBACA,WACkB;AAClB,QAAM,gBAAgB,CAAC,GAAI,gBAAgB,WAAW,CAAC,CAAE;AAEzD,MAAI,gBAAgB,aAAa,gBAAgB,UAAU,SAAS,GAAG;AACrE,eAAW,YAAY,gBAAgB,WAAW;AAChD,YAAM,OAAO,SAAS;AACtB,YAAM,WAAW,MAAM;AACvB,UAAI,WAAW,CAAC;AAChB,UAAI;AACF,mBAAW,MAAM,YAAY,KAAK,MAAM,KAAK,SAAS,IAAI,CAAC;AAAA,MAC7D,SAAS,GAAG;AAAA,MAEZ;AAEA,oBAAc,KAAK;AAAA,QACjB,MAAM;AAAA,QACN,OAAO;AAAA,QACP,MAAM;AAAA,QACN,IAAI,SAAS,IAAI,SAAS,IAAI,SAAS,KAAKD,QAAO;AAAA,MACrD,CAAC;AAAA,IACH;AAAA,EACF;AAEA,QAAM,cACJ,gBAAgB,OAAO,gBACvB,gBAAgB,OAAO,gBACvB;AACF,QAAM,eACJ,gBAAgB,OAAO,oBACvB,gBAAgB,OAAO,iBACvB;AAEF,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,MACP,IAAI,gBAAgB,cAAcA,QAAO;AAAA,MACzC,OAAO,gBAAgB,SAAS;AAAA,MAChC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,aAAa,gBAAgB,cAAc;AAAA,MAC3C,eAAe;AAAA,MACf,SAAS;AAAA,MACT,OAAO;AAAA,QACL,cAAc;AAAA,QACd,eAAe;AAAA,QACf,6BAA6B;AAAA,QAC7B,yBAAyB;AAAA,MAC3B;AAAA,IACF;AAAA,IACA,SAAS;AAAA,IACT,YAAY,KAAK,IAAI,IAAI;AAAA,IACzB,MAAMC,YAAW;AAAA,IACjB,YAAY,gBAAgB;AAAA,EAC9B;AACF;;;AlBhBA,IAAM,uCAAuC;AAC7C,IAAM,wCAAwC;AAC9C,IAAM,oDAAoD;AAC1D,IAAM,mDAAmD;AAIzD,eAAsB,YACpB,UACA,cACA,mBACA,OACA,QACA,SAU2B;AAC3B,QAAM,SAAS,gBAAgB;AAC/B,QAAM,eAAe,gBAAgB;AACrC,QAAM,iBAAiB,SAAS;AAEhC,QAAM,eAAe,SAAS,gBAAgB,aAAa,SAAS,MAAM;AAC1E,MAAI;AAGJ,QAAM,iBAAiB,kBAAkB;AACzC,QAAY,IAAI,uBAAuB;AAAA,IACrC,mBAAmB,CAAC,CAAC;AAAA,IACrB,gBAAgB,cAAc;AAAA,IAC9B,kBAAkB,cAAc;AAAA,IAChC,uBAAuB,cAAc;AAAA,IACrC,sBAAsB,cAAc;AAAA,IACpC,qBAAqB,cAAc;AAAA,IACnC,0BAA0B,CAAC,CAAC,cAAc;AAAA,IAC1C,cAAc,SAAS;AAAA,IACvB,WAAW,kBAAkB,GAAG;AAAA,EAClC,CAAC;AAED,MAAI,cAAc;AAChB,YAAQ,aAAa;AAAA,EACvB,OAAO;AACL,YAAQ,SAAS,SAAS,cAAc,aAAa;AAAA,EACvD;AAEA,MAAI,SAAS,qBAAqB;AAChC,UAAM,CAAC,mBAAmB,IAAI,qBAAqB,YAAY;AAE/D,mBAAe,CAAC,sBAAsB,IAAI,YAAY;AAAA,EACxD;AAEA,QAAM,SAA2B,qBAAqB,YAAY,EAAE;AAAA,IAClE,QAAM;AAAA,MACJ,GAAI,yBACA,EAAE,eAAe,EAAE,MAAM,YAAY,EAAE,IACvC,CAAC;AAAA,MACL,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,EACF;AAEA,QAAM,cAAc,MAAM,QAAQ;AAAA,IAChC,MAAM;AAAA,MACJ,OAAM,OACH;AAAA,QACC,MAAM;AAAA,QACN,UAAU;AAAA,UACR,MAAM,EAAE;AAAA,UACR,aAAa,MAAM,EAAE,OAAO;AAAA,YAC1B,UAAU,SAAS;AAAA,UACrB,CAAC;AAAA;AAAA,UAED,YACE,qBAAqB,KAAK,EAAE,kBACxB,EAAE,kBACDC,iBAAgB,EAAE,WAAW;AAAA,QACtC;AAAA,MACF;AAAA,IACJ;AAAA,EACF;AAEA,QAAM,eAAe,OAAO;AAAA,IAC1B,QACG;AAAA,MACC,MAAM;AAAA,MACN,SAAS,EAAE;AAAA,IACb;AAAA,EACJ;AAEA,QAAM,iBAAiBC,0CAAyC,QAAQ;AAGxE,8BAA4B;AAAA,IAC1B,YAAY,aAAa,KAAK,IAAI;AAAA,IAClC,aAAa,oBAAoB,KAAK;AAAA,IACtC,WAAW,CAAC;AAAA;AAAA,IACZ,aAAa,aAAa,KAAK,IAAI;AAAA,EACrC,CAAC;AAED,MAAI,QAAQ,KAAK,IAAI;AAcrB,MAAI,iBAAiD;AAErD,MAAI,gBAAgB,aAAa,WAAW;AAC1C,UAAY,IAAI,2BAA2B;AAAA,MACzC,kBAAkB,aAAa;AAAA,MAC/B,WAAW,aAAa;AAAA,MACxB,UAAU,aAAa;AAAA,MACvB,WAAW,kBAAkB,GAAG;AAAA,IAClC,CAAC;AAED,UAAM,yBAAyB,QAAQ,IAAI,qBAAqB;AAEhE,QAAI,wBAAwB;AAC1B,YAAM,qBACJ,oBAAoB,sBAAsB,YAAY;AAIxD,UAAI,oBAAoB;AACtB,cAAM,UAAU,oBAAoB,cAAc,YAAY;AAC9D,cAAM,kBAAkB,MAAM,mBAAmB,cAAc,QAAQ;AAIvE,YAAI,YAAuC;AAC3C,cAAM,iBAAiB,aAAa,UAAU,YAAY;AAC1D,YAAI,eAAe,SAAS,MAAM,GAAG;AACnC,sBAAY;AAAA,QACd,WAAW,eAAe,SAAS,KAAK,GAAG;AACzC,sBAAY;AAAA,QACd;AAGA,cAAM,gBAAsC;AAAA,UAC1C,UAAU;AAAA,UACV,cAAc,aAAa,IAAI,OAAK,EAAE,OAAiB;AAAA,UACvD;AAAA,UACA,WACE,SAAS,aAAa,wBAAwB,YAAY;AAAA,UAC5D,QAAQ,OAAO;AAAA,UACf,iBAAiB,mBAAmB;AAAA,UACpC,aACE,SAAS,gBACR,YAAY,KAAK,IAAI,IAAI;AAAA,UAC5B,oBAAoB,gBAAgB,eAAe;AAAA,UACnD;AAAA,UACA,GAAI,SAAS,iBAAiB,QAAQ,cAAc,SAAS,IACzD,EAAE,eAAe,QAAQ,cAAc,IACvC,CAAC;AAAA,QACP;AAEA,yBAAiB;AAAA,UACf;AAAA,UACA,SAAS,QAAQ,cAAc,aAAa;AAAA,UAC5C,oBAAoB;AAAA,QACtB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,MAAI;AACJ,MAAI,wBAAwB,KAAK,IAAI;AAErC,MAAI;AACF,kBAAc,MAAM;AAAA,MAClB,YAAY;AACV,gBAAQ,KAAK,IAAI;AAEjB,YAAI,gBAAgB;AAClB,cAAI,eAAe,oBAAoB;AACrC,kBAAM,EAAE,qBAAqB,IAAI,MAAM,OAAO,sBAAiB;AAE/D,kBAAM,WAAW,MAAM;AAAA,cACrB;AAAA,cACA,eAAe;AAAA,cACf;AAAA,YACF;AAEA,kBAAM,kBACJ,MAAM,eAAe,QAAQ,cAAc,QAAQ;AAErD,kBAAMC,oBAAmB;AAAA,cACvB;AAAA,cACA;AAAA,YACF;AACA,YAAAA,kBAAiB,QAAQ,QAAQ;AAAA,cAC/BA,kBAAiB,QAAQ;AAAA,YAC3B;AAEA,mBAAO;AAAA,cACL,kBAAAA;AAAA,cACA,aAAa;AAAA,cACb,WAAW;AAAA,YACb;AAAA,UACF;AAEA,gBAAMC,KAAI,MAAM;AAAA,YACd;AAAA,YACA,eAAe;AAAA,YACf;AAAA,YACA;AAAA,YACA;AAAA,UACF;AACA,cAAIC;AACJ,cAAI,OAAO,QAAQ;AACjB,YAAAA,iBAAgB,MAAM;AAAA,cACpBD;AAAA,cACA;AAAA,YACF;AAAA,UACF,OAAO;AACL,YAAAC,iBAAgBD;AAAA,UAClB;AAEA,gBAAME,WAAU,iCAAiCD,gBAAe,KAAK;AACrE,gBAAME,gBAAiC;AAAA,YACrC,MAAM;AAAA,YACN,SAAAD;AAAA,YACA,SAAS;AAAA,YACT,YAAY,KAAK,IAAI,IAAI;AAAA,YACzB,MAAME,YAAW;AAAA,UACnB;AACA,iBAAO;AAAA,YACL,kBAAkBD;AAAA,YAClB,aAAaF;AAAA,YACb,WAAW;AAAA,UACb;AAAA,QACF;AAEA,cAAM,YACJ,SAAS,aAAa,wBAAwB,YAAY;AAE5D,cAAM,OAAO,sCAAsC;AAAA,UACjD;AAAA,UACA;AAAA,UACA,UAAU,CAAC,GAAG,cAAc,GAAG,cAAc;AAAA,UAC7C,aACE,SAAS,gBACR,YAAY,KAAK,IAAI,IAAI;AAAA,UAC5B,QAAQ,OAAO;AAAA,UACf;AAAA,UACA,eAAe,SAAS;AAAA,UACxB,iBAAiB,MAAM,mBAAmB,cAAc,QAAQ;AAAA,QAClE,CAAC;AAED,cAAM,qBAAqB,YAAY,cAAc,aAAa,EAAE,IAChE,+BACA;AACJ,cAAM,IAAI,MAAM,mBAAmB,cAAc,MAAM,GAAG,IAAI,MAAM;AACpE,YAAI;AACJ,YAAI,KAAK,QAAQ;AACf,0BAAgB,MAAM;AAAA,YACpB;AAAA,YACA;AAAA,UACF;AAAA,QACF,OAAO;AACL,0BAAgB;AAAA,QAClB;AACA,cAAM,UAAU,iCAAiC,eAAe,KAAK;AACrE,cAAM,eAAiC;AAAA,UACrC,MAAM;AAAA,UACN;AAAA,UACA,SAAS;AAAA,UACT,YAAY,KAAK,IAAI,IAAI;AAAA,UACzB,MAAMG,YAAW;AAAA,QACnB;AACA,eAAO;AAAA,UACL,kBAAkB;AAAA,UAClB,aAAa;AAAA,UACb,WAAW;AAAA,QACb;AAAA,MACF;AAAA,MACA,EAAE,OAAO;AAAA,IACX;AAAA,EACF,SAAS,OAAO;AACd,aAAS,KAAK;AACd,WAAO,6BAA6B,KAAK;AAAA,EAC3C;AAEA,QAAM,aAAa,KAAK,IAAI,IAAI;AAChC,QAAM,6BAA6B,KAAK,IAAI,IAAI;AAEhD,QAAM,mBAAmB,YAAY;AACrC,mBAAiB,QAAQ,UAAU;AAAA,IACjC,iBAAiB,QAAQ,WAAW,CAAC;AAAA,EACvC;AAEA,QAAM,kBAAkB,eAAe,iBAAiB,QAAQ,KAAK;AACrE,mBAAiB,QAAQ,QAAQ;AAEjC,QAAM,cAAc,gBAAgB,gBAAgB;AACpD,QAAM,eAAe,gBAAgB,iBAAiB;AACtD,QAAM,uBAAuB,gBAAgB,2BAA2B;AACxE,QAAM,2BACJ,gBAAgB,+BAA+B;AAEjD,QAAM,UACH,cAAc,MAAa,uCAC3B,eAAe,MAAa,wCAC5B,uBAAuB,MACtB,mDACD,2BAA2B,MAC1B;AAEJ,iBAAe,SAAS,0BAA0B;AAElD,oBAAkB;AAAA,IAChB,cAAc,aAAa,KAAK,IAAI;AAAA,IACpC,UAAU,CAAC,GAAG,cAAc,GAAG,cAAc;AAAA,IAC7C,UAAU,iBAAiB,WAAW,YAAY;AAAA,IAClD,OAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,IACA,QAAQ;AAAA,MACN;AAAA,MACA,KAAK,KAAK,IAAI;AAAA,IAChB;AAAA,IACA,WAAW,YAAY;AAAA,EACzB,CAAC;AAED,mBAAiB,UAAU;AAC3B,mBAAiB,aAAa;AAC9B,mBAAiB,OAAO,iBAAiB,QAASA,YAAW;AAE7D,SAAO;AACT;;;AmBtYA,OAAOC,gBAAe;AAStB,SAAS,UAAAC,eAAc;AACvB,SAAS,mBAAAC,wBAAuB;;;ACFzB,IAAM,aAAa,GAAG,eAAe,IAAI,MAAM,OAAO,KAAK,QAAQ,IAAI,SAAS;;;ACRhF,SAASC,yBAAwB,cAA2B;AACjE,SAAO,cAAc,aAAa;AACpC;;;ACFA,OAAO;AACP,OAAO,eAAe;AACtB,SAAS,wBAAwB;AACjC,SAAS,uBAAuB;AAChC,OAAO,WAAW;AAWlB,IAAI,kBACF;AAKK,SAAS,mBACd,OACgD;AAChD,QAAM,SAAS,gBAAgB;AAC/B,QAAM,WAAW,OAAO;AAGxB,MAAI,mBAAmB,UAAU;AAE/B,sBAAkB;AAAA,EACpB;AAEA,MAAI,iBAAiB;AACnB,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,wBAAwB,KAAK;AAE5C,QAAM,eAAe,gBAAgB;AACrC,QAAM,eAAe,aAAa,SAAS,MAAM;AAEjD,QAAM,iBAA4C;AAAA,IAChD,SAAS;AAAA,IACT,cAAc;AAAA,EAChB;AAEA,MAAI,QAAQ,IAAI,sBAAsB;AACpC,mBAAe,eAAe,IAC5B,UAAU,QAAQ,IAAI,oBAAoB;AAAA,EAC9C;AAEA,QAAM,OAAO;AAAA,IACX;AAAA,IACA,YAAY;AAAA;AAAA,IACZ,SAAS,SAAS,QAAQ,IAAI,kBAAkB,OAAO,KAAK,GAAI,GAAG,EAAE;AAAA,EACvE;AACA,MAAI,aAAa;AACf,UAAM,SAAS,IAAI,iBAAiB,IAAI;AACxC,sBAAkB;AAClB,WAAO;AAAA,EACT;AACA,MAAI,YAAY;AACd,UAAM,aAAa;AAAA,MACjB,GAAG;AAAA,MACH,QAAQ,UAAU,QAAQ,IAAI,mBAAmB;AAAA,IACnD;AACA,UAAM,SAAS,IAAI,gBAAgB,UAAU;AAC7C,sBAAkB;AAClB,WAAO;AAAA,EACT;AAEA,MAAI;AACJ,MAAI;AAEJ,MAAI,cAAc;AAChB,aAAS,aAAa,UAAU;AAChC,cAAU,aAAa;AAAA,EACzB,OAAO;AACL,aAAS,mBAAmB;AAC5B,cAAU;AAAA,EACZ;AAEA,MAAI,QAAQ,IAAI,cAAc,SAAS,CAAC,UAAU,aAAa,aAAa;AAC1E,YAAQ;AAAA,MACN,MAAM;AAAA,QACJ;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAIA,QAAM,eAAe;AAAA,IACnB;AAAA,IACA,yBAAyB;AAAA,IACzB,GAAG;AAAA,IACH,GAAI,WAAW,EAAE,QAAQ;AAAA;AAAA,EAC3B;AAEA,oBAAkB,IAAI,UAAU,YAAY;AAC5C,SAAO;AACT;AAKO,SAAS,uBAA6B;AAC3C,oBAAkB;AACpB;;;AC/FO,SAAS,4BACd,cACA,eACmE;AACnE,MAAI,CAAC,wBAAwB;AAC3B,WAAO,EAAE,cAAc,cAAc;AAAA,EACvC;AAEA,QAAM,iBAAiB;AACvB,MAAI,kBAAkB;AAGtB,QAAM,wBAAwB,aAAa,IAAI,WAAS;AACtD,QAAI,kBAAkB,kBAAkB,MAAM,KAAK,SAAS,KAAM;AAChE;AACA,aAAO;AAAA,QACL,GAAG;AAAA,QACH,eAAe,EAAE,MAAM,YAAqB;AAAA,MAC9C;AAAA,IACF;AACA,UAAM,EAAE,eAAe,GAAG,kBAAkB,IAAI;AAChD,WAAO;AAAA,EACT,CAAC;AAGD,QAAM,yBAAyB,cAAc,IAAI,CAAC,SAAS,iBAAiB;AAC1E,QAAI,MAAM,QAAQ,QAAQ,OAAO,GAAG;AAClC,YAAM,mBAAmB,QAAQ,QAAQ;AAAA,QACvC,CAAC,cAAc,eAAe;AAE5B,gBAAM,cACJ,kBAAkB,kBAClB,aAAa,SAAS,UACtB,OAAO,aAAa,SAAS;AAAA,WAE5B,aAAa,KAAK,SAAS;AAAA,UAEzB,iBAAiB,cAAc,SAAS,KACvC,eAAe,QAAQ,QAAQ,SAAS,KACxC,aAAa,KAAK,SAAS;AAEjC,cAAI,aAAa;AACf;AACA,mBAAO;AAAA,cACL,GAAG;AAAA,cACH,eAAe,EAAE,MAAM,YAAqB;AAAA,YAC9C;AAAA,UACF;AAGA,cAAI,mBAAmB,cAAc;AACnC,mBAAO,EAAE,GAAG,cAAc,eAAe,OAAU;AAAA,UACrD;AACA,iBAAO;AAAA,QACT;AAAA,MACF;AAEA,aAAO;AAAA,QACL,GAAG;AAAA,QACH,SAAS;AAAA,MACX;AAAA,IACF;AAEA,WAAO;AAAA,EACT,CAAC;AAED,SAAO;AAAA,IACL,cAAc;AAAA,IACd,eAAe;AAAA,EACjB;AACF;;;ACjFO,SAAS,0BACd,SACA,WAAW,OACG;AACd,MAAI,UAAU;AACZ,QAAI,OAAO,QAAQ,QAAQ,YAAY,UAAU;AAC/C,aAAO;AAAA,QACL,MAAM;AAAA,QACN,SAAS;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,MAAM,QAAQ,QAAQ;AAAA,UACxB;AAAA,QACF;AAAA,MACF;AAAA,IACF,OAAO;AACL,aAAO;AAAA,QACL,MAAM;AAAA,QACN,SAAS,QAAQ,QAAQ,QAAQ,IAAI,QAAM,EAAE,GAAG,EAAE,EAAE;AAAA,MACtD;AAAA,IACF;AAAA,EACF;AACA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS,QAAQ,QAAQ;AAAA,EAC3B;AACF;AAEO,SAAS,+BACd,SACA,WAAW,OACG;AACd,MAAI,UAAU;AACZ,QAAI,OAAO,QAAQ,QAAQ,YAAY,UAAU;AAC/C,aAAO;AAAA,QACL,MAAM;AAAA,QACN,SAAS;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,MAAM,QAAQ,QAAQ;AAAA,UACxB;AAAA,QACF;AAAA,MACF;AAAA,IACF,OAAO;AACL,aAAO;AAAA,QACL,MAAM;AAAA,QACN,SAAS,QAAQ,QAAQ,QAAQ,IAAI,QAAM,EAAE,GAAG,EAAE,EAAE;AAAA,MACtD;AAAA,IACF;AAAA,EACF;AACA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS,QAAQ,QAAQ;AAAA,EAC3B;AACF;AAEO,SAAS,oBACd,UACgB;AAChB,SAAO,SAAS,IAAI,CAAC,KAAK,UAAU;AAClC,WAAO,IAAI,SAAS,SAChB,0BAA0B,KAAK,QAAQ,SAAS,SAAS,CAAC,IAC1D,+BAA+B,KAAK,QAAQ,SAAS,SAAS,CAAC;AAAA,EACrE,CAAC;AACH;;;AC1DA,SAAS,oBAAoB,OAAmC;AAC9D,MAAI,QAAQ;AACZ,QAAM,SAA6B,CAAC;AAEpC,SAAO,QAAQ,MAAM,QAAQ;AAC3B,QAAI,KAAK,MAAM,KAAK;AAEpB,QAAI,OAAO,MAAM;AACf;AACA;AAAA,IACF;AAEA,QAAI,OAAO,KAAK;AACd,aAAO,KAAK,EAAE,MAAM,SAAS,OAAO,IAAI,CAAC;AACzC;AACA;AAAA,IACF;AACA,QAAI,OAAO,KAAK;AACd,aAAO,KAAK,EAAE,MAAM,SAAS,OAAO,IAAI,CAAC;AACzC;AACA;AAAA,IACF;AACA,QAAI,OAAO,KAAK;AACd,aAAO,KAAK,EAAE,MAAM,SAAS,OAAO,IAAI,CAAC;AACzC;AACA;AAAA,IACF;AACA,QAAI,OAAO,KAAK;AACd,aAAO,KAAK,EAAE,MAAM,SAAS,OAAO,IAAI,CAAC;AACzC;AACA;AAAA,IACF;AACA,QAAI,OAAO,KAAK;AACd,aAAO,KAAK,EAAE,MAAM,aAAa,OAAO,IAAI,CAAC;AAC7C;AACA;AAAA,IACF;AACA,QAAI,OAAO,KAAK;AACd,aAAO,KAAK,EAAE,MAAM,aAAa,OAAO,IAAI,CAAC;AAC7C;AACA;AAAA,IACF;AAEA,QAAI,OAAO,KAAK;AACd,UAAI,QAAQ;AACZ,UAAI,aAAa;AAEjB,WAAK,MAAM,EAAE,KAAK;AAClB,aAAO,OAAO,KAAK;AACjB,YAAI,UAAU,MAAM,QAAQ;AAC1B,uBAAa;AACb;AAAA,QACF;AACA,YAAI,OAAO,MAAM;AACf,cAAI,EAAE,UAAU,MAAM,QAAQ;AAC5B,yBAAa;AACb;AAAA,UACF;AACA,mBAAS,KAAK,MAAM,KAAK;AACzB,eAAK,MAAM,EAAE,KAAK;AAAA,QACpB,OAAO;AACL,mBAAS;AACT,eAAK,MAAM,EAAE,KAAK;AAAA,QACpB;AAAA,MACF;AAEA,WAAK,MAAM,EAAE,KAAK;AAClB,UAAI,CAAC,WAAY,QAAO,KAAK,EAAE,MAAM,UAAU,MAAM,CAAC;AACtD;AAAA,IACF;AAEA,QAAI,MAAM,KAAK,KAAK,EAAE,GAAG;AACvB;AACA;AAAA,IACF;AAEA,UAAM,QAAQ;AACd,QAAK,MAAM,MAAM,KAAK,EAAE,KAAM,OAAO,OAAO,OAAO,KAAK;AACtD,UAAI,QAAQ;AACZ,UAAI,OAAO,KAAK;AACd,iBAAS;AACT,aAAK,MAAM,EAAE,KAAK;AAAA,MACpB;AACA,aAAQ,MAAM,MAAM,KAAK,EAAE,KAAM,OAAO,KAAK;AAC3C,iBAAS;AACT,aAAK,MAAM,EAAE,KAAK;AAAA,MACpB;AACA,aAAO,KAAK,EAAE,MAAM,UAAU,MAAM,CAAC;AACrC;AAAA,IACF;AAEA,UAAM,QAAQ;AACd,QAAI,MAAM,MAAM,KAAK,EAAE,GAAG;AACxB,UAAI,QAAQ;AACZ,aAAO,MAAM,MAAM,KAAK,EAAE,GAAG;AAC3B,YAAI,UAAU,MAAM,OAAQ;AAC5B,iBAAS;AACT,aAAK,MAAM,EAAE,KAAK;AAAA,MACpB;AAEA,UAAI,UAAU,UAAU,UAAU,WAAW,UAAU,QAAQ;AAC7D,eAAO,KAAK,EAAE,MAAM,QAAQ,MAAM,CAAC;AAAA,MACrC,OAAO;AACL;AAAA,MACF;AACA;AAAA,IACF;AAEA;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,6BACP,QACoB;AACpB,MAAI,OAAO,WAAW,EAAG,QAAO;AAChC,QAAM,OAAO,OAAO,OAAO,SAAS,CAAC;AAErC,MAAI,KAAK,SAAS,aAAa;AAC7B,WAAO,6BAA6B,OAAO,MAAM,GAAG,EAAE,CAAC;AAAA,EACzD;AAEA,MAAI,KAAK,SAAS,UAAU;AAC1B,UAAM,WAAW,KAAK,MAAM,KAAK,MAAM,SAAS,CAAC;AACjD,QAAI,aAAa,OAAO,aAAa,KAAK;AACxC,aAAO,6BAA6B,OAAO,MAAM,GAAG,EAAE,CAAC;AAAA,IACzD;AAAA,EACF;AAEA,MAAI,KAAK,SAAS,YAAY,KAAK,SAAS,UAAU;AACpD,UAAM,WAAW,OAAO,OAAO,SAAS,CAAC;AACzC,QAAI,UAAU,SAAS,aAAa;AAClC,aAAO,6BAA6B,OAAO,MAAM,GAAG,EAAE,CAAC;AAAA,IACzD;AACA,QAAI,UAAU,SAAS,WAAW,SAAS,UAAU,KAAK;AACxD,aAAO,6BAA6B,OAAO,MAAM,GAAG,EAAE,CAAC;AAAA,IACzD;AAAA,EACF;AAEA,MAAI,KAAK,SAAS,aAAa;AAC7B,WAAO,6BAA6B,OAAO,MAAM,GAAG,EAAE,CAAC;AAAA,EACzD;AAEA,SAAO;AACT;AAEA,SAAS,kBAAkB,QAAgD;AACzE,QAAM,iBAAmC,CAAC;AAE1C,aAAW,SAAS,QAAQ;AAC1B,QAAI,MAAM,SAAS,SAAS;AAC1B,UAAI,MAAM,UAAU,IAAK,gBAAe,KAAK,GAAG;AAAA,UAC3C,gBAAe,OAAO,eAAe,YAAY,GAAG,GAAG,CAAC;AAC7D;AAAA,IACF;AAEA,QAAI,MAAM,SAAS,SAAS;AAC1B,UAAI,MAAM,UAAU,IAAK,gBAAe,KAAK,GAAG;AAAA,UAC3C,gBAAe,OAAO,eAAe,YAAY,GAAG,GAAG,CAAC;AAAA,IAC/D;AAAA,EACF;AAEA,MAAI,eAAe,SAAS,GAAG;AAC7B,mBAAe,QAAQ;AACvB,eAAW,UAAU,gBAAgB;AACnC,UAAI,WAAW,IAAK,QAAO,KAAK,EAAE,MAAM,SAAS,OAAO,IAAI,CAAC;AAAA,UACxD,QAAO,KAAK,EAAE,MAAM,SAAS,OAAO,IAAI,CAAC;AAAA,IAChD;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,aAAa,QAAoC;AACxD,MAAI,MAAM;AACV,aAAW,SAAS,QAAQ;AAC1B,QAAI,MAAM,SAAS,SAAU,QAAO,IAAI,MAAM,KAAK;AAAA,QAC9C,QAAO,MAAM;AAAA,EACpB;AACA,SAAO;AACT;AAEO,SAAS,wBAAwB,OAAwB;AAC9D,QAAM,SAAS,oBAAoB,KAAK;AACxC,QAAM,UAAU,6BAA6B,MAAM;AACnD,QAAM,YAAY,kBAAkB,OAAO;AAC3C,SAAO,KAAK,MAAM,aAAa,SAAS,CAAC;AAC3C;AAEO,SAAS,+BAA+B,OAAwB;AACrE,MAAI;AACF,WAAO,wBAAwB,KAAK;AAAA,EACtC,SAAS,OAAO;AACd,UAAM,IAAI;AAAA,MACR,2GAA2G,OAAO,KAAK,CAAC,WAAW,KAAK;AAAA,IAC1I;AAAA,EACF;AACF;;;ACvMA,SAASC,UAAS,OAAgD;AAChE,MAAI,CAAC,SAAS,OAAO,UAAU,SAAU,QAAO;AAChD,MAAI,MAAM,QAAQ,KAAK,EAAG,QAAO;AACjC,SAAO;AACT;AAEA,eAAsB,gCACpB,WACA,QACA,QACc;AACd,QAAM,SAAS,MAAM,UAAU,KAAK,SAAS;AAAA,IAC3C;AAAA,MACE,GAAG;AAAA,MACH,QAAQ;AAAA,IACV;AAAA,IACA;AAAA,MACE;AAAA;AAAA,IACF;AAAA,EACF;AAEA,MAAI,gBAA4B;AAChC,MAAI,oBAAyB;AAC7B,QAAM,gBAAuB,CAAC;AAC9B,QAAM,mBAAmB,oBAAI,IAAoB;AACjD,MAAI,QAAa;AACjB,MAAI,aAA4B;AAChC,MAAI,eAA8B;AAClC,MAAI,qBAAqB;AAEzB,mBAAiB,SAAS,QAAQ;AAChC,QAAI,OAAO,SAAS;AAClB,YAAY,KAAK,kBAAkB;AAAA,QACjC,WAAW,MAAM;AAAA,QACjB,WAAW,KAAK,IAAI;AAAA,MACtB,CAAC;AACD,YAAM,IAAI,MAAM,uBAAuB;AAAA,IACzC;AAEA,YAAQ,MAAM,MAAM;AAAA,MAClB,KAAK;AACH,4BAAoB;AACpB,wBAAgB;AAAA,UACd,GAAG,MAAM;AAAA,UACT,SAAS,CAAC;AAAA;AAAA,QACZ;AACA;AAAA,MAEF,KAAK;AACH,sBAAc,MAAM,KAAK,IAAI,EAAE,GAAG,MAAM,cAAc;AAEtD;AACE,gBAAM,eAAeA,UAAS,MAAM,aAAa;AACjD,gBAAM,YAAY,cAAc;AAChC,cACE,cAAc,cACd,cAAc,qBACd,cAAc,gBACd;AACA,6BAAiB;AAAA,cACf,MAAM;AAAA,cACN,QACE,OAAO,cAAc,SAAS,WAC1B,aAAa,OACb;AAAA,YACR,CAAC;AACD,6BAAiB,IAAI,MAAM,OAAO,EAAE;AAAA,UACtC;AAAA,QACF;AACA;AAAA,MAEF,KAAK;AACH,cAAM,aAAa,MAAM;AAGzB,YAAI,CAAC,cAAc,UAAU,GAAG;AAC9B,wBAAc,UAAU,IAAI;AAAA,YAC1B,MAAM,MAAM,MAAM,SAAS,eAAe,SAAS;AAAA,YACnD,MAAM,MAAM,MAAM,SAAS,eAAe,KAAK;AAAA,UACjD;AACA,cAAI,MAAM,MAAM,SAAS,oBAAoB;AAC3C,6BAAiB,IAAI,YAAY,EAAE;AAAA,UACrC;AAAA,QACF;AAEA,YAAI,MAAM,MAAM,SAAS,cAAc;AACrC,cAAI,CAAC,oBAAoB;AACvB,6BAAiB,EAAE,MAAM,YAAY,CAAC;AACtC,iCAAqB;AAAA,UACvB;AACA,wBAAc,UAAU,EAAE,QAAQ,MAAM,MAAM;AAAA,QAChD,WAAW,MAAM,MAAM,SAAS,oBAAoB;AAClD,gBAAM,gBAAgB,iBAAiB,IAAI,UAAU,KAAK;AAC1D,gBAAM,aAAa,gBAAgB,MAAM,MAAM;AAC/C,2BAAiB,IAAI,YAAY,UAAU;AAE3C,gBAAM,UAAU,WAAW,KAAK;AAChC,cAAI,QAAQ,WAAW,GAAG;AACxB,0BAAc,UAAU,EAAE,QAAQ,CAAC;AACnC;AAAA,UACF;AAEA,wBAAc,UAAU,EAAE,QACxB,+BAA+B,UAAU,KAAK,CAAC;AAAA,QACnD;AACA;AAAA,MAEF,KAAK;AACH,YAAI,MAAM,MAAM,YAAa,cAAa,MAAM,MAAM;AACtD,YAAI,MAAM,MAAM,cAAe,gBAAe,MAAM,MAAM;AAC1D,YAAI,MAAM,MAAO,SAAQ,EAAE,GAAG,OAAO,GAAG,MAAM,MAAM;AACpD;AAAA,MAEF,KAAK;AACH,cAAM,YAAY,MAAM;AACxB,cAAM,QAAQ,cAAc,SAAS;AAErC,aACG,OAAO,SAAS,cACf,OAAO,SAAS,qBAChB,OAAO,SAAS,mBAClB,iBAAiB,IAAI,SAAS,GAC9B;AACA,gBAAM,UAAU,iBAAiB,IAAI,SAAS,KAAK;AACnD,cAAI,MAAM,UAAU,QAAW;AAC7B,kBAAM,UAAU,QAAQ,KAAK;AAC7B,gBAAI,QAAQ,WAAW,GAAG;AACxB,oBAAM,QAAQ,CAAC;AAAA,YACjB,OAAO;AACL,oBAAM,QAAQ,+BAA+B,OAAO,KAAK,CAAC;AAAA,YAC5D;AAAA,UACF;AAEA,2BAAiB,OAAO,SAAS;AAAA,QACnC;AACA;AAAA,MAEF,KAAK;AAEH,yBAAiB,MAAM;AACvB;AAAA,IACJ;AAEA,QAAI,MAAM,SAAS,gBAAgB;AACjC;AAAA,IACF;AAAA,EACF;AAEA,MAAI,CAAC,iBAAiB,CAAC,mBAAmB;AACxC,UAAM,IAAI,MAAM,+CAA+C;AAAA,EACjE;AAGA,kBAAgB;AAAA,IACd,GAAG,kBAAkB;AAAA,IACrB,SAAS,cAAc,OAAO,OAAO;AAAA,IACrC,aAAa;AAAA,IACb,eAAe;AAAA,IACf,OAAO;AAAA,MACL,GAAG,kBAAkB,QAAQ;AAAA,MAC7B,GAAG;AAAA,IACL;AAAA,EACF;AAEA,SAAO;AACT;;;AC5KO,SAAS,0BAA0B,OAAuB;AAE/D,aAAW,kBAAkB,OAAO,OAAO,cAAM,GAAG;AAClD,UAAM,YAAY,eAAe,KAAK,CAAC,MAAW,EAAE,UAAU,KAAK;AACnE,QAAI,WAAW;AACb,aAAO,UAAU,wBAAwB;AAAA,IAC3C;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,2BAA2B,OAAuB;AAEhE,aAAW,kBAAkB,OAAO,OAAO,cAAM,GAAG;AAClD,UAAM,YAAY,eAAe,KAAK,CAAC,MAAW,EAAE,UAAU,KAAK;AACnE,QAAI,WAAW;AACb,aAAO,UAAU,yBAAyB;AAAA,IAC5C;AAAA,EACF;AAEA,SAAO;AACT;;;ARiDA,eAAsB,qBACpB,UACA,cACA,mBACA,OACA,QACA,SAU2B;AAC3B,QAAM,SAAS,gBAAgB;AAC/B,QAAM,eAAe,gBAAgB;AACrC,QAAM,iBAAiB,SAAS;AAEhC,QAAM,eAAe,SAAS,gBAAgB,aAAa,SAAS,MAAM;AAC1E,MAAI;AACJ,MAAI;AACJ,MAAI;AAGJ,QAAY,IAAI,0BAA0B;AAAA,IACxC,mBAAmB,CAAC,CAAC;AAAA,IACrB,gBAAgB,cAAc;AAAA,IAC9B,kBAAkB,cAAc;AAAA,IAChC,uBAAuB,cAAc;AAAA,IACrC,sBAAsB,cAAc;AAAA,IACpC,qBAAqB,cAAc;AAAA,IACnC,0BAA0B,CAAC,CAAC,cAAc;AAAA,IAC1C,cAAc,SAAS;AAAA,IACvB,WAAW,kBAAkB,GAAG;AAAA,EAClC,CAAC;AAED,MAAI,cAAc;AAEhB,YAAQ,aAAa;AACrB,eAAW,aAAa,YAAY,OAAO,mBAAmB;AAG9D,QACE,aAAa,aAAa,eAC1B,aAAa,aAAa,kBAC1B;AACA,YAAM,eAAoB;AAAA,QACxB,QAAQ,aAAa;AAAA,QACrB,yBAAyB;AAAA,QACzB,YAAY;AAAA,QACZ,SAAS,SAAS,QAAQ,IAAI,kBAAkB,OAAO,KAAK,GAAI,GAAG,EAAE;AAAA,QACrE,gBAAgB;AAAA,UACd,SAAS;AAAA,UACT,cAAc;AAAA,QAChB;AAAA,MACF;AAGA,UAAI,aAAa,SAAS;AACxB,qBAAa,UAAU,aAAa;AAAA,MACtC;AAEA,kBAAY,IAAIC,WAAU,YAAY;AAAA,IACxC,OAAO;AAEL,kBAAY,mBAAmB,KAAK;AAAA,IACtC;AAAA,EACF,OAAO;AAEL,UAAM,eAAe;AAAA,MACnB,oBAAoB,CAAC,CAAC;AAAA,MACtB,uBAAuB,cAAc;AAAA,MACrC,gBAAgB,SAAS;AAAA,MACzB,WAAW,kBAAkB,GAAG;AAAA,IAClC;AACA,UAAY,MAAM,4BAA4B,YAAY;AAC1D,UAAM,IAAI;AAAA,MACR,iHAAiH,KAAK,UAAU,YAAY,CAAC;AAAA,IAC/I;AAAA,EACF;AAGA,MAAI,SAAS,qBAAqB;AAEhC,UAAM,CAAC,mBAAmB,IAAI,qBAAqB,YAAY;AAE/D,mBAAe,CAAC,sBAAsB,GAAG,GAAG,YAAY;AAAA,EAC1D;AAEA,QAAM,SAA2B,qBAAqB,YAAY,EAAE;AAAA,IAClE,QAAM;AAAA,MACJ,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,EACF;AAEA,QAAM,cAAc,MAAM,QAAQ;AAAA,IAChC,MAAM;AAAA,MACJ,OAAM,UACH;AAAA,QACC,MAAM,KAAK;AAAA,QACX,aAAa,mBAAmB,IAAI;AAAA,QACpC,cACE,qBAAqB,QAAQ,KAAK,kBAC9B,KAAK,kBACJC,iBAAgB,KAAK,WAAW;AAAA,MACzC;AAAA,IACJ;AAAA,EACF;AAEA,QAAM,oBAAoB,oBAAoB,QAAQ;AAGtD,QAAM,EAAE,cAAc,iBAAiB,eAAe,kBAAkB,IACtE,4BAA4B,QAAQ,iBAAiB;AACvD,QAAM,wBAAwB,KAAK,IAAI;AAGvC,8BAA4B;AAAA,IAC1B,YAAY,aAAa,KAAK,IAAI;AAAA,IAClC,aAAa,oBAAoB,KAAK;AAAA,IACtC,WAAW,CAAC;AAAA;AAAA,IACZ,aAAa,aAAa,KAAK,IAAI;AAAA,EACrC,CAAC;AAED,MAAI,QAAQ,KAAK,IAAI;AACrB,MAAI,gBAAgB;AACpB,MAAI;AAEJ,MAAI;AACF,eAAW,MAAM;AAAA,MACf,OAAM,YAAW;AACf,wBAAgB;AAChB,gBAAQ,KAAK,IAAI;AAEjB,cAAM,SAEF;AAAA,UACF;AAAA,UACA,YACE,SAAS,aAAaC,yBAAwB,YAAY;AAAA,UAC5D,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,OAAO,YAAY,SAAS,IAAI,cAAc;AAAA,UAC9C,aAAa,YAAY,SAAS,IAAI,EAAE,MAAM,OAAO,IAAI;AAAA,UACzD,GAAI,SAAS,gBAAgB,SACzB,EAAE,aAAa,QAAQ,YAAY,IACnC,CAAC;AAAA,UACL,GAAI,SAAS,iBAAiB,QAAQ,cAAc,SAAS,IACzD,EAAE,gBAAgB,QAAQ,cAAc,IACxC,CAAC;AAAA,QACP;AAEA,YAAI,oBAAoB,GAAG;AACzB,iBAAO,gBAAgB;AAAA,YACrB,kBAAkB;AAAA,UACpB;AACA,iBAAO,WAAW;AAAA,YAChB,MAAM;AAAA,YACN,eAAe;AAAA,UACjB;AAAA,QACF;AAEA,YAAI,OAAO,QAAQ;AAEjB,gBAAY,IAAI,sCAAsC;AAAA,YACpD,UAAU,cAAc,WAAW;AAAA,YACnC;AAAA,YACA;AAAA,YACA,kBAAkB,CAAC,CAAC,cAAc;AAAA,YAClC,cAAc,cAAc,SACxB,aAAa,OAAO,UAAU,GAAG,CAAC,IAClC;AAAA,YACJ,WAAW,OAAO;AAAA,YAClB,aAAa,SAAS,eAAe;AAAA,YACrC;AAAA,YACA,cAAc,OAAO,UAAU,UAAU;AAAA,YACzC,YAAY;AAAA,YACZ,YAAY,YAAY;AAAA,YACxB,gBAAgB;AAAA,YAChB,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,YAClC,gBAAgB,cAAc;AAAA,YAC9B,kBAAkB,cAAc;AAAA,UAClC,CAAC;AAED,iBAAO,MAAM;AAAA,YACX;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF,OAAO;AAEL,gBAAY,IAAI,0CAA0C;AAAA,YACxD,UAAU,cAAc,WAAW;AAAA,YACnC;AAAA,YACA;AAAA,YACA,kBAAkB,CAAC,CAAC,cAAc;AAAA,YAClC,cAAc,cAAc,SACxB,aAAa,OAAO,UAAU,GAAG,CAAC,IAClC;AAAA,YACJ,WAAW,OAAO;AAAA,YAClB,aAAa,SAAS,eAAe;AAAA,YACrC,cAAc,OAAO,UAAU,UAAU;AAAA,YACzC,YAAY;AAAA,YACZ,YAAY,YAAY;AAAA,YACxB,gBAAgB;AAAA,YAChB,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,YAClC,gBAAgB,cAAc;AAAA,YAC9B,kBAAkB,cAAc;AAAA,UAClC,CAAC;AAED,iBAAO,MAAM,UAAU,KAAK,SAAS,OAAO,QAAQ;AAAA,YAClD;AAAA;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AAAA,MACA,EAAE,OAAO;AAAA,IACX;AAEA,UAAY,IAAI,8BAA8B;AAAA,MAC5C,SAAS,SAAS;AAAA,IACpB,CAAC;AAED,UAAM,SAAS,KAAK,IAAI,IAAI;AAC5B,UAAM,aAAa,KAAK,IAAI,IAAI;AAEhC,UAAM,UAAU,SAAS,QAAQ,IAAI,CAAC,UAAwB;AAC5D,UAAI,MAAM,SAAS,QAAQ;AACzB,eAAO;AAAA,UACL,MAAM;AAAA,UACN,MAAM,MAAM;AAAA,QACd;AAAA,MACF,WAAW,MAAM,SAAS,YAAY;AACpC,eAAO;AAAA,UACL,MAAM;AAAA,UACN,IAAI,MAAM;AAAA,UACV,MAAM,MAAM;AAAA,UACZ,OAAO,MAAM;AAAA,QACf;AAAA,MACF;AACA,aAAO;AAAA,IACT,CAAC;AAED,UAAM,mBAAqC;AAAA,MACzC,SAAS;AAAA,QACP,IAAI,SAAS;AAAA,QACb;AAAA,QACA,OAAO,SAAS;AAAA,QAChB,MAAM;AAAA,QACN,aAAa,SAAS;AAAA,QACtB,eAAe,SAAS;AAAA,QACxB,MAAM;AAAA,QACN,OAAO,SAAS;AAAA,MAClB;AAAA,MACA,MAAM;AAAA,MACN,MAAMC,QAAO;AAAA,MACb;AAAA,MACA,SAAS;AAAA;AAAA,IACX;AAIA,UAAM,iBAAiB,OAAO,IAAI,YAAU;AAAA,MAC1C,MAAM;AAAA,MACN,SAAS,MAAM;AAAA,IACjB,EAAE;AAEF,sBAAkB;AAAA,MAChB,cAAc,aAAa,KAAK,IAAI;AAAA,MACpC,UAAU,CAAC,GAAG,gBAAgB,GAAG,iBAAiB;AAAA,MAClD;AAAA,MACA,OAAO,SAAS,QACZ;AAAA,QACE,aAAa,SAAS,MAAM;AAAA,QAC5B,cAAc,SAAS,MAAM;AAAA,MAC/B,IACA;AAAA,MACJ,QAAQ;AAAA,QACN;AAAA,QACA,KAAK,KAAK,IAAI;AAAA,MAChB;AAAA,MACA,WAAW;AAAA,IACb,CAAC;AAGD,UAAM,cAAc,SAAS,MAAM;AACnC,UAAM,eAAe,SAAS,MAAM;AACpC,UAAM,2BACJ,SAAS,MAAM,+BAA+B;AAChD,UAAM,uBAAuB,SAAS,MAAM,2BAA2B;AAEvE,UAAM,UACH,cAAc,MAAa,0BAA0B,KAAK,IAC1D,eAAe,MAAa,2BAA2B,KAAK,IAC5D,2BAA2B,MAC1B,0BAA0B,KAAK,IAChC,uBAAuB,OACrB,0BAA0B,KAAK,IAAI;AAExC,qBAAiB,UAAU;AAC3B,mBAAe,SAAS,UAAU;AAElC,WAAO;AAAA,EACT,SAAS,OAAO;AACd,WAAO,6BAA6B,KAAK;AAAA,EAC3C;AACF;;;AS9XA,SAAS,kBAA6B;AACtC,SAAS,WAAW,cAAc,qBAAqB;AACvD,SAAS,eAAe;AAExB,SAAS,kBAAkB;AAG3B,YAAY,UAAU;AACtB,SAAS,iBAAiB;AAG1B,eAAsB,QACpB,UACA,GAC2B;AAC3B,MAAI,QAAQ,IAAI,aAAa,QAAQ;AACnC,WAAO,MAAM,EAAE;AAAA,EACjB;AAEA,QAAM,kBAAkB;AAAA,IACtB,SAAS,IAAI,OAAK,EAAE,QAAQ,OAAO;AAAA,IACnC;AAAA,EACF;AACA,QAAM,WAAW,cAAc,gBAAgB,IAAI,OAAK,WAAW,MAAM,EAAE,OAAO,KAAK,UAAU,CAAC,CAAC,EAAE,OAAO,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC;AAGzI,MAAI,WAAW,QAAQ,GAAG;AACxB,UAAM,SAAS,KAAK,MAAM,aAAa,UAAU,OAAO,CAAC;AACzD,WAAO,oBAAoB,OAAO,QAAQ,YAAY;AAAA,EACxD;AAEA,MAAI,IAAI,MAAM;AACZ,YAAQ,OAAO;AAAA,MACb,mFAAmF,KAAK,UAAU,EAAE,OAAO,gBAAgB,GAAG,MAAM,CAAC,CAAC;AAAA;AAAA,IACxI;AAAA,EACF;AAGA,QAAM,SAAS,MAAM,EAAE;AACvB,MAAI,IAAI,MAAM;AACZ,WAAO;AAAA,EACT;AAEA,MAAI,CAAC,WAAW,QAAQ,QAAQ,CAAC,GAAG;AAClC,cAAU,QAAQ,QAAQ,GAAG,EAAE,WAAW,KAAK,CAAC;AAAA,EAClD;AACA;AAAA,IACE;AAAA,IACA,KAAK;AAAA,MACH;AAAA,QACE,OAAO;AAAA,QACP,QAAQ,oBAAoB,QAAQ,cAAc;AAAA,MACpD;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,YACP,UACA,GAC0D;AAC1D,SAAO,SAAS,IAAI,OAAK;AACvB,QAAI,OAAO,MAAM,UAAU;AACzB,aAAO,EAAE,CAAC;AAAA,IACZ;AACA,WAAO,EAAE,IAAI,CAAAC,OAAK;AAChB,cAAQA,GAAE,MAAM;AAAA,QACd,KAAK;AACH,cAAI,OAAOA,GAAE,YAAY,UAAU;AACjC,mBAAO,EAAE,GAAGA,IAAG,SAAS,EAAEA,GAAE,OAAO,EAAE;AAAA,UACvC;AACA,cAAI,MAAM,QAAQA,GAAE,OAAO,GAAG;AAC5B,mBAAO;AAAA,cACL,GAAGA;AAAA,cACH,SAASA,GAAE,QAAQ,IAAI,CAAAA,OAAK;AAC1B,wBAAQA,GAAE,MAAM;AAAA,kBACd,KAAK;AACH,2BAAO,EAAE,GAAGA,IAAG,MAAM,EAAEA,GAAE,IAAI,EAAE;AAAA,kBACjC,KAAK;AACH,2BAAOA;AAAA,gBACX;AAAA,cACF,CAAC;AAAA,YACH;AAAA,UACF;AACA,iBAAOA;AAAA,QACT,KAAK;AACH,iBAAO,EAAE,GAAGA,IAAG,MAAM,EAAEA,GAAE,IAAI,EAAE;AAAA,QACjC,KAAK;AACH,iBAAO;AAAA,YACL,GAAGA;AAAA,YACH,OAAO,UAAUA,GAAE,OAAkC,CAAC;AAAA,UACxD;AAAA,QACF,KAAK;AACH,iBAAOA;AAAA,MACX;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;AAEA,SAAS,oBACP,SACA,GACkB;AAClB,SAAO;AAAA,IACL,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP,GAAG,QAAQ;AAAA,MACX,SAAS,QAAQ,QAAQ,QACtB,IAAI,OAAK;AACR,gBAAQ,EAAE,MAAM;AAAA,UACd,KAAK;AACH,mBAAO;AAAA,cACL,GAAG;AAAA,cACH,MAAM,EAAE,EAAE,IAAI;AAAA,cACd,WAAW,EAAE,aAAa,CAAC;AAAA,YAC7B;AAAA;AAAA,UACF,KAAK;AACH,mBAAO;AAAA,cACL,GAAG;AAAA,cACH,OAAO,UAAU,EAAE,OAAkC,CAAC;AAAA,YACxD;AAAA,UACF;AACE,mBAAO;AAAA,QACX;AAAA,MACF,CAAC,EACA,OAAO,OAAO;AAAA,IACnB;AAAA,IACA,MAAM;AAAA,EACR;AACF;AAEA,SAAS,eAAe,GAAqB;AAC3C,MAAI,OAAO,MAAM,UAAU;AACzB,WAAO;AAAA,EACT;AACA,QAAM,KAAK,EACR,QAAQ,oBAAoB,mBAAmB,EAC/C,QAAQ,sBAAsB,0BAA0B,EACxD,QAAQ,mBAAmB,mBAAmB,EAC9C,QAAQ,OAAY,QAAG,EACvB,WAAW,OAAO,GAAG,OAAO;AAC/B,MAAI,GAAG,SAAS,yBAAyB,GAAG;AAC1C,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,SAAS,aAAa,GAAqB;AACzC,MAAI,OAAO,MAAM,UAAU;AACzB,WAAO;AAAA,EACT;AACA,SAAO,EACJ,WAAW,SAAS,GAAG,EACvB,WAAW,cAAc,KAAK,EAC9B,WAAW,SAAS,OAAO,CAAC;AACjC;;;ACtJA,IAAM,uBAAN,MAA2B;AAAA,EACjB,qBAAqB,oBAAI,IAA+B;AAAA;AAAA,EAG/C,mBAAmB,KAAK,KAAK;AAAA,EAE9C,cAAc;AAEZ,gBAAY,MAAM;AAChB,WAAK,QAAQ;AAAA,IACf,GAAG,KAAK,gBAAgB;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKA,sBAAsB,gBAAwB,YAA0B;AACtE,SAAK,mBAAmB,IAAI,gBAAgB;AAAA,MAC1C,oBAAoB;AAAA,MACpB,YAAY,KAAK,IAAI;AAAA,IACvB,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,sBAAsB,gBAA4C;AAChE,UAAM,QAAQ,KAAK,mBAAmB,IAAI,cAAc;AACxD,QAAI,OAAO;AAET,YAAM,aAAa,KAAK,IAAI;AAC5B,aAAO,MAAM;AAAA,IACf;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAkB,gBAA8B;AAC9C,SAAK,mBAAmB,OAAO,cAAc;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA,EAKA,WAAiB;AACf,SAAK,mBAAmB,MAAM;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA,EAKQ,UAAgB;AACtB,UAAM,MAAM,KAAK,IAAI;AACrB,eAAW,CAAC,gBAAgB,KAAK,KAAK,KAAK,mBAAmB,QAAQ,GAAG;AACvE,UAAI,MAAM,MAAM,aAAa,KAAK,kBAAkB;AAClD,aAAK,mBAAmB,OAAO,cAAc;AAAA,MAC/C;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,eAAuB;AACrB,WAAO,KAAK,mBAAmB;AAAA,EACjC;AACF;AAGO,IAAM,uBAAuB,IAAI,qBAAqB;AAKtD,SAAS,kBACd,SACA,WACQ;AAER,SACE,WACA,aACA,QAAQ,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,OAAO,GAAG,CAAC,CAAC;AAEjE;;;AChGA,OAAO;AACP,OAAOC,gBAAe;AAWtB,eAAsB,qBACpB,SACA,QACgB;AAChB,MAAI;AAEF,UAAM,YAAY,UACd,GAAG,QAAQ,QAAQ,QAAQ,EAAE,CAAC,eAC9B;AAEJ,UAAM,WAAW,MAAM,MAAM,WAAW;AAAA,MACtC,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,aAAa;AAAA,QACb,qBAAqB;AAAA,QACrB,cAAc;AAAA,MAChB;AAAA,IACF,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAEhB,UAAI,SAAS,WAAW,KAAK;AAC3B,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF,WAAW,SAAS,WAAW,KAAK;AAClC,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF,WAAW,SAAS,WAAW,KAAK;AAClC,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF,WAAW,SAAS,UAAU,KAAK;AACjC,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF,OAAO;AACL,cAAM,IAAI;AAAA,UACR,uCAAuC,SAAS,MAAM;AAAA,QACxD;AAAA,MACF;AAAA,IACF;AAEA,UAAM,OAAO,MAAM,SAAS,KAAK;AACjC,WAAO,KAAK,QAAQ,CAAC;AAAA,EACvB,SAAS,OAAO;AAEd,QACG,iBAAiB,SAAS,MAAM,QAAQ,SAAS,SAAS,KAC1D,iBAAiB,SAAS,MAAM,QAAQ,SAAS,WAAW,GAC7D;AACA,YAAM;AAAA,IACR;AAGA,aAAS,KAAK;AACd,UAAY,KAAK,iCAAiC;AAAA,MAChD,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,IAC9D,CAAC;AACD,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACF;AAEA,eAAsB,aACpB,QACA,SACA,UACkB;AAClB,MAAI,CAAC,QAAQ;AACX,WAAO;AAAA,EACT;AAGA,MAAI,YAAY,aAAa,aAAa;AACxC,QAAI;AACF,YAAM,UAAkC;AAAA,QACtC,eAAe,UAAU,MAAM;AAAA,QAC/B,gBAAgB;AAAA,MAClB;AAEA,UAAI,CAAC,SAAS;AACZ,cAAY,KAAK,qCAAqC,EAAE,SAAS,CAAC;AAClE,eAAO;AAAA,MACT;AAEA,YAAM,YAAY,GAAG,QAAQ,QAAQ,QAAQ,EAAE,CAAC;AAEhD,YAAM,WAAW,MAAM,MAAM,WAAW;AAAA,QACtC,QAAQ;AAAA,QACR;AAAA,MACF,CAAC;AAED,aAAO,SAAS;AAAA,IAClB,SAAS,OAAO;AACd,eAAS,KAAK;AACd,YAAY,KAAK,2BAA2B;AAAA,QAC1C;AAAA,QACA,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,MAC9D,CAAC;AACD,aAAO;AAAA,IACT;AAAA,EACF;AAGA,QAAM,eAAoB;AAAA,IACxB;AAAA,IACA,yBAAyB;AAAA,IACzB,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,cAAc;AAAA,IAChB;AAAA,EACF;AAGA,MAAI,YAAY,aAAa,eAAe,aAAa,mBAAmB;AAC1E,iBAAa,UAAU;AAAA,EACzB;AAEA,QAAM,YAAY,IAAIC,WAAU,YAAY;AAE5C,MAAI;AACF,UAAM;AAAA,MACJ,YAAY;AACV,cAAM,QAAQ;AACd,cAAM,WAA2B,CAAC,EAAE,MAAM,QAAQ,SAAS,OAAO,CAAC;AACnE,cAAM,UAAU,SAAS,OAAO;AAAA,UAC9B;AAAA,UACA,YAAY;AAAA;AAAA,UACZ;AAAA,UACA,aAAa;AAAA,QACf,CAAC;AACD,eAAO;AAAA,MACT;AAAA,MACA,EAAE,YAAY,EAAE;AAAA;AAAA,IAClB;AACA,WAAO;AAAA,EACT,SAAS,OAAO;AACd,aAAS,KAAK;AAEd,QACE,iBAAiB,SACjB,MAAM,QAAQ;AAAA,MACZ;AAAA,IACF,GACA;AACA,aAAO;AAAA,IACT;AACA,UAAM;AAAA,EACR;AACF;;;A/BvBA,eAAsB,SACpB,UACA,cACA,mBACA,OACA,QACA,SAiB2B;AAC3B,QAAM,eAAe,QAAQ,sBAAsB,gBAAgB;AACnE,QAAM,kBAAkB,aAAa,qBAAqB,QAAQ,KAAK;AAEvE,MAAI,CAAC,gBAAgB,WAAW,CAAC,gBAAgB,SAAS;AACxD,UAAM,kBAAkB,aAAa,aAAa,QAAQ,KAAK;AAC/D,QAAI,CAAC,iBAAiB;AACpB,YAAM,IAAI;AAAA,QACR,gBAAgB,SAAS,4BAA4B,QAAQ,KAAK;AAAA,MACpE;AAAA,IACF;AAEA,UAAY,KAAK,6BAA6B;AAAA,MAC5C,YAAY,QAAQ;AAAA,MACpB,OAAO,gBAAgB;AAAA,MACvB,mBAAmB,gBAAgB;AAAA,MACnC,kBAAkB,gBAAgB;AAAA,MAClC,WAAW,kBAAkB,GAAG;AAAA,IAClC,CAAC;AAED,oBAAgB,UAAU;AAC1B,oBAAgB,UAAU;AAAA,EAC5B;AAEA,QAAM,eAAe,gBAAgB;AACrC,QAAM,gBAAgB,aAAa;AAGnC,QAAM,iBAAiB,QAAQ;AAC/B,MAAI,kBAAkB,CAAC,eAAe,eAAe;AACnD,UAAM,iBAAiB;AAAA,MACrB,eAAe;AAAA,MACf,eAAe;AAAA,IACjB;AACA,UAAM,qBACJ,qBAAqB,sBAAsB,cAAc;AAE3D,mBAAe,gBAAgB;AAAA,MAC7B;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,QAAY,IAAI,kBAAkB;AAAA,IAChC,YAAY,QAAQ;AAAA,IACpB,mBAAmB;AAAA,IACnB,UAAU,aAAa;AAAA,IACvB,WAAW,CAAC,QAAQ,QAAQ,WAAW,OAAO,EAAE,SAAS,QAAQ,KAAK;AAAA,IACtE,kBAAkB,CAAC,CAAC,gBAAgB;AAAA,IACpC,gBAAgB,gBAAgB,eAAe;AAAA,IAC/C,WAAW,kBAAkB,GAAG;AAAA,EAClC,CAAC;AAED,QAAM,iBAAiB,kBAAkB;AACzC,QAAY,IAAI,qBAAqB;AAAA,IACnC,cAAc,SAAS;AAAA,IACvB,oBAAoB,aAAa,KAAK,GAAG,EAAE;AAAA,IAC3C,WAAW,MAAM;AAAA,IACjB,OAAO;AAAA,IACP,oBAAoB,QAAQ;AAAA,IAC5B,WAAW,kBAAkB,GAAG;AAAA,EAClC,CAAC;AAED,YAAU,UAAU;AAEpB,MAAI;AACF,UAAM,UACJ,QAAQ,mCAAmC;AAC7C,UAAM,eAAoB,EAAE,GAAG,QAAQ;AACvC,WAAO,aAAa;AACpB,WAAO,aAAa;AAEpB,UAAM,WAAW,MACf;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,QACE,GAAG;AAAA,QACH,OAAO;AAAA,QACP;AAAA,QACA;AAAA,MACF;AAAA;AAAA,IACF;AAEF,UAAM,SAAS,QAAQ,kCACnB,MAAM,SAAS,IACf,MAAM,QAAQ,UAAU,QAAQ;AAEpC,UAAY,IAAI,uBAAuB;AAAA,MACrC,SAAS,OAAO;AAAA,MAChB,YAAY,OAAO;AAAA,MACnB,gBAAgB,OAAO,QAAQ,SAAS,UAAU;AAAA,MAClD,WAAW,kBAAkB,GAAG;AAAA,IAClC,CAAC;AAGD,QAAI,gBAAgB,eAAe,kBAAkB,OAAO,YAAY;AACtE,2BAAqB;AAAA,QACnB,eAAe,cAAc;AAAA,QAC7B,OAAO;AAAA,MACT;AAEA,YAAY,IAAI,0BAA0B;AAAA,QACxC,gBAAgB,eAAe,cAAc;AAAA,QAC7C,YAAY,OAAO;AAAA,QACnB,WAAW,kBAAkB,GAAG;AAAA,MAClC,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,EACT,SAAS,OAAO;AAEd;AAAA,MACE;AAAA,MACA;AAAA,QACE,cAAc,SAAS;AAAA,QACvB,oBAAoB,aAAa,KAAK,GAAG,EAAE;AAAA,QAC3C,OAAO,QAAQ;AAAA,QACf,WAAW,MAAM;AAAA,QACjB,OAAO;AAAA,MACT;AAAA,MACA,gBAAgB;AAAA,IAClB;AAEA,UAAM;AAAA,EACR;AACF;AAIA,eAAe,0BACb,UACA,cACA,mBACA,OACA,QACA,SAU2B;AAC3B,QAAM,SAAS,gBAAgB;AAC/B,QAAM,eAAe,gBAAgB;AACrC,QAAM,iBAAiB,QAAQ;AAE/B,QAAM,eAAe,QAAQ,gBAAgB,aAAa,SAAS,MAAM;AACzE,MAAI;AAEJ,MAAI,cAAc;AAChB,eAAW,aAAa,YAAY,OAAO,mBAAmB;AAAA,EAChE,OAAO;AACL,eAAW,OAAO,mBAAmB;AAAA,EACvC;AAGA,MACE,aAAa,eACb,aAAa,cACb,aAAa,aACb,aAAa,kBACb;AACA,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,EAAE,GAAG,SAAS,cAAc,eAAe;AAAA,IAC7C;AAAA,EACF;AAGA,SAAO,YAAY,UAAU,cAAc,mBAAmB,OAAO,QAAQ;AAAA,IAC3E,GAAG;AAAA,IACH;AAAA,IACA;AAAA,EACF,CAAC;AACH;AAEA,eAAsB,WACpB,cACA,UACA,eAAyB,CAAC,GAC1B,QAC2B;AAE3B,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA,CAAC;AAAA;AAAA,IACD,UAAU,IAAI,gBAAgB,EAAE;AAAA,IAChC;AAAA,MACE,UAAU;AAAA,MACV,OAAO;AAAA,MACP,qBAAqB;AAAA,IACvB;AAAA,EACF;AACF;AAKA,eAAsB,WAAW;AAAA,EAC/B,eAAe,CAAC;AAAA,EAChB;AAAA,EACA;AAAA,EACA,sBAAsB;AAAA,EACtB;AACF,GAM8B;AAC5B,QAAM,WAAW;AAAA,IACf;AAAA,MACE,SAAS,EAAE,MAAM,QAAQ,SAAS,WAAW;AAAA,MAC7C,MAAM;AAAA,MACN,MAAMC,YAAW;AAAA,IACnB;AAAA,EACF;AAEA,SAAO,WAAW,SAAS,UAAU,cAAc,MAAM;AAC3D;",
6
+ "names": ["randomUUID", "randomUUID", "zodToJsonSchema", "zodToJsonSchema", "content", "zodToJsonSchema", "processResponsesStream", "zodToJsonSchema", "zodToJsonSchema", "assistantMessage", "convertAnthropicMessagesToOpenAIMessages", "nanoid", "randomUUID", "zodToJsonSchema", "convertAnthropicMessagesToOpenAIMessages", "assistantMessage", "s", "finalResponse", "message", "assistantMsg", "randomUUID", "Anthropic", "nanoid", "zodToJsonSchema", "getMaxTokensFromProfile", "asRecord", "Anthropic", "zodToJsonSchema", "getMaxTokensFromProfile", "nanoid", "_", "Anthropic", "Anthropic", "randomUUID"]
7
+ }
@@ -0,0 +1,13 @@
1
+ import {
2
+ fetchAnthropicModels,
3
+ queryLLM,
4
+ queryQuick,
5
+ verifyApiKey
6
+ } from "./chunk-BHDHXOXB.js";
7
+ import "./chunk-54KOYG5C.js";
8
+ export {
9
+ fetchAnthropicModels,
10
+ queryLLM,
11
+ queryQuick,
12
+ verifyApiKey
13
+ };