@fudrouter/fsrouter 0.6.58 → 0.6.60

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 (599) hide show
  1. package/bin/copyJs.js +9 -0
  2. package/bin/rewriteSseImports.js +15 -5
  3. package/dist/open-sse/executors/blackbox-web.js +1 -1
  4. package/dist/open-sse/executors/claude-web.js +1 -1
  5. package/dist/open-sse/executors/gitlab.js +1 -1
  6. package/dist/open-sse/executors/huggingchat.js +1 -1
  7. package/dist/open-sse/executors/kimi-web.js +1 -1
  8. package/dist/open-sse/executors/ninerouter.js +2 -2
  9. package/dist/open-sse/executors/qoder.js +3 -3
  10. package/dist/open-sse/executors/qwen-web.js +1 -1
  11. package/dist/open-sse/executors/yuanbao-web.js +1 -1
  12. package/dist/open-sse/handlers/chatCore/nonStreamingHandler.js +1 -1
  13. package/dist/open-sse/handlers/chatCore/requestDetail.js +1 -1
  14. package/dist/open-sse/handlers/chatCore/sseToJsonHandler.js +1 -1
  15. package/dist/open-sse/handlers/chatCore/streamingHandler.js +1 -1
  16. package/dist/open-sse/handlers/chatCore.js +1 -1
  17. package/dist/open-sse/handlers/imageProviders/leonardo.js +1 -1
  18. package/dist/open-sse/handlers/imageProviders/weavy.js +1 -1
  19. package/dist/open-sse/handlers/videoProviders/weavy.js +1 -1
  20. package/dist/open-sse/mcp-server/tools/advancedTools.js +2 -2
  21. package/dist/open-sse/mcp-server/tools/agentSkillTools.js +1 -1
  22. package/dist/open-sse/mcp-server/tools/compressionTools.js +4 -4
  23. package/dist/open-sse/mcp-server/tools/gamificationTools.js +10 -10
  24. package/dist/open-sse/mcp-server/tools/githubSkillTools.js +1 -1
  25. package/dist/open-sse/mcp-server/tools/memoryTools.js +3 -3
  26. package/dist/open-sse/mcp-server/tools/notionTools.js +2 -2
  27. package/dist/open-sse/mcp-server/tools/obsidianTools.js +2 -2
  28. package/dist/open-sse/mcp-server/tools/pickFastestModel.js +1 -1
  29. package/dist/open-sse/mcp-server/tools/pluginTools.js +4 -4
  30. package/dist/open-sse/mcp-server/tools/skillTools.js +2 -2
  31. package/dist/open-sse/services/combo/quotaExhaustionCutoff.js +2 -2
  32. package/dist/open-sse/services/combo/quotaShareStrategy.js +1 -1
  33. package/dist/open-sse/services/combo/resolveAutoStrategy.js +1 -1
  34. package/dist/open-sse/services/combo/sessionStickiness.js +1 -1
  35. package/dist/open-sse/services/combo/targetSorters.js +2 -2
  36. package/dist/open-sse/services/combo/validateQuality.js +1 -1
  37. package/dist/open-sse/services/thinkingBudget.js +1 -1
  38. package/dist/open-sse/services/tokenRefresh/providers.js +3 -3
  39. package/dist/open-sse/utils/providerRequestLogging.js +1 -1
  40. package/dist/open-sse/utils/responsesStatePolicy.js +1 -1
  41. package/dist/open-sse/utils/stream.js +1 -1
  42. package/dist/open-sse/utils/streamFailureFinalization.js +1 -1
  43. package/dist/open-sse/utils/usageTracking.js +1 -1
  44. package/package.json +1 -1
  45. package/open-sse/AGENTS.md +0 -39
  46. package/open-sse/config/anthropicHeaders.js +0 -87
  47. package/open-sse/config/appConstants.js +0 -238
  48. package/open-sse/config/audioRegistry.js +0 -506
  49. package/open-sse/config/cliFingerprints.js +0 -304
  50. package/open-sse/config/codexInstructions.js +0 -119
  51. package/open-sse/config/codexQuotaScopes.js +0 -42
  52. package/open-sse/config/constants.js +0 -4
  53. package/open-sse/config/contextEditing.js +0 -68
  54. package/open-sse/config/credentialLoader.js +0 -83
  55. package/open-sse/config/defaultThinkingSignature.js +0 -12
  56. package/open-sse/config/embeddingRegistry.js +0 -264
  57. package/open-sse/config/errorConfig.js +0 -96
  58. package/open-sse/config/freeModelCatalog.data.js +0 -121
  59. package/open-sse/config/freeModelCatalog.js +0 -90
  60. package/open-sse/config/freeTierCatalog.js +0 -81
  61. package/open-sse/config/googleTtsLanguages.js +0 -62
  62. package/open-sse/config/imageParamDefs.js +0 -360
  63. package/open-sse/config/imageRegistry.js +0 -493
  64. package/open-sse/config/kiroConstants.js +0 -268
  65. package/open-sse/config/mediaConfig.js +0 -27
  66. package/open-sse/config/mediaServiceKinds.js +0 -71
  67. package/open-sse/config/models.js +0 -13
  68. package/open-sse/config/moderationRegistry.js +0 -71
  69. package/open-sse/config/musicRegistry.js +0 -99
  70. package/open-sse/config/ocrRegistry.js +0 -61
  71. package/open-sse/config/ollamaModels.js +0 -19
  72. package/open-sse/config/providerErrorRules.js +0 -114
  73. package/open-sse/config/providerFieldStrips.js +0 -35
  74. package/open-sse/config/providerHeaderProfiles.js +0 -191
  75. package/open-sse/config/providerModels.js +0 -106
  76. package/open-sse/config/providerRegistry.js +0 -16
  77. package/open-sse/config/providers.js +0 -19
  78. package/open-sse/config/registryUtils.js +0 -106
  79. package/open-sse/config/rerankRegistry.js +0 -177
  80. package/open-sse/config/runtimeConfig.js +0 -96
  81. package/open-sse/config/runway.js +0 -39
  82. package/open-sse/config/searchRegistry.js +0 -153
  83. package/open-sse/config/toolCloaking.js +0 -199
  84. package/open-sse/config/ttsModels.js +0 -129
  85. package/open-sse/config/videoRegistry.js +0 -207
  86. package/open-sse/executors/adapta-web.js +0 -435
  87. package/open-sse/executors/antigravity.js +0 -534
  88. package/open-sse/executors/antigravityUpstreamError.js +0 -13
  89. package/open-sse/executors/auggie.js +0 -437
  90. package/open-sse/executors/azure-openai.js +0 -32
  91. package/open-sse/executors/azure.js +0 -57
  92. package/open-sse/executors/base.js +0 -181
  93. package/open-sse/executors/bedrock.js +0 -633
  94. package/open-sse/executors/blackbox-web.js +0 -578
  95. package/open-sse/executors/chatgpt-web.js +0 -2042
  96. package/open-sse/executors/chipotle.js +0 -357
  97. package/open-sse/executors/claude-web-with-auto-refresh.js +0 -73
  98. package/open-sse/executors/claude-web.js +0 -586
  99. package/open-sse/executors/cliproxyapi.js +0 -296
  100. package/open-sse/executors/cloudflare-ai.js +0 -46
  101. package/open-sse/executors/codebuddy-cn.js +0 -40
  102. package/open-sse/executors/codex.js +0 -1324
  103. package/open-sse/executors/commandCode.js +0 -558
  104. package/open-sse/executors/commandcode.js +0 -88
  105. package/open-sse/executors/copilot-m365-connection.js +0 -176
  106. package/open-sse/executors/copilot-m365-frames.js +0 -192
  107. package/open-sse/executors/copilot-m365-web.js +0 -299
  108. package/open-sse/executors/copilot-web.js +0 -580
  109. package/open-sse/executors/cursor.js +0 -795
  110. package/open-sse/executors/deepseek-web-with-auto-refresh.js +0 -150
  111. package/open-sse/executors/deepseek-web.js +0 -875
  112. package/open-sse/executors/default.js +0 -430
  113. package/open-sse/executors/devin-cli.js +0 -351
  114. package/open-sse/executors/doubao-web.js +0 -550
  115. package/open-sse/executors/duckduckgo-web.js +0 -629
  116. package/open-sse/executors/forceResponsesUpstream.js +0 -33
  117. package/open-sse/executors/gemini-business.js +0 -320
  118. package/open-sse/executors/gemini-cli.js +0 -89
  119. package/open-sse/executors/gemini-web.js +0 -297
  120. package/open-sse/executors/github.js +0 -379
  121. package/open-sse/executors/gitlab.js +0 -569
  122. package/open-sse/executors/glm.js +0 -361
  123. package/open-sse/executors/grok-cli.js +0 -119
  124. package/open-sse/executors/grok-web.js +0 -345
  125. package/open-sse/executors/huggingchat.js +0 -467
  126. package/open-sse/executors/iflow.js +0 -108
  127. package/open-sse/executors/index.js +0 -78
  128. package/open-sse/executors/inner-ai.js +0 -527
  129. package/open-sse/executors/kimchi.js +0 -123
  130. package/open-sse/executors/kimi-web.js +0 -325
  131. package/open-sse/executors/kimi.js +0 -97
  132. package/open-sse/executors/kiro.js +0 -503
  133. package/open-sse/executors/kiroThinking.js +0 -44
  134. package/open-sse/executors/lmarena.js +0 -395
  135. package/open-sse/executors/mimo-free.js +0 -167
  136. package/open-sse/executors/mimocode.js +0 -392
  137. package/open-sse/executors/ninerouter.js +0 -155
  138. package/open-sse/executors/nlpcloud.js +0 -438
  139. package/open-sse/executors/ollama-local.js +0 -14
  140. package/open-sse/executors/opencode-go.js +0 -41
  141. package/open-sse/executors/opencode.js +0 -32
  142. package/open-sse/executors/perplexity-web.js +0 -581
  143. package/open-sse/executors/poe-web.js +0 -133
  144. package/open-sse/executors/pollinations.js +0 -95
  145. package/open-sse/executors/puter.js +0 -31
  146. package/open-sse/executors/qoder.js +0 -448
  147. package/open-sse/executors/qwen-web.js +0 -372
  148. package/open-sse/executors/qwen.js +0 -129
  149. package/open-sse/executors/t3-chat-web.js +0 -417
  150. package/open-sse/executors/theoldllm.js +0 -290
  151. package/open-sse/executors/trae.js +0 -418
  152. package/open-sse/executors/v0-vercel-web.js +0 -141
  153. package/open-sse/executors/venice-web.js +0 -142
  154. package/open-sse/executors/vertex.js +0 -131
  155. package/open-sse/executors/vertexMedia.js +0 -236
  156. package/open-sse/executors/windsurf.js +0 -560
  157. package/open-sse/executors/xai.js +0 -46
  158. package/open-sse/executors/xiaomi-tokenplan.js +0 -19
  159. package/open-sse/executors/yuanbao-web.js +0 -385
  160. package/open-sse/executors/zed-hosted.js +0 -281
  161. package/open-sse/executors/zenmux-free.js +0 -247
  162. package/open-sse/handlers/audioSpeech.js +0 -759
  163. package/open-sse/handlers/audioTranscription.js +0 -395
  164. package/open-sse/handlers/audioTranslation.js +0 -181
  165. package/open-sse/handlers/chatCore/nonStreamingHandler.js +0 -300
  166. package/open-sse/handlers/chatCore/requestDetail.js +0 -102
  167. package/open-sse/handlers/chatCore/sseToJsonHandler.js +0 -231
  168. package/open-sse/handlers/chatCore/streamingHandler.js +0 -95
  169. package/open-sse/handlers/chatCore.js +0 -404
  170. package/open-sse/handlers/embeddingProviders/_base.js +0 -4
  171. package/open-sse/handlers/embeddingProviders/gemini.js +0 -54
  172. package/open-sse/handlers/embeddingProviders/index.js +0 -23
  173. package/open-sse/handlers/embeddingProviders/openai.js +0 -39
  174. package/open-sse/handlers/embeddingProviders/openaiCompatNode.js +0 -13
  175. package/open-sse/handlers/embeddingsCore.js +0 -126
  176. package/open-sse/handlers/fetch/index.js +0 -237
  177. package/open-sse/handlers/imageGenerationCore.js +0 -230
  178. package/open-sse/handlers/imageProviders/_base.js +0 -31
  179. package/open-sse/handlers/imageProviders/antigravity.js +0 -73
  180. package/open-sse/handlers/imageProviders/blackForestLabs.js +0 -63
  181. package/open-sse/handlers/imageProviders/cloudflareAi.js +0 -207
  182. package/open-sse/handlers/imageProviders/codex.js +0 -217
  183. package/open-sse/handlers/imageProviders/comfyui.js +0 -25
  184. package/open-sse/handlers/imageProviders/falAi.js +0 -62
  185. package/open-sse/handlers/imageProviders/gemini.js +0 -40
  186. package/open-sse/handlers/imageProviders/huggingface.js +0 -38
  187. package/open-sse/handlers/imageProviders/index.js +0 -44
  188. package/open-sse/handlers/imageProviders/leonardo.js +0 -435
  189. package/open-sse/handlers/imageProviders/nanobanana.js +0 -79
  190. package/open-sse/handlers/imageProviders/openai.js +0 -61
  191. package/open-sse/handlers/imageProviders/runwayml.js +0 -72
  192. package/open-sse/handlers/imageProviders/sdwebui.js +0 -36
  193. package/open-sse/handlers/imageProviders/stabilityAi.js +0 -59
  194. package/open-sse/handlers/imageProviders/weavy.js +0 -222
  195. package/open-sse/handlers/moderations.js +0 -92
  196. package/open-sse/handlers/ocr.js +0 -89
  197. package/open-sse/handlers/rerank.js +0 -223
  198. package/open-sse/handlers/responseSanitizer/reasoning.js +0 -144
  199. package/open-sse/handlers/responsesHandler.js +0 -99
  200. package/open-sse/handlers/search/callers.js +0 -371
  201. package/open-sse/handlers/search/chatSearch.js +0 -409
  202. package/open-sse/handlers/search/index.js +0 -201
  203. package/open-sse/handlers/search/normalizers.js +0 -223
  204. package/open-sse/handlers/search.js +0 -1056
  205. package/open-sse/handlers/sseParser.js +0 -469
  206. package/open-sse/handlers/sttCore.js +0 -193
  207. package/open-sse/handlers/ttsCore.js +0 -74
  208. package/open-sse/handlers/ttsProviders/_base.js +0 -39
  209. package/open-sse/handlers/ttsProviders/edgeTts.js +0 -89
  210. package/open-sse/handlers/ttsProviders/elevenlabs.js +0 -48
  211. package/open-sse/handlers/ttsProviders/gemini.js +0 -117
  212. package/open-sse/handlers/ttsProviders/genericFormats.js +0 -169
  213. package/open-sse/handlers/ttsProviders/googleTts.js +0 -54
  214. package/open-sse/handlers/ttsProviders/index.js +0 -50
  215. package/open-sse/handlers/ttsProviders/localDevice.js +0 -87
  216. package/open-sse/handlers/ttsProviders/minimax.js +0 -59
  217. package/open-sse/handlers/ttsProviders/openai.js +0 -30
  218. package/open-sse/handlers/ttsProviders/openrouter.js +0 -70
  219. package/open-sse/handlers/usageExtractor.js +0 -93
  220. package/open-sse/handlers/videoGenerationCore.js +0 -119
  221. package/open-sse/handlers/videoProviders/index.js +0 -22
  222. package/open-sse/handlers/videoProviders/leonardo.js +0 -511
  223. package/open-sse/handlers/videoProviders/weavy.js +0 -198
  224. package/open-sse/handlers/webFetch.js +0 -200
  225. package/open-sse/index.js +0 -79
  226. package/open-sse/mcp-server/audit.js +0 -283
  227. package/open-sse/mcp-server/catalog.js +0 -184
  228. package/open-sse/mcp-server/descriptionCompressor.js +0 -175
  229. package/open-sse/mcp-server/httpAuthContext.js +0 -32
  230. package/open-sse/mcp-server/httpTransport.js +0 -229
  231. package/open-sse/mcp-server/index.js +0 -33
  232. package/open-sse/mcp-server/mcpCallerIdentity.js +0 -21
  233. package/open-sse/mcp-server/runtimeHeartbeat.js +0 -110
  234. package/open-sse/mcp-server/schemas/a2a.js +0 -153
  235. package/open-sse/mcp-server/schemas/audit.js +0 -17
  236. package/open-sse/mcp-server/schemas/index.js +0 -166
  237. package/open-sse/mcp-server/schemas/pickFastestModel.js +0 -90
  238. package/open-sse/mcp-server/schemas/toolDefinition.js +0 -0
  239. package/open-sse/mcp-server/schemas/toolSearch.js +0 -32
  240. package/open-sse/mcp-server/schemas/tools.js +0 -1219
  241. package/open-sse/mcp-server/scopeEnforcement.js +0 -80
  242. package/open-sse/mcp-server/server.js +0 -1168
  243. package/open-sse/mcp-server/toolCardinality.js +0 -78
  244. package/open-sse/mcp-server/toolSearch/catalog.js +0 -66
  245. package/open-sse/mcp-server/toolSearch/handler.js +0 -20
  246. package/open-sse/mcp-server/toolSearch/index.js +0 -10
  247. package/open-sse/mcp-server/toolSearch/register.js +0 -21
  248. package/open-sse/mcp-server/toolSearch/search.js +0 -55
  249. package/open-sse/mcp-server/toolSearch/signature.js +0 -67
  250. package/open-sse/mcp-server/tools/advancedTools.js +0 -893
  251. package/open-sse/mcp-server/tools/agentSkillTools.js +0 -69
  252. package/open-sse/mcp-server/tools/compressionTools.js +0 -309
  253. package/open-sse/mcp-server/tools/gamificationTools.js +0 -134
  254. package/open-sse/mcp-server/tools/githubSkillTools.js +0 -102
  255. package/open-sse/mcp-server/tools/memoryTools.js +0 -118
  256. package/open-sse/mcp-server/tools/notionTools.js +0 -101
  257. package/open-sse/mcp-server/tools/obsidianTools.js +0 -307
  258. package/open-sse/mcp-server/tools/pickFastestModel.js +0 -223
  259. package/open-sse/mcp-server/tools/pluginTools.js +0 -181
  260. package/open-sse/mcp-server/tools/poolTools.js +0 -139
  261. package/open-sse/mcp-server/tools/skillTools.js +0 -113
  262. package/open-sse/package.json +0 -10
  263. package/open-sse/providers/REGISTRY_TEMPLATE.js +0 -98
  264. package/open-sse/providers/capabilities.js +0 -293
  265. package/open-sse/providers/index.js +0 -51
  266. package/open-sse/providers/models/helpers.js +0 -20
  267. package/open-sse/providers/models/namePatterns.js +0 -33
  268. package/open-sse/providers/models/schema.js +0 -40
  269. package/open-sse/providers/pricing.js +0 -308
  270. package/open-sse/providers/registry/alicode-intl.js +0 -30
  271. package/open-sse/providers/registry/alicode.js +0 -31
  272. package/open-sse/providers/registry/anthropic.js +0 -37
  273. package/open-sse/providers/registry/antigravity.js +0 -81
  274. package/open-sse/providers/registry/assemblyai.js +0 -38
  275. package/open-sse/providers/registry/aws-polly.js +0 -45
  276. package/open-sse/providers/registry/azure.js +0 -21
  277. package/open-sse/providers/registry/black-forest-labs.js +0 -32
  278. package/open-sse/providers/registry/blackbox.js +0 -41
  279. package/open-sse/providers/registry/brave-search.js +0 -35
  280. package/open-sse/providers/registry/byteplus.js +0 -35
  281. package/open-sse/providers/registry/cartesia.js +0 -36
  282. package/open-sse/providers/registry/cerebras.js +0 -31
  283. package/open-sse/providers/registry/chutes.js +0 -24
  284. package/open-sse/providers/registry/claude.js +0 -87
  285. package/open-sse/providers/registry/cline.js +0 -51
  286. package/open-sse/providers/registry/clinepass.js +0 -57
  287. package/open-sse/providers/registry/cloudflare-ai.js +0 -55
  288. package/open-sse/providers/registry/codebuddy-cn.js +0 -77
  289. package/open-sse/providers/registry/codex.js +0 -100
  290. package/open-sse/providers/registry/cohere.js +0 -27
  291. package/open-sse/providers/registry/comfyui.js +0 -20
  292. package/open-sse/providers/registry/commandcode.js +0 -43
  293. package/open-sse/providers/registry/coqui.js +0 -30
  294. package/open-sse/providers/registry/cursor.js +0 -58
  295. package/open-sse/providers/registry/deepgram.js +0 -33
  296. package/open-sse/providers/registry/deepseek.js +0 -51
  297. package/open-sse/providers/registry/digitalocean.js +0 -92
  298. package/open-sse/providers/registry/edge-tts.js +0 -24
  299. package/open-sse/providers/registry/elevenlabs.js +0 -35
  300. package/open-sse/providers/registry/exa.js +0 -50
  301. package/open-sse/providers/registry/fal-ai.js +0 -34
  302. package/open-sse/providers/registry/featherless.js +0 -34
  303. package/open-sse/providers/registry/firecrawl.js +0 -34
  304. package/open-sse/providers/registry/fireworks.js +0 -29
  305. package/open-sse/providers/registry/gemini-cli.js +0 -58
  306. package/open-sse/providers/registry/gemini.js +0 -83
  307. package/open-sse/providers/registry/github.js +0 -88
  308. package/open-sse/providers/registry/gitlab.js +0 -32
  309. package/open-sse/providers/registry/glm-cn.js +0 -35
  310. package/open-sse/providers/registry/glm.js +0 -58
  311. package/open-sse/providers/registry/google-pse.js +0 -35
  312. package/open-sse/providers/registry/google-tts.js +0 -24
  313. package/open-sse/providers/registry/grok-cli.js +0 -86
  314. package/open-sse/providers/registry/grok-web.js +0 -39
  315. package/open-sse/providers/registry/groq.js +0 -37
  316. package/open-sse/providers/registry/huggingface.js +0 -34
  317. package/open-sse/providers/registry/hyperbolic.js +0 -35
  318. package/open-sse/providers/registry/ibm-bob.js +0 -27
  319. package/open-sse/providers/registry/iflow.js +0 -52
  320. package/open-sse/providers/registry/index.js +0 -210
  321. package/open-sse/providers/registry/inworld.js +0 -36
  322. package/open-sse/providers/registry/jina-ai.js +0 -42
  323. package/open-sse/providers/registry/jina-reader.js +0 -34
  324. package/open-sse/providers/registry/kilocode.js +0 -51
  325. package/open-sse/providers/registry/kimchi.js +0 -49
  326. package/open-sse/providers/registry/kimi-coding.js +0 -65
  327. package/open-sse/providers/registry/kimi.js +0 -56
  328. package/open-sse/providers/registry/kiro.js +0 -115
  329. package/open-sse/providers/registry/linkup.js +0 -34
  330. package/open-sse/providers/registry/local-device.js +0 -24
  331. package/open-sse/providers/registry/mimo-free.js +0 -24
  332. package/open-sse/providers/registry/minimax-cn.js +0 -76
  333. package/open-sse/providers/registry/minimax.js +0 -83
  334. package/open-sse/providers/registry/mistral.js +0 -34
  335. package/open-sse/providers/registry/mmf.js +0 -19
  336. package/open-sse/providers/registry/nanobanana.js +0 -35
  337. package/open-sse/providers/registry/nebius.js +0 -27
  338. package/open-sse/providers/registry/nvidia.js +0 -43
  339. package/open-sse/providers/registry/ollama-local.js +0 -19
  340. package/open-sse/providers/registry/ollama.js +0 -36
  341. package/open-sse/providers/registry/openai.js +0 -84
  342. package/open-sse/providers/registry/opencode-go.js +0 -41
  343. package/open-sse/providers/registry/opencode.js +0 -25
  344. package/open-sse/providers/registry/openrouter.js +0 -60
  345. package/open-sse/providers/registry/perplexity-agent.js +0 -49
  346. package/open-sse/providers/registry/perplexity-web.js +0 -33
  347. package/open-sse/providers/registry/perplexity.js +0 -37
  348. package/open-sse/providers/registry/playht.js +0 -36
  349. package/open-sse/providers/registry/qoder.js +0 -54
  350. package/open-sse/providers/registry/qwen.js +0 -33
  351. package/open-sse/providers/registry/recraft.js +0 -24
  352. package/open-sse/providers/registry/runwayml.js +0 -30
  353. package/open-sse/providers/registry/sdwebui.js +0 -20
  354. package/open-sse/providers/registry/searchapi.js +0 -35
  355. package/open-sse/providers/registry/searxng.js +0 -35
  356. package/open-sse/providers/registry/serper.js +0 -35
  357. package/open-sse/providers/registry/siliconflow.js +0 -39
  358. package/open-sse/providers/registry/stability-ai.js +0 -31
  359. package/open-sse/providers/registry/tavily.js +0 -50
  360. package/open-sse/providers/registry/together.js +0 -31
  361. package/open-sse/providers/registry/topaz.js +0 -19
  362. package/open-sse/providers/registry/tortoise.js +0 -30
  363. package/open-sse/providers/registry/venice.js +0 -56
  364. package/open-sse/providers/registry/vercel-ai-gateway.js +0 -41
  365. package/open-sse/providers/registry/vertex-partner.js +0 -29
  366. package/open-sse/providers/registry/vertex.js +0 -32
  367. package/open-sse/providers/registry/volcengine-ark.js +0 -35
  368. package/open-sse/providers/registry/voyage-ai.js +0 -30
  369. package/open-sse/providers/registry/xai.js +0 -45
  370. package/open-sse/providers/registry/xiaomi-mimo.js +0 -46
  371. package/open-sse/providers/registry/xiaomi-tokenplan.js +0 -63
  372. package/open-sse/providers/registry/youcom.js +0 -35
  373. package/open-sse/providers/schema.js +0 -76
  374. package/open-sse/providers/shared.js +0 -74
  375. package/open-sse/providers/thinkingLevels.js +0 -48
  376. package/open-sse/rtk/applyFilter.js +0 -15
  377. package/open-sse/rtk/autodetect.js +0 -111
  378. package/open-sse/rtk/caveman.js +0 -100
  379. package/open-sse/rtk/cavemanPrompts.js +0 -78
  380. package/open-sse/rtk/constants.js +0 -55
  381. package/open-sse/rtk/filters/buildOutput.js +0 -127
  382. package/open-sse/rtk/filters/dedupLog.js +0 -44
  383. package/open-sse/rtk/filters/find.js +0 -50
  384. package/open-sse/rtk/filters/gitDiff.js +0 -92
  385. package/open-sse/rtk/filters/gitLog.js +0 -99
  386. package/open-sse/rtk/filters/gitStatus.js +0 -117
  387. package/open-sse/rtk/filters/grep.js +0 -48
  388. package/open-sse/rtk/filters/ls.js +0 -79
  389. package/open-sse/rtk/filters/readNumbered.js +0 -27
  390. package/open-sse/rtk/filters/searchList.js +0 -52
  391. package/open-sse/rtk/filters/smartTruncate.js +0 -15
  392. package/open-sse/rtk/filters/tree.js +0 -32
  393. package/open-sse/rtk/headroom.js +0 -215
  394. package/open-sse/rtk/index.js +0 -155
  395. package/open-sse/rtk/paleo.js +0 -47
  396. package/open-sse/rtk/ponytail.js +0 -9
  397. package/open-sse/rtk/ponytailPrompt.js +0 -52
  398. package/open-sse/rtk/ponytailPrompts.js +0 -76
  399. package/open-sse/rtk/pxpipe.js +0 -104
  400. package/open-sse/rtk/registry.js +0 -38
  401. package/open-sse/rtk/systemInject.js +0 -98
  402. package/open-sse/services/accountFallback.js +0 -323
  403. package/open-sse/services/antigravityHeaders.js +0 -91
  404. package/open-sse/services/antigravityVersion.js +0 -154
  405. package/open-sse/services/clinepassModels.js +0 -63
  406. package/open-sse/services/codexQuotaFetcher.js +0 -312
  407. package/open-sse/services/codexVerbosity.js +0 -30
  408. package/open-sse/services/combo/context.js +0 -12
  409. package/open-sse/services/combo/fingerprintExpansion.js +0 -51
  410. package/open-sse/services/combo/headroomRanking.js +0 -28
  411. package/open-sse/services/combo/quotaExhaustionCutoff.js +0 -87
  412. package/open-sse/services/combo/quotaScoring.js +0 -226
  413. package/open-sse/services/combo/quotaShareConcurrency.js +0 -25
  414. package/open-sse/services/combo/quotaShareInflight.js +0 -50
  415. package/open-sse/services/combo/quotaShareStrategy.js +0 -130
  416. package/open-sse/services/combo/resolveAutoStrategy.js +0 -231
  417. package/open-sse/services/combo/responseValidation.js +0 -140
  418. package/open-sse/services/combo/runtimeUnits.js +0 -195
  419. package/open-sse/services/combo/sessionStickiness.js +0 -128
  420. package/open-sse/services/combo/shadowRouting.js +0 -131
  421. package/open-sse/services/combo/targetExhaustion.js +0 -75
  422. package/open-sse/services/combo/targetSorters.js +0 -126
  423. package/open-sse/services/combo/targetTimeoutRunner.js +0 -65
  424. package/open-sse/services/combo/validateQuality.js +0 -271
  425. package/open-sse/services/combo.js +0 -571
  426. package/open-sse/services/comboAgentMiddleware.js +0 -91
  427. package/open-sse/services/comboConfig.js +0 -153
  428. package/open-sse/services/comboManifestMetrics.js +0 -10
  429. package/open-sse/services/comboMetrics.js +0 -278
  430. package/open-sse/services/compact.js +0 -71
  431. package/open-sse/services/copilotModels.js +0 -155
  432. package/open-sse/services/emergencyFallback.js +0 -109
  433. package/open-sse/services/errorClassifier.js +0 -190
  434. package/open-sse/services/evalRouting.js +0 -201
  435. package/open-sse/services/freeWebSearch.js +0 -4
  436. package/open-sse/services/fusion.js +0 -223
  437. package/open-sse/services/intentClassifier.js +0 -631
  438. package/open-sse/services/kimchiModels.js +0 -176
  439. package/open-sse/services/kiroModels.js +0 -332
  440. package/open-sse/services/model.js +0 -136
  441. package/open-sse/services/modelCapabilities.js +0 -5
  442. package/open-sse/services/modelDeprecation.js +0 -101
  443. package/open-sse/services/modelFamilyFallback.js +0 -166
  444. package/open-sse/services/oauthCredentialManager.js +0 -156
  445. package/open-sse/services/pipeline.js +0 -107
  446. package/open-sse/services/projectId.js +0 -306
  447. package/open-sse/services/provider.js +0 -169
  448. package/open-sse/services/providerCooldownTracker.js +0 -94
  449. package/open-sse/services/providerDefaultRateLimit.js +0 -11
  450. package/open-sse/services/proxyAutoSelector.js +0 -24
  451. package/open-sse/services/qoderModels.js +0 -214
  452. package/open-sse/services/quotaFetchThrottle.js +0 -103
  453. package/open-sse/services/quotaMonitor.js +0 -310
  454. package/open-sse/services/quotaPreflight.js +0 -266
  455. package/open-sse/services/rateLimitManager/headers.js +0 -56
  456. package/open-sse/services/rateLimitManager.js +0 -616
  457. package/open-sse/services/rateLimitSemaphore.js +0 -112
  458. package/open-sse/services/responsesInputSanitizer.js +0 -99
  459. package/open-sse/services/slidingWindowLimiter.js +0 -44
  460. package/open-sse/services/streamRecovery.js +0 -355
  461. package/open-sse/services/taskAwareRouter.js +0 -227
  462. package/open-sse/services/taskAwareRouting.js +0 -332
  463. package/open-sse/services/thinkingBudget.js +0 -247
  464. package/open-sse/services/tokenRefresh/dedup.js +0 -31
  465. package/open-sse/services/tokenRefresh/providers.js +0 -624
  466. package/open-sse/services/tokenRefresh.js +0 -254
  467. package/open-sse/services/usage/claude.js +0 -147
  468. package/open-sse/services/usage/codebuddy-cn.js +0 -138
  469. package/open-sse/services/usage/codex.js +0 -267
  470. package/open-sse/services/usage/github.js +0 -100
  471. package/open-sse/services/usage/google.js +0 -241
  472. package/open-sse/services/usage/grok-cli.js +0 -274
  473. package/open-sse/services/usage/kiro.js +0 -188
  474. package/open-sse/services/usage/minimax.js +0 -234
  475. package/open-sse/services/usage/misc.js +0 -288
  476. package/open-sse/services/usage/shared.js +0 -70
  477. package/open-sse/services/usage.js +0 -62
  478. package/open-sse/services/usageDb.js +0 -2
  479. package/open-sse/services/webSearchRouting.js +0 -25
  480. package/open-sse/services/wildcardRouter.js +0 -59
  481. package/open-sse/shared/clineAuth.js +0 -37
  482. package/open-sse/shared/machineId.js +0 -19
  483. package/open-sse/shared/qoder/constants.js +0 -64
  484. package/open-sse/shared/qoder/cosy.js +0 -175
  485. package/open-sse/shared/qoder/encoding.js +0 -55
  486. package/open-sse/transformer/responsesTransformer.js +0 -439
  487. package/open-sse/transformer/streamToJsonConverter.js +0 -103
  488. package/open-sse/translator/concerns/chunk.js +0 -11
  489. package/open-sse/translator/concerns/finishReason.js +0 -63
  490. package/open-sse/translator/concerns/image.js +0 -124
  491. package/open-sse/translator/concerns/json.js +0 -5
  492. package/open-sse/translator/concerns/message.js +0 -7
  493. package/open-sse/translator/concerns/modality.js +0 -155
  494. package/open-sse/translator/concerns/paramSupport.js +0 -75
  495. package/open-sse/translator/concerns/prefetch.js +0 -96
  496. package/open-sse/translator/concerns/reasoning.js +0 -24
  497. package/open-sse/translator/concerns/thinking.js +0 -53
  498. package/open-sse/translator/concerns/thinkingUnified.js +0 -329
  499. package/open-sse/translator/concerns/toolCall.js +0 -153
  500. package/open-sse/translator/concerns/usage.js +0 -69
  501. package/open-sse/translator/formats/claude.js +0 -368
  502. package/open-sse/translator/formats/gemini.js +0 -380
  503. package/open-sse/translator/formats/maxTokens.js +0 -34
  504. package/open-sse/translator/formats/openai.js +0 -134
  505. package/open-sse/translator/formats/responsesApi.js +0 -141
  506. package/open-sse/translator/formats.js +0 -36
  507. package/open-sse/translator/helpers/claudeHelper.js +0 -216
  508. package/open-sse/translator/helpers/geminiHelper.js +0 -372
  509. package/open-sse/translator/helpers/imageHelper.js +0 -34
  510. package/open-sse/translator/helpers/maxTokensHelper.js +0 -27
  511. package/open-sse/translator/helpers/openaiHelper.js +0 -130
  512. package/open-sse/translator/helpers/responsesApiHelper.js +0 -139
  513. package/open-sse/translator/helpers/toolCallHelper.js +0 -148
  514. package/open-sse/translator/index.js +0 -252
  515. package/open-sse/translator/request/antigravity-to-openai.js +0 -242
  516. package/open-sse/translator/request/claude-to-kiro.js +0 -478
  517. package/open-sse/translator/request/claude-to-openai.js +0 -263
  518. package/open-sse/translator/request/gemini-to-openai.js +0 -152
  519. package/open-sse/translator/request/openai-responses.js +0 -385
  520. package/open-sse/translator/request/openai-to-claude.js +0 -383
  521. package/open-sse/translator/request/openai-to-commandcode.js +0 -176
  522. package/open-sse/translator/request/openai-to-cursor.js +0 -185
  523. package/open-sse/translator/request/openai-to-gemini.js +0 -442
  524. package/open-sse/translator/request/openai-to-kiro.js +0 -607
  525. package/open-sse/translator/request/openai-to-kiro.old.js +0 -278
  526. package/open-sse/translator/request/openai-to-ollama.js +0 -195
  527. package/open-sse/translator/request/openai-to-vertex.js +0 -42
  528. package/open-sse/translator/response/claude-to-openai.js +0 -195
  529. package/open-sse/translator/response/commandcode-to-openai.js +0 -188
  530. package/open-sse/translator/response/cursor-to-openai.js +0 -30
  531. package/open-sse/translator/response/gemini-to-openai.js +0 -147
  532. package/open-sse/translator/response/kiro-to-claude.js +0 -261
  533. package/open-sse/translator/response/kiro-to-openai.js +0 -160
  534. package/open-sse/translator/response/ollama-to-openai.js +0 -134
  535. package/open-sse/translator/response/openai-responses.js +0 -535
  536. package/open-sse/translator/response/openai-to-antigravity.js +0 -123
  537. package/open-sse/translator/response/openai-to-claude.js +0 -265
  538. package/open-sse/translator/schema/blocks.js +0 -43
  539. package/open-sse/translator/schema/defaults.js +0 -7
  540. package/open-sse/translator/schema/finishReasons.js +0 -27
  541. package/open-sse/translator/schema/index.js +0 -8
  542. package/open-sse/translator/schema/roles.js +0 -16
  543. package/open-sse/utils/agentGoalPolicy.js +0 -85
  544. package/open-sse/utils/aiSdkCompat.js +0 -75
  545. package/open-sse/utils/bypassHandler.js +0 -298
  546. package/open-sse/utils/cacheControlPolicy.js +0 -189
  547. package/open-sse/utils/claudeCloaking.js +0 -155
  548. package/open-sse/utils/claudeHeaderCache.js +0 -70
  549. package/open-sse/utils/claudeSignature.js +0 -41
  550. package/open-sse/utils/clientDetector.js +0 -63
  551. package/open-sse/utils/codebuddySanitizer.js +0 -96
  552. package/open-sse/utils/composerToolCalls.js +0 -158
  553. package/open-sse/utils/cors.js +0 -13
  554. package/open-sse/utils/cursorChecksum.js +0 -149
  555. package/open-sse/utils/cursorImages.js +0 -224
  556. package/open-sse/utils/cursorProtobuf.js +0 -904
  557. package/open-sse/utils/cursorVersionDetector.js +0 -55
  558. package/open-sse/utils/debugLog.js +0 -14
  559. package/open-sse/utils/diagnostics.js +0 -143
  560. package/open-sse/utils/error.js +0 -164
  561. package/open-sse/utils/estimateSize.js +0 -33
  562. package/open-sse/utils/finishReason.js +0 -32
  563. package/open-sse/utils/flattenToolHistory.js +0 -68
  564. package/open-sse/utils/headers.js +0 -36
  565. package/open-sse/utils/heapPressure.js +0 -35
  566. package/open-sse/utils/jsonToSse.js +0 -125
  567. package/open-sse/utils/keepaliveThreshold.js +0 -40
  568. package/open-sse/utils/logger.js +0 -104
  569. package/open-sse/utils/noThinkingAlias.js +0 -74
  570. package/open-sse/utils/number.js +0 -7
  571. package/open-sse/utils/ollamaTransform.js +0 -85
  572. package/open-sse/utils/opencodeHeaders.js +0 -47
  573. package/open-sse/utils/progressTracker.js +0 -81
  574. package/open-sse/utils/providerRequestLogging.js +0 -219
  575. package/open-sse/utils/proxyFetch.js +0 -369
  576. package/open-sse/utils/reasoningContentInjector.js +0 -79
  577. package/open-sse/utils/reasoningFields.js +0 -70
  578. package/open-sse/utils/requestLogger.js +0 -260
  579. package/open-sse/utils/responsesInputNormalization.js +0 -92
  580. package/open-sse/utils/responsesStatePolicy.js +0 -52
  581. package/open-sse/utils/responsesStreamHelpers.js +0 -49
  582. package/open-sse/utils/sessionManager.js +0 -240
  583. package/open-sse/utils/sleep.js +0 -6
  584. package/open-sse/utils/sse.js +0 -14
  585. package/open-sse/utils/sseConstants.js +0 -23
  586. package/open-sse/utils/sseHeartbeat.js +0 -104
  587. package/open-sse/utils/stream.js +0 -517
  588. package/open-sse/utils/streamFailureFinalization.js +0 -134
  589. package/open-sse/utils/streamHandler.js +0 -250
  590. package/open-sse/utils/streamHelpers.js +0 -137
  591. package/open-sse/utils/textualToolCall.js +0 -104
  592. package/open-sse/utils/thinkCloseMarker.js +0 -72
  593. package/open-sse/utils/thinkTagParser.js +0 -146
  594. package/open-sse/utils/toolCallArguments.js +0 -12
  595. package/open-sse/utils/toolDeduper.js +0 -49
  596. package/open-sse/utils/toolSources.js +0 -31
  597. package/open-sse/utils/upstreamResponseHeaders.js +0 -25
  598. package/open-sse/utils/urlSanitize.js +0 -15
  599. package/open-sse/utils/usageTracking.js +0 -347
