@fudrouter/fsrouter 0.6.71 → 0.6.73

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 (439) hide show
  1. package/dist/open-sse/config/appConstants.js +23 -79
  2. package/dist/open-sse/config/cliFingerprints.js +1 -1
  3. package/dist/open-sse/config/errorConfig.js +0 -11
  4. package/dist/open-sse/config/grokCli.js +10 -0
  5. package/dist/open-sse/config/kiroConstants.js +99 -46
  6. package/dist/open-sse/config/runtimeConfig.js +2 -0
  7. package/dist/open-sse/config/ttsModels.js +2 -0
  8. package/dist/open-sse/executors/antigravity.js +250 -164
  9. package/dist/open-sse/executors/base.js +16 -11
  10. package/dist/open-sse/executors/codex.js +269 -1108
  11. package/dist/open-sse/executors/commandCode.js +1 -1
  12. package/dist/open-sse/executors/commandcode.js +10 -4
  13. package/dist/open-sse/executors/cursor.js +96 -203
  14. package/dist/open-sse/executors/default.js +146 -244
  15. package/dist/open-sse/executors/github.js +128 -73
  16. package/dist/open-sse/executors/grok-cli.js +527 -94
  17. package/dist/open-sse/executors/grok-web.js +5 -7
  18. package/dist/open-sse/executors/index.js +12 -0
  19. package/dist/open-sse/executors/kiro.js +150 -61
  20. package/dist/open-sse/executors/opencode-go.js +12 -4
  21. package/dist/open-sse/executors/opencode.js +1 -1
  22. package/dist/open-sse/executors/perplexity-web.js +20 -96
  23. package/dist/open-sse/executors/qoder.js +28 -18
  24. package/dist/open-sse/executors/vertex.js +53 -7
  25. package/dist/open-sse/executors/xiaomi-tokenplan.js +6 -5
  26. package/dist/open-sse/handlers/chatCore/nonStreamingHandler.js +97 -85
  27. package/dist/open-sse/handlers/chatCore/requestDetail.js +32 -8
  28. package/dist/open-sse/handlers/chatCore/sseToJsonHandler.js +13 -7
  29. package/dist/open-sse/handlers/chatCore/streamingHandler.js +74 -25
  30. package/dist/open-sse/handlers/chatCore.js +35 -41
  31. package/dist/open-sse/handlers/embeddingProviders/index.js +1 -0
  32. package/dist/open-sse/handlers/embeddingProviders/openai.js +8 -16
  33. package/dist/open-sse/handlers/imageProviders/blackForestLabs.js +2 -21
  34. package/dist/open-sse/handlers/imageProviders/cloudflareAi.js +2 -30
  35. package/dist/open-sse/handlers/imageProviders/codex.js +2 -20
  36. package/dist/open-sse/handlers/imageProviders/comfyui.js +5 -18
  37. package/dist/open-sse/handlers/imageProviders/falAi.js +2 -22
  38. package/dist/open-sse/handlers/imageProviders/gemini.js +2 -16
  39. package/dist/open-sse/handlers/imageProviders/huggingface.js +2 -17
  40. package/dist/open-sse/handlers/imageProviders/index.js +3 -4
  41. package/dist/open-sse/handlers/imageProviders/leonardo.js +1 -1
  42. package/dist/open-sse/handlers/imageProviders/nanobanana.js +4 -23
  43. package/dist/open-sse/handlers/imageProviders/openai.js +15 -43
  44. package/dist/open-sse/handlers/imageProviders/runwayml.js +2 -26
  45. package/dist/open-sse/handlers/imageProviders/sdwebui.js +4 -20
  46. package/dist/open-sse/handlers/imageProviders/stabilityAi.js +2 -26
  47. package/dist/open-sse/handlers/imageProviders/weavy.js +1 -1
  48. package/dist/open-sse/handlers/search/chatSearch.js +60 -14
  49. package/dist/open-sse/handlers/ttsProviders/gemini.js +14 -3
  50. package/dist/open-sse/handlers/ttsProviders/index.js +4 -2
  51. package/dist/open-sse/handlers/ttsProviders/openai.js +4 -1
  52. package/dist/open-sse/handlers/ttsProviders/openrouter.js +7 -4
  53. package/dist/open-sse/handlers/videoCore.js +166 -0
  54. package/dist/open-sse/handlers/videoProviders/weavy.js +1 -1
  55. package/dist/open-sse/mcp-server/catalog.js +1 -1
  56. package/dist/open-sse/mcp-server/server.js +2 -2
  57. package/dist/open-sse/mcp-server/tools/advancedTools.js +2 -2
  58. package/dist/open-sse/mcp-server/tools/agentSkillTools.js +1 -1
  59. package/dist/open-sse/mcp-server/tools/compressionTools.js +4 -4
  60. package/dist/open-sse/mcp-server/tools/gamificationTools.js +10 -10
  61. package/dist/open-sse/mcp-server/tools/githubSkillTools.js +1 -1
  62. package/dist/open-sse/mcp-server/tools/memoryTools.js +3 -3
  63. package/dist/open-sse/mcp-server/tools/notionTools.js +2 -2
  64. package/dist/open-sse/mcp-server/tools/obsidianTools.js +2 -2
  65. package/dist/open-sse/mcp-server/tools/pickFastestModel.js +1 -1
  66. package/dist/open-sse/mcp-server/tools/pluginTools.js +4 -4
  67. package/dist/open-sse/mcp-server/tools/skillTools.js +2 -2
  68. package/dist/open-sse/providers/capabilities.js +24 -4
  69. package/dist/open-sse/providers/registry/alicode-intl.js +1 -1
  70. package/dist/open-sse/providers/registry/anthropic.js +1 -8
  71. package/dist/open-sse/providers/registry/codex.js +0 -9
  72. package/dist/open-sse/providers/registry/cohere.js +0 -2
  73. package/dist/open-sse/providers/registry/gemini.js +0 -2
  74. package/dist/open-sse/providers/registry/github.js +9 -6
  75. package/dist/open-sse/providers/registry/grok-cli.js +28 -18
  76. package/dist/open-sse/providers/registry/index.js +74 -80
  77. package/dist/open-sse/providers/registry/kiro.js +12 -0
  78. package/dist/open-sse/providers/registry/mistral.js +0 -3
  79. package/dist/open-sse/providers/registry/openai.js +0 -3
  80. package/dist/open-sse/providers/registry/perplexity.js +0 -2
  81. package/dist/open-sse/providers/registry/xai.js +5 -3
  82. package/dist/open-sse/rtk/autodetect.js +10 -2
  83. package/dist/open-sse/rtk/caveman.js +2 -93
  84. package/dist/open-sse/rtk/cavemanPrompts.js +34 -2
  85. package/dist/open-sse/rtk/constants.js +7 -2
  86. package/dist/open-sse/rtk/headroom.js +133 -0
  87. package/dist/open-sse/rtk/ponytail.js +1 -1
  88. package/dist/open-sse/rtk/registry.js +2 -0
  89. package/dist/open-sse/services/accountFallback.js +0 -108
  90. package/dist/open-sse/services/combo/quotaExhaustionCutoff.js +2 -2
  91. package/dist/open-sse/services/combo/quotaShareStrategy.js +1 -1
  92. package/dist/open-sse/services/combo/resolveAutoStrategy.js +1 -1
  93. package/dist/open-sse/services/combo/sessionStickiness.js +1 -1
  94. package/dist/open-sse/services/combo/targetSorters.js +2 -2
  95. package/dist/open-sse/services/combo/validateQuality.js +1 -1
  96. package/dist/open-sse/services/comboConfig.js +1 -1
  97. package/dist/open-sse/services/emergencyFallback.js +1 -1
  98. package/dist/open-sse/services/grokCliModels.js +127 -0
  99. package/dist/open-sse/services/model.js +7 -1
  100. package/dist/open-sse/services/provider.js +1 -1
  101. package/dist/open-sse/services/proxyAutoSelector.js +1 -1
  102. package/dist/open-sse/services/tokenRefresh/providers.js +3 -3
  103. package/dist/open-sse/services/usage/codex.js +148 -214
  104. package/dist/open-sse/services/usage/grok-cli.js +61 -7
  105. package/dist/open-sse/services/usage/misc.js +0 -19
  106. package/dist/open-sse/services/usage.js +0 -2
  107. package/dist/open-sse/translator/concerns/paramSupport.js +2 -2
  108. package/dist/open-sse/translator/concerns/thinkingUnified.js +6 -0
  109. package/dist/open-sse/translator/index.js +97 -59
  110. package/dist/open-sse/translator/request/claude-to-kiro.js +67 -40
  111. package/dist/open-sse/translator/request/openai-responses.js +1 -0
  112. package/dist/open-sse/translator/request/openai-to-commandcode.js +0 -4
  113. package/dist/open-sse/translator/request/openai-to-kiro.js +49 -20
  114. package/dist/open-sse/translator/response/commandcode-to-openai.js +0 -4
  115. package/dist/open-sse/utils/bypassHandler.js +18 -3
  116. package/dist/open-sse/utils/claudeCloaking.js +15 -5
  117. package/dist/open-sse/utils/cursorImages.js +1 -1
  118. package/dist/open-sse/utils/error.js +0 -17
  119. package/dist/open-sse/utils/keepaliveThreshold.js +4 -4
  120. package/dist/open-sse/utils/kiroSessionReplay.js +125 -0
  121. package/dist/open-sse/utils/noThinkingAlias.js +1 -1
  122. package/dist/open-sse/utils/proxyFetch.js +0 -1
  123. package/dist/open-sse/utils/reasoningContentInjector.js +4 -7
  124. package/dist/open-sse/utils/responsesStatePolicy.js +1 -1
  125. package/dist/open-sse/utils/responsesStreamHelpers.js +1 -0
  126. package/dist/open-sse/utils/sessionManager.js +49 -22
  127. package/dist/open-sse/utils/stream.js +54 -77
  128. package/dist/open-sse/utils/streamHandler.js +19 -15
  129. package/dist/open-sse/utils/streamHelpers.js +2 -17
  130. package/dist/open-sse/utils/usageTracking.js +103 -12
  131. package/open-sse/config/appConstants.js +23 -79
  132. package/open-sse/config/errorConfig.js +0 -11
  133. package/open-sse/config/grokCli.js +10 -0
  134. package/open-sse/config/kiroConstants.js +99 -46
  135. package/open-sse/config/runtimeConfig.js +2 -0
  136. package/open-sse/config/ttsModels.js +2 -0
  137. package/open-sse/executors/antigravity.js +250 -164
  138. package/open-sse/executors/base.js +16 -11
  139. package/open-sse/executors/codex.js +269 -1108
  140. package/open-sse/executors/commandcode.js +10 -4
  141. package/open-sse/executors/cursor.js +96 -203
  142. package/open-sse/executors/default.js +146 -244
  143. package/open-sse/executors/github.js +128 -73
  144. package/open-sse/executors/grok-cli.js +527 -94
  145. package/open-sse/executors/grok-web.js +5 -7
  146. package/open-sse/executors/index.js +12 -0
  147. package/open-sse/executors/kiro.js +150 -61
  148. package/open-sse/executors/opencode-go.js +12 -4
  149. package/open-sse/executors/opencode.js +1 -1
  150. package/open-sse/executors/perplexity-web.js +20 -96
  151. package/open-sse/executors/qoder.js +28 -18
  152. package/open-sse/executors/vertex.js +53 -7
  153. package/open-sse/executors/xiaomi-tokenplan.js +6 -5
  154. package/open-sse/handlers/chatCore/nonStreamingHandler.js +97 -85
  155. package/open-sse/handlers/chatCore/requestDetail.js +32 -8
  156. package/open-sse/handlers/chatCore/sseToJsonHandler.js +13 -7
  157. package/open-sse/handlers/chatCore/streamingHandler.js +74 -25
  158. package/open-sse/handlers/chatCore.js +35 -41
  159. package/open-sse/handlers/embeddingProviders/index.js +1 -0
  160. package/open-sse/handlers/embeddingProviders/openai.js +8 -16
  161. package/open-sse/handlers/imageProviders/blackForestLabs.js +2 -21
  162. package/open-sse/handlers/imageProviders/cloudflareAi.js +2 -30
  163. package/open-sse/handlers/imageProviders/codex.js +2 -20
  164. package/open-sse/handlers/imageProviders/comfyui.js +5 -18
  165. package/open-sse/handlers/imageProviders/falAi.js +2 -22
  166. package/open-sse/handlers/imageProviders/gemini.js +2 -16
  167. package/open-sse/handlers/imageProviders/huggingface.js +2 -17
  168. package/open-sse/handlers/imageProviders/index.js +3 -4
  169. package/open-sse/handlers/imageProviders/leonardo.js +1 -1
  170. package/open-sse/handlers/imageProviders/nanobanana.js +4 -23
  171. package/open-sse/handlers/imageProviders/openai.js +15 -43
  172. package/open-sse/handlers/imageProviders/runwayml.js +2 -26
  173. package/open-sse/handlers/imageProviders/sdwebui.js +4 -20
  174. package/open-sse/handlers/imageProviders/stabilityAi.js +2 -26
  175. package/open-sse/handlers/imageProviders/weavy.js +1 -1
  176. package/open-sse/handlers/search/chatSearch.js +60 -14
  177. package/open-sse/handlers/ttsProviders/gemini.js +14 -3
  178. package/open-sse/handlers/ttsProviders/index.js +4 -2
  179. package/open-sse/handlers/ttsProviders/openai.js +4 -1
  180. package/open-sse/handlers/ttsProviders/openrouter.js +7 -4
  181. package/open-sse/handlers/videoCore.js +166 -0
  182. package/open-sse/handlers/videoProviders/weavy.js +1 -1
  183. package/open-sse/mcp-server/audit.js +1 -1
  184. package/open-sse/mcp-server/catalog.js +2 -2
  185. package/open-sse/mcp-server/descriptionCompressor.js +1 -1
  186. package/open-sse/mcp-server/mcpCallerIdentity.js +1 -1
  187. package/open-sse/mcp-server/schemas/tools.js +1 -1
  188. package/open-sse/mcp-server/server.js +4 -4
  189. package/open-sse/mcp-server/tools/advancedTools.js +5 -5
  190. package/open-sse/mcp-server/tools/agentSkillTools.js +1 -1
  191. package/open-sse/mcp-server/tools/compressionTools.js +4 -4
  192. package/open-sse/mcp-server/tools/gamificationTools.js +10 -10
  193. package/open-sse/mcp-server/tools/githubSkillTools.js +1 -1
  194. package/open-sse/mcp-server/tools/memoryTools.js +3 -3
  195. package/open-sse/mcp-server/tools/notionTools.js +2 -2
  196. package/open-sse/mcp-server/tools/obsidianTools.js +2 -2
  197. package/open-sse/mcp-server/tools/pickFastestModel.js +3 -3
  198. package/open-sse/mcp-server/tools/pluginTools.js +4 -4
  199. package/open-sse/mcp-server/tools/skillTools.js +2 -2
  200. package/open-sse/providers/capabilities.js +24 -4
  201. package/open-sse/providers/registry/alicode-intl.js +1 -1
  202. package/open-sse/providers/registry/anthropic.js +1 -8
  203. package/open-sse/providers/registry/codex.js +0 -9
  204. package/open-sse/providers/registry/cohere.js +0 -2
  205. package/open-sse/providers/registry/gemini.js +0 -2
  206. package/open-sse/providers/registry/github.js +9 -6
  207. package/open-sse/providers/registry/grok-cli.js +28 -18
  208. package/open-sse/providers/registry/index.js +74 -80
  209. package/open-sse/providers/registry/kiro.js +12 -0
  210. package/open-sse/providers/registry/mistral.js +0 -3
  211. package/open-sse/providers/registry/openai.js +0 -3
  212. package/open-sse/providers/registry/perplexity.js +0 -2
  213. package/open-sse/providers/registry/xai.js +5 -3
  214. package/open-sse/rtk/autodetect.js +10 -2
  215. package/open-sse/rtk/caveman.js +2 -93
  216. package/open-sse/rtk/cavemanPrompts.js +34 -2
  217. package/open-sse/rtk/constants.js +7 -2
  218. package/open-sse/rtk/headroom.js +133 -0
  219. package/open-sse/rtk/ponytail.js +1 -1
  220. package/open-sse/rtk/registry.js +2 -0
  221. package/open-sse/services/accountFallback.js +0 -108
  222. package/open-sse/services/combo/quotaExhaustionCutoff.js +2 -2
  223. package/open-sse/services/combo/quotaShareStrategy.js +1 -1
  224. package/open-sse/services/combo/resolveAutoStrategy.js +1 -1
  225. package/open-sse/services/combo/sessionStickiness.js +1 -1
  226. package/open-sse/services/combo/shadowRouting.js +1 -1
  227. package/open-sse/services/combo/targetSorters.js +4 -4
  228. package/open-sse/services/combo/validateQuality.js +1 -1
  229. package/open-sse/services/evalRouting.js +1 -1
  230. package/open-sse/services/grokCliModels.js +127 -0
  231. package/open-sse/services/model.js +7 -1
  232. package/open-sse/services/modelCapabilities.js +1 -1
  233. package/open-sse/services/modelFamilyFallback.js +1 -1
  234. package/open-sse/services/provider.js +1 -1
  235. package/open-sse/services/providerCooldownTracker.js +1 -1
  236. package/open-sse/services/rateLimitManager.js +1 -1
  237. package/open-sse/services/tokenRefresh/providers.js +3 -3
  238. package/open-sse/services/usage/codex.js +148 -214
  239. package/open-sse/services/usage/grok-cli.js +61 -7
  240. package/open-sse/services/usage/misc.js +0 -19
  241. package/open-sse/services/usage.js +0 -2
  242. package/open-sse/translator/concerns/paramSupport.js +2 -2
  243. package/open-sse/translator/concerns/thinkingUnified.js +6 -0
  244. package/open-sse/translator/index.js +97 -59
  245. package/open-sse/translator/request/claude-to-kiro.js +67 -40
  246. package/open-sse/translator/request/openai-responses.js +1 -0
  247. package/open-sse/translator/request/openai-to-commandcode.js +0 -4
  248. package/open-sse/translator/request/openai-to-kiro.js +49 -20
  249. package/open-sse/translator/response/commandcode-to-openai.js +0 -4
  250. package/open-sse/utils/bypassHandler.js +18 -3
  251. package/open-sse/utils/claudeCloaking.js +15 -5
  252. package/open-sse/utils/error.js +0 -17
  253. package/open-sse/utils/kiroSessionReplay.js +125 -0
  254. package/open-sse/utils/logger.js +1 -1
  255. package/open-sse/utils/proxyFetch.js +0 -1
  256. package/open-sse/utils/reasoningContentInjector.js +4 -7
  257. package/open-sse/utils/responsesStreamHelpers.js +1 -0
  258. package/open-sse/utils/sessionManager.js +49 -22
  259. package/open-sse/utils/stream.js +54 -77
  260. package/open-sse/utils/streamHandler.js +19 -15
  261. package/open-sse/utils/streamHelpers.js +2 -17
  262. package/open-sse/utils/usageTracking.js +103 -12
  263. package/package.json +4 -7
  264. package/public/assets/{EndpointPageClient.CGB3HjDe.js → EndpointPageClient.LyNNvZ4z.js} +3 -3
  265. package/public/assets/{Loading.BhEzHe-X.js → Loading.Bj-WGl4k.js} +1 -1
  266. package/public/assets/{NoAuthProxyCard.Buvt0BVH.js → NoAuthProxyCard.qAv57b-0.js} +1 -1
  267. package/public/assets/{index.B-zMpSp_.js → index.CShjRV_B.js} +41 -41
  268. package/public/assets/{page.BINfJPNt.js → page.1qjqvrwX.js} +1 -1
  269. package/public/assets/{page.CfDkX9XZ.js → page.BSLJ4tx5.js} +1 -1
  270. package/public/assets/{page.D6TULIkh.js → page.BbO1pspY.js} +1 -1
  271. package/public/assets/page.BdmJ3yY3.js +5 -0
  272. package/public/assets/{page.Amtgxj_r.js → page.BnmTC5jG.js} +1 -1
  273. package/public/assets/{page.3QwV1pLl.js → page.C72FTTJr.js} +1 -1
  274. package/public/assets/{page.CdbMx9XI.js → page.CPZav1_c.js} +1 -1
  275. package/public/assets/{page.BONoTspJ.js → page.CQlVGoXg.js} +1 -1
  276. package/public/assets/{page.DgnlzpNx.js → page.CSs3-gdt.js} +1 -1
  277. package/public/assets/{page.BV28PqHr.js → page.CXd_R9yU.js} +1 -1
  278. package/public/assets/{page.5Aj6RvuD.js → page.CbkENBd5.js} +1 -1
  279. package/public/assets/{page.BAjUiqtJ.js → page.ChX1NqmC.js} +1 -1
  280. package/public/assets/page.Cj5h09Zo.js +1 -0
  281. package/public/assets/{page.CB__T51y.js → page.CnTop8Zt.js} +1 -1
  282. package/public/assets/{page.BMf0BFTW.js → page.CssmrzTT.js} +1 -1
  283. package/public/assets/{page.CVu_9TAu.js → page.CsxWmPoI.js} +1 -1
  284. package/public/assets/{page.ClXnUNhb.js → page.CzlQTyAL.js} +1 -1
  285. package/public/assets/{page.DAgwiopx.js → page.D1oKew1j.js} +1 -1
  286. package/public/assets/{page.BIG_uMBA.js → page.D5gj98Oe.js} +1 -1
  287. package/public/assets/{page.BW6Rv-_k.js → page.DBhu4Arl.js} +1 -1
  288. package/public/assets/page.DD_czjjP.js +1 -0
  289. package/public/assets/{page.BmOXfa4k.js → page.DPyOkPVo.js} +1 -1
  290. package/public/assets/{page.CTdMdgI4.js → page.DUI8kqOY.js} +1 -1
  291. package/public/assets/{page.BdPGDnx0.js → page.DVIHRbxB.js} +1 -1
  292. package/public/assets/{page.B9r7QI90.js → page.DX4Nno6M.js} +1 -1
  293. package/public/assets/{page.BCPmNscX.js → page.Dh5f0XJC.js} +1 -1
  294. package/public/assets/{page.u7XFxplU.js → page.DibhF7f-.js} +1 -1
  295. package/public/assets/{page.CDVZIbSe.js → page.DxMDTbSx.js} +1 -1
  296. package/public/assets/{page.Bb3E5EzI.js → page.Dx_GRRdT.js} +1 -1
  297. package/public/assets/{page.DhcizW_i.js → page.DzZLqI5Q.js} +1 -1
  298. package/public/assets/{page.CF5pD5lz.js → page.Ir7KvKcF.js} +1 -1
  299. package/public/assets/{page.Bj0au_ka.js → page.O2ddJYoT.js} +3 -3
  300. package/public/assets/{page.DIrcssm-.js → page.Qkkv8roc.js} +1 -1
  301. package/public/assets/{page.CrzjUbZg.js → page.i4KDuWcM.js} +1 -1
  302. package/public/assets/{page.1gncE-Vr.js → page.sOFOrxqq.js} +1 -1
  303. package/public/assets/{page.DskvkVIF.js → page.vla5Mzki.js} +1 -1
  304. package/public/index.html +1 -1
  305. package/public/assets/EndpointPageClient.Cee8kfmV.js +0 -6
  306. package/public/assets/EndpointPageClient.DdAfxJoK.js +0 -6
  307. package/public/assets/EndpointPageClient.GpJ_FKds.js +0 -6
  308. package/public/assets/Loading.DFkQ-Ly9.js +0 -1
  309. package/public/assets/Loading.DaQG3sHF.js +0 -1
  310. package/public/assets/Loading.QMOYJhLu.js +0 -1
  311. package/public/assets/NoAuthProxyCard.C18iZ3Fk.js +0 -89
  312. package/public/assets/NoAuthProxyCard.DyEjms20.js +0 -89
  313. package/public/assets/NoAuthProxyCard.VRP7gDcs.js +0 -89
  314. package/public/assets/index.CoYbjSIL.js +0 -89
  315. package/public/assets/index.DQDDDpp7.js +0 -89
  316. package/public/assets/index.KMEObSAk.js +0 -89
  317. package/public/assets/page.A7FRfarX.js +0 -1
  318. package/public/assets/page.B1a01Vfg.js +0 -1
  319. package/public/assets/page.B7h6EPVo.js +0 -1
  320. package/public/assets/page.BBMJAyy7.js +0 -1
  321. package/public/assets/page.BBSUQskO.js +0 -64
  322. package/public/assets/page.BFENid_V.js +0 -31
  323. package/public/assets/page.BJzBUr1v.js +0 -2
  324. package/public/assets/page.BKM5Up2Y.js +0 -1
  325. package/public/assets/page.BLUEyope.js +0 -1
  326. package/public/assets/page.BMeBT03D.js +0 -5
  327. package/public/assets/page.BQwH91-m.js +0 -1
  328. package/public/assets/page.BRgXbpJe.js +0 -1
  329. package/public/assets/page.BXq7Sixg.js +0 -1
  330. package/public/assets/page.Bbf1xxJj.js +0 -1
  331. package/public/assets/page.BcuklMLO.js +0 -2
  332. package/public/assets/page.Bi5OEfgq.js +0 -1
  333. package/public/assets/page.Bi9gIWN0.js +0 -1
  334. package/public/assets/page.BiLGOe6j.js +0 -1
  335. package/public/assets/page.BicDCwTa.js +0 -1
  336. package/public/assets/page.Bjd38gaf.js +0 -1
  337. package/public/assets/page.Bqk4tX-5.js +0 -1
  338. package/public/assets/page.BrrSjbBJ.js +0 -1
  339. package/public/assets/page.BsUeE2Y_.js +0 -1
  340. package/public/assets/page.BthVvW1e.js +0 -64
  341. package/public/assets/page.BxAWh20c.js +0 -1
  342. package/public/assets/page.C-2GmPmS.js +0 -4
  343. package/public/assets/page.C27wrrub.js +0 -1
  344. package/public/assets/page.C3FwsCq_.js +0 -23
  345. package/public/assets/page.C4RMU4Xv.js +0 -23
  346. package/public/assets/page.C7SC9vwX.js +0 -1
  347. package/public/assets/page.C8gTAwsH.js +0 -5
  348. package/public/assets/page.CECQKY1y.js +0 -5
  349. package/public/assets/page.CEN8xgCA.js +0 -1
  350. package/public/assets/page.CHG9mx5l.js +0 -1
  351. package/public/assets/page.CMUOu9fe.js +0 -1
  352. package/public/assets/page.CRex977Y.js +0 -5
  353. package/public/assets/page.CUsb0F5t.js +0 -1
  354. package/public/assets/page.CXE5AWV3.js +0 -1
  355. package/public/assets/page.CXIP8Wzi.js +0 -4
  356. package/public/assets/page.CXOuLQhq.js +0 -1
  357. package/public/assets/page.CXPMjDX9.js +0 -1
  358. package/public/assets/page.CXPPlybJ.js +0 -6
  359. package/public/assets/page.CYfjd9SF.js +0 -1
  360. package/public/assets/page.CZtbttgE.js +0 -1
  361. package/public/assets/page.CbOSwuwi.js +0 -1
  362. package/public/assets/page.CbWWyTC4.js +0 -1
  363. package/public/assets/page.CfXJWUgA.js +0 -1
  364. package/public/assets/page.CfdTLncK.js +0 -1
  365. package/public/assets/page.ChqEg6y-.js +0 -1
  366. package/public/assets/page.CmbatQd6.js +0 -4
  367. package/public/assets/page.Cp7XaHGI.js +0 -1
  368. package/public/assets/page.CqR-Z0pY.js +0 -1
  369. package/public/assets/page.CsLBZFbk.js +0 -1
  370. package/public/assets/page.CyqTG9Kn.js +0 -2
  371. package/public/assets/page.CzKSjT-r.js +0 -1
  372. package/public/assets/page.D1S50DvR.js +0 -1
  373. package/public/assets/page.D3b1o69R.js +0 -5
  374. package/public/assets/page.D5B_p_2E.js +0 -31
  375. package/public/assets/page.D8X-8LSd.js +0 -2
  376. package/public/assets/page.DA2dX7iN.js +0 -1
  377. package/public/assets/page.DBNjxgJS.js +0 -6
  378. package/public/assets/page.DEBBy5qz.js +0 -1
  379. package/public/assets/page.DEOXc6iv.js +0 -6
  380. package/public/assets/page.DG46DZcu.js +0 -1
  381. package/public/assets/page.DGAKp9YS.js +0 -1
  382. package/public/assets/page.DGico7sP.js +0 -1
  383. package/public/assets/page.DHBHS2oS.js +0 -1
  384. package/public/assets/page.DKdtfq8E.js +0 -2
  385. package/public/assets/page.DKj8qFYb.js +0 -1
  386. package/public/assets/page.DNofNt4p.js +0 -1
  387. package/public/assets/page.DVdv-E5d.js +0 -1
  388. package/public/assets/page.Da-kutqN.js +0 -1
  389. package/public/assets/page.DaW7T6nt.js +0 -1
  390. package/public/assets/page.DhPzWwGm.js +0 -1
  391. package/public/assets/page.Dju6Kwa5.js +0 -1
  392. package/public/assets/page.Dlh3Q_rt.js +0 -1
  393. package/public/assets/page.DmNhmYKk.js +0 -64
  394. package/public/assets/page.Dmvhu2ua.js +0 -1
  395. package/public/assets/page.Dp30ZzXE.js +0 -1
  396. package/public/assets/page.DsY8qNEU.js +0 -1
  397. package/public/assets/page.DtGEStU7.js +0 -1
  398. package/public/assets/page.DuXsnK8A.js +0 -1
  399. package/public/assets/page.DwU6Ubqf.js +0 -1
  400. package/public/assets/page.FmrKiZlG.js +0 -2
  401. package/public/assets/page.GSAm83Cv.js +0 -6
  402. package/public/assets/page.IgH-AWcu.js +0 -1
  403. package/public/assets/page.Ii8wGSnt.js +0 -1
  404. package/public/assets/page.KtURQA9Q.js +0 -1
  405. package/public/assets/page.NFGJtdfx.js +0 -1
  406. package/public/assets/page.QPaIzKAa.js +0 -1
  407. package/public/assets/page.QuBXfL80.js +0 -1
  408. package/public/assets/page.S02TdGZT.js +0 -1
  409. package/public/assets/page.V3CmUOJF.js +0 -1
  410. package/public/assets/page.VClP2n2B.js +0 -1
  411. package/public/assets/page.Vo9Oe8DJ.js +0 -1
  412. package/public/assets/page.WIMFvXoG.js +0 -1
  413. package/public/assets/page.XUya1XZj.js +0 -23
  414. package/public/assets/page.XqKIvnmq.js +0 -31
  415. package/public/assets/page.aAUPKg0H.js +0 -1
  416. package/public/assets/page.aRQdaBbf.js +0 -1
  417. package/public/assets/page.e-Zxfi03.js +0 -1
  418. package/public/assets/page.e-cA5aB5.js +0 -6
  419. package/public/assets/page.eNXd9f58.js +0 -6
  420. package/public/assets/page.gj2B5h2d.js +0 -1
  421. package/public/assets/page.gvZgqycR.js +0 -1
  422. package/public/assets/page.jvowBQYJ.js +0 -1
  423. package/public/assets/page.k_WzlZwU.js +0 -5
  424. package/public/assets/page.qK1RUb_S.js +0 -1
  425. package/public/assets/page.ryYPRTww.js +0 -1
  426. package/public/assets/page.xm98_0dX.js +0 -5
  427. package/public/assets/page.yjCJ-4Uh.js +0 -1
  428. package/public/providers/agentrouter.webp +0 -0
  429. package/public/providers/codebuddy-cn.webp +0 -0
  430. package/public/providers/gigachat.webp +0 -0
  431. package/public/providers/heroku.webp +0 -0
  432. package/public/providers/kimchi.webp +0 -0
  433. package/public/providers/llamagate.webp +0 -0
  434. package/public/providers/mimo-free.webp +0 -0
  435. package/public/providers/nanogpt.webp +0 -0
  436. package/public/providers/nscale.webp +0 -0
  437. package/public/providers/ovhcloud.webp +0 -0
  438. package/public/providers/predibase.webp +0 -0
  439. package/public/providers/zcode.webp +0 -0
