@fudrouter/fsrouter 0.6.63 → 0.6.64

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 (559) hide show
  1. package/bin/rewriteSseImports.js +5 -1
  2. package/dist/open-sse/executors/cliproxyapi.js +2 -2
  3. package/dist/open-sse/services/rateLimitManager.js +4 -4
  4. package/package.json +1 -1
  5. package/open-sse/AGENTS.md +0 -39
  6. package/open-sse/config/anthropicHeaders.js +0 -87
  7. package/open-sse/config/appConstants.js +0 -238
  8. package/open-sse/config/audioRegistry.js +0 -506
  9. package/open-sse/config/cliFingerprints.js +0 -304
  10. package/open-sse/config/codexInstructions.js +0 -119
  11. package/open-sse/config/codexQuotaScopes.js +0 -42
  12. package/open-sse/config/constants.js +0 -4
  13. package/open-sse/config/contextEditing.js +0 -68
  14. package/open-sse/config/credentialLoader.js +0 -83
  15. package/open-sse/config/defaultThinkingSignature.js +0 -12
  16. package/open-sse/config/embeddingRegistry.js +0 -264
  17. package/open-sse/config/errorConfig.js +0 -96
  18. package/open-sse/config/freeModelCatalog.data.js +0 -121
  19. package/open-sse/config/freeModelCatalog.js +0 -90
  20. package/open-sse/config/freeTierCatalog.js +0 -81
  21. package/open-sse/config/googleTtsLanguages.js +0 -62
  22. package/open-sse/config/imageParamDefs.js +0 -360
  23. package/open-sse/config/imageRegistry.js +0 -493
  24. package/open-sse/config/kiroConstants.js +0 -268
  25. package/open-sse/config/mediaConfig.js +0 -27
  26. package/open-sse/config/mediaServiceKinds.js +0 -71
  27. package/open-sse/config/models.js +0 -13
  28. package/open-sse/config/moderationRegistry.js +0 -71
  29. package/open-sse/config/musicRegistry.js +0 -99
  30. package/open-sse/config/ocrRegistry.js +0 -61
  31. package/open-sse/config/ollamaModels.js +0 -19
  32. package/open-sse/config/providerErrorRules.js +0 -114
  33. package/open-sse/config/providerFieldStrips.js +0 -35
  34. package/open-sse/config/providerHeaderProfiles.js +0 -191
  35. package/open-sse/config/providerModels.js +0 -106
  36. package/open-sse/config/providerRegistry.js +0 -16
  37. package/open-sse/config/providers.js +0 -19
  38. package/open-sse/config/registryUtils.js +0 -106
  39. package/open-sse/config/rerankRegistry.js +0 -177
  40. package/open-sse/config/runtimeConfig.js +0 -96
  41. package/open-sse/config/runway.js +0 -39
  42. package/open-sse/config/searchRegistry.js +0 -153
  43. package/open-sse/config/toolCloaking.js +0 -199
  44. package/open-sse/config/ttsModels.js +0 -129
  45. package/open-sse/config/videoRegistry.js +0 -207
  46. package/open-sse/executors/adapta-web.js +0 -435
  47. package/open-sse/executors/antigravity.js +0 -534
  48. package/open-sse/executors/antigravityUpstreamError.js +0 -13
  49. package/open-sse/executors/auggie.js +0 -437
  50. package/open-sse/executors/azure-openai.js +0 -32
  51. package/open-sse/executors/azure.js +0 -57
  52. package/open-sse/executors/base.js +0 -181
  53. package/open-sse/executors/bedrock.js +0 -633
  54. package/open-sse/executors/blackbox-web.js +0 -578
  55. package/open-sse/executors/chatgpt-web.js +0 -2042
  56. package/open-sse/executors/chipotle.js +0 -357
  57. package/open-sse/executors/claude-web-with-auto-refresh.js +0 -73
  58. package/open-sse/executors/claude-web.js +0 -586
  59. package/open-sse/executors/cliproxyapi.js +0 -296
  60. package/open-sse/executors/cloudflare-ai.js +0 -46
  61. package/open-sse/executors/codebuddy-cn.js +0 -40
  62. package/open-sse/executors/codex.js +0 -1324
  63. package/open-sse/executors/commandCode.js +0 -558
  64. package/open-sse/executors/commandcode.js +0 -88
  65. package/open-sse/executors/copilot-m365-connection.js +0 -176
  66. package/open-sse/executors/copilot-m365-frames.js +0 -192
  67. package/open-sse/executors/copilot-m365-web.js +0 -299
  68. package/open-sse/executors/copilot-web.js +0 -580
  69. package/open-sse/executors/cursor.js +0 -795
  70. package/open-sse/executors/deepseek-web-with-auto-refresh.js +0 -150
  71. package/open-sse/executors/deepseek-web.js +0 -875
  72. package/open-sse/executors/default.js +0 -430
  73. package/open-sse/executors/devin-cli.js +0 -351
  74. package/open-sse/executors/doubao-web.js +0 -550
  75. package/open-sse/executors/duckduckgo-web.js +0 -629
  76. package/open-sse/executors/forceResponsesUpstream.js +0 -33
  77. package/open-sse/executors/gemini-business.js +0 -320
  78. package/open-sse/executors/gemini-cli.js +0 -89
  79. package/open-sse/executors/gemini-web.js +0 -297
  80. package/open-sse/executors/github.js +0 -379
  81. package/open-sse/executors/gitlab.js +0 -569
  82. package/open-sse/executors/glm.js +0 -361
  83. package/open-sse/executors/grok-cli.js +0 -119
  84. package/open-sse/executors/grok-web.js +0 -345
  85. package/open-sse/executors/huggingchat.js +0 -467
  86. package/open-sse/executors/iflow.js +0 -108
  87. package/open-sse/executors/index.js +0 -78
  88. package/open-sse/executors/inner-ai.js +0 -527
  89. package/open-sse/executors/kimchi.js +0 -123
  90. package/open-sse/executors/kimi-web.js +0 -325
  91. package/open-sse/executors/kimi.js +0 -97
  92. package/open-sse/executors/kiro.js +0 -503
  93. package/open-sse/executors/kiroThinking.js +0 -44
  94. package/open-sse/executors/lmarena.js +0 -395
  95. package/open-sse/executors/mimo-free.js +0 -167
  96. package/open-sse/executors/mimocode.js +0 -392
  97. package/open-sse/executors/ninerouter.js +0 -155
  98. package/open-sse/executors/nlpcloud.js +0 -438
  99. package/open-sse/executors/ollama-local.js +0 -14
  100. package/open-sse/executors/opencode-go.js +0 -41
  101. package/open-sse/executors/opencode.js +0 -32
  102. package/open-sse/executors/perplexity-web.js +0 -581
  103. package/open-sse/executors/poe-web.js +0 -133
  104. package/open-sse/executors/pollinations.js +0 -95
  105. package/open-sse/executors/puter.js +0 -31
  106. package/open-sse/executors/qoder.js +0 -448
  107. package/open-sse/executors/qwen-web.js +0 -372
  108. package/open-sse/executors/qwen.js +0 -129
  109. package/open-sse/executors/t3-chat-web.js +0 -417
  110. package/open-sse/executors/theoldllm.js +0 -290
  111. package/open-sse/executors/trae.js +0 -418
  112. package/open-sse/executors/v0-vercel-web.js +0 -141
  113. package/open-sse/executors/venice-web.js +0 -142
  114. package/open-sse/executors/vertex.js +0 -131
  115. package/open-sse/executors/vertexMedia.js +0 -236
  116. package/open-sse/executors/windsurf.js +0 -560
  117. package/open-sse/executors/xai.js +0 -46
  118. package/open-sse/executors/xiaomi-tokenplan.js +0 -19
  119. package/open-sse/executors/yuanbao-web.js +0 -385
  120. package/open-sse/executors/zed-hosted.js +0 -281
  121. package/open-sse/executors/zenmux-free.js +0 -247
  122. package/open-sse/handlers/audioSpeech.js +0 -759
  123. package/open-sse/handlers/audioTranscription.js +0 -395
  124. package/open-sse/handlers/audioTranslation.js +0 -181
  125. package/open-sse/handlers/chatCore/nonStreamingHandler.js +0 -300
  126. package/open-sse/handlers/chatCore/requestDetail.js +0 -102
  127. package/open-sse/handlers/chatCore/sseToJsonHandler.js +0 -231
  128. package/open-sse/handlers/chatCore/streamingHandler.js +0 -95
  129. package/open-sse/handlers/chatCore.js +0 -404
  130. package/open-sse/handlers/embeddingProviders/_base.js +0 -4
  131. package/open-sse/handlers/embeddingProviders/gemini.js +0 -54
  132. package/open-sse/handlers/embeddingProviders/index.js +0 -23
  133. package/open-sse/handlers/embeddingProviders/openai.js +0 -39
  134. package/open-sse/handlers/embeddingProviders/openaiCompatNode.js +0 -13
  135. package/open-sse/handlers/embeddingsCore.js +0 -126
  136. package/open-sse/handlers/fetch/index.js +0 -237
  137. package/open-sse/handlers/imageGenerationCore.js +0 -230
  138. package/open-sse/handlers/imageProviders/_base.js +0 -31
  139. package/open-sse/handlers/imageProviders/antigravity.js +0 -73
  140. package/open-sse/handlers/imageProviders/blackForestLabs.js +0 -63
  141. package/open-sse/handlers/imageProviders/cloudflareAi.js +0 -207
  142. package/open-sse/handlers/imageProviders/codex.js +0 -217
  143. package/open-sse/handlers/imageProviders/comfyui.js +0 -25
  144. package/open-sse/handlers/imageProviders/falAi.js +0 -62
  145. package/open-sse/handlers/imageProviders/gemini.js +0 -40
  146. package/open-sse/handlers/imageProviders/huggingface.js +0 -38
  147. package/open-sse/handlers/imageProviders/index.js +0 -44
  148. package/open-sse/handlers/imageProviders/leonardo.js +0 -435
  149. package/open-sse/handlers/imageProviders/nanobanana.js +0 -79
  150. package/open-sse/handlers/imageProviders/openai.js +0 -61
  151. package/open-sse/handlers/imageProviders/runwayml.js +0 -72
  152. package/open-sse/handlers/imageProviders/sdwebui.js +0 -36
  153. package/open-sse/handlers/imageProviders/stabilityAi.js +0 -59
  154. package/open-sse/handlers/imageProviders/weavy.js +0 -222
  155. package/open-sse/handlers/moderations.js +0 -92
  156. package/open-sse/handlers/ocr.js +0 -89
  157. package/open-sse/handlers/rerank.js +0 -223
  158. package/open-sse/handlers/responseSanitizer/reasoning.js +0 -144
  159. package/open-sse/handlers/responsesHandler.js +0 -99
  160. package/open-sse/handlers/search/callers.js +0 -371
  161. package/open-sse/handlers/search/chatSearch.js +0 -409
  162. package/open-sse/handlers/search/index.js +0 -201
  163. package/open-sse/handlers/search/normalizers.js +0 -223
  164. package/open-sse/handlers/search.js +0 -1056
  165. package/open-sse/handlers/sseParser.js +0 -469
  166. package/open-sse/handlers/sttCore.js +0 -193
  167. package/open-sse/handlers/ttsCore.js +0 -74
  168. package/open-sse/handlers/ttsProviders/_base.js +0 -39
  169. package/open-sse/handlers/ttsProviders/edgeTts.js +0 -89
  170. package/open-sse/handlers/ttsProviders/elevenlabs.js +0 -48
  171. package/open-sse/handlers/ttsProviders/gemini.js +0 -117
  172. package/open-sse/handlers/ttsProviders/genericFormats.js +0 -169
  173. package/open-sse/handlers/ttsProviders/googleTts.js +0 -54
  174. package/open-sse/handlers/ttsProviders/index.js +0 -50
  175. package/open-sse/handlers/ttsProviders/localDevice.js +0 -87
  176. package/open-sse/handlers/ttsProviders/minimax.js +0 -59
  177. package/open-sse/handlers/ttsProviders/openai.js +0 -30
  178. package/open-sse/handlers/ttsProviders/openrouter.js +0 -70
  179. package/open-sse/handlers/usageExtractor.js +0 -93
  180. package/open-sse/handlers/videoGenerationCore.js +0 -119
  181. package/open-sse/handlers/videoProviders/index.js +0 -22
  182. package/open-sse/handlers/videoProviders/leonardo.js +0 -511
  183. package/open-sse/handlers/videoProviders/weavy.js +0 -198
  184. package/open-sse/handlers/webFetch.js +0 -200
  185. package/open-sse/index.js +0 -79
  186. package/open-sse/mcp-server/audit.js +0 -283
  187. package/open-sse/mcp-server/catalog.js +0 -184
  188. package/open-sse/mcp-server/descriptionCompressor.js +0 -175
  189. package/open-sse/mcp-server/httpAuthContext.js +0 -32
  190. package/open-sse/mcp-server/httpTransport.js +0 -229
  191. package/open-sse/mcp-server/index.js +0 -33
  192. package/open-sse/mcp-server/mcpCallerIdentity.js +0 -21
  193. package/open-sse/mcp-server/runtimeHeartbeat.js +0 -110
  194. package/open-sse/mcp-server/schemas/a2a.js +0 -153
  195. package/open-sse/mcp-server/schemas/audit.js +0 -17
  196. package/open-sse/mcp-server/schemas/index.js +0 -166
  197. package/open-sse/mcp-server/schemas/pickFastestModel.js +0 -90
  198. package/open-sse/mcp-server/schemas/toolDefinition.js +0 -0
  199. package/open-sse/mcp-server/schemas/toolSearch.js +0 -32
  200. package/open-sse/mcp-server/schemas/tools.js +0 -1219
  201. package/open-sse/mcp-server/scopeEnforcement.js +0 -80
  202. package/open-sse/mcp-server/server.js +0 -1168
  203. package/open-sse/mcp-server/toolCardinality.js +0 -78
  204. package/open-sse/mcp-server/toolSearch/catalog.js +0 -66
  205. package/open-sse/mcp-server/toolSearch/handler.js +0 -20
  206. package/open-sse/mcp-server/toolSearch/index.js +0 -10
  207. package/open-sse/mcp-server/toolSearch/register.js +0 -21
  208. package/open-sse/mcp-server/toolSearch/search.js +0 -55
  209. package/open-sse/mcp-server/toolSearch/signature.js +0 -67
  210. package/open-sse/mcp-server/tools/advancedTools.js +0 -893
  211. package/open-sse/mcp-server/tools/agentSkillTools.js +0 -69
  212. package/open-sse/mcp-server/tools/compressionTools.js +0 -309
  213. package/open-sse/mcp-server/tools/gamificationTools.js +0 -134
  214. package/open-sse/mcp-server/tools/githubSkillTools.js +0 -102
  215. package/open-sse/mcp-server/tools/memoryTools.js +0 -118
  216. package/open-sse/mcp-server/tools/notionTools.js +0 -101
  217. package/open-sse/mcp-server/tools/obsidianTools.js +0 -307
  218. package/open-sse/mcp-server/tools/pickFastestModel.js +0 -223
  219. package/open-sse/mcp-server/tools/pluginTools.js +0 -181
  220. package/open-sse/mcp-server/tools/poolTools.js +0 -139
  221. package/open-sse/mcp-server/tools/skillTools.js +0 -113
  222. package/open-sse/package.json +0 -10
  223. package/open-sse/providers/REGISTRY_TEMPLATE.js +0 -98
  224. package/open-sse/providers/capabilities.js +0 -293
  225. package/open-sse/providers/index.js +0 -51
  226. package/open-sse/providers/models/helpers.js +0 -20
  227. package/open-sse/providers/models/namePatterns.js +0 -33
  228. package/open-sse/providers/models/schema.js +0 -40
  229. package/open-sse/providers/pricing.js +0 -308
  230. package/open-sse/providers/registry/alicode-intl.js +0 -30
  231. package/open-sse/providers/registry/alicode.js +0 -31
  232. package/open-sse/providers/registry/anthropic.js +0 -37
  233. package/open-sse/providers/registry/antigravity.js +0 -81
  234. package/open-sse/providers/registry/assemblyai.js +0 -38
  235. package/open-sse/providers/registry/aws-polly.js +0 -45
  236. package/open-sse/providers/registry/azure.js +0 -21
  237. package/open-sse/providers/registry/black-forest-labs.js +0 -32
  238. package/open-sse/providers/registry/blackbox.js +0 -41
  239. package/open-sse/providers/registry/brave-search.js +0 -35
  240. package/open-sse/providers/registry/byteplus.js +0 -35
  241. package/open-sse/providers/registry/cartesia.js +0 -36
  242. package/open-sse/providers/registry/cerebras.js +0 -31
  243. package/open-sse/providers/registry/chutes.js +0 -24
  244. package/open-sse/providers/registry/claude.js +0 -87
  245. package/open-sse/providers/registry/cline.js +0 -51
  246. package/open-sse/providers/registry/clinepass.js +0 -57
  247. package/open-sse/providers/registry/cloudflare-ai.js +0 -55
  248. package/open-sse/providers/registry/codebuddy-cn.js +0 -77
  249. package/open-sse/providers/registry/codex.js +0 -100
  250. package/open-sse/providers/registry/cohere.js +0 -27
  251. package/open-sse/providers/registry/comfyui.js +0 -20
  252. package/open-sse/providers/registry/commandcode.js +0 -43
  253. package/open-sse/providers/registry/coqui.js +0 -30
  254. package/open-sse/providers/registry/cursor.js +0 -58
  255. package/open-sse/providers/registry/deepgram.js +0 -33
  256. package/open-sse/providers/registry/deepseek.js +0 -51
  257. package/open-sse/providers/registry/digitalocean.js +0 -92
  258. package/open-sse/providers/registry/edge-tts.js +0 -24
  259. package/open-sse/providers/registry/elevenlabs.js +0 -35
  260. package/open-sse/providers/registry/exa.js +0 -50
  261. package/open-sse/providers/registry/fal-ai.js +0 -34
  262. package/open-sse/providers/registry/featherless.js +0 -34
  263. package/open-sse/providers/registry/firecrawl.js +0 -34
  264. package/open-sse/providers/registry/fireworks.js +0 -29
  265. package/open-sse/providers/registry/gemini-cli.js +0 -58
  266. package/open-sse/providers/registry/gemini.js +0 -83
  267. package/open-sse/providers/registry/github.js +0 -88
  268. package/open-sse/providers/registry/gitlab.js +0 -32
  269. package/open-sse/providers/registry/glm-cn.js +0 -35
  270. package/open-sse/providers/registry/glm.js +0 -58
  271. package/open-sse/providers/registry/google-pse.js +0 -35
  272. package/open-sse/providers/registry/google-tts.js +0 -24
  273. package/open-sse/providers/registry/grok-cli.js +0 -86
  274. package/open-sse/providers/registry/grok-web.js +0 -39
  275. package/open-sse/providers/registry/groq.js +0 -37
  276. package/open-sse/providers/registry/huggingface.js +0 -34
  277. package/open-sse/providers/registry/hyperbolic.js +0 -35
  278. package/open-sse/providers/registry/ibm-bob.js +0 -27
  279. package/open-sse/providers/registry/iflow.js +0 -52
  280. package/open-sse/providers/registry/index.js +0 -210
  281. package/open-sse/providers/registry/inworld.js +0 -36
  282. package/open-sse/providers/registry/jina-ai.js +0 -42
  283. package/open-sse/providers/registry/jina-reader.js +0 -34
  284. package/open-sse/providers/registry/kilocode.js +0 -51
  285. package/open-sse/providers/registry/kimchi.js +0 -49
  286. package/open-sse/providers/registry/kimi-coding.js +0 -65
  287. package/open-sse/providers/registry/kimi.js +0 -56
  288. package/open-sse/providers/registry/kiro.js +0 -115
  289. package/open-sse/providers/registry/linkup.js +0 -34
  290. package/open-sse/providers/registry/local-device.js +0 -24
  291. package/open-sse/providers/registry/mimo-free.js +0 -24
  292. package/open-sse/providers/registry/minimax-cn.js +0 -76
  293. package/open-sse/providers/registry/minimax.js +0 -83
  294. package/open-sse/providers/registry/mistral.js +0 -34
  295. package/open-sse/providers/registry/mmf.js +0 -19
  296. package/open-sse/providers/registry/nanobanana.js +0 -35
  297. package/open-sse/providers/registry/nebius.js +0 -27
  298. package/open-sse/providers/registry/nvidia.js +0 -43
  299. package/open-sse/providers/registry/ollama-local.js +0 -19
  300. package/open-sse/providers/registry/ollama.js +0 -36
  301. package/open-sse/providers/registry/openai.js +0 -84
  302. package/open-sse/providers/registry/opencode-go.js +0 -41
  303. package/open-sse/providers/registry/opencode.js +0 -25
  304. package/open-sse/providers/registry/openrouter.js +0 -60
  305. package/open-sse/providers/registry/perplexity-agent.js +0 -49
  306. package/open-sse/providers/registry/perplexity-web.js +0 -33
  307. package/open-sse/providers/registry/perplexity.js +0 -37
  308. package/open-sse/providers/registry/playht.js +0 -36
  309. package/open-sse/providers/registry/qoder.js +0 -54
  310. package/open-sse/providers/registry/qwen.js +0 -33
  311. package/open-sse/providers/registry/recraft.js +0 -24
  312. package/open-sse/providers/registry/runwayml.js +0 -30
  313. package/open-sse/providers/registry/sdwebui.js +0 -20
  314. package/open-sse/providers/registry/searchapi.js +0 -35
  315. package/open-sse/providers/registry/searxng.js +0 -35
  316. package/open-sse/providers/registry/serper.js +0 -35
  317. package/open-sse/providers/registry/siliconflow.js +0 -39
  318. package/open-sse/providers/registry/stability-ai.js +0 -31
  319. package/open-sse/providers/registry/tavily.js +0 -50
  320. package/open-sse/providers/registry/together.js +0 -31
  321. package/open-sse/providers/registry/topaz.js +0 -19
  322. package/open-sse/providers/registry/tortoise.js +0 -30
  323. package/open-sse/providers/registry/venice.js +0 -56
  324. package/open-sse/providers/registry/vercel-ai-gateway.js +0 -41
  325. package/open-sse/providers/registry/vertex-partner.js +0 -29
  326. package/open-sse/providers/registry/vertex.js +0 -32
  327. package/open-sse/providers/registry/volcengine-ark.js +0 -35
  328. package/open-sse/providers/registry/voyage-ai.js +0 -30
  329. package/open-sse/providers/registry/xai.js +0 -45
  330. package/open-sse/providers/registry/xiaomi-mimo.js +0 -46
  331. package/open-sse/providers/registry/xiaomi-tokenplan.js +0 -63
  332. package/open-sse/providers/registry/youcom.js +0 -35
  333. package/open-sse/providers/schema.js +0 -76
  334. package/open-sse/providers/shared.js +0 -74
  335. package/open-sse/providers/thinkingLevels.js +0 -48
  336. package/open-sse/rtk/applyFilter.js +0 -15
  337. package/open-sse/rtk/autodetect.js +0 -111
  338. package/open-sse/rtk/caveman.js +0 -100
  339. package/open-sse/rtk/cavemanPrompts.js +0 -78
  340. package/open-sse/rtk/constants.js +0 -55
  341. package/open-sse/rtk/filters/buildOutput.js +0 -127
  342. package/open-sse/rtk/filters/dedupLog.js +0 -44
  343. package/open-sse/rtk/filters/find.js +0 -50
  344. package/open-sse/rtk/filters/gitDiff.js +0 -92
  345. package/open-sse/rtk/filters/gitLog.js +0 -99
  346. package/open-sse/rtk/filters/gitStatus.js +0 -117
  347. package/open-sse/rtk/filters/grep.js +0 -48
  348. package/open-sse/rtk/filters/ls.js +0 -79
  349. package/open-sse/rtk/filters/readNumbered.js +0 -27
  350. package/open-sse/rtk/filters/searchList.js +0 -52
  351. package/open-sse/rtk/filters/smartTruncate.js +0 -15
  352. package/open-sse/rtk/filters/tree.js +0 -32
  353. package/open-sse/rtk/headroom.js +0 -215
  354. package/open-sse/rtk/index.js +0 -155
  355. package/open-sse/rtk/paleo.js +0 -47
  356. package/open-sse/rtk/ponytail.js +0 -9
  357. package/open-sse/rtk/ponytailPrompt.js +0 -52
  358. package/open-sse/rtk/ponytailPrompts.js +0 -76
  359. package/open-sse/rtk/pxpipe.js +0 -104
  360. package/open-sse/rtk/registry.js +0 -38
  361. package/open-sse/rtk/systemInject.js +0 -98
  362. package/open-sse/services/accountFallback.js +0 -323
  363. package/open-sse/services/antigravityHeaders.js +0 -91
  364. package/open-sse/services/antigravityVersion.js +0 -154
  365. package/open-sse/services/clinepassModels.js +0 -63
  366. package/open-sse/services/codexQuotaFetcher.js +0 -312
  367. package/open-sse/services/codexVerbosity.js +0 -30
  368. package/open-sse/services/combo/context.js +0 -12
  369. package/open-sse/services/combo/fingerprintExpansion.js +0 -51
  370. package/open-sse/services/combo/headroomRanking.js +0 -28
  371. package/open-sse/services/combo/quotaExhaustionCutoff.js +0 -87
  372. package/open-sse/services/combo/quotaScoring.js +0 -226
  373. package/open-sse/services/combo/quotaShareConcurrency.js +0 -25
  374. package/open-sse/services/combo/quotaShareInflight.js +0 -50
  375. package/open-sse/services/combo/quotaShareStrategy.js +0 -130
  376. package/open-sse/services/combo/resolveAutoStrategy.js +0 -231
  377. package/open-sse/services/combo/responseValidation.js +0 -140
  378. package/open-sse/services/combo/runtimeUnits.js +0 -195
  379. package/open-sse/services/combo/sessionStickiness.js +0 -128
  380. package/open-sse/services/combo/shadowRouting.js +0 -131
  381. package/open-sse/services/combo/targetExhaustion.js +0 -75
  382. package/open-sse/services/combo/targetSorters.js +0 -126
  383. package/open-sse/services/combo/targetTimeoutRunner.js +0 -65
  384. package/open-sse/services/combo/validateQuality.js +0 -271
  385. package/open-sse/services/combo.js +0 -571
  386. package/open-sse/services/comboAgentMiddleware.js +0 -91
  387. package/open-sse/services/comboConfig.js +0 -153
  388. package/open-sse/services/comboManifestMetrics.js +0 -10
  389. package/open-sse/services/comboMetrics.js +0 -278
  390. package/open-sse/services/compact.js +0 -71
  391. package/open-sse/services/copilotModels.js +0 -155
  392. package/open-sse/services/emergencyFallback.js +0 -109
  393. package/open-sse/services/errorClassifier.js +0 -190
  394. package/open-sse/services/evalRouting.js +0 -201
  395. package/open-sse/services/freeWebSearch.js +0 -4
  396. package/open-sse/services/fusion.js +0 -223
  397. package/open-sse/services/intentClassifier.js +0 -631
  398. package/open-sse/services/kimchiModels.js +0 -176
  399. package/open-sse/services/kiroModels.js +0 -332
  400. package/open-sse/services/model.js +0 -136
  401. package/open-sse/services/modelCapabilities.js +0 -5
  402. package/open-sse/services/modelDeprecation.js +0 -101
  403. package/open-sse/services/modelFamilyFallback.js +0 -166
  404. package/open-sse/services/oauthCredentialManager.js +0 -156
  405. package/open-sse/services/pipeline.js +0 -107
  406. package/open-sse/services/projectId.js +0 -306
  407. package/open-sse/services/provider.js +0 -169
  408. package/open-sse/services/providerCooldownTracker.js +0 -94
  409. package/open-sse/services/providerDefaultRateLimit.js +0 -11
  410. package/open-sse/services/proxyAutoSelector.js +0 -24
  411. package/open-sse/services/qoderModels.js +0 -214
  412. package/open-sse/services/quotaFetchThrottle.js +0 -103
  413. package/open-sse/services/quotaMonitor.js +0 -310
  414. package/open-sse/services/quotaPreflight.js +0 -266
  415. package/open-sse/services/rateLimitManager/headers.js +0 -56
  416. package/open-sse/services/rateLimitManager.js +0 -616
  417. package/open-sse/services/rateLimitSemaphore.js +0 -112
  418. package/open-sse/services/responsesInputSanitizer.js +0 -99
  419. package/open-sse/services/slidingWindowLimiter.js +0 -44
  420. package/open-sse/services/streamRecovery.js +0 -355
  421. package/open-sse/services/taskAwareRouter.js +0 -227
  422. package/open-sse/services/taskAwareRouting.js +0 -332
  423. package/open-sse/services/thinkingBudget.js +0 -247
  424. package/open-sse/services/tokenRefresh/dedup.js +0 -31
  425. package/open-sse/services/tokenRefresh/providers.js +0 -624
  426. package/open-sse/services/tokenRefresh.js +0 -254
  427. package/open-sse/services/usage/claude.js +0 -147
  428. package/open-sse/services/usage/codebuddy-cn.js +0 -138
  429. package/open-sse/services/usage/codex.js +0 -267
  430. package/open-sse/services/usage/github.js +0 -100
  431. package/open-sse/services/usage/google.js +0 -241
  432. package/open-sse/services/usage/grok-cli.js +0 -274
  433. package/open-sse/services/usage/kiro.js +0 -188
  434. package/open-sse/services/usage/minimax.js +0 -234
  435. package/open-sse/services/usage/misc.js +0 -288
  436. package/open-sse/services/usage/shared.js +0 -70
  437. package/open-sse/services/usage.js +0 -62
  438. package/open-sse/services/usageDb.js +0 -2
  439. package/open-sse/services/webSearchRouting.js +0 -25
  440. package/open-sse/services/wildcardRouter.js +0 -59
  441. package/open-sse/shared/clineAuth.js +0 -37
  442. package/open-sse/shared/machineId.js +0 -19
  443. package/open-sse/shared/qoder/constants.js +0 -64
  444. package/open-sse/shared/qoder/cosy.js +0 -175
  445. package/open-sse/shared/qoder/encoding.js +0 -55
  446. package/open-sse/transformer/responsesTransformer.js +0 -439
  447. package/open-sse/transformer/streamToJsonConverter.js +0 -103
  448. package/open-sse/translator/concerns/chunk.js +0 -11
  449. package/open-sse/translator/concerns/finishReason.js +0 -63
  450. package/open-sse/translator/concerns/image.js +0 -124
  451. package/open-sse/translator/concerns/json.js +0 -5
  452. package/open-sse/translator/concerns/message.js +0 -7
  453. package/open-sse/translator/concerns/modality.js +0 -155
  454. package/open-sse/translator/concerns/paramSupport.js +0 -75
  455. package/open-sse/translator/concerns/prefetch.js +0 -96
  456. package/open-sse/translator/concerns/reasoning.js +0 -24
  457. package/open-sse/translator/concerns/thinking.js +0 -53
  458. package/open-sse/translator/concerns/thinkingUnified.js +0 -329
  459. package/open-sse/translator/concerns/toolCall.js +0 -153
  460. package/open-sse/translator/concerns/usage.js +0 -69
  461. package/open-sse/translator/formats/claude.js +0 -368
  462. package/open-sse/translator/formats/gemini.js +0 -380
  463. package/open-sse/translator/formats/maxTokens.js +0 -34
  464. package/open-sse/translator/formats/openai.js +0 -134
  465. package/open-sse/translator/formats/responsesApi.js +0 -141
  466. package/open-sse/translator/formats.js +0 -36
  467. package/open-sse/translator/helpers/claudeHelper.js +0 -216
  468. package/open-sse/translator/helpers/geminiHelper.js +0 -372
  469. package/open-sse/translator/helpers/imageHelper.js +0 -34
  470. package/open-sse/translator/helpers/maxTokensHelper.js +0 -27
  471. package/open-sse/translator/helpers/openaiHelper.js +0 -130
  472. package/open-sse/translator/helpers/responsesApiHelper.js +0 -139
  473. package/open-sse/translator/helpers/toolCallHelper.js +0 -148
  474. package/open-sse/translator/index.js +0 -252
  475. package/open-sse/translator/request/antigravity-to-openai.js +0 -242
  476. package/open-sse/translator/request/claude-to-kiro.js +0 -478
  477. package/open-sse/translator/request/claude-to-openai.js +0 -263
  478. package/open-sse/translator/request/gemini-to-openai.js +0 -152
  479. package/open-sse/translator/request/openai-responses.js +0 -385
  480. package/open-sse/translator/request/openai-to-claude.js +0 -383
  481. package/open-sse/translator/request/openai-to-commandcode.js +0 -176
  482. package/open-sse/translator/request/openai-to-cursor.js +0 -185
  483. package/open-sse/translator/request/openai-to-gemini.js +0 -442
  484. package/open-sse/translator/request/openai-to-kiro.js +0 -607
  485. package/open-sse/translator/request/openai-to-kiro.old.js +0 -278
  486. package/open-sse/translator/request/openai-to-ollama.js +0 -195
  487. package/open-sse/translator/request/openai-to-vertex.js +0 -42
  488. package/open-sse/translator/response/claude-to-openai.js +0 -195
  489. package/open-sse/translator/response/commandcode-to-openai.js +0 -188
  490. package/open-sse/translator/response/cursor-to-openai.js +0 -30
  491. package/open-sse/translator/response/gemini-to-openai.js +0 -147
  492. package/open-sse/translator/response/kiro-to-claude.js +0 -261
  493. package/open-sse/translator/response/kiro-to-openai.js +0 -160
  494. package/open-sse/translator/response/ollama-to-openai.js +0 -134
  495. package/open-sse/translator/response/openai-responses.js +0 -535
  496. package/open-sse/translator/response/openai-to-antigravity.js +0 -123
  497. package/open-sse/translator/response/openai-to-claude.js +0 -265
  498. package/open-sse/translator/schema/blocks.js +0 -43
  499. package/open-sse/translator/schema/defaults.js +0 -7
  500. package/open-sse/translator/schema/finishReasons.js +0 -27
  501. package/open-sse/translator/schema/index.js +0 -8
  502. package/open-sse/translator/schema/roles.js +0 -16
  503. package/open-sse/utils/agentGoalPolicy.js +0 -85
  504. package/open-sse/utils/aiSdkCompat.js +0 -75
  505. package/open-sse/utils/bypassHandler.js +0 -298
  506. package/open-sse/utils/cacheControlPolicy.js +0 -189
  507. package/open-sse/utils/claudeCloaking.js +0 -155
  508. package/open-sse/utils/claudeHeaderCache.js +0 -70
  509. package/open-sse/utils/claudeSignature.js +0 -41
  510. package/open-sse/utils/clientDetector.js +0 -63
  511. package/open-sse/utils/codebuddySanitizer.js +0 -96
  512. package/open-sse/utils/composerToolCalls.js +0 -158
  513. package/open-sse/utils/cors.js +0 -13
  514. package/open-sse/utils/cursorChecksum.js +0 -149
  515. package/open-sse/utils/cursorImages.js +0 -224
  516. package/open-sse/utils/cursorProtobuf.js +0 -904
  517. package/open-sse/utils/cursorVersionDetector.js +0 -55
  518. package/open-sse/utils/debugLog.js +0 -14
  519. package/open-sse/utils/diagnostics.js +0 -143
  520. package/open-sse/utils/error.js +0 -164
  521. package/open-sse/utils/estimateSize.js +0 -33
  522. package/open-sse/utils/finishReason.js +0 -32
  523. package/open-sse/utils/flattenToolHistory.js +0 -68
  524. package/open-sse/utils/headers.js +0 -36
  525. package/open-sse/utils/heapPressure.js +0 -35
  526. package/open-sse/utils/jsonToSse.js +0 -125
  527. package/open-sse/utils/keepaliveThreshold.js +0 -40
  528. package/open-sse/utils/logger.js +0 -104
  529. package/open-sse/utils/noThinkingAlias.js +0 -74
  530. package/open-sse/utils/number.js +0 -7
  531. package/open-sse/utils/ollamaTransform.js +0 -85
  532. package/open-sse/utils/opencodeHeaders.js +0 -47
  533. package/open-sse/utils/progressTracker.js +0 -81
  534. package/open-sse/utils/providerRequestLogging.js +0 -219
  535. package/open-sse/utils/proxyFetch.js +0 -369
  536. package/open-sse/utils/reasoningContentInjector.js +0 -79
  537. package/open-sse/utils/reasoningFields.js +0 -70
  538. package/open-sse/utils/requestLogger.js +0 -260
  539. package/open-sse/utils/responsesInputNormalization.js +0 -92
  540. package/open-sse/utils/responsesStatePolicy.js +0 -52
  541. package/open-sse/utils/responsesStreamHelpers.js +0 -49
  542. package/open-sse/utils/sessionManager.js +0 -240
  543. package/open-sse/utils/sleep.js +0 -6
  544. package/open-sse/utils/sse.js +0 -14
  545. package/open-sse/utils/sseConstants.js +0 -23
  546. package/open-sse/utils/sseHeartbeat.js +0 -104
  547. package/open-sse/utils/stream.js +0 -517
  548. package/open-sse/utils/streamFailureFinalization.js +0 -134
  549. package/open-sse/utils/streamHandler.js +0 -250
  550. package/open-sse/utils/streamHelpers.js +0 -137
  551. package/open-sse/utils/textualToolCall.js +0 -104
  552. package/open-sse/utils/thinkCloseMarker.js +0 -72
  553. package/open-sse/utils/thinkTagParser.js +0 -146
  554. package/open-sse/utils/toolCallArguments.js +0 -12
  555. package/open-sse/utils/toolDeduper.js +0 -49
  556. package/open-sse/utils/toolSources.js +0 -31
  557. package/open-sse/utils/upstreamResponseHeaders.js +0 -25
  558. package/open-sse/utils/urlSanitize.js +0 -15
  559. package/open-sse/utils/usageTracking.js +0 -347