@@ -1,146 +0,0 @@
1
- /**
2
- * Think Tag Parser
3
- *
4
- * Parses <think>...</think> tags from LLM output and converts them
5
- * to a structured `reasoning_content` field.
6
- *
7
- * Used by providers like DeepSeek, Qwen, and Qoder that embed
8
- * chain-of-thought reasoning inside <think> tags.
9
- *
10
- * Usage:
11
- * import { extractThinkTags, hasThinkTags } from "./thinkTagParser.js";
12
- *
13
- * const { reasoning, content } = extractThinkTags(rawOutput);
14
- * // reasoning = "step-by-step thinking..."
15
- * // content = "final answer..."
16
- */
17
-
18
- const THINK_OPEN = "<think>";
19
- const THINK_CLOSE = "</think>";
20
-
21
- /**
22
- * Check if text contains think tags
23
- * @param {string} text - Raw output text
24
- * @returns {boolean}
25
- */
26
- export function hasThinkTags(text) {
27
- if (!text) return false;
28
- return text.includes(THINK_OPEN);
29
- }
30
-
31
- /**
32
- * Extract think tags from text
33
- * Returns the reasoning content (inside <think>) and the cleaned final content
34
- *
35
- * @param {string} text - Raw output text
36
- * @returns {{ reasoning: string|null, content: string }}
37
- */
38
- export function extractThinkTags(text) {
39
- if (!text || !text.includes(THINK_OPEN)) {
40
- return { reasoning: null, content: text || "" };
41
- }
42
-
43
- let reasoning = "";
44
- let content = text;
45
- let iterations = 0;
46
- const maxIterations = 10; // safety limit
47
-
48
- while (content.includes(THINK_OPEN) && iterations < maxIterations) {
49
- const openIdx = content.indexOf(THINK_OPEN);
50
- const closeIdx = content.indexOf(THINK_CLOSE, openIdx);
51
-
52
- if (closeIdx === -1) {
53
- // Unclosed think tag — treat everything after <think> as reasoning
54
- reasoning += content.slice(openIdx + THINK_OPEN.length);
55
- content = content.slice(0, openIdx);
56
- break;
57
- }
58
-
59
- // Extract the think content
60
- const thinkContent = content.slice(openIdx + THINK_OPEN.length, closeIdx);
61
- reasoning += (reasoning ? "\n" : "") + thinkContent;
62
-
63
- // Remove the think block from content
64
- content = content.slice(0, openIdx) + content.slice(closeIdx + THINK_CLOSE.length);
65
- iterations++;
66
- }
67
-
68
- return {
69
- reasoning: reasoning.trim() || null,
70
- content: content.trim(),
71
- };
72
- }
73
-
74
- /**
75
- * Process a streaming delta chunk and extract think content.
76
- * Maintains state across chunks using a context object.
77
- *
78
- * @param {string} delta - New text chunk
79
- * @param {object} ctx - Mutable context object { insideThink, buffer }
80
- * @returns {{ reasoningDelta: string|null, contentDelta: string|null }}
81
- */
82
- export function processStreamingThinkDelta(delta, ctx) {
83
- if (!ctx.buffer) ctx.buffer = "";
84
-
85
- ctx.buffer += delta;
86
- let reasoningDelta = "";
87
- let contentDelta = "";
88
-
89
- while (ctx.buffer.length > 0) {
90
- if (ctx.insideThink) {
91
- // Looking for closing tag
92
- const closeIdx = ctx.buffer.indexOf(THINK_CLOSE);
93
- if (closeIdx === -1) {
94
- // Might be a partial tag at the end — keep last few chars
95
- if (ctx.buffer.length > THINK_CLOSE.length) {
96
- const safe = ctx.buffer.slice(0, -(THINK_CLOSE.length - 1));
97
- reasoningDelta += safe;
98
- ctx.buffer = ctx.buffer.slice(-(THINK_CLOSE.length - 1));
99
- }
100
- break;
101
- }
102
- reasoningDelta += ctx.buffer.slice(0, closeIdx);
103
- ctx.buffer = ctx.buffer.slice(closeIdx + THINK_CLOSE.length);
104
- ctx.insideThink = false;
105
- } else {
106
- // Looking for opening tag
107
- const openIdx = ctx.buffer.indexOf(THINK_OPEN);
108
- if (openIdx === -1) {
109
- // Might be a partial tag at the end
110
- if (ctx.buffer.length > THINK_OPEN.length) {
111
- const safe = ctx.buffer.slice(0, -(THINK_OPEN.length - 1));
112
- contentDelta += safe;
113
- ctx.buffer = ctx.buffer.slice(-(THINK_OPEN.length - 1));
114
- }
115
- break;
116
- }
117
- contentDelta += ctx.buffer.slice(0, openIdx);
118
- ctx.buffer = ctx.buffer.slice(openIdx + THINK_OPEN.length);
119
- ctx.insideThink = true;
120
- }
121
- }
122
-
123
- return {
124
- reasoningDelta: reasoningDelta || null,
125
- contentDelta: contentDelta || null,
126
- };
127
- }
128
-
129
- /**
130
- * Flush remaining buffer content from streaming context.
131
- * Call this when the stream ends.
132
- *
133
- * @param {object} ctx - Mutable context object { insideThink, buffer }
134
- * @returns {{ reasoningDelta: string|null, contentDelta: string|null }}
135
- */
136
- export function flushThinkBuffer(ctx) {
137
- if (!ctx.buffer) return { reasoningDelta: null, contentDelta: null };
138
-
139
- const remaining = ctx.buffer;
140
- ctx.buffer = "";
141
-
142
- if (ctx.insideThink) {
143
- return { reasoningDelta: remaining || null, contentDelta: null };
144
- }
145
- return { reasoningDelta: null, contentDelta: remaining || null };
146
- }
@@ -1,12 +0,0 @@
1
- function appendToolCallArgumentDelta(current, incoming) {
2
- const existing = typeof current === "string" ? current : "";
3
- const next = typeof incoming === "string" ? incoming : "";
4
- if (!existing) return next;
5
- if (!next) return existing;
6
- if (next === existing) return existing;
7
- if (next.startsWith(existing)) return next;
8
- return existing + next;
9
- }
10
- export {
11
- appendToolCallArgumentDelta
12
- };
@@ -1,49 +0,0 @@
1
- /**
2
- * Strip built-in/duplicate tools when equivalent MCP tools are present.
3
- * Goal: reduce tool definitions token bloat for Claude clients.
4
- */
5
-
6
- const DEDUP_RULES = [
7
- {
8
- // Exa MCP present → drop built-in web tools (Exa is preferred).
9
- triggers: ["mcp__exa__web_search_exa", "mcp__exa__web_fetch_exa"],
10
- strip: ["WebSearch", "WebFetch", "mcp__workspace__web_fetch"],
11
- },
12
- {
13
- // Tavily MCP present → drop built-in web tools.
14
- triggers: ["mcp__tavily__tavily_search", "mcp__tavily__tavily_extract"],
15
- strip: ["WebSearch", "WebFetch", "mcp__workspace__web_fetch"],
16
- },
17
- {
18
- // Browser MCP present → drop Cowork's duplicate Claude_in_Chrome connector.
19
- triggers: [/^mcp__browsermcp__/],
20
- strip: [/^mcp__Claude_in_Chrome__/],
21
- },
22
- ];
23
-
24
- function getToolName(t) {
25
- return t?.name || t?.function?.name || "";
26
- }
27
-
28
- function matches(name, pattern) {
29
- if (typeof pattern === "string") return name === pattern;
30
- return pattern instanceof RegExp ? pattern.test(name) : false;
31
- }
32
-
33
- function dedupeTools(tools) {
34
- if (!Array.isArray(tools) || tools.length === 0) return { tools, stripped: [] };
35
- const names = tools.map(getToolName);
36
- const toStrip = new Set();
37
- for (const rule of DEDUP_RULES) {
38
- const hasTrigger = names.some((n) => rule.triggers.some((p) => matches(n, p)));
39
- if (!hasTrigger) continue;
40
- for (const n of names) {
41
- if (rule.strip.some((p) => matches(n, p))) toStrip.add(n);
42
- }
43
- }
44
- if (toStrip.size === 0) return { tools, stripped: [] };
45
- const out = tools.filter((t) => !toStrip.has(getToolName(t)));
46
- return { tools: out, stripped: Array.from(toStrip) };
47
- }
48
-
49
- export { dedupeTools };
@@ -1,31 +0,0 @@
1
- const MAX_VISIBLE_NAMES = 80;
2
- function getToolName(tool) {
3
- return tool?.name || tool?.function?.name || tool?.type || "unknown";
4
- }
5
- function getToolSource(name) {
6
- if (name.startsWith("mcp__")) {
7
- const parts = name.split("__");
8
- return parts[1] ? `mcp:${parts[1]}` : "mcp";
9
- }
10
- if (name.startsWith("web_search") || name.startsWith("web_fetch")) return "hosted:web";
11
- if (name.startsWith("computer_") || name.startsWith("str_replace_")) return "hosted:computer";
12
- return "client";
13
- }
14
- function summarizeToolSources(tools) {
15
- if (!Array.isArray(tools) || tools.length === 0) return null;
16
- const names = tools.map((tool) => getToolName(tool));
17
- const sourceCounts = /* @__PURE__ */ new Map();
18
- for (const name of names) {
19
- const source = getToolSource(name);
20
- sourceCounts.set(source, (sourceCounts.get(source) || 0) + 1);
21
- }
22
- const sources = Array.from(sourceCounts.entries()).map(([source, count]) => `${source}=${count}`).join(", ");
23
- const visibleNames = names.slice(0, MAX_VISIBLE_NAMES).join(", ");
24
- const suffix = names.length > MAX_VISIBLE_NAMES ? `, ... +${names.length - MAX_VISIBLE_NAMES} more` : "";
25
- return `${tools.length} tools | sources: ${sources} | names: ${visibleNames}${suffix}`;
26
- }
27
- export {
28
- getToolName,
29
- getToolSource,
30
- summarizeToolSources
31
- };
@@ -1,25 +0,0 @@
1
- const STRIP_HEADER_NAMES = /* @__PURE__ */ new Set([
2
- "content-encoding",
3
- "content-length",
4
- "transfer-encoding"
5
- ]);
6
- function stripStaleEncodingHeaders(input) {
7
- const out = new Headers(input);
8
- for (const name of STRIP_HEADER_NAMES) out.delete(name);
9
- return out;
10
- }
11
- function filterUpstreamResponseHeaderEntries(entries, extraToStrip = []) {
12
- const drop = new Set(STRIP_HEADER_NAMES);
13
- for (const h of extraToStrip) drop.add(h.toLowerCase());
14
- const result = [];
15
- for (const [k, v] of entries) {
16
- if (!drop.has(k.toLowerCase())) result.push([k, v]);
17
- }
18
- return result;
19
- }
20
- const STRIP_UPSTREAM_HEADER_NAMES = STRIP_HEADER_NAMES;
21
- export {
22
- STRIP_UPSTREAM_HEADER_NAMES,
23
- filterUpstreamResponseHeaderEntries,
24
- stripStaleEncodingHeaders
25
- };
@@ -1,15 +0,0 @@
1
- function stripTrailingSlashes(value) {
2
- let end = value.length;
3
- while (end > 0 && value.charCodeAt(end - 1) === 47) {
4
- end--;
5
- }
6
- return end === value.length ? value : value.slice(0, end);
7
- }
8
- function normalizeBaseUrl(value) {
9
- const str = typeof value === "string" ? value : "";
10
- return stripTrailingSlashes(str.trim());
11
- }
12
- export {
13
- normalizeBaseUrl,
14
- stripTrailingSlashes
15
- };
@@ -1,347 +0,0 @@
1
- /**
2
- * Token Usage Tracking - Extract, normalize, estimate and log token usage
3
- */
4
-
5
- import { saveRequestUsage, appendRequestLog } from '../../dist/lib/usageDb.js';
6
- import { FORMATS } from "../translator/formats.js";
7
-
8
- // ANSI color codes
9
- export const COLORS = {
10
- reset: "\x1b[0m",
11
- red: "\x1b[31m",
12
- green: "\x1b[32m",
13
- yellow: "\x1b[33m",
14
- blue: "\x1b[34m",
15
- cyan: "\x1b[36m"
16
- };
17
-
18
- // Buffer tokens to prevent context errors
19
- const BUFFER_TOKENS = 2000;
20
-
21
- // Get HH:MM:SS timestamp
22
- function getTimeString() {
23
- return new Date().toLocaleTimeString("en-US", { hour12: false, hour: "2-digit", minute: "2-digit", second: "2-digit" });
24
- }
25
-
26
- /**
27
- * Add buffer tokens to usage to prevent context errors
28
- * @param {object} usage - Usage object (any format)
29
- * @returns {object} Usage with buffer added
30
- */
31
- export function addBufferToUsage(usage) {
32
- if (!usage || typeof usage !== "object") return usage;
33
-
34
- const result = { ...usage };
35
-
36
- // Claude format
37
- if (result.input_tokens !== undefined) {
38
- result.input_tokens += BUFFER_TOKENS;
39
- }
40
-
41
- // OpenAI format
42
- if (result.prompt_tokens !== undefined) {
43
- result.prompt_tokens += BUFFER_TOKENS;
44
- }
45
-
46
- // Calculate or update total_tokens
47
- if (result.total_tokens !== undefined) {
48
- result.total_tokens += BUFFER_TOKENS;
49
- } else if (result.prompt_tokens !== undefined && result.completion_tokens !== undefined) {
50
- // Calculate total_tokens if not exists
51
- result.total_tokens = result.prompt_tokens + result.completion_tokens;
52
- }
53
-
54
- return result;
55
- }
56
-
57
- export function filterUsageForFormat(usage, targetFormat) {
58
- if (!usage || typeof usage !== "object") return usage;
59
-
60
- // Helper to pick only defined fields from usage
61
- const pickFields = (fields) => {
62
- const filtered = {};
63
- for (const field of fields) {
64
- if (usage[field] !== undefined) {
65
- filtered[field] = usage[field];
66
- }
67
- }
68
- return filtered;
69
- };
70
-
71
- // Define allowed fields for each format
72
- const formatFields = {
73
- [FORMATS.CLAUDE]: [
74
- 'input_tokens', 'output_tokens',
75
- 'cache_read_input_tokens', 'cache_creation_input_tokens',
76
- 'estimated'
77
- ],
78
- [FORMATS.GEMINI]: [
79
- 'promptTokenCount', 'candidatesTokenCount', 'totalTokenCount',
80
- 'cachedContentTokenCount', 'thoughtsTokenCount',
81
- 'estimated'
82
- ],
83
- [FORMATS.OPENAI_RESPONSES]: [
84
- 'input_tokens', 'output_tokens',
85
- 'input_tokens_details', 'output_tokens_details',
86
- 'estimated'
87
- ],
88
- // OpenAI format (default for OPENAI, CODEX, KIRO, etc.)
89
- default: [
90
- 'prompt_tokens', 'completion_tokens', 'total_tokens',
91
- 'cached_tokens', 'reasoning_tokens',
92
- 'prompt_tokens_details', 'completion_tokens_details',
93
- 'estimated'
94
- ]
95
- };
96
-
97
- // Get fields for target format
98
- let fields = formatFields[targetFormat];
99
-
100
- // Use same fields for similar formats
101
- if (targetFormat === FORMATS.GEMINI_CLI || targetFormat === FORMATS.ANTIGRAVITY) {
102
- fields = formatFields[FORMATS.GEMINI];
103
- } else if (targetFormat === FORMATS.OPENAI_RESPONSE) {
104
- fields = formatFields[FORMATS.OPENAI_RESPONSES];
105
- } else if (!fields) {
106
- fields = formatFields.default;
107
- }
108
-
109
- return pickFields(fields);
110
- }
111
-
112
- /**
113
- * Normalize usage object - ensure all values are valid numbers
114
- */
115
- export function normalizeUsage(usage) {
116
- if (!usage || typeof usage !== "object" || Array.isArray(usage)) return null;
117
-
118
- const normalized = {};
119
- const assignNumber = (key, value) => {
120
- if (value === undefined || value === null) return;
121
- const numeric = Number(value);
122
- if (Number.isFinite(numeric)) normalized[key] = numeric;
123
- };
124
-
125
- assignNumber("prompt_tokens", usage?.prompt_tokens);
126
- assignNumber("completion_tokens", usage?.completion_tokens);
127
- assignNumber("total_tokens", usage?.total_tokens);
128
- assignNumber("cache_read_input_tokens", usage?.cache_read_input_tokens);
129
- assignNumber("cache_creation_input_tokens", usage?.cache_creation_input_tokens);
130
- assignNumber("cached_tokens", usage?.cached_tokens);
131
- assignNumber("reasoning_tokens", usage?.reasoning_tokens);
132
-
133
- // Preserve nested details objects for OpenAI format forwarding
134
- if (usage?.prompt_tokens_details && typeof usage.prompt_tokens_details === "object") {
135
- normalized.prompt_tokens_details = usage.prompt_tokens_details;
136
- }
137
- if (usage?.completion_tokens_details && typeof usage.completion_tokens_details === "object") {
138
- normalized.completion_tokens_details = usage.completion_tokens_details;
139
- }
140
-
141
- if (Object.keys(normalized).length === 0) return null;
142
- return normalized;
143
- }
144
-
145
- /**
146
- * Check if usage has valid token data
147
- * Valid = has at least one token field with value > 0
148
- * Invalid = empty object {}, null, undefined, no token fields, or all zeros
149
- */
150
- export function hasValidUsage(usage) {
151
- if (!usage || typeof usage !== "object") return false;
152
-
153
- // Check for any known token field with value > 0
154
- const tokenFields = [
155
- "prompt_tokens", "completion_tokens", "total_tokens", // OpenAI
156
- "input_tokens", "output_tokens", // Claude
157
- "promptTokenCount", "candidatesTokenCount" // Gemini
158
- ];
159
-
160
- for (const field of tokenFields) {
161
- if (typeof usage[field] === "number" && usage[field] > 0) {
162
- return true;
163
- }
164
- }
165
-
166
- return false;
167
- }
168
-
169
- /**
170
- * Extract usage from any format (Claude, OpenAI, Gemini, Responses API)
171
- */
172
- export function extractUsage(chunk) {
173
- if (!chunk || typeof chunk !== "object") return null;
174
-
175
- // Claude format (message_delta event)
176
- if (chunk.type === "message_delta" && chunk.usage && typeof chunk.usage === "object") {
177
- return normalizeUsage({
178
- prompt_tokens: chunk.usage.input_tokens || 0,
179
- completion_tokens: chunk.usage.output_tokens || 0,
180
- cache_read_input_tokens: chunk.usage.cache_read_input_tokens,
181
- cache_creation_input_tokens: chunk.usage.cache_creation_input_tokens
182
- });
183
- }
184
-
185
- // OpenAI Responses API format (response.completed or response.done)
186
- if ((chunk.type === "response.completed" || chunk.type === "response.done") && chunk.response?.usage && typeof chunk.response.usage === "object") {
187
- const usage = chunk.response.usage;
188
- const cachedTokens = usage.input_tokens_details?.cached_tokens;
189
- return normalizeUsage({
190
- prompt_tokens: usage.input_tokens || usage.prompt_tokens || 0,
191
- completion_tokens: usage.output_tokens || usage.completion_tokens || 0,
192
- cached_tokens: cachedTokens,
193
- reasoning_tokens: usage.output_tokens_details?.reasoning_tokens,
194
- prompt_tokens_details: cachedTokens ? { cached_tokens: cachedTokens } : undefined
195
- });
196
- }
197
-
198
- // OpenAI format (also covers DeepSeek which uses prompt_cache_hit_tokens)
199
- if (chunk.usage && typeof chunk.usage === "object" && chunk.usage.prompt_tokens !== undefined) {
200
- return normalizeUsage({
201
- prompt_tokens: chunk.usage.prompt_tokens,
202
- completion_tokens: chunk.usage.completion_tokens || 0,
203
- cached_tokens: chunk.usage.prompt_tokens_details?.cached_tokens || chunk.usage.prompt_cache_hit_tokens,
204
- reasoning_tokens: chunk.usage.completion_tokens_details?.reasoning_tokens,
205
- prompt_tokens_details: chunk.usage.prompt_tokens_details,
206
- completion_tokens_details: chunk.usage.completion_tokens_details
207
- });
208
- }
209
-
210
- // Gemini format (Antigravity)
211
- // Antigravity wraps usageMetadata inside response: { response: { usageMetadata: {...} } }
212
- const usageMeta = chunk.usageMetadata || chunk.response?.usageMetadata;
213
- if (usageMeta && typeof usageMeta === "object") {
214
- return normalizeUsage({
215
- prompt_tokens: usageMeta.promptTokenCount || 0,
216
- completion_tokens: usageMeta.candidatesTokenCount || 0,
217
- total_tokens: usageMeta.totalTokenCount,
218
- cached_tokens: usageMeta.cachedContentTokenCount,
219
- reasoning_tokens: usageMeta.thoughtsTokenCount
220
- });
221
- }
222
-
223
- // Ollama NDJSON format (raw from provider, before translation)
224
- // Ollama sends: {"model":"...","done":true,"prompt_eval_count":N,"eval_count":M}
225
- if (chunk.done === true && typeof chunk.prompt_eval_count === "number") {
226
- return normalizeUsage({
227
- prompt_tokens: chunk.prompt_eval_count || 0,
228
- completion_tokens: chunk.eval_count || 0,
229
- total_tokens: (chunk.prompt_eval_count || 0) + (chunk.eval_count || 0)
230
- });
231
- }
232
-
233
- return null;
234
- }
235
-
236
- /**
237
- * Estimate input tokens from request body
238
- * Calculate total body size for more accurate estimation
239
- */
240
- export function estimateInputTokens(body) {
241
- if (!body || typeof body !== "object") return 0;
242
-
243
- try {
244
- // Calculate total body size (includes messages, tools, system, thinking config, etc.)
245
- const bodyStr = JSON.stringify(body);
246
- const totalChars = bodyStr.length;
247
-
248
- // Estimate: ~4 chars per token (rough average across all tokenizers)
249
- return Math.ceil(totalChars / 4);
250
- } catch (err) {
251
- // Fallback if stringify fails
252
- return 0;
253
- }
254
- }
255
-
256
- /**
257
- * Estimate output tokens from content length
258
- */
259
- export function estimateOutputTokens(contentLength) {
260
- if (!contentLength || contentLength <= 0) return 0;
261
- return Math.max(1, Math.floor(contentLength / 4));
262
- }
263
-
264
- /**
265
- * Format usage object based on target format
266
- * @param {number} inputTokens - Input/prompt tokens
267
- * @param {number} outputTokens - Output/completion tokens
268
- * @param {string} targetFormat - Target format from FORMATS
269
- */
270
- export function formatUsage(inputTokens, outputTokens, targetFormat) {
271
- // Claude format uses input_tokens/output_tokens
272
- if (targetFormat === FORMATS.CLAUDE) {
273
- return addBufferToUsage({
274
- input_tokens: inputTokens,
275
- output_tokens: outputTokens,
276
- estimated: true
277
- });
278
- }
279
-
280
- // Default: OpenAI format (works for openai, gemini, responses, etc.)
281
- return addBufferToUsage({
282
- prompt_tokens: inputTokens,
283
- completion_tokens: outputTokens,
284
- total_tokens: inputTokens + outputTokens,
285
- estimated: true
286
- });
287
- }
288
-
289
- /**
290
- * Estimate full usage when provider doesn't return it
291
- * @param {object} body - Request body for input token estimation
292
- * @param {number} contentLength - Content length for output token estimation
293
- * @param {string} targetFormat - Target format from FORMATS constant
294
- */
295
- export function estimateUsage(body, contentLength, targetFormat = FORMATS.OPENAI) {
296
- return formatUsage(
297
- estimateInputTokens(body),
298
- estimateOutputTokens(contentLength),
299
- targetFormat
300
- );
301
- }
302
-
303
- /**
304
- * Log usage with cache info (green color)
305
- */
306
- export function logUsage(provider, usage, model = null, connectionId = null, apiKey = null) {
307
- if (!usage || typeof usage !== "object") return;
308
-
309
- const p = provider?.toUpperCase() || "UNKNOWN";
310
-
311
- // Support both formats:
312
- // - OpenAI: prompt_tokens, completion_tokens
313
- // - Claude: input_tokens, output_tokens
314
- const inTokens = usage?.prompt_tokens || usage?.input_tokens || 0;
315
- const outTokens = usage?.completion_tokens || usage?.output_tokens || 0;
316
- const accountPrefix = connectionId ? connectionId.slice(0, 8) + "..." : "unknown";
317
-
318
- let msg = `[${getTimeString()}] 📊 ${COLORS.green}[USAGE] ${p} | in=${inTokens} | out=${outTokens} | account=${accountPrefix}${COLORS.reset}`;
319
-
320
- // Add estimated flag if present
321
- if (usage.estimated) {
322
- msg += ` ${COLORS.yellow}(estimated)${COLORS.reset}`;
323
- }
324
-
325
- // Add cache info if present (unified from different formats)
326
- const cacheRead = usage.cache_read_input_tokens || usage.cached_tokens || usage.prompt_tokens_details?.cached_tokens;
327
- if (cacheRead) msg += ` | cache_read=${cacheRead}`;
328
-
329
- const cacheCreation = usage.cache_creation_input_tokens;
330
- if (cacheCreation) msg += ` | cache_create=${cacheCreation}`;
331
-
332
- const reasoning = usage.reasoning_tokens;
333
- if (reasoning) msg += ` | reasoning=${reasoning}`;
334
-
335
- console.log(msg);
336
-
337
- // Save to usage DB
338
- const tokens = {
339
- prompt_tokens: inTokens,
340
- completion_tokens: outTokens,
341
- cache_read_input_tokens: cacheRead || 0,
342
- cache_creation_input_tokens: cacheCreation || 0,
343
- reasoning_tokens: reasoning || 0
344
- };
345
- saveRequestUsage({ model, provider, connectionId, tokens, apiKey: apiKey || undefined }).catch(() => { });
346
- appendRequestLog({ model, provider, connectionId, tokens, status: "200 OK" }).catch(() => { });
347
- }