@@ -1,5 +1,5 @@
1
1
  import { randomUUID } from "node:crypto";
2
- import { isVisionModelId } from '../../../dist/shared/constants/visionModels.js';
2
+ import { isVisionModelId } from '../../dist/shared/constants/visionModels.js';
3
3
  import { REGISTRY } from "../config/providerRegistry.ts";
4
4
  import { BaseExecutor, mergeUpstreamExtraHeaders } from "./base.ts";
5
5
  const COMMAND_CODE_VERSION = process.env.COMMAND_CODE_VERSION?.trim() || "0.33.2";
@@ -1,7 +1,8 @@
1
1
  import { randomUUID } from "crypto";
2
2
  import { BaseExecutor } from "./base.js";
3
3
  import { PROVIDERS } from "../config/providers.js";
4
- import { convertCommandCodeToOpenAI } from "../translator/response/commandcode-to-openai.js";
4
+ import { commandCodeToOpenAIResponse } from "../translator/response/commandcode-to-openai.js";
5
+ import { SSE_DONE } from "../utils/sseConstants.js";
5
6
 
6
7
  /**
7
8
  * CommandCodeExecutor — talks to https://api.commandcode.ai/alpha/generate
@@ -19,6 +20,11 @@ export class CommandCodeExecutor extends BaseExecutor {
19
20
  super("commandcode", PROVIDERS.commandcode);
20
21
  }
21
22
 
23
+ transformRequest(model, body, stream, credentials) {
24
+ body.stream = true;
25
+ return body;
26
+ }
27
+
22
28
  buildHeaders(credentials, stream = true) {
23
29
  const headers = {
24
30
  "Content-Type": "application/json",
@@ -65,15 +71,15 @@ function wrapNdjsonAsOpenAISse(originalResponse, model) {
65
71
  const trimmed = line.trim();
66
72
  if (!trimmed) continue;
67
73
  // Translate AI SDK v5 NDJSON line to one or more OpenAI chunks
68
- emitChunks(convertCommandCodeToOpenAI(trimmed, state), controller);
74
+ emitChunks(commandCodeToOpenAIResponse(trimmed, state), controller);
69
75
  }
70
76
  },
71
77
  flush(controller) {
72
78
  const trimmed = buffer.trim();
73
79
  if (trimmed) {
74
- emitChunks(convertCommandCodeToOpenAI(trimmed, state), controller);
80
+ emitChunks(commandCodeToOpenAIResponse(trimmed, state), controller);
75
81
  }
76
- controller.enqueue(encoder.encode("data: [DONE]\n\n"));
82
+ controller.enqueue(encoder.encode(SSE_DONE));
77
83
  },
78
84
  });
79
85
 
@@ -8,6 +8,8 @@ import {
8
8
  } from "../utils/cursorProtobuf.js";
9
9
  import { buildCursorHeaders } from "../utils/cursorChecksum.js";
10
10
  import { estimateUsage } from "../utils/usageTracking.js";
11
+ import { SSE_DONE, SSE_HEADERS } from "../utils/sseConstants.js";
12
+ import { chatChunkSse } from "../utils/sse.js";
11
13
  import { FORMATS } from "../translator/formats.js";
12
14
  import { proxyAwareFetch } from "../utils/proxyFetch.js";
13
15
  import zlib from "zlib";
@@ -98,6 +100,32 @@ function decompressPayload(payload, flags) {
98
100
  return payload;
99
101
  }
100
102
 
103
+ // Read one cursor protobuf frame: header + bounds + decompress. Returns status + payload + new offset.
104
+ function readCursorFrame(buffer, offset, frameNum, tag) {
105
+ if (offset + 5 > buffer.length) {
106
+ debugLog(`[CURSOR BUFFER${tag}] Reached end, offset=${offset}, remaining=${buffer.length - offset}`);
107
+ return { status: "done" };
108
+ }
109
+
110
+ const flags = buffer[offset];
111
+ const length = buffer.readUInt32BE(offset + 1);
112
+ debugLog(`[CURSOR BUFFER${tag}] Frame ${frameNum + 1}: flags=0x${flags.toString(16).padStart(2, "0")}, length=${length}`);
113
+
114
+ if (offset + 5 + length > buffer.length) {
115
+ debugLog(`[CURSOR BUFFER${tag}] Incomplete frame, offset=${offset}, length=${length}, buffer.length=${buffer.length}`);
116
+ return { status: "done" };
117
+ }
118
+
119
+ let payload = buffer.slice(offset + 5, offset + 5 + length);
120
+ const newOffset = offset + 5 + length;
121
+ payload = decompressPayload(payload, flags);
122
+ if (!payload) {
123
+ debugLog(`[CURSOR BUFFER${tag}] Frame ${frameNum + 1}: decompression failed, skipping`);
124
+ return { status: "skip", offset: newOffset };
125
+ }
126
+ return { status: "ok", payload, offset: newOffset };
127
+ }
128
+
101
129
  function createErrorResponse(jsonError) {
102
130
  const errorMsg = jsonError?.error?.details?.[0]?.debug?.details?.title
103
131
  || jsonError?.error?.details?.[0]?.debug?.details?.detail
@@ -141,7 +169,7 @@ export class CursorExecutor extends BaseExecutor {
141
169
 
142
170
  transformRequest(model, body, stream, credentials) {
143
171
  // Messages are already translated by chatCore (claude→openai→cursor)
144
- // Do NOT call buildCursorRequest again — double-translation drops tool_results
172
+ // Do NOT call openaiToCursorRequest again — double-translation drops tool_results
145
173
  const messages = body.messages || [];
146
174
  const tools = body.tools || [];
147
175
  const reasoningEffort = body.reasoning_effort || null;
@@ -286,36 +314,12 @@ export class CursorExecutor extends BaseExecutor {
286
314
  debugLog(`[CURSOR BUFFER] Total length: ${buffer.length} bytes`);
287
315
 
288
316
  while (offset < buffer.length) {
289
- if (offset + 5 > buffer.length) {
290
- debugLog(
291
- `[CURSOR BUFFER] Reached end, offset=${offset}, remaining=${buffer.length - offset}`
292
- );
293
- break;
294
- }
295
-
296
- const flags = buffer[offset];
297
- const length = buffer.readUInt32BE(offset + 1);
298
-
299
- debugLog(
300
- `[CURSOR BUFFER] Frame ${frameCount + 1}: flags=0x${flags.toString(16).padStart(2, "0")}, length=${length}`
301
- );
302
-
303
- if (offset + 5 + length > buffer.length) {
304
- debugLog(
305
- `[CURSOR BUFFER] Incomplete frame, offset=${offset}, length=${length}, buffer.length=${buffer.length}`
306
- );
307
- break;
308
- }
309
-
310
- let payload = buffer.slice(offset + 5, offset + 5 + length);
311
- offset += 5 + length;
317
+ const frame = readCursorFrame(buffer, offset, frameCount, "");
318
+ if (frame.status === "done") break;
319
+ offset = frame.offset;
312
320
  frameCount++;
313
-
314
- payload = decompressPayload(payload, flags);
315
- if (!payload) {
316
- debugLog(`[CURSOR BUFFER] Frame ${frameCount}: decompression failed, skipping`);
317
- continue;
318
- }
321
+ if (frame.status === "skip") continue;
322
+ const payload = frame.payload;
319
323
 
320
324
  // Check for JSON error frames (byte guard: skip toString on non-JSON frames)
321
325
  if (payload.length > 0 && payload[0] === 0x7b) {
@@ -466,36 +470,12 @@ export class CursorExecutor extends BaseExecutor {
466
470
  debugLog(`[CURSOR BUFFER SSE] Total length: ${buffer.length} bytes`);
467
471
 
468
472
  while (offset < buffer.length) {
469
- if (offset + 5 > buffer.length) {
470
- debugLog(
471
- `[CURSOR BUFFER SSE] Reached end, offset=${offset}, remaining=${buffer.length - offset}`
472
- );
473
- break;
474
- }
475
-
476
- const flags = buffer[offset];
477
- const length = buffer.readUInt32BE(offset + 1);
478
-
479
- debugLog(
480
- `[CURSOR BUFFER SSE] Frame ${frameCount + 1}: flags=0x${flags.toString(16).padStart(2, "0")}, length=${length}`
481
- );
482
-
483
- if (offset + 5 + length > buffer.length) {
484
- debugLog(
485
- `[CURSOR BUFFER SSE] Incomplete frame, offset=${offset}, length=${length}, buffer.length=${buffer.length}`
486
- );
487
- break;
488
- }
489
-
490
- let payload = buffer.slice(offset + 5, offset + 5 + length);
491
- offset += 5 + length;
473
+ const frame = readCursorFrame(buffer, offset, frameCount, " SSE");
474
+ if (frame.status === "done") break;
475
+ offset = frame.offset;
492
476
  frameCount++;
493
-
494
- payload = decompressPayload(payload, flags);
495
- if (!payload) {
496
- debugLog(`[CURSOR BUFFER SSE] Frame ${frameCount}: decompression failed, skipping`);
497
- continue;
498
- }
477
+ if (frame.status === "skip") continue;
478
+ const payload = frame.payload;
499
479
 
500
480
  // Check for JSON error frames (byte-guard: only decode if starts with '{')
501
481
  if (payload[0] === 0x7b) {
@@ -542,21 +522,7 @@ export class CursorExecutor extends BaseExecutor {
542
522
  const tc = result.toolCall;
543
523
 
544
524
  if (chunks.length === 0) {
545
- chunks.push(
546
- `data: ${JSON.stringify({
547
- id: responseId,
548
- object: "chat.completion.chunk",
549
- created,
550
- model,
551
- choices: [
552
- {
553
- index: 0,
554
- delta: { role: "assistant", content: "" },
555
- finish_reason: null
556
- }
557
- ]
558
- })}\n\n`
559
- );
525
+ chunks.push(chatChunkSse({ id: responseId, created, model, delta: { role: "assistant", content: "" } }));
560
526
  }
561
527
 
562
528
  if (toolCallsMap.has(tc.id)) {
@@ -569,33 +535,22 @@ export class CursorExecutor extends BaseExecutor {
569
535
  // Stream the delta arguments
570
536
  if (tc.function.arguments) {
571
537
  emittedToolCallIds.add(tc.id);
572
- chunks.push(
573
- `data: ${JSON.stringify({
574
- id: responseId,
575
- object: "chat.completion.chunk",
576
- created,
577
- model,
578
- choices: [
538
+ chunks.push(chatChunkSse({
539
+ id: responseId, created, model,
540
+ delta: {
541
+ tool_calls: [
579
542
  {
580
- index: 0,
581
- delta: {
582
- tool_calls: [
583
- {
584
- index: existing.index,
585
- id: tc.id,
586
- type: "function",
587
- function: {
588
- name: tc.function.name,
589
- arguments: tc.function.arguments
590
- }
591
- }
592
- ]
593
- },
594
- finish_reason: null
543
+ index: existing.index,
544
+ id: tc.id,
545
+ type: "function",
546
+ function: {
547
+ name: tc.function.name,
548
+ arguments: tc.function.arguments
549
+ }
595
550
  }
596
551
  ]
597
- })}\n\n`
598
- );
552
+ }
553
+ }));
599
554
  }
600
555
  } else {
601
556
  // New tool call - assign index and add to map
@@ -606,56 +561,34 @@ export class CursorExecutor extends BaseExecutor {
606
561
 
607
562
  // Stream initial tool call with name
608
563
  emittedToolCallIds.add(tc.id);
609
- chunks.push(
610
- `data: ${JSON.stringify({
611
- id: responseId,
612
- object: "chat.completion.chunk",
613
- created,
614
- model,
615
- choices: [
564
+ chunks.push(chatChunkSse({
565
+ id: responseId, created, model,
566
+ delta: {
567
+ tool_calls: [
616
568
  {
617
- index: 0,
618
- delta: {
619
- tool_calls: [
620
- {
621
- index: toolCallIndex,
622
- id: tc.id,
623
- type: "function",
624
- function: {
625
- name: tc.function.name,
626
- arguments: tc.function.arguments
627
- }
628
- }
629
- ]
630
- },
631
- finish_reason: null
569
+ index: toolCallIndex,
570
+ id: tc.id,
571
+ type: "function",
572
+ function: {
573
+ name: tc.function.name,
574
+ arguments: tc.function.arguments
575
+ }
632
576
  }
633
577
  ]
634
- })}\n\n`
635
- );
578
+ }
579
+ }));
636
580
  }
637
581
  }
638
582
 
639
583
  if (result.text) {
640
584
  totalContent += result.text;
641
- chunks.push(
642
- `data: ${JSON.stringify({
643
- id: responseId,
644
- object: "chat.completion.chunk",
645
- created,
646
- model,
647
- choices: [
648
- {
649
- index: 0,
650
- delta:
651
- chunks.length === 0 && toolCalls.length === 0
652
- ? { role: "assistant", content: result.text }
653
- : { content: result.text },
654
- finish_reason: null
655
- }
656
- ]
657
- })}\n\n`
658
- );
585
+ chunks.push(chatChunkSse({
586
+ id: responseId, created, model,
587
+ delta:
588
+ chunks.length === 0 && toolCalls.length === 0
589
+ ? { role: "assistant", content: result.text }
590
+ : { content: result.text }
591
+ }));
659
592
  }
660
593
 
661
594
  if (isComposerModel(model) && result.thinking) {
@@ -665,24 +598,13 @@ export class CursorExecutor extends BaseExecutor {
665
598
  const deltaContent = visibleContent.slice(emittedComposerThinkingContentLength);
666
599
  emittedComposerThinkingContentLength = visibleContent.length;
667
600
  totalContent += deltaContent;
668
- chunks.push(
669
- `data: ${JSON.stringify({
670
- id: responseId,
671
- object: "chat.completion.chunk",
672
- created,
673
- model,
674
- choices: [
675
- {
676
- index: 0,
677
- delta:
678
- chunks.length === 0 && toolCalls.length === 0
679
- ? { role: "assistant", content: deltaContent }
680
- : { content: deltaContent },
681
- finish_reason: null
682
- }
683
- ]
684
- })}\n\n`
685
- );
601
+ chunks.push(chatChunkSse({
602
+ id: responseId, created, model,
603
+ delta:
604
+ chunks.length === 0 && toolCalls.length === 0
605
+ ? { role: "assistant", content: deltaContent }
606
+ : { content: deltaContent }
607
+ }));
686
608
  }
687
609
  }
688
610
  }
@@ -708,53 +630,28 @@ export class CursorExecutor extends BaseExecutor {
708
630
 
709
631
  // Emit SSE chunk for the finalized tool call if not already emitted
710
632
  if (!emittedToolCallIds.has(tc.id)) {
711
- chunks.push(
712
- `data: ${JSON.stringify({
713
- id: responseId,
714
- object: "chat.completion.chunk",
715
- created,
716
- model,
717
- choices: [
633
+ chunks.push(chatChunkSse({
634
+ id: responseId, created, model,
635
+ delta: {
636
+ tool_calls: [
718
637
  {
719
- index: 0,
720
- delta: {
721
- tool_calls: [
722
- {
723
- index: toolCallIndex,
724
- id: tc.id,
725
- type: "function",
726
- function: {
727
- name: tc.function.name,
728
- arguments: tc.function.arguments
729
- }
730
- }
731
- ]
732
- },
733
- finish_reason: null
638
+ index: toolCallIndex,
639
+ id: tc.id,
640
+ type: "function",
641
+ function: {
642
+ name: tc.function.name,
643
+ arguments: tc.function.arguments
644
+ }
734
645
  }
735
646
  ]
736
- })}\n\n`
737
- );
647
+ }
648
+ }));
738
649
  }
739
650
  }
740
651
  }
741
652
 
742
653
  if (chunks.length === 0 && toolCalls.length === 0) {
743
- chunks.push(
744
- `data: ${JSON.stringify({
745
- id: responseId,
746
- object: "chat.completion.chunk",
747
- created,
748
- model,
749
- choices: [
750
- {
751
- index: 0,
752
- delta: { role: "assistant", content: "" },
753
- finish_reason: null
754
- }
755
- ]
756
- })}\n\n`
757
- );
654
+ chunks.push(chatChunkSse({ id: responseId, created, model, delta: { role: "assistant", content: "" } }));
758
655
  }
759
656
 
760
657
  const usage = estimateUsage(body, totalContent.length, FORMATS.OPENAI);
@@ -775,15 +672,11 @@ export class CursorExecutor extends BaseExecutor {
775
672
  usage
776
673
  })}\n\n`
777
674
  );
778
- chunks.push("data: [DONE]\n\n");
675
+ chunks.push(SSE_DONE);
779
676
 
780
677
  return new Response(chunks.join(""), {
781
678
  status: 200,
782
- headers: {
783
- "Content-Type": "text/event-stream",
784
- "Cache-Control": "no-cache",
785
- "Connection": "keep-alive"
786
- }
679
+ headers: { ...SSE_HEADERS }
787
680
  });
788
681
  }
789
682