@@ -1,527 +0,0 @@
1
- import { createHash } from "node:crypto";
2
- import { BaseExecutor } from "./base.ts";
3
- import { prepareToolMessages, buildToolAwareResult } from "../translator/webTools.ts";
4
- import { sanitizeErrorMessage } from "../utils/error.js";
5
- const INNER_AI_CHAT_URL = "https://chatapi.innerai.com/chat";
6
- const INNER_AI_PROFILE_URL = "https://platformapi.innerai.com/api/v1/users/profile";
7
- const INNER_AI_MODELS_URL = "https://platformapi.innerai.com/api/v1/ai_models";
8
- const INNER_AI_USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36";
9
- const MODELS_CACHE_TTL_MS = 60 * 60 * 1e3;
10
- const CACHE_MAX_ENTRIES = 1e3;
11
- const credentialCache = /* @__PURE__ */ new Map();
12
- const modelsCache = /* @__PURE__ */ new Map();
13
- function lruTouch(map, key) {
14
- const value = map.get(key);
15
- if (value === void 0) return void 0;
16
- map.delete(key);
17
- map.set(key, value);
18
- return value;
19
- }
20
- function lruSet(map, key, value) {
21
- if (map.has(key)) map.delete(key);
22
- map.set(key, value);
23
- while (map.size > CACHE_MAX_ENTRIES) {
24
- const oldest = map.keys().next().value;
25
- if (oldest === void 0) break;
26
- map.delete(oldest);
27
- }
28
- }
29
- function tokenCacheKey(token) {
30
- return createHash("sha256").update(token).digest("hex");
31
- }
32
- function decodeJwtPayload(token) {
33
- try {
34
- const parts = token.split(".");
35
- if (parts.length < 2) return null;
36
- const b64 = parts[1].replace(/-/g, "+").replace(/_/g, "/");
37
- const padded = b64 + "=".repeat((4 - b64.length % 4) % 4);
38
- return JSON.parse(atob(padded));
39
- } catch {
40
- return null;
41
- }
42
- }
43
- function parseCredential(rawApiKey) {
44
- const trimmed = rawApiKey.trim();
45
- const eqIdx = trimmed.indexOf("=");
46
- const stripped = eqIdx > 0 && !trimmed.startsWith("eyJ") ? trimmed.slice(eqIdx + 1).trim() : trimmed;
47
- const lastSpace = stripped.lastIndexOf(" ");
48
- if (lastSpace > 0) {
49
- const possibleEmail = stripped.slice(lastSpace + 1).trim();
50
- if (possibleEmail.includes("@")) {
51
- return { token: stripped.slice(0, lastSpace).trim(), credEmail: possibleEmail };
52
- }
53
- }
54
- return { token: stripped, credEmail: "" };
55
- }
56
- function makeErrorResult(status, message, body) {
57
- return {
58
- response: new Response(
59
- JSON.stringify({
60
- error: {
61
- message: sanitizeErrorMessage(message),
62
- type: "upstream_error",
63
- code: `HTTP_${status}`
64
- }
65
- }),
66
- { status, headers: { "Content-Type": "application/json" } }
67
- ),
68
- url: INNER_AI_CHAT_URL,
69
- headers: {},
70
- transformedBody: body
71
- };
72
- }
73
- function buildHeaders(token, email, deviceId) {
74
- const headers = {
75
- "Content-Type": "application/json",
76
- "User-Agent": INNER_AI_USER_AGENT,
77
- // Cookie-based auth — the token cookie is scoped to .innerai.com so all
78
- // *.innerai.com subdomains expect it via Cookie header.
79
- Cookie: `token=${token}`,
80
- "USER-TOKEN": token,
81
- "DEVICE-ID": deviceId,
82
- Origin: "https://app.innerai.com",
83
- Referer: "https://app.innerai.com/"
84
- };
85
- if (email) headers["USER-EMAIL"] = email;
86
- return headers;
87
- }
88
- async function resolveCredentials(token, credEmail, signal) {
89
- const key = tokenCacheKey(token);
90
- const cached = lruTouch(credentialCache, key);
91
- if (cached) return cached;
92
- const payload = decodeJwtPayload(token);
93
- const deviceId = String(
94
- payload?.device_id ?? payload?.deviceId ?? payload?.["device-id"] ?? payload?.did ?? ""
95
- ).trim();
96
- const profileHeaders = {
97
- Cookie: `token=${token}`,
98
- "USER-TOKEN": token,
99
- "User-Agent": INNER_AI_USER_AGENT,
100
- Origin: "https://app.innerai.com",
101
- Referer: "https://app.innerai.com/"
102
- };
103
- if (deviceId) profileHeaders["DEVICE-ID"] = deviceId;
104
- let email = "";
105
- try {
106
- const profileResp = await fetch(INNER_AI_PROFILE_URL, {
107
- headers: profileHeaders,
108
- signal: signal ?? void 0
109
- });
110
- if (profileResp.ok) {
111
- const body = await profileResp.json().catch(() => null);
112
- const b = body;
113
- email = String(
114
- b?.data?.email ?? b?.user?.email ?? b?.profile?.email ?? b?.email ?? ""
115
- ).trim();
116
- }
117
- } catch {
118
- }
119
- if (!email && credEmail) email = credEmail;
120
- if (!email && typeof payload?.sub === "string" && payload.sub.includes("@")) {
121
- email = payload.sub;
122
- }
123
- const creds = { email, deviceId };
124
- lruSet(credentialCache, key, creds);
125
- return creds;
126
- }
127
- class InnerAiModelsError extends Error {
128
- constructor(status, responsePreview) {
129
- super(`Inner.ai /ai-models returned HTTP ${status}`);
130
- this.status = status;
131
- this.responsePreview = responsePreview;
132
- this.name = "InnerAiModelsError";
133
- }
134
- status;
135
- responsePreview;
136
- }
137
- async function resolveModels(token, deviceId, email, signal) {
138
- const key = tokenCacheKey(token);
139
- const cached = lruTouch(modelsCache, key);
140
- if (cached && Date.now() < cached.expiresAt) return cached.models;
141
- const resp = await fetch(INNER_AI_MODELS_URL, {
142
- headers: buildHeaders(token, email, deviceId),
143
- signal: signal ?? void 0
144
- });
145
- if (!resp.ok) {
146
- const bodyPreview = await resp.text().catch(() => "");
147
- const err = new InnerAiModelsError(resp.status, bodyPreview.slice(0, 200));
148
- if (resp.status === 401 || resp.status === 403) {
149
- credentialCache.delete(tokenCacheKey(token));
150
- }
151
- throw err;
152
- }
153
- const body = await resp.json().catch(() => null);
154
- let raw = [];
155
- if (Array.isArray(body)) {
156
- raw = body;
157
- } else if (Array.isArray(body?.data)) {
158
- raw = body.data;
159
- } else if (Array.isArray(body?.ai_models)) {
160
- raw = body.ai_models;
161
- }
162
- const planRaw = String(
163
- decodeJwtPayload(token)?.plan ?? decodeJwtPayload(token)?.tier ?? decodeJwtPayload(token)?.subscription ?? ""
164
- ).toLowerCase();
165
- const isUltra = planRaw.includes("ultra") || planRaw.includes("enterprise");
166
- const isPro = isUltra || planRaw.includes("pro") || planRaw.includes("plus");
167
- const nonTextPattern = /image|video|audio|img|vid|sound|music|voice|tts|stt|track|clip|avatar|cartoon|flux|stable.diff|recraft|ideogram|leonardo|magnific|bria|seedream|luma|kling|pika|veo|wan-|heygen|did-|vidu|pixverse|sora-|gen-[0-9]|playground|gemini-fal|gamma|lyria|clothes|whisper/i;
168
- const models = raw.filter((m) => {
169
- if (m.enable === false || m.unavailable_api) return false;
170
- if (m.ultra_only && !isUltra) return false;
171
- if (m.pro_only && !isPro) return false;
172
- const cats = Array.isArray(m.ai_model_categories) ? m.ai_model_categories : null;
173
- if (cats && cats.length > 0) {
174
- return cats.some((c) => String(c.unique_identifier ?? c.name ?? "").toLowerCase() === "text");
175
- }
176
- return !nonTextPattern.test(m.llm_model);
177
- });
178
- lruSet(modelsCache, key, { models, expiresAt: Date.now() + MODELS_CACHE_TTL_MS });
179
- return models;
180
- }
181
- function findModel(models, requestedId) {
182
- if (models.length === 0) return null;
183
- const lower = requestedId.toLowerCase();
184
- return models.find((m) => m.llm_model === requestedId) ?? models.find((m) => m.llm_model.toLowerCase() === lower) ?? models.find((m) => m.llm_model.toLowerCase().includes(lower)) ?? null;
185
- }
186
- function buildMessageContent(messages) {
187
- const parts = [];
188
- for (const msg of messages) {
189
- const content = typeof msg.content === "string" ? msg.content : Array.isArray(msg.content) ? msg.content.filter((c) => c?.type === "text").map((c) => String(c.text ?? "")).join("") : "";
190
- if (!content.trim()) continue;
191
- if (msg.role === "system") {
192
- parts.push(`[Instructions]
193
- ${content}`);
194
- } else if (msg.role === "assistant") {
195
- parts.push(`[Assistant]
196
- ${content}`);
197
- } else {
198
- parts.push(content);
199
- }
200
- }
201
- return parts.join("\n\n");
202
- }
203
- function transformInnerAiSSE(upstream, model) {
204
- const encoder = new TextEncoder();
205
- const decoder = new TextDecoder();
206
- const id = `chatcmpl-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
207
- const created = Math.floor(Date.now() / 1e3);
208
- let buffer = "";
209
- let emittedRole = false;
210
- const chunkEvent = (delta, finishReason) => `data: ${JSON.stringify({
211
- id,
212
- object: "chat.completion.chunk",
213
- created,
214
- model,
215
- choices: [{ index: 0, delta, finish_reason: finishReason ?? null }]
216
- })}
217
-
218
- `;
219
- return new ReadableStream({
220
- async start(controller) {
221
- const reader = upstream.getReader();
222
- try {
223
- while (true) {
224
- const { done, value } = await reader.read();
225
- if (done) break;
226
- buffer += decoder.decode(value, { stream: true });
227
- const lines = buffer.split("\n");
228
- buffer = lines.pop() ?? "";
229
- for (const line of lines) {
230
- if (!line.startsWith("data:")) continue;
231
- const jsonStr = line.slice(5).trim();
232
- if (!jsonStr || jsonStr === "[DONE]") continue;
233
- let data;
234
- try {
235
- data = JSON.parse(jsonStr);
236
- } catch {
237
- continue;
238
- }
239
- const type = String(data.type ?? "");
240
- const item = String(data.item ?? "");
241
- if (type === "text") {
242
- if (!item) continue;
243
- if (!emittedRole) {
244
- emittedRole = true;
245
- controller.enqueue(encoder.encode(chunkEvent({ role: "assistant", content: "" })));
246
- }
247
- controller.enqueue(encoder.encode(chunkEvent({ content: item })));
248
- } else if (type === "end_stream") {
249
- if (!emittedRole) {
250
- emittedRole = true;
251
- controller.enqueue(encoder.encode(chunkEvent({ role: "assistant", content: "" })));
252
- }
253
- controller.enqueue(encoder.encode(chunkEvent({}, "stop")));
254
- controller.enqueue(encoder.encode("data: [DONE]\n\n"));
255
- controller.close();
256
- return;
257
- } else if (type === "missing_credits" || type === "reached_limit" || type === "rate_limit_reached" || type === "rate_limit_longer_reached") {
258
- const errorMsg = type === "missing_credits" ? "Inner.ai: not enough credits" : type === "reached_limit" ? "Inner.ai: usage limit reached" : "Inner.ai: rate limit reached \u2014 try again later";
259
- controller.enqueue(
260
- encoder.encode(
261
- `data: ${JSON.stringify({
262
- error: { message: errorMsg, type: "rate_limit_error", code: type }
263
- })}
264
-
265
- `
266
- )
267
- );
268
- controller.enqueue(encoder.encode("data: [DONE]\n\n"));
269
- controller.close();
270
- return;
271
- }
272
- }
273
- }
274
- } catch (err) {
275
- const message = err instanceof Error ? err.message : String(err || "Stream error");
276
- controller.enqueue(
277
- encoder.encode(
278
- `data: ${JSON.stringify({
279
- error: { message: sanitizeErrorMessage(message), type: "upstream_error" }
280
- })}
281
-
282
- `
283
- )
284
- );
285
- }
286
- if (!emittedRole) {
287
- controller.enqueue(encoder.encode(chunkEvent({ role: "assistant", content: "" })));
288
- }
289
- controller.enqueue(encoder.encode(chunkEvent({}, "stop")));
290
- controller.enqueue(encoder.encode("data: [DONE]\n\n"));
291
- controller.close();
292
- }
293
- });
294
- }
295
- class InnerAiStreamError extends Error {
296
- constructor(status, code, message) {
297
- super(message);
298
- this.status = status;
299
- this.code = code;
300
- this.name = "InnerAiStreamError";
301
- }
302
- status;
303
- code;
304
- }
305
- async function collectContent(upstream) {
306
- const decoder = new TextDecoder();
307
- const reader = upstream.getReader();
308
- let buffer = "";
309
- let content = "";
310
- while (true) {
311
- const { done, value } = await reader.read();
312
- if (done) break;
313
- buffer += decoder.decode(value, { stream: true });
314
- const lines = buffer.split("\n");
315
- buffer = lines.pop() ?? "";
316
- for (const line of lines) {
317
- if (!line.startsWith("data:")) continue;
318
- const jsonStr = line.slice(5).trim();
319
- if (!jsonStr || jsonStr === "[DONE]") continue;
320
- let data;
321
- try {
322
- data = JSON.parse(jsonStr);
323
- } catch {
324
- continue;
325
- }
326
- const type = data.type;
327
- if (type === "text" && typeof data.item === "string") {
328
- content += data.item;
329
- continue;
330
- }
331
- if (type === "missing_credits" || type === "reached_limit" || type === "rate_limit_reached" || type === "rate_limit_longer_reached") {
332
- const errorMsg = type === "missing_credits" ? "Inner.ai: not enough credits" : type === "reached_limit" ? "Inner.ai: usage limit reached" : "Inner.ai: rate limit reached \u2014 try again later";
333
- throw new InnerAiStreamError(429, String(type), errorMsg);
334
- }
335
- }
336
- }
337
- return content;
338
- }
339
- class InnerAiExecutor extends BaseExecutor {
340
- constructor() {
341
- super("inner-ai", { id: "inner-ai", baseUrl: "https://chatapi.innerai.com" });
342
- }
343
- async execute(input) {
344
- const { body, credentials, signal, stream: wantStream } = input;
345
- const bodyObj = body || {};
346
- const rawToken = String(credentials?.apiKey ?? "").trim();
347
- if (!rawToken) {
348
- return makeErrorResult(
349
- 401,
350
- "Missing Inner.ai token \u2014 paste your token cookie from DevTools \u2192 Application \u2192 Cookies \u2192 .innerai.com",
351
- body
352
- );
353
- }
354
- const { token, credEmail } = parseCredential(rawToken);
355
- let creds;
356
- try {
357
- creds = await resolveCredentials(token, credEmail, signal);
358
- } catch (err) {
359
- const message = err instanceof Error ? err.message : "Failed to authenticate with Inner.ai";
360
- credentialCache.delete(tokenCacheKey(token));
361
- return makeErrorResult(401, message, body);
362
- }
363
- const { email, deviceId } = creds;
364
- const requestedModel = String(bodyObj.model ?? "").trim() || "gpt-4o";
365
- let models = [];
366
- try {
367
- models = await resolveModels(token, deviceId, email, signal);
368
- } catch (err) {
369
- if (err instanceof InnerAiModelsError && (err.status === 401 || err.status === 403)) {
370
- return makeErrorResult(
371
- err.status,
372
- "Inner.ai /ai-models authentication failed \u2014 re-paste your token cookie",
373
- body
374
- );
375
- }
376
- console.warn(
377
- `[InnerAI] /ai-models fetch failed (status=${err instanceof InnerAiModelsError ? err.status : "n/a"}) \u2014 falling back to synthetic model entry`
378
- );
379
- }
380
- const modelEntry = findModel(models, requestedModel) ?? {
381
- id: "",
382
- llm_model: requestedModel
383
- };
384
- const rawMessages = Array.isArray(bodyObj.messages) ? bodyObj.messages : [];
385
- const { hasTools, requestedTools, effectiveMessages } = prepareToolMessages(
386
- bodyObj,
387
- rawMessages
388
- );
389
- const messages = effectiveMessages;
390
- const messageContent = buildMessageContent(messages);
391
- if (!messageContent.trim()) {
392
- return makeErrorResult(400, "No message content to send", body);
393
- }
394
- const innerAiBody = {
395
- message: messageContent,
396
- session_id: crypto.randomUUID(),
397
- context_type: "no_context",
398
- ai_model: {
399
- id: modelEntry?.id || void 0,
400
- llm_model: modelEntry?.llm_model ?? requestedModel
401
- },
402
- is_extension: false,
403
- env: "production",
404
- temporary: true,
405
- use_web_search: false,
406
- knowledge_list: []
407
- };
408
- const reqHeaders = buildHeaders(token, email, deviceId);
409
- let upstream;
410
- try {
411
- upstream = await fetch(INNER_AI_CHAT_URL, {
412
- method: "POST",
413
- headers: reqHeaders,
414
- body: JSON.stringify(innerAiBody),
415
- signal: signal ?? void 0
416
- });
417
- } catch (err) {
418
- const message = err instanceof Error ? err.message : "Request failed";
419
- return makeErrorResult(
420
- 502,
421
- `Inner.ai request failed: ${sanitizeErrorMessage(message)}`,
422
- body
423
- );
424
- }
425
- if (upstream.status === 401 || upstream.status === 403) {
426
- credentialCache.delete(tokenCacheKey(token));
427
- return makeErrorResult(
428
- upstream.status,
429
- "Inner.ai authentication failed \u2014 re-paste your token cookie",
430
- body
431
- );
432
- }
433
- if (!upstream.ok) {
434
- const errText = await upstream.text().catch(() => "");
435
- return makeErrorResult(
436
- upstream.status,
437
- `Inner.ai returned HTTP ${upstream.status}: ${sanitizeErrorMessage(errText)}`,
438
- body
439
- );
440
- }
441
- if (!upstream.body) {
442
- return makeErrorResult(502, "Inner.ai returned an empty response", body);
443
- }
444
- const resolvedModel = modelEntry?.llm_model ?? requestedModel;
445
- if (wantStream !== false) {
446
- return {
447
- response: new Response(transformInnerAiSSE(upstream.body, resolvedModel), {
448
- headers: {
449
- "Content-Type": "text/event-stream",
450
- "Cache-Control": "no-cache",
451
- Connection: "keep-alive"
452
- }
453
- }),
454
- url: INNER_AI_CHAT_URL,
455
- headers: reqHeaders,
456
- transformedBody: innerAiBody
457
- };
458
- }
459
- let content;
460
- try {
461
- content = await collectContent(upstream.body);
462
- } catch (err) {
463
- if (err instanceof InnerAiStreamError) {
464
- return makeErrorResult(err.status, err.message, body);
465
- }
466
- throw err;
467
- }
468
- const completionId = `chatcmpl-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
469
- if (hasTools) {
470
- const {
471
- content: cleaned,
472
- toolCalls,
473
- finishReason
474
- } = buildToolAwareResult(content, requestedTools, "inner");
475
- if (toolCalls) {
476
- return {
477
- response: new Response(
478
- JSON.stringify({
479
- id: completionId,
480
- object: "chat.completion",
481
- created: Math.floor(Date.now() / 1e3),
482
- model: resolvedModel,
483
- choices: [
484
- {
485
- index: 0,
486
- message: { role: "assistant", content: null, tool_calls: toolCalls },
487
- finish_reason: finishReason
488
- }
489
- ]
490
- }),
491
- { status: 200, headers: { "Content-Type": "application/json" } }
492
- ),
493
- url: INNER_AI_CHAT_URL,
494
- headers: reqHeaders,
495
- transformedBody: innerAiBody
496
- };
497
- }
498
- content = cleaned;
499
- }
500
- return {
501
- response: new Response(
502
- JSON.stringify({
503
- id: completionId,
504
- object: "chat.completion",
505
- created: Math.floor(Date.now() / 1e3),
506
- model: resolvedModel,
507
- choices: [
508
- {
509
- index: 0,
510
- message: { role: "assistant", content },
511
- finish_reason: "stop"
512
- }
513
- ],
514
- usage: { prompt_tokens: 0, completion_tokens: 0, total_tokens: 0 }
515
- }),
516
- { headers: { "Content-Type": "application/json" } }
517
- ),
518
- url: INNER_AI_CHAT_URL,
519
- headers: reqHeaders,
520
- transformedBody: innerAiBody
521
- };
522
- }
523
- }
524
- export {
525
- InnerAiExecutor,
526
- findModel
527
- };
@@ -1,123 +0,0 @@
1
- import { DefaultExecutor } from "./default.js";
2
- import { getCachedKimchiModelMetadata } from "../services/kimchiModels.js";
3
-
4
- const TOP_LEVEL_OPENAI_GATEWAY_DROPS = [
5
- "anthropic_version",
6
- "anthropic_beta",
7
- "client_metadata",
8
- "mcp_servers",
9
- "stop_sequences",
10
- "thinking",
11
- "top_k",
12
- ];
13
-
14
- function systemToText(system) {
15
- if (typeof system === "string") return system;
16
- if (Array.isArray(system)) {
17
- return system
18
- .map((part) => {
19
- if (typeof part === "string") return part;
20
- if (typeof part?.text === "string") return part.text;
21
- return "";
22
- })
23
- .filter(Boolean)
24
- .join("\n");
25
- }
26
- return "";
27
- }
28
-
29
- function mergeTopLevelSystem(body) {
30
- if (!body?.system || !Array.isArray(body.messages)) return;
31
- const text = systemToText(body.system).trim();
32
- if (!text) return;
33
-
34
- const existing = body.messages.find((msg) => msg?.role === "system");
35
- if (!existing) {
36
- body.messages.unshift({ role: "system", content: text });
37
- return;
38
- }
39
-
40
- if (typeof existing.content === "string") {
41
- existing.content = `${text}\n\n${existing.content}`;
42
- } else if (Array.isArray(existing.content)) {
43
- existing.content.unshift({ type: "text", text });
44
- }
45
- }
46
-
47
- function stripMessageArtifacts(body) {
48
- if (!Array.isArray(body?.messages)) return;
49
- for (const msg of body.messages) {
50
- if (!msg || typeof msg !== "object") continue;
51
- delete msg.cache_control;
52
- if (!Array.isArray(msg.content)) continue;
53
- msg.content = msg.content.map((part) => {
54
- if (!part || typeof part !== "object") return part;
55
- const { cache_control, signature, ...clean } = part;
56
- return clean;
57
- });
58
- }
59
- }
60
-
61
- function stripToolArtifacts(body) {
62
- if (!Array.isArray(body?.tools)) return;
63
- body.tools = body.tools.map((tool) => {
64
- if (!tool || typeof tool !== "object") return tool;
65
- const { cache_control, ...clean } = tool;
66
- return clean;
67
- });
68
- }
69
-
70
- // Strip `reasoning_content` echoed by clients on assistant messages — but
71
- // only when it's a real thinking block. `DefaultExecutor.transformRequest`
72
- // runs `injectReasoningContent` first and may inject a 1-char placeholder
73
- // (" ") for upstream validation; the placeholder is small (no token cost
74
- // worth stripping) and stripping it would re-trigger upstream to complain
75
- // about missing reasoning on the next turn. Threshold matches the
76
- // placeholder length with a safety margin.
77
- const REASONING_PLACEHOLDER_MAX_LEN = 8;
78
-
79
- export function stripReasoningContent(body) {
80
- if (!Array.isArray(body?.messages)) return;
81
- for (const msg of body.messages) {
82
- if (msg && msg.role === "assistant" && typeof msg.reasoning_content === "string"
83
- && msg.reasoning_content.length > REASONING_PLACEHOLDER_MAX_LEN) {
84
- delete msg.reasoning_content;
85
- }
86
- }
87
- }
88
-
89
- function isAnthropicBackedKimchiModel(model) {
90
- const meta = getCachedKimchiModelMetadata(model);
91
- if (meta?.provider === "anthropic" || meta?.upstreamProvider === "anthropic") return true;
92
- return /(^|[-_/])(?:claude|anthropic)(?:[-_/]|$)/i.test(String(model || ""));
93
- }
94
-
95
- export class KimchiExecutor extends DefaultExecutor {
96
- constructor() {
97
- super("kimchi");
98
- }
99
-
100
- transformRequest(model, body, stream, credentials) {
101
- const transformed = super.transformRequest(model, body, stream, credentials);
102
- if (!transformed || typeof transformed !== "object") return transformed;
103
-
104
- mergeTopLevelSystem(transformed);
105
- for (const key of TOP_LEVEL_OPENAI_GATEWAY_DROPS) {
106
- if (transformed[key] !== undefined) delete transformed[key];
107
- }
108
- delete transformed.system;
109
-
110
- if (isAnthropicBackedKimchiModel(model)) {
111
- delete transformed.reasoning_effort;
112
- delete transformed.reasoning;
113
- delete transformed.thinking;
114
- }
115
-
116
- stripMessageArtifacts(transformed);
117
- stripToolArtifacts(transformed);
118
- stripReasoningContent(transformed);
119
- return transformed;
120
- }
121
- }
122
-
123
- export default KimchiExecutor;