@amir83nasr/10router 0.1.15 → 0.1.17

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 (837) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +6 -7
  3. package/.next/build-manifest.json +2 -2
  4. package/.next/prerender-manifest.json +16 -16
  5. package/.next/routes-manifest.json +0 -6
  6. package/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +1 -1
  7. package/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
  8. package/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  9. package/.next/server/app/(dashboard)/dashboard/cli-tools/page.js +1 -1
  10. package/.next/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  11. package/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  12. package/.next/server/app/(dashboard)/dashboard/combos/page.js +1 -1
  13. package/.next/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
  14. package/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  15. package/.next/server/app/(dashboard)/dashboard/console-log/page.js +1 -1
  16. package/.next/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
  17. package/.next/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  18. package/.next/server/app/(dashboard)/dashboard/endpoint/page.js +1 -1
  19. package/.next/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  20. package/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  21. package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/[id]/page.js +2 -2
  22. package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/[id]/page.js.nft.json +1 -1
  23. package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/[id]/page_client-reference-manifest.js +1 -1
  24. package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/page.js +1 -1
  25. package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/page.js.nft.json +1 -1
  26. package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/page_client-reference-manifest.js +1 -1
  27. package/.next/server/app/(dashboard)/dashboard/page.js +1 -1
  28. package/.next/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  29. package/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  30. package/.next/server/app/(dashboard)/dashboard/profile/page.js +1 -1
  31. package/.next/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
  32. package/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  33. package/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js +3 -3
  34. package/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
  35. package/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  36. package/.next/server/app/(dashboard)/dashboard/providers/new/page.js +1 -1
  37. package/.next/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
  38. package/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  39. package/.next/server/app/(dashboard)/dashboard/providers/page.js +1 -1
  40. package/.next/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
  41. package/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  42. package/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js +2 -2
  43. package/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
  44. package/.next/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  45. package/.next/server/app/(dashboard)/dashboard/pxpipe/page.js +1 -1
  46. package/.next/server/app/(dashboard)/dashboard/pxpipe/page.js.nft.json +1 -1
  47. package/.next/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
  48. package/.next/server/app/(dashboard)/dashboard/quota/page.js +1 -1
  49. package/.next/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
  50. package/.next/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  51. package/.next/server/app/(dashboard)/dashboard/token-saver/page.js +1 -1
  52. package/.next/server/app/(dashboard)/dashboard/token-saver/page.js.nft.json +1 -1
  53. package/.next/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  54. package/.next/server/app/(dashboard)/dashboard/usage/page.js +1 -1
  55. package/.next/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
  56. package/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  57. package/.next/server/app/_global-error/page.js +2 -2
  58. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  59. package/.next/server/app/_global-error.html +1 -1
  60. package/.next/server/app/_global-error.rsc +1 -1
  61. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  62. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  63. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  64. package/.next/server/app/_not-found/page.js +1 -1
  65. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  66. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  67. package/.next/server/app/_not-found.html +1 -1
  68. package/.next/server/app/_not-found.rsc +6 -6
  69. package/.next/server/app/_not-found.segments/_full.segment.rsc +6 -6
  70. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +6 -6
  71. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  72. package/.next/server/app/api/auth/login/route.js +1 -1
  73. package/.next/server/app/api/auth/logout/route.js +1 -1
  74. package/.next/server/app/api/auth/oidc/callback/route.js +1 -1
  75. package/.next/server/app/api/auth/oidc/start/route.js +1 -1
  76. package/.next/server/app/api/auth/oidc/test/route.js +1 -1
  77. package/.next/server/app/api/auth/reset-password/route.js +1 -1
  78. package/.next/server/app/api/auth/saml/acs/route.js +1 -1
  79. package/.next/server/app/api/auth/saml/metadata/route.js +2 -2
  80. package/.next/server/app/api/auth/saml/start/route.js +1 -1
  81. package/.next/server/app/api/auth/saml/test/route.js +1 -1
  82. package/.next/server/app/api/auth/status/route.js +2 -2
  83. package/.next/server/app/api/changelog/route.js +1 -1
  84. package/.next/server/app/api/cli-tools/all-statuses/route.js +1 -1
  85. package/.next/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
  86. package/.next/server/app/api/cli-tools/claude-settings/route.js +2 -2
  87. package/.next/server/app/api/cli-tools/codex-settings/route.js +1 -1
  88. package/.next/server/app/api/cli-tools/cowork-mcp-registry/route.js +1 -1
  89. package/.next/server/app/api/cli-tools/cowork-mcp-tools/route.js +1 -1
  90. package/.next/server/app/api/cli-tools/cowork-settings/route.js +1 -1
  91. package/.next/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
  92. package/.next/server/app/api/cli-tools/dsh-settings/route.js +1 -1
  93. package/.next/server/app/api/cli-tools/opencode-settings/route.js +1 -1
  94. package/.next/server/app/api/combos/[id]/route.js +1 -1
  95. package/.next/server/app/api/combos/[id]/route.js.nft.json +1 -1
  96. package/.next/server/app/api/combos/route.js +1 -1
  97. package/.next/server/app/api/headroom/extras/route.js +1 -1
  98. package/.next/server/app/api/headroom/proxy/[...path]/route.js +1 -1
  99. package/.next/server/app/api/headroom/restart/route.js +1 -1
  100. package/.next/server/app/api/headroom/start/route.js +1 -1
  101. package/.next/server/app/api/headroom/status/route.js +1 -1
  102. package/.next/server/app/api/headroom/stop/route.js +1 -1
  103. package/.next/server/app/api/health/route.js +1 -1
  104. package/.next/server/app/api/init/route.js +1 -1
  105. package/.next/server/app/api/keys/[id]/route.js +1 -1
  106. package/.next/server/app/api/keys/route.js +1 -1
  107. package/.next/server/app/api/locale/route.js +1 -1
  108. package/.next/server/app/api/mcp/[plugin]/message/route.js +1 -1
  109. package/.next/server/app/api/mcp/[plugin]/sse/route.js +2 -2
  110. package/.next/server/app/api/media-providers/tts/deepgram/voices/route.js +1 -1
  111. package/.next/server/app/api/media-providers/tts/elevenlabs/voices/route.js +1 -1
  112. package/.next/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
  113. package/.next/server/app/api/media-providers/tts/inworld/voices/route.js +1 -1
  114. package/.next/server/app/api/media-providers/tts/voices/route.js +1 -1
  115. package/.next/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -1
  116. package/.next/server/app/api/models/alias/route.js +1 -1
  117. package/.next/server/app/api/models/availability/route.js +1 -1
  118. package/.next/server/app/api/models/catalog-sync/route.js +1 -1
  119. package/.next/server/app/api/models/catalog-sync/route.js.nft.json +1 -1
  120. package/.next/server/app/api/models/custom/route.js +1 -1
  121. package/.next/server/app/api/models/custom/route.js.nft.json +1 -1
  122. package/.next/server/app/api/models/disabled/route.js +1 -1
  123. package/.next/server/app/api/models/route.js +1 -1
  124. package/.next/server/app/api/models/route.js.nft.json +1 -1
  125. package/.next/server/app/api/models/test/route.js +1 -1
  126. package/.next/server/app/api/models/test/route.js.nft.json +1 -1
  127. package/.next/server/app/api/oauth/[provider]/[action]/route.js +1 -1
  128. package/.next/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  129. package/.next/server/app/api/oauth/codex/bulk-import/route.js +1 -1
  130. package/.next/server/app/api/oauth/codex/bulk-import/route.js.nft.json +1 -1
  131. package/.next/server/app/api/oauth/codex/import-token/route.js +1 -1
  132. package/.next/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
  133. package/.next/server/app/api/oauth/cursor/auto-import/route.js +2 -2
  134. package/.next/server/app/api/oauth/cursor/import/route.js +1 -1
  135. package/.next/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  136. package/.next/server/app/api/oauth/gitlab/pat/route.js +1 -1
  137. package/.next/server/app/api/oauth/grok-cli/bulk-import/route.js +1 -1
  138. package/.next/server/app/api/oauth/iflow/cookie/route.js +1 -1
  139. package/.next/server/app/api/oauth/xiaomi-mimo/api-key/route.js +1 -1
  140. package/.next/server/app/api/oauth/xiaomi-mimo/auto-import/route.js +2 -2
  141. package/.next/server/app/api/pricing/route.js +1 -1
  142. package/.next/server/app/api/provider-nodes/[id]/route.js +1 -1
  143. package/.next/server/app/api/provider-nodes/route.js +1 -1
  144. package/.next/server/app/api/provider-nodes/route.js.nft.json +1 -1
  145. package/.next/server/app/api/provider-nodes/validate/route.js +1 -1
  146. package/.next/server/app/api/providers/[id]/models/route.js +1 -1
  147. package/.next/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  148. package/.next/server/app/api/providers/[id]/route.js +1 -1
  149. package/.next/server/app/api/providers/[id]/test/route.js +1 -1
  150. package/.next/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  151. package/.next/server/app/api/providers/[id]/test-models/route.js +1 -1
  152. package/.next/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  153. package/.next/server/app/api/providers/client/route.js +1 -1
  154. package/.next/server/app/api/providers/client/route.js.nft.json +1 -1
  155. package/.next/server/app/api/providers/kilo/free-models/route.js +1 -1
  156. package/.next/server/app/api/providers/route.js +1 -1
  157. package/.next/server/app/api/providers/route.js.nft.json +1 -1
  158. package/.next/server/app/api/providers/suggested-models/route.js +1 -1
  159. package/.next/server/app/api/providers/test-batch/route.js +1 -1
  160. package/.next/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  161. package/.next/server/app/api/providers/validate/route.js +1 -1
  162. package/.next/server/app/api/providers/validate/route.js.nft.json +1 -1
  163. package/.next/server/app/api/proxy-pools/[id]/route.js +1 -1
  164. package/.next/server/app/api/proxy-pools/[id]/test/route.js +1 -1
  165. package/.next/server/app/api/proxy-pools/cloudflare-deploy/route.js +2 -2
  166. package/.next/server/app/api/proxy-pools/deno-deploy/route.js +2 -2
  167. package/.next/server/app/api/proxy-pools/route.js +1 -1
  168. package/.next/server/app/api/proxy-pools/vercel-deploy/route.js +2 -2
  169. package/.next/server/app/api/pxpipe/health/route.js +2 -2
  170. package/.next/server/app/api/pxpipe/install/route.js +1 -1
  171. package/.next/server/app/api/pxpipe/logs/route.js +1 -1
  172. package/.next/server/app/api/pxpipe/restart/route.js +1 -1
  173. package/.next/server/app/api/pxpipe/start/route.js +2 -2
  174. package/.next/server/app/api/pxpipe/stats/route.js +1 -1
  175. package/.next/server/app/api/pxpipe/status/route.js +1 -1
  176. package/.next/server/app/api/pxpipe/stop/route.js +1 -1
  177. package/.next/server/app/api/settings/database/route.js +1 -1
  178. package/.next/server/app/api/settings/proxy-test/route.js +1 -1
  179. package/.next/server/app/api/settings/require-login/route.js +1 -1
  180. package/.next/server/app/api/settings/route.js +1 -1
  181. package/.next/server/app/api/settings/route.js.nft.json +1 -1
  182. package/.next/server/app/api/shutdown/route.js +1 -1
  183. package/.next/server/app/api/tags/route.js +1 -1
  184. package/.next/server/app/api/translator/console-logs/route.js +1 -1
  185. package/.next/server/app/api/translator/console-logs/route.js.nft.json +1 -1
  186. package/.next/server/app/api/translator/console-logs/stream/route.js +2 -2
  187. package/.next/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -1
  188. package/.next/server/app/api/translator/load/route.js +1 -1
  189. package/.next/server/app/api/translator/save/route.js +1 -1
  190. package/.next/server/app/api/translator/send/route.js +1 -1
  191. package/.next/server/app/api/translator/send/route.js.nft.json +1 -1
  192. package/.next/server/app/api/translator/translate/route.js +1 -1
  193. package/.next/server/app/api/translator/translate/route.js.nft.json +1 -1
  194. package/.next/server/app/api/tunnel/disable/route.js +1 -1
  195. package/.next/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  196. package/.next/server/app/api/tunnel/enable/route.js +1 -1
  197. package/.next/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  198. package/.next/server/app/api/tunnel/status/route.js +1 -1
  199. package/.next/server/app/api/tunnel/tailscale-check/route.js +1 -1
  200. package/.next/server/app/api/tunnel/tailscale-disable/route.js +1 -1
  201. package/.next/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
  202. package/.next/server/app/api/tunnel/tailscale-enable/route.js +1 -1
  203. package/.next/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
  204. package/.next/server/app/api/tunnel/tailscale-install/route.js +2 -2
  205. package/.next/server/app/api/usage/[connectionId]/codex-reset-credits/route.js +1 -1
  206. package/.next/server/app/api/usage/[connectionId]/codex-reset-credits/route.js.nft.json +1 -1
  207. package/.next/server/app/api/usage/[connectionId]/route.js +1 -1
  208. package/.next/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  209. package/.next/server/app/api/usage/chart/route.js +1 -1
  210. package/.next/server/app/api/usage/health/route.js +1 -1
  211. package/.next/server/app/api/usage/history/route.js +1 -1
  212. package/.next/server/app/api/usage/logs/route.js +1 -1
  213. package/.next/server/app/api/usage/providers/route.js +1 -1
  214. package/.next/server/app/api/usage/providers/route.js.nft.json +1 -1
  215. package/.next/server/app/api/usage/request-details/route.js +1 -1
  216. package/.next/server/app/api/usage/request-logs/route.js +1 -1
  217. package/.next/server/app/api/usage/stats/route.js +1 -1
  218. package/.next/server/app/api/usage/stream/route.js +2 -2
  219. package/.next/server/app/api/v1/api/chat/route.js +1 -1
  220. package/.next/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  221. package/.next/server/app/api/v1/audio/speech/route.js +1 -1
  222. package/.next/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  223. package/.next/server/app/api/v1/audio/transcriptions/route.js +1 -1
  224. package/.next/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  225. package/.next/server/app/api/v1/audio/voices/route.js +1 -1
  226. package/.next/server/app/api/v1/audio/voices/route.js.nft.json +1 -1
  227. package/.next/server/app/api/v1/chat/completions/route.js +1 -1
  228. package/.next/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  229. package/.next/server/app/api/v1/embeddings/route.js +1 -1
  230. package/.next/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  231. package/.next/server/app/api/v1/images/generations/route.js +2 -2
  232. package/.next/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  233. package/.next/server/app/api/v1/messages/count_tokens/route.js +1 -1
  234. package/.next/server/app/api/v1/messages/route.js +1 -1
  235. package/.next/server/app/api/v1/messages/route.js.nft.json +1 -1
  236. package/.next/server/app/api/v1/models/[...model]/route.js +1 -1
  237. package/.next/server/app/api/v1/models/[...model]/route.js.nft.json +1 -1
  238. package/.next/server/app/api/v1/models/info/route.js +1 -1
  239. package/.next/server/app/api/v1/models/info/route.js.nft.json +1 -1
  240. package/.next/server/app/api/v1/models/route.js +1 -1
  241. package/.next/server/app/api/v1/models/route.js.nft.json +1 -1
  242. package/.next/server/app/api/v1/responses/compact/route.js +1 -1
  243. package/.next/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
  244. package/.next/server/app/api/v1/responses/route.js +1 -1
  245. package/.next/server/app/api/v1/responses/route.js.nft.json +1 -1
  246. package/.next/server/app/api/v1/route.js +1 -1
  247. package/.next/server/app/api/v1/route.js.nft.json +1 -1
  248. package/.next/server/app/api/v1/search/route.js +1 -1
  249. package/.next/server/app/api/v1/search/route.js.nft.json +1 -1
  250. package/.next/server/app/api/v1/systemone/route.js +1 -1
  251. package/.next/server/app/api/v1/systemone/route.js.nft.json +1 -1
  252. package/.next/server/app/api/v1/videos/[id]/route.js +1 -1
  253. package/.next/server/app/api/v1/videos/[id]/route.js.nft.json +1 -1
  254. package/.next/server/app/api/v1/videos/edits/route.js +1 -1
  255. package/.next/server/app/api/v1/videos/edits/route.js.nft.json +1 -1
  256. package/.next/server/app/api/v1/videos/extensions/route.js +1 -1
  257. package/.next/server/app/api/v1/videos/extensions/route.js.nft.json +1 -1
  258. package/.next/server/app/api/v1/videos/generations/route.js +1 -1
  259. package/.next/server/app/api/v1/videos/generations/route.js.nft.json +1 -1
  260. package/.next/server/app/api/v1/web/fetch/route.js +1 -1
  261. package/.next/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
  262. package/.next/server/app/api/v1beta/models/[...path]/route.js +1 -1
  263. package/.next/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  264. package/.next/server/app/api/v1beta/models/route.js +1 -1
  265. package/.next/server/app/api/v1beta/models/route.js.nft.json +1 -1
  266. package/.next/server/app/api/version/route.js +1 -1
  267. package/.next/server/app/api/version/shutdown/route.js +1 -1
  268. package/.next/server/app/api/version/update/route.js +1 -1
  269. package/.next/server/app/callback/page.js +1 -1
  270. package/.next/server/app/callback/page.js.nft.json +1 -1
  271. package/.next/server/app/callback/page_client-reference-manifest.js +1 -1
  272. package/.next/server/app/callback.html +1 -1
  273. package/.next/server/app/callback.rsc +6 -6
  274. package/.next/server/app/callback.segments/_full.segment.rsc +6 -6
  275. package/.next/server/app/callback.segments/_tree.segment.rsc +2 -2
  276. package/.next/server/app/callback.segments/callback/__PAGE__.segment.rsc +6 -6
  277. package/.next/server/app/dashboard/cli-tools.html +1 -1
  278. package/.next/server/app/dashboard/cli-tools.rsc +8 -8
  279. package/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +8 -8
  280. package/.next/server/app/dashboard/cli-tools.segments/_full.segment.rsc +8 -8
  281. package/.next/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +2 -2
  282. package/.next/server/app/dashboard/combos.html +1 -1
  283. package/.next/server/app/dashboard/combos.rsc +8 -8
  284. package/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +8 -8
  285. package/.next/server/app/dashboard/combos.segments/_full.segment.rsc +8 -8
  286. package/.next/server/app/dashboard/combos.segments/_tree.segment.rsc +2 -2
  287. package/.next/server/app/dashboard/endpoint.html +1 -1
  288. package/.next/server/app/dashboard/endpoint.rsc +8 -8
  289. package/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +8 -8
  290. package/.next/server/app/dashboard/endpoint.segments/_full.segment.rsc +8 -8
  291. package/.next/server/app/dashboard/endpoint.segments/_tree.segment.rsc +2 -2
  292. package/.next/server/app/dashboard/media-providers/systemone.html +1 -1
  293. package/.next/server/app/dashboard/media-providers/systemone.rsc +8 -8
  294. package/.next/server/app/dashboard/media-providers/systemone.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/systemone/__PAGE__.segment.rsc +8 -8
  295. package/.next/server/app/dashboard/media-providers/systemone.segments/_full.segment.rsc +8 -8
  296. package/.next/server/app/dashboard/media-providers/systemone.segments/_tree.segment.rsc +2 -2
  297. package/.next/server/app/dashboard/profile.html +1 -1
  298. package/.next/server/app/dashboard/profile.rsc +8 -8
  299. package/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +8 -8
  300. package/.next/server/app/dashboard/profile.segments/_full.segment.rsc +8 -8
  301. package/.next/server/app/dashboard/profile.segments/_tree.segment.rsc +2 -2
  302. package/.next/server/app/dashboard/providers/new.html +1 -1
  303. package/.next/server/app/dashboard/providers/new.rsc +8 -8
  304. package/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +8 -8
  305. package/.next/server/app/dashboard/providers/new.segments/_full.segment.rsc +8 -8
  306. package/.next/server/app/dashboard/providers/new.segments/_tree.segment.rsc +2 -2
  307. package/.next/server/app/dashboard/providers.html +1 -1
  308. package/.next/server/app/dashboard/providers.rsc +8 -8
  309. package/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +8 -8
  310. package/.next/server/app/dashboard/providers.segments/_full.segment.rsc +8 -8
  311. package/.next/server/app/dashboard/providers.segments/_tree.segment.rsc +2 -2
  312. package/.next/server/app/dashboard/proxy-pools.html +1 -1
  313. package/.next/server/app/dashboard/proxy-pools.rsc +8 -8
  314. package/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +8 -8
  315. package/.next/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +8 -8
  316. package/.next/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +2 -2
  317. package/.next/server/app/dashboard/pxpipe.html +1 -1
  318. package/.next/server/app/dashboard/pxpipe.rsc +7 -7
  319. package/.next/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +7 -7
  320. package/.next/server/app/dashboard/pxpipe.segments/_full.segment.rsc +7 -7
  321. package/.next/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +2 -2
  322. package/.next/server/app/dashboard/quota.html +2 -2
  323. package/.next/server/app/dashboard/quota.rsc +9 -9
  324. package/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +9 -9
  325. package/.next/server/app/dashboard/quota.segments/_full.segment.rsc +9 -9
  326. package/.next/server/app/dashboard/quota.segments/_tree.segment.rsc +2 -2
  327. package/.next/server/app/dashboard/settings/pricing/page.js +1 -1
  328. package/.next/server/app/dashboard/settings/pricing/page.js.nft.json +1 -1
  329. package/.next/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  330. package/.next/server/app/dashboard/settings/pricing.html +1 -1
  331. package/.next/server/app/dashboard/settings/pricing.rsc +6 -6
  332. package/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +6 -6
  333. package/.next/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
  334. package/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +6 -6
  335. package/.next/server/app/dashboard/token-saver.html +1 -1
  336. package/.next/server/app/dashboard/token-saver.rsc +7 -7
  337. package/.next/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +7 -7
  338. package/.next/server/app/dashboard/token-saver.segments/_full.segment.rsc +7 -7
  339. package/.next/server/app/dashboard/token-saver.segments/_tree.segment.rsc +2 -2
  340. package/.next/server/app/dashboard/usage.html +2 -2
  341. package/.next/server/app/dashboard/usage.rsc +8 -8
  342. package/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +8 -8
  343. package/.next/server/app/dashboard/usage.segments/_full.segment.rsc +8 -8
  344. package/.next/server/app/dashboard/usage.segments/_tree.segment.rsc +2 -2
  345. package/.next/server/app/dashboard.html +1 -1
  346. package/.next/server/app/dashboard.rsc +8 -8
  347. package/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +8 -8
  348. package/.next/server/app/dashboard.segments/_full.segment.rsc +8 -8
  349. package/.next/server/app/dashboard.segments/_tree.segment.rsc +2 -2
  350. package/.next/server/app/index.html +1 -1
  351. package/.next/server/app/index.rsc +6 -6
  352. package/.next/server/app/index.segments/__PAGE__.segment.rsc +6 -6
  353. package/.next/server/app/index.segments/_full.segment.rsc +6 -6
  354. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  355. package/.next/server/app/landing/page.js +1 -1
  356. package/.next/server/app/landing/page.js.nft.json +1 -1
  357. package/.next/server/app/landing/page_client-reference-manifest.js +1 -1
  358. package/.next/server/app/landing.html +1 -1
  359. package/.next/server/app/landing.rsc +7 -7
  360. package/.next/server/app/landing.segments/_full.segment.rsc +7 -7
  361. package/.next/server/app/landing.segments/_tree.segment.rsc +2 -2
  362. package/.next/server/app/landing.segments/landing/__PAGE__.segment.rsc +7 -7
  363. package/.next/server/app/login/page.js +1 -1
  364. package/.next/server/app/login/page.js.nft.json +1 -1
  365. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  366. package/.next/server/app/login.html +1 -1
  367. package/.next/server/app/login.rsc +6 -6
  368. package/.next/server/app/login.segments/_full.segment.rsc +6 -6
  369. package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  370. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +6 -6
  371. package/.next/server/app/manifest.webmanifest/route.js +1 -1
  372. package/.next/server/app/page.js +1 -1
  373. package/.next/server/app/page.js.nft.json +1 -1
  374. package/.next/server/app/page_client-reference-manifest.js +1 -1
  375. package/.next/server/app-paths-manifest.json +6 -7
  376. package/.next/server/chunks/1018.js +1 -0
  377. package/.next/server/chunks/1412.js +1 -1
  378. package/.next/server/chunks/1564.js +1 -1
  379. package/.next/server/chunks/1649.js +1 -0
  380. package/.next/server/chunks/1751.js +1 -0
  381. package/.next/server/chunks/1842.js +1 -0
  382. package/.next/server/chunks/2143.js +1 -1
  383. package/.next/server/chunks/2282.js +8 -10
  384. package/.next/server/chunks/{2706.js → 2338.js} +1 -1
  385. package/.next/server/chunks/2339.js +1 -1
  386. package/.next/server/chunks/2355.js +1 -0
  387. package/.next/server/chunks/2531.js +1 -0
  388. package/.next/server/chunks/2801.js +1 -1
  389. package/.next/server/chunks/31.js +1 -0
  390. package/.next/server/chunks/3671.js +1 -0
  391. package/.next/server/chunks/4301.js +1 -1
  392. package/.next/server/chunks/4364.js +1 -1
  393. package/.next/server/chunks/4915.js +1 -1
  394. package/.next/server/chunks/537.js +5 -9
  395. package/.next/server/chunks/6343.js +12 -12
  396. package/.next/server/chunks/6617.js +9 -0
  397. package/.next/server/chunks/6823.js +1 -1
  398. package/.next/server/chunks/6971.js +1 -0
  399. package/.next/server/chunks/7019.js +2 -2
  400. package/.next/server/chunks/7156.js +1 -1
  401. package/.next/server/chunks/7314.js +1 -0
  402. package/.next/server/chunks/7337.js +1 -0
  403. package/.next/server/chunks/7459.js +3 -3
  404. package/.next/server/chunks/7591.js +1 -0
  405. package/.next/server/chunks/7904.js +1 -0
  406. package/.next/server/chunks/8567.js +1 -1
  407. package/.next/server/chunks/8923.js +1 -1
  408. package/.next/server/chunks/9287.js +1 -1
  409. package/.next/server/chunks/9429.js +1 -1
  410. package/.next/server/chunks/9603.js +1 -1
  411. package/.next/server/instrumentation.js +1 -1
  412. package/.next/server/instrumentation.js.nft.json +1 -1
  413. package/.next/server/middleware-build-manifest.js +1 -1
  414. package/.next/server/pages/404.html +1 -1
  415. package/.next/server/pages/500.html +1 -1
  416. package/.next/server/server-reference-manifest.js +1 -1
  417. package/.next/server/server-reference-manifest.json +1 -1
  418. package/.next/static/alTg1qNVWmX6-0j1DLgF7/_buildManifest.js +1 -0
  419. package/.next/static/chunks/1278-77eb0511471e063a.js +1 -0
  420. package/.next/static/chunks/1660-e0fb9957b437ec4a.js +1 -0
  421. package/.next/static/chunks/app/(dashboard)/dashboard/console-log/page-361bb54d1d354b4c.js +1 -0
  422. package/.next/static/chunks/app/(dashboard)/dashboard/media-providers/systemone/[id]/{page-7340dad2b87640cf.js → page-a5e128afd334522f.js} +2 -2
  423. package/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-a41e2c8e26eb5956.js +21 -0
  424. package/.next/static/chunks/app/(dashboard)/dashboard/providers/page-feb4f47de991b067.js +1 -0
  425. package/.next/static/chunks/app/(dashboard)/dashboard/quota/page-f718869c90907a6a.js +1 -0
  426. package/.next/static/chunks/app/_global-error/page-f46617319221a4f8.js +1 -0
  427. package/.next/static/chunks/app/api/auth/login/route-f46617319221a4f8.js +1 -0
  428. package/.next/static/chunks/app/api/auth/logout/route-f46617319221a4f8.js +1 -0
  429. package/.next/static/chunks/app/api/auth/oidc/callback/route-f46617319221a4f8.js +1 -0
  430. package/.next/static/chunks/app/api/auth/oidc/start/route-f46617319221a4f8.js +1 -0
  431. package/.next/static/chunks/app/api/auth/oidc/test/route-f46617319221a4f8.js +1 -0
  432. package/.next/static/chunks/app/api/auth/reset-password/route-f46617319221a4f8.js +1 -0
  433. package/.next/static/chunks/app/api/auth/saml/acs/route-f46617319221a4f8.js +1 -0
  434. package/.next/static/chunks/app/api/auth/saml/metadata/route-f46617319221a4f8.js +1 -0
  435. package/.next/static/chunks/app/api/auth/saml/start/route-f46617319221a4f8.js +1 -0
  436. package/.next/static/chunks/app/api/auth/saml/test/route-f46617319221a4f8.js +1 -0
  437. package/.next/static/chunks/app/api/auth/status/route-f46617319221a4f8.js +1 -0
  438. package/.next/static/chunks/app/api/changelog/route-f46617319221a4f8.js +1 -0
  439. package/.next/static/chunks/app/api/cli-tools/all-statuses/route-f46617319221a4f8.js +1 -0
  440. package/.next/static/chunks/app/api/cli-tools/claude-settings/route-f46617319221a4f8.js +1 -0
  441. package/.next/static/chunks/app/api/cli-tools/codex-settings/route-f46617319221a4f8.js +1 -0
  442. package/.next/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-f46617319221a4f8.js +1 -0
  443. package/.next/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-f46617319221a4f8.js +1 -0
  444. package/.next/static/chunks/app/api/cli-tools/cowork-settings/route-f46617319221a4f8.js +1 -0
  445. package/.next/static/chunks/app/api/cli-tools/dsh-settings/route-f46617319221a4f8.js +1 -0
  446. package/.next/static/chunks/app/api/cli-tools/opencode-settings/route-f46617319221a4f8.js +1 -0
  447. package/.next/static/chunks/app/api/combos/[id]/route-f46617319221a4f8.js +1 -0
  448. package/.next/static/chunks/app/api/combos/route-f46617319221a4f8.js +1 -0
  449. package/.next/static/chunks/app/api/headroom/extras/route-f46617319221a4f8.js +1 -0
  450. package/.next/static/chunks/app/api/headroom/proxy/[...path]/route-f46617319221a4f8.js +1 -0
  451. package/.next/static/chunks/app/api/headroom/restart/route-f46617319221a4f8.js +1 -0
  452. package/.next/static/chunks/app/api/headroom/start/route-f46617319221a4f8.js +1 -0
  453. package/.next/static/chunks/app/api/headroom/status/route-f46617319221a4f8.js +1 -0
  454. package/.next/static/chunks/app/api/headroom/stop/route-f46617319221a4f8.js +1 -0
  455. package/.next/static/chunks/app/api/health/route-f46617319221a4f8.js +1 -0
  456. package/.next/static/chunks/app/api/init/route-f46617319221a4f8.js +1 -0
  457. package/.next/static/chunks/app/api/keys/[id]/route-f46617319221a4f8.js +1 -0
  458. package/.next/static/chunks/app/api/keys/route-f46617319221a4f8.js +1 -0
  459. package/.next/static/chunks/app/api/locale/route-f46617319221a4f8.js +1 -0
  460. package/.next/static/chunks/app/api/mcp/[plugin]/message/route-f46617319221a4f8.js +1 -0
  461. package/.next/static/chunks/app/api/mcp/[plugin]/sse/route-f46617319221a4f8.js +1 -0
  462. package/.next/static/chunks/app/api/media-providers/tts/deepgram/voices/route-f46617319221a4f8.js +1 -0
  463. package/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-f46617319221a4f8.js +1 -0
  464. package/.next/static/chunks/app/api/media-providers/tts/inworld/voices/route-f46617319221a4f8.js +1 -0
  465. package/.next/static/chunks/app/api/media-providers/tts/voices/route-f46617319221a4f8.js +1 -0
  466. package/.next/static/chunks/app/api/models/alias/route-f46617319221a4f8.js +1 -0
  467. package/.next/static/chunks/app/api/models/availability/route-f46617319221a4f8.js +1 -0
  468. package/.next/static/chunks/app/api/models/catalog-sync/route-f46617319221a4f8.js +1 -0
  469. package/.next/static/chunks/app/api/models/custom/route-f46617319221a4f8.js +1 -0
  470. package/.next/static/chunks/app/api/models/disabled/route-f46617319221a4f8.js +1 -0
  471. package/.next/static/chunks/app/api/models/route-f46617319221a4f8.js +1 -0
  472. package/.next/static/chunks/app/api/models/test/route-f46617319221a4f8.js +1 -0
  473. package/.next/static/chunks/app/api/oauth/[provider]/[action]/route-f46617319221a4f8.js +1 -0
  474. package/.next/static/chunks/app/api/oauth/codex/bulk-import/route-f46617319221a4f8.js +1 -0
  475. package/.next/static/chunks/app/api/oauth/codex/import-token/route-f46617319221a4f8.js +1 -0
  476. package/.next/static/chunks/app/api/oauth/cursor/auto-import/route-f46617319221a4f8.js +1 -0
  477. package/.next/static/chunks/app/api/oauth/cursor/import/route-f46617319221a4f8.js +1 -0
  478. package/.next/static/chunks/app/api/oauth/gitlab/pat/route-f46617319221a4f8.js +1 -0
  479. package/.next/static/chunks/app/api/oauth/grok-cli/bulk-import/route-f46617319221a4f8.js +1 -0
  480. package/.next/static/chunks/app/api/oauth/iflow/cookie/route-f46617319221a4f8.js +1 -0
  481. package/.next/static/chunks/app/api/oauth/xiaomi-mimo/api-key/route-f46617319221a4f8.js +1 -0
  482. package/.next/static/chunks/app/api/oauth/xiaomi-mimo/auto-import/route-f46617319221a4f8.js +1 -0
  483. package/.next/static/chunks/app/api/pricing/route-f46617319221a4f8.js +1 -0
  484. package/.next/static/chunks/app/api/provider-nodes/[id]/route-f46617319221a4f8.js +1 -0
  485. package/.next/static/chunks/app/api/provider-nodes/route-f46617319221a4f8.js +1 -0
  486. package/.next/static/chunks/app/api/provider-nodes/validate/route-f46617319221a4f8.js +1 -0
  487. package/.next/static/chunks/app/api/providers/[id]/models/route-f46617319221a4f8.js +1 -0
  488. package/.next/static/chunks/app/api/providers/[id]/route-f46617319221a4f8.js +1 -0
  489. package/.next/static/chunks/app/api/providers/[id]/test/route-f46617319221a4f8.js +1 -0
  490. package/.next/static/chunks/app/api/providers/[id]/test-models/route-f46617319221a4f8.js +1 -0
  491. package/.next/static/chunks/app/api/providers/client/route-f46617319221a4f8.js +1 -0
  492. package/.next/static/chunks/app/api/providers/kilo/free-models/route-f46617319221a4f8.js +1 -0
  493. package/.next/static/chunks/app/api/providers/route-f46617319221a4f8.js +1 -0
  494. package/.next/static/chunks/app/api/providers/suggested-models/route-f46617319221a4f8.js +1 -0
  495. package/.next/static/chunks/app/api/providers/test-batch/route-f46617319221a4f8.js +1 -0
  496. package/.next/static/chunks/app/api/providers/validate/route-f46617319221a4f8.js +1 -0
  497. package/.next/static/chunks/app/api/proxy-pools/[id]/route-f46617319221a4f8.js +1 -0
  498. package/.next/static/chunks/app/api/proxy-pools/[id]/test/route-f46617319221a4f8.js +1 -0
  499. package/.next/static/chunks/app/api/proxy-pools/cloudflare-deploy/route-f46617319221a4f8.js +1 -0
  500. package/.next/static/chunks/app/api/proxy-pools/deno-deploy/route-f46617319221a4f8.js +1 -0
  501. package/.next/static/chunks/app/api/proxy-pools/route-f46617319221a4f8.js +1 -0
  502. package/.next/static/chunks/app/api/proxy-pools/vercel-deploy/route-f46617319221a4f8.js +1 -0
  503. package/.next/static/chunks/app/api/pxpipe/health/route-f46617319221a4f8.js +1 -0
  504. package/.next/static/chunks/app/api/pxpipe/install/route-f46617319221a4f8.js +1 -0
  505. package/.next/static/chunks/app/api/pxpipe/logs/route-f46617319221a4f8.js +1 -0
  506. package/.next/static/chunks/app/api/pxpipe/restart/route-f46617319221a4f8.js +1 -0
  507. package/.next/static/chunks/app/api/pxpipe/start/route-f46617319221a4f8.js +1 -0
  508. package/.next/static/chunks/app/api/pxpipe/stats/route-f46617319221a4f8.js +1 -0
  509. package/.next/static/chunks/app/api/pxpipe/status/route-f46617319221a4f8.js +1 -0
  510. package/.next/static/chunks/app/api/pxpipe/stop/route-f46617319221a4f8.js +1 -0
  511. package/.next/static/chunks/app/api/settings/database/route-f46617319221a4f8.js +1 -0
  512. package/.next/static/chunks/app/api/settings/proxy-test/route-f46617319221a4f8.js +1 -0
  513. package/.next/static/chunks/app/api/settings/require-login/route-f46617319221a4f8.js +1 -0
  514. package/.next/static/chunks/app/api/settings/route-f46617319221a4f8.js +1 -0
  515. package/.next/static/chunks/app/api/shutdown/route-f46617319221a4f8.js +1 -0
  516. package/.next/static/chunks/app/api/tags/route-f46617319221a4f8.js +1 -0
  517. package/.next/static/chunks/app/api/translator/console-logs/route-f46617319221a4f8.js +1 -0
  518. package/.next/static/chunks/app/api/translator/console-logs/stream/route-f46617319221a4f8.js +1 -0
  519. package/.next/static/chunks/app/api/translator/load/route-f46617319221a4f8.js +1 -0
  520. package/.next/static/chunks/app/api/translator/save/route-f46617319221a4f8.js +1 -0
  521. package/.next/static/chunks/app/api/translator/send/route-f46617319221a4f8.js +1 -0
  522. package/.next/static/chunks/app/api/translator/translate/route-f46617319221a4f8.js +1 -0
  523. package/.next/static/chunks/app/api/tunnel/disable/route-f46617319221a4f8.js +1 -0
  524. package/.next/static/chunks/app/api/tunnel/enable/route-f46617319221a4f8.js +1 -0
  525. package/.next/static/chunks/app/api/tunnel/status/route-f46617319221a4f8.js +1 -0
  526. package/.next/static/chunks/app/api/tunnel/tailscale-check/route-f46617319221a4f8.js +1 -0
  527. package/.next/static/chunks/app/api/tunnel/tailscale-disable/route-f46617319221a4f8.js +1 -0
  528. package/.next/static/chunks/app/api/tunnel/tailscale-enable/route-f46617319221a4f8.js +1 -0
  529. package/.next/static/chunks/app/api/tunnel/tailscale-install/route-f46617319221a4f8.js +1 -0
  530. package/.next/static/chunks/app/api/usage/[connectionId]/codex-reset-credits/route-f46617319221a4f8.js +1 -0
  531. package/.next/static/chunks/app/api/usage/[connectionId]/route-f46617319221a4f8.js +1 -0
  532. package/.next/static/chunks/app/api/usage/chart/route-f46617319221a4f8.js +1 -0
  533. package/.next/static/chunks/app/api/usage/health/route-f46617319221a4f8.js +1 -0
  534. package/.next/static/chunks/app/api/usage/history/route-f46617319221a4f8.js +1 -0
  535. package/.next/static/chunks/app/api/usage/logs/route-f46617319221a4f8.js +1 -0
  536. package/.next/static/chunks/app/api/usage/providers/route-f46617319221a4f8.js +1 -0
  537. package/.next/static/chunks/app/api/usage/request-details/route-f46617319221a4f8.js +1 -0
  538. package/.next/static/chunks/app/api/usage/request-logs/route-f46617319221a4f8.js +1 -0
  539. package/.next/static/chunks/app/api/usage/stats/route-f46617319221a4f8.js +1 -0
  540. package/.next/static/chunks/app/api/usage/stream/route-f46617319221a4f8.js +1 -0
  541. package/.next/static/chunks/app/api/v1/api/chat/route-f46617319221a4f8.js +1 -0
  542. package/.next/static/chunks/app/api/v1/audio/speech/route-f46617319221a4f8.js +1 -0
  543. package/.next/static/chunks/app/api/v1/audio/transcriptions/route-f46617319221a4f8.js +1 -0
  544. package/.next/static/chunks/app/api/v1/audio/voices/route-f46617319221a4f8.js +1 -0
  545. package/.next/static/chunks/app/api/v1/chat/completions/route-f46617319221a4f8.js +1 -0
  546. package/.next/static/chunks/app/api/v1/embeddings/route-f46617319221a4f8.js +1 -0
  547. package/.next/static/chunks/app/api/v1/images/generations/route-f46617319221a4f8.js +1 -0
  548. package/.next/static/chunks/app/api/v1/messages/count_tokens/route-f46617319221a4f8.js +1 -0
  549. package/.next/static/chunks/app/api/v1/messages/route-f46617319221a4f8.js +1 -0
  550. package/.next/static/chunks/app/api/v1/models/[...model]/route-f46617319221a4f8.js +1 -0
  551. package/.next/static/chunks/app/api/v1/models/info/route-f46617319221a4f8.js +1 -0
  552. package/.next/static/chunks/app/api/v1/models/route-f46617319221a4f8.js +1 -0
  553. package/.next/static/chunks/app/api/v1/responses/compact/route-f46617319221a4f8.js +1 -0
  554. package/.next/static/chunks/app/api/v1/responses/route-f46617319221a4f8.js +1 -0
  555. package/.next/static/chunks/app/api/v1/route-f46617319221a4f8.js +1 -0
  556. package/.next/static/chunks/app/api/v1/search/route-f46617319221a4f8.js +1 -0
  557. package/.next/static/chunks/app/api/v1/systemone/route-f46617319221a4f8.js +1 -0
  558. package/.next/static/chunks/app/api/v1/videos/[id]/route-f46617319221a4f8.js +1 -0
  559. package/.next/static/chunks/app/api/v1/videos/edits/route-f46617319221a4f8.js +1 -0
  560. package/.next/static/chunks/app/api/v1/videos/extensions/route-f46617319221a4f8.js +1 -0
  561. package/.next/static/chunks/app/api/v1/videos/generations/route-f46617319221a4f8.js +1 -0
  562. package/.next/static/chunks/app/api/v1/web/fetch/route-f46617319221a4f8.js +1 -0
  563. package/.next/static/chunks/app/api/v1beta/models/[...path]/route-f46617319221a4f8.js +1 -0
  564. package/.next/static/chunks/app/api/v1beta/models/route-f46617319221a4f8.js +1 -0
  565. package/.next/static/chunks/app/api/version/route-f46617319221a4f8.js +1 -0
  566. package/.next/static/chunks/app/api/version/shutdown/route-f46617319221a4f8.js +1 -0
  567. package/.next/static/chunks/app/api/version/update/route-f46617319221a4f8.js +1 -0
  568. package/.next/static/chunks/app/landing/{page-a76ba2642bd02bf5.js → page-1c5aa0e05b21c61a.js} +1 -1
  569. package/.next/static/chunks/app/manifest.webmanifest/route-f46617319221a4f8.js +1 -0
  570. package/.next/static/chunks/app/page-f46617319221a4f8.js +1 -0
  571. package/.next/static/chunks/next/dist/client/components/builtin/app-error-f46617319221a4f8.js +1 -0
  572. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-f46617319221a4f8.js +1 -0
  573. package/.next/static/chunks/next/dist/client/components/builtin/not-found-f46617319221a4f8.js +1 -0
  574. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-f46617319221a4f8.js +1 -0
  575. package/.next/static/css/e5f3812777d2d9e9.css +1 -0
  576. package/CHANGELOG.md +16 -0
  577. package/open-sse/AGENTS.md +1 -1
  578. package/open-sse/config/errorConfig.js +4 -0
  579. package/open-sse/config/opencodeErrors.js +59 -0
  580. package/open-sse/config/opencodeGo.js +35 -0
  581. package/open-sse/config/providerModels.js +13 -0
  582. package/open-sse/config/providers.js +0 -11
  583. package/open-sse/executors/base.js +4 -1
  584. package/open-sse/executors/index.js +0 -3
  585. package/open-sse/executors/opencode-go.js +35 -103
  586. package/open-sse/executors/opencode-zen.js +31 -105
  587. package/open-sse/executors/opencode.js +40 -106
  588. package/open-sse/executors/opencodeShared.js +146 -0
  589. package/open-sse/executors/zed.js +307 -70
  590. package/open-sse/handlers/chatCore.js +7 -14
  591. package/open-sse/handlers/embeddingProviders/index.js +0 -1
  592. package/open-sse/handlers/imageProviders/index.js +0 -4
  593. package/open-sse/handlers/imageProviders/openai.js +1 -1
  594. package/open-sse/handlers/search/callers.js +0 -28
  595. package/open-sse/handlers/search/chatSearch.js +1 -57
  596. package/open-sse/handlers/search/normalizers.js +0 -49
  597. package/open-sse/handlers/sttCore.js +0 -17
  598. package/open-sse/handlers/ttsCore.js +1 -1
  599. package/open-sse/handlers/ttsProviders/genericFormats.js +0 -35
  600. package/open-sse/providers/registry/index.js +14 -53
  601. package/open-sse/providers/registry/opencode-go.js +128 -34
  602. package/open-sse/providers/registry/opencode-zen.js +25 -9
  603. package/open-sse/providers/registry/opencode.js +5 -3
  604. package/open-sse/services/accountFallback.js +1 -0
  605. package/open-sse/services/opencodeGoProbe.js +39 -0
  606. package/open-sse/services/provider.js +27 -0
  607. package/open-sse/services/usage/glm.js +6 -12
  608. package/open-sse/services/usage/misc.js +1 -92
  609. package/open-sse/services/usage/zed.js +18 -3
  610. package/open-sse/services/usage.js +2 -14
  611. package/open-sse/shared/zedAuth.js +53 -5
  612. package/open-sse/translator/formats/claude.js +47 -19
  613. package/open-sse/utils/error.js +37 -3
  614. package/open-sse/utils/opencodeErrors.js +63 -0
  615. package/open-sse/utils/opencodeFingerprint.js +122 -23
  616. package/open-sse/utils/opencodeFreeUsage.js +57 -12
  617. package/open-sse/utils/usageTracking.js +5 -3
  618. package/package.json +2 -2
  619. package/src/app/(dashboard)/dashboard/console-log/ConsoleLogClient.tsx +10 -0
  620. package/src/app/(dashboard)/dashboard/providers/[id]/ModelRow.tsx +14 -0
  621. package/src/app/(dashboard)/dashboard/providers/[id]/OpenCodeGoConnectionCard.tsx +113 -0
  622. package/src/app/(dashboard)/dashboard/providers/[id]/page.tsx +11 -2
  623. package/src/app/(dashboard)/dashboard/providers/components/ModelsCard.tsx +14 -5
  624. package/src/app/(dashboard)/dashboard/providers/page.tsx +33 -45
  625. package/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/utils.ts +0 -33
  626. package/src/app/api/oauth/[provider]/[action]/route.js +2 -0
  627. package/src/app/api/providers/[id]/models/route.js +0 -3
  628. package/src/app/api/providers/[id]/test/testUtils.js +18 -103
  629. package/src/app/api/providers/validate/route.js +9 -37
  630. package/src/app/api/usage/[connectionId]/route.js +1 -1
  631. package/src/components/app-sidebar.tsx +1 -0
  632. package/src/lib/modelCatalog/sync.js +2 -4
  633. package/src/shared/components/EditConnectionModal.tsx +1 -1
  634. package/src/shared/constants/cliTools.js +1 -9
  635. package/src/shared/constants/models.ts +2 -0
  636. package/src/shared/constants/ttsProviders.ts +0 -21
  637. package/src/shared/utils/providerIcon.ts +0 -12
  638. package/src/sse/services/model.ts +2 -12
  639. package/.next/server/app/api/media-providers/tts/minimax/voices/route.js +0 -1
  640. package/.next/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +0 -1
  641. package/.next/server/app/api/media-providers/tts/minimax/voices/route_client-reference-manifest.js +0 -1
  642. package/.next/server/chunks/1011.js +0 -1
  643. package/.next/server/chunks/1194.js +0 -1
  644. package/.next/server/chunks/1289.js +0 -1
  645. package/.next/server/chunks/1633.js +0 -1
  646. package/.next/server/chunks/3425.js +0 -1
  647. package/.next/server/chunks/4129.js +0 -1
  648. package/.next/server/chunks/5496.js +0 -1
  649. package/.next/server/chunks/5761.js +0 -1
  650. package/.next/server/chunks/6056.js +0 -1
  651. package/.next/server/chunks/7816.js +0 -1
  652. package/.next/server/chunks/8940.js +0 -1
  653. package/.next/static/8QVpvFFKxoB53L449Kgan/_buildManifest.js +0 -1
  654. package/.next/static/chunks/1278-5800a984ad8ad005.js +0 -1
  655. package/.next/static/chunks/1660-7f2e79bde5eff607.js +0 -1
  656. package/.next/static/chunks/app/(dashboard)/dashboard/console-log/page-58a29f3cb409597a.js +0 -1
  657. package/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-fab6f4b4cccc1a6f.js +0 -21
  658. package/.next/static/chunks/app/(dashboard)/dashboard/providers/page-9054f870a5e0f5c6.js +0 -1
  659. package/.next/static/chunks/app/(dashboard)/dashboard/quota/page-61780f0a2b494680.js +0 -1
  660. package/.next/static/chunks/app/_global-error/page-9a2a13ac6b89ba91.js +0 -1
  661. package/.next/static/chunks/app/api/auth/login/route-9a2a13ac6b89ba91.js +0 -1
  662. package/.next/static/chunks/app/api/auth/logout/route-9a2a13ac6b89ba91.js +0 -1
  663. package/.next/static/chunks/app/api/auth/oidc/callback/route-9a2a13ac6b89ba91.js +0 -1
  664. package/.next/static/chunks/app/api/auth/oidc/start/route-9a2a13ac6b89ba91.js +0 -1
  665. package/.next/static/chunks/app/api/auth/oidc/test/route-9a2a13ac6b89ba91.js +0 -1
  666. package/.next/static/chunks/app/api/auth/reset-password/route-9a2a13ac6b89ba91.js +0 -1
  667. package/.next/static/chunks/app/api/auth/saml/acs/route-9a2a13ac6b89ba91.js +0 -1
  668. package/.next/static/chunks/app/api/auth/saml/metadata/route-9a2a13ac6b89ba91.js +0 -1
  669. package/.next/static/chunks/app/api/auth/saml/start/route-9a2a13ac6b89ba91.js +0 -1
  670. package/.next/static/chunks/app/api/auth/saml/test/route-9a2a13ac6b89ba91.js +0 -1
  671. package/.next/static/chunks/app/api/auth/status/route-9a2a13ac6b89ba91.js +0 -1
  672. package/.next/static/chunks/app/api/changelog/route-9a2a13ac6b89ba91.js +0 -1
  673. package/.next/static/chunks/app/api/cli-tools/all-statuses/route-9a2a13ac6b89ba91.js +0 -1
  674. package/.next/static/chunks/app/api/cli-tools/claude-settings/route-9a2a13ac6b89ba91.js +0 -1
  675. package/.next/static/chunks/app/api/cli-tools/codex-settings/route-9a2a13ac6b89ba91.js +0 -1
  676. package/.next/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-9a2a13ac6b89ba91.js +0 -1
  677. package/.next/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-9a2a13ac6b89ba91.js +0 -1
  678. package/.next/static/chunks/app/api/cli-tools/cowork-settings/route-9a2a13ac6b89ba91.js +0 -1
  679. package/.next/static/chunks/app/api/cli-tools/dsh-settings/route-9a2a13ac6b89ba91.js +0 -1
  680. package/.next/static/chunks/app/api/cli-tools/opencode-settings/route-9a2a13ac6b89ba91.js +0 -1
  681. package/.next/static/chunks/app/api/combos/[id]/route-9a2a13ac6b89ba91.js +0 -1
  682. package/.next/static/chunks/app/api/combos/route-9a2a13ac6b89ba91.js +0 -1
  683. package/.next/static/chunks/app/api/headroom/extras/route-9a2a13ac6b89ba91.js +0 -1
  684. package/.next/static/chunks/app/api/headroom/proxy/[...path]/route-9a2a13ac6b89ba91.js +0 -1
  685. package/.next/static/chunks/app/api/headroom/restart/route-9a2a13ac6b89ba91.js +0 -1
  686. package/.next/static/chunks/app/api/headroom/start/route-9a2a13ac6b89ba91.js +0 -1
  687. package/.next/static/chunks/app/api/headroom/status/route-9a2a13ac6b89ba91.js +0 -1
  688. package/.next/static/chunks/app/api/headroom/stop/route-9a2a13ac6b89ba91.js +0 -1
  689. package/.next/static/chunks/app/api/health/route-9a2a13ac6b89ba91.js +0 -1
  690. package/.next/static/chunks/app/api/init/route-9a2a13ac6b89ba91.js +0 -1
  691. package/.next/static/chunks/app/api/keys/[id]/route-9a2a13ac6b89ba91.js +0 -1
  692. package/.next/static/chunks/app/api/keys/route-9a2a13ac6b89ba91.js +0 -1
  693. package/.next/static/chunks/app/api/locale/route-9a2a13ac6b89ba91.js +0 -1
  694. package/.next/static/chunks/app/api/mcp/[plugin]/message/route-9a2a13ac6b89ba91.js +0 -1
  695. package/.next/static/chunks/app/api/mcp/[plugin]/sse/route-9a2a13ac6b89ba91.js +0 -1
  696. package/.next/static/chunks/app/api/media-providers/tts/deepgram/voices/route-9a2a13ac6b89ba91.js +0 -1
  697. package/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-9a2a13ac6b89ba91.js +0 -1
  698. package/.next/static/chunks/app/api/media-providers/tts/inworld/voices/route-9a2a13ac6b89ba91.js +0 -1
  699. package/.next/static/chunks/app/api/media-providers/tts/minimax/voices/route-9a2a13ac6b89ba91.js +0 -1
  700. package/.next/static/chunks/app/api/media-providers/tts/voices/route-9a2a13ac6b89ba91.js +0 -1
  701. package/.next/static/chunks/app/api/models/alias/route-9a2a13ac6b89ba91.js +0 -1
  702. package/.next/static/chunks/app/api/models/availability/route-9a2a13ac6b89ba91.js +0 -1
  703. package/.next/static/chunks/app/api/models/catalog-sync/route-9a2a13ac6b89ba91.js +0 -1
  704. package/.next/static/chunks/app/api/models/custom/route-9a2a13ac6b89ba91.js +0 -1
  705. package/.next/static/chunks/app/api/models/disabled/route-9a2a13ac6b89ba91.js +0 -1
  706. package/.next/static/chunks/app/api/models/route-9a2a13ac6b89ba91.js +0 -1
  707. package/.next/static/chunks/app/api/models/test/route-9a2a13ac6b89ba91.js +0 -1
  708. package/.next/static/chunks/app/api/oauth/[provider]/[action]/route-9a2a13ac6b89ba91.js +0 -1
  709. package/.next/static/chunks/app/api/oauth/codex/bulk-import/route-9a2a13ac6b89ba91.js +0 -1
  710. package/.next/static/chunks/app/api/oauth/codex/import-token/route-9a2a13ac6b89ba91.js +0 -1
  711. package/.next/static/chunks/app/api/oauth/cursor/auto-import/route-9a2a13ac6b89ba91.js +0 -1
  712. package/.next/static/chunks/app/api/oauth/cursor/import/route-9a2a13ac6b89ba91.js +0 -1
  713. package/.next/static/chunks/app/api/oauth/gitlab/pat/route-9a2a13ac6b89ba91.js +0 -1
  714. package/.next/static/chunks/app/api/oauth/grok-cli/bulk-import/route-9a2a13ac6b89ba91.js +0 -1
  715. package/.next/static/chunks/app/api/oauth/iflow/cookie/route-9a2a13ac6b89ba91.js +0 -1
  716. package/.next/static/chunks/app/api/oauth/xiaomi-mimo/api-key/route-9a2a13ac6b89ba91.js +0 -1
  717. package/.next/static/chunks/app/api/oauth/xiaomi-mimo/auto-import/route-9a2a13ac6b89ba91.js +0 -1
  718. package/.next/static/chunks/app/api/pricing/route-9a2a13ac6b89ba91.js +0 -1
  719. package/.next/static/chunks/app/api/provider-nodes/[id]/route-9a2a13ac6b89ba91.js +0 -1
  720. package/.next/static/chunks/app/api/provider-nodes/route-9a2a13ac6b89ba91.js +0 -1
  721. package/.next/static/chunks/app/api/provider-nodes/validate/route-9a2a13ac6b89ba91.js +0 -1
  722. package/.next/static/chunks/app/api/providers/[id]/models/route-9a2a13ac6b89ba91.js +0 -1
  723. package/.next/static/chunks/app/api/providers/[id]/route-9a2a13ac6b89ba91.js +0 -1
  724. package/.next/static/chunks/app/api/providers/[id]/test/route-9a2a13ac6b89ba91.js +0 -1
  725. package/.next/static/chunks/app/api/providers/[id]/test-models/route-9a2a13ac6b89ba91.js +0 -1
  726. package/.next/static/chunks/app/api/providers/client/route-9a2a13ac6b89ba91.js +0 -1
  727. package/.next/static/chunks/app/api/providers/kilo/free-models/route-9a2a13ac6b89ba91.js +0 -1
  728. package/.next/static/chunks/app/api/providers/route-9a2a13ac6b89ba91.js +0 -1
  729. package/.next/static/chunks/app/api/providers/suggested-models/route-9a2a13ac6b89ba91.js +0 -1
  730. package/.next/static/chunks/app/api/providers/test-batch/route-9a2a13ac6b89ba91.js +0 -1
  731. package/.next/static/chunks/app/api/providers/validate/route-9a2a13ac6b89ba91.js +0 -1
  732. package/.next/static/chunks/app/api/proxy-pools/[id]/route-9a2a13ac6b89ba91.js +0 -1
  733. package/.next/static/chunks/app/api/proxy-pools/[id]/test/route-9a2a13ac6b89ba91.js +0 -1
  734. package/.next/static/chunks/app/api/proxy-pools/cloudflare-deploy/route-9a2a13ac6b89ba91.js +0 -1
  735. package/.next/static/chunks/app/api/proxy-pools/deno-deploy/route-9a2a13ac6b89ba91.js +0 -1
  736. package/.next/static/chunks/app/api/proxy-pools/route-9a2a13ac6b89ba91.js +0 -1
  737. package/.next/static/chunks/app/api/proxy-pools/vercel-deploy/route-9a2a13ac6b89ba91.js +0 -1
  738. package/.next/static/chunks/app/api/pxpipe/health/route-9a2a13ac6b89ba91.js +0 -1
  739. package/.next/static/chunks/app/api/pxpipe/install/route-9a2a13ac6b89ba91.js +0 -1
  740. package/.next/static/chunks/app/api/pxpipe/logs/route-9a2a13ac6b89ba91.js +0 -1
  741. package/.next/static/chunks/app/api/pxpipe/restart/route-9a2a13ac6b89ba91.js +0 -1
  742. package/.next/static/chunks/app/api/pxpipe/start/route-9a2a13ac6b89ba91.js +0 -1
  743. package/.next/static/chunks/app/api/pxpipe/stats/route-9a2a13ac6b89ba91.js +0 -1
  744. package/.next/static/chunks/app/api/pxpipe/status/route-9a2a13ac6b89ba91.js +0 -1
  745. package/.next/static/chunks/app/api/pxpipe/stop/route-9a2a13ac6b89ba91.js +0 -1
  746. package/.next/static/chunks/app/api/settings/database/route-9a2a13ac6b89ba91.js +0 -1
  747. package/.next/static/chunks/app/api/settings/proxy-test/route-9a2a13ac6b89ba91.js +0 -1
  748. package/.next/static/chunks/app/api/settings/require-login/route-9a2a13ac6b89ba91.js +0 -1
  749. package/.next/static/chunks/app/api/settings/route-9a2a13ac6b89ba91.js +0 -1
  750. package/.next/static/chunks/app/api/shutdown/route-9a2a13ac6b89ba91.js +0 -1
  751. package/.next/static/chunks/app/api/tags/route-9a2a13ac6b89ba91.js +0 -1
  752. package/.next/static/chunks/app/api/translator/console-logs/route-9a2a13ac6b89ba91.js +0 -1
  753. package/.next/static/chunks/app/api/translator/console-logs/stream/route-9a2a13ac6b89ba91.js +0 -1
  754. package/.next/static/chunks/app/api/translator/load/route-9a2a13ac6b89ba91.js +0 -1
  755. package/.next/static/chunks/app/api/translator/save/route-9a2a13ac6b89ba91.js +0 -1
  756. package/.next/static/chunks/app/api/translator/send/route-9a2a13ac6b89ba91.js +0 -1
  757. package/.next/static/chunks/app/api/translator/translate/route-9a2a13ac6b89ba91.js +0 -1
  758. package/.next/static/chunks/app/api/tunnel/disable/route-9a2a13ac6b89ba91.js +0 -1
  759. package/.next/static/chunks/app/api/tunnel/enable/route-9a2a13ac6b89ba91.js +0 -1
  760. package/.next/static/chunks/app/api/tunnel/status/route-9a2a13ac6b89ba91.js +0 -1
  761. package/.next/static/chunks/app/api/tunnel/tailscale-check/route-9a2a13ac6b89ba91.js +0 -1
  762. package/.next/static/chunks/app/api/tunnel/tailscale-disable/route-9a2a13ac6b89ba91.js +0 -1
  763. package/.next/static/chunks/app/api/tunnel/tailscale-enable/route-9a2a13ac6b89ba91.js +0 -1
  764. package/.next/static/chunks/app/api/tunnel/tailscale-install/route-9a2a13ac6b89ba91.js +0 -1
  765. package/.next/static/chunks/app/api/usage/[connectionId]/codex-reset-credits/route-9a2a13ac6b89ba91.js +0 -1
  766. package/.next/static/chunks/app/api/usage/[connectionId]/route-9a2a13ac6b89ba91.js +0 -1
  767. package/.next/static/chunks/app/api/usage/chart/route-9a2a13ac6b89ba91.js +0 -1
  768. package/.next/static/chunks/app/api/usage/health/route-9a2a13ac6b89ba91.js +0 -1
  769. package/.next/static/chunks/app/api/usage/history/route-9a2a13ac6b89ba91.js +0 -1
  770. package/.next/static/chunks/app/api/usage/logs/route-9a2a13ac6b89ba91.js +0 -1
  771. package/.next/static/chunks/app/api/usage/providers/route-9a2a13ac6b89ba91.js +0 -1
  772. package/.next/static/chunks/app/api/usage/request-details/route-9a2a13ac6b89ba91.js +0 -1
  773. package/.next/static/chunks/app/api/usage/request-logs/route-9a2a13ac6b89ba91.js +0 -1
  774. package/.next/static/chunks/app/api/usage/stats/route-9a2a13ac6b89ba91.js +0 -1
  775. package/.next/static/chunks/app/api/usage/stream/route-9a2a13ac6b89ba91.js +0 -1
  776. package/.next/static/chunks/app/api/v1/api/chat/route-9a2a13ac6b89ba91.js +0 -1
  777. package/.next/static/chunks/app/api/v1/audio/speech/route-9a2a13ac6b89ba91.js +0 -1
  778. package/.next/static/chunks/app/api/v1/audio/transcriptions/route-9a2a13ac6b89ba91.js +0 -1
  779. package/.next/static/chunks/app/api/v1/audio/voices/route-9a2a13ac6b89ba91.js +0 -1
  780. package/.next/static/chunks/app/api/v1/chat/completions/route-9a2a13ac6b89ba91.js +0 -1
  781. package/.next/static/chunks/app/api/v1/embeddings/route-9a2a13ac6b89ba91.js +0 -1
  782. package/.next/static/chunks/app/api/v1/images/generations/route-9a2a13ac6b89ba91.js +0 -1
  783. package/.next/static/chunks/app/api/v1/messages/count_tokens/route-9a2a13ac6b89ba91.js +0 -1
  784. package/.next/static/chunks/app/api/v1/messages/route-9a2a13ac6b89ba91.js +0 -1
  785. package/.next/static/chunks/app/api/v1/models/[...model]/route-9a2a13ac6b89ba91.js +0 -1
  786. package/.next/static/chunks/app/api/v1/models/info/route-9a2a13ac6b89ba91.js +0 -1
  787. package/.next/static/chunks/app/api/v1/models/route-9a2a13ac6b89ba91.js +0 -1
  788. package/.next/static/chunks/app/api/v1/responses/compact/route-9a2a13ac6b89ba91.js +0 -1
  789. package/.next/static/chunks/app/api/v1/responses/route-9a2a13ac6b89ba91.js +0 -1
  790. package/.next/static/chunks/app/api/v1/route-9a2a13ac6b89ba91.js +0 -1
  791. package/.next/static/chunks/app/api/v1/search/route-9a2a13ac6b89ba91.js +0 -1
  792. package/.next/static/chunks/app/api/v1/systemone/route-9a2a13ac6b89ba91.js +0 -1
  793. package/.next/static/chunks/app/api/v1/videos/[id]/route-9a2a13ac6b89ba91.js +0 -1
  794. package/.next/static/chunks/app/api/v1/videos/edits/route-9a2a13ac6b89ba91.js +0 -1
  795. package/.next/static/chunks/app/api/v1/videos/extensions/route-9a2a13ac6b89ba91.js +0 -1
  796. package/.next/static/chunks/app/api/v1/videos/generations/route-9a2a13ac6b89ba91.js +0 -1
  797. package/.next/static/chunks/app/api/v1/web/fetch/route-9a2a13ac6b89ba91.js +0 -1
  798. package/.next/static/chunks/app/api/v1beta/models/[...path]/route-9a2a13ac6b89ba91.js +0 -1
  799. package/.next/static/chunks/app/api/v1beta/models/route-9a2a13ac6b89ba91.js +0 -1
  800. package/.next/static/chunks/app/api/version/route-9a2a13ac6b89ba91.js +0 -1
  801. package/.next/static/chunks/app/api/version/shutdown/route-9a2a13ac6b89ba91.js +0 -1
  802. package/.next/static/chunks/app/api/version/update/route-9a2a13ac6b89ba91.js +0 -1
  803. package/.next/static/chunks/app/manifest.webmanifest/route-9a2a13ac6b89ba91.js +0 -1
  804. package/.next/static/chunks/app/page-9a2a13ac6b89ba91.js +0 -1
  805. package/.next/static/chunks/next/dist/client/components/builtin/app-error-9a2a13ac6b89ba91.js +0 -1
  806. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-9a2a13ac6b89ba91.js +0 -1
  807. package/.next/static/chunks/next/dist/client/components/builtin/not-found-9a2a13ac6b89ba91.js +0 -1
  808. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-9a2a13ac6b89ba91.js +0 -1
  809. package/.next/static/css/efaf98e3b295f727.css +0 -1
  810. package/open-sse/executors/xiaomi-tokenplan.js +0 -20
  811. package/open-sse/handlers/imageProviders/huggingface.js +0 -23
  812. package/open-sse/handlers/ttsProviders/minimax.js +0 -63
  813. package/open-sse/providers/registry/fish-audio.js +0 -31
  814. package/open-sse/providers/registry/glm-cn.js +0 -39
  815. package/open-sse/providers/registry/groq.js +0 -62
  816. package/open-sse/providers/registry/huggingface.js +0 -40
  817. package/open-sse/providers/registry/minimax-cn.js +0 -82
  818. package/open-sse/providers/registry/minimax.js +0 -94
  819. package/open-sse/providers/registry/siliconflow.js +0 -39
  820. package/open-sse/providers/registry/vercel-ai-gateway.js +0 -42
  821. package/open-sse/providers/registry/xiaomi-tokenplan.js +0 -66
  822. package/open-sse/providers/registry/xquik.js +0 -31
  823. package/open-sse/services/usage/groq.js +0 -133
  824. package/open-sse/services/usage/minimax.js +0 -297
  825. package/public/providers/fish-audio.png +0 -0
  826. package/public/providers/glm-cn.png +0 -0
  827. package/public/providers/groq.png +0 -0
  828. package/public/providers/huggingface.png +0 -0
  829. package/public/providers/minimax-cn.png +0 -0
  830. package/public/providers/minimax.png +0 -0
  831. package/public/providers/siliconflow.png +0 -0
  832. package/public/providers/vercel-ai-gateway.png +0 -0
  833. package/public/providers/vercel.png +0 -0
  834. package/public/providers/xiaomi-tokenplan.png +0 -0
  835. package/public/providers/xquik.png +0 -0
  836. package/src/app/api/media-providers/tts/minimax/voices/route.js +0 -126
  837. /package/.next/static/{8QVpvFFKxoB53L449Kgan → alTg1qNVWmX6-0j1DLgF7}/_ssgManifest.js +0 -0
@@ -0,0 +1,146 @@
1
+ // Helpers shared by the OpenCode executors (free lane, Go, Zen).
2
+ //
3
+ // The three lanes speak the same Responses/Chat boundary rules; only their
4
+ // base URLs, session scopes and auth differ. Keeping the body-shaping rules
5
+ // here means a fix lands once instead of three times (and cannot drift).
6
+
7
+ import {
8
+ clampResponsesCallId,
9
+ coerceResponsesArguments,
10
+ coerceResponsesOutput,
11
+ } from "../translator/formats/responsesApi.js";
12
+
13
+ export const MAX_TOOL_NAME_LEN = 128;
14
+ export const MAX_SESSION_LENGTH = 256;
15
+
16
+ export function normalizeSession(value) {
17
+ if (typeof value !== "string") return null;
18
+ const normalized = value.trim();
19
+ if (!normalized || normalized.length > MAX_SESSION_LENGTH) return null;
20
+ return normalized;
21
+ }
22
+
23
+ /** Strip the thinking suffix "model(level)" so registry lookups hit the base id. */
24
+ export function baseModelId(model) {
25
+ return String(model || "")
26
+ .replace(/\([^()]+\)\s*$/, "")
27
+ .trim();
28
+ }
29
+
30
+ /**
31
+ * Normalize `body.tools` into the flat Responses shape and drop hosted/nameless
32
+ * tools the /responses endpoint rejects.
33
+ *
34
+ * Freeform (`type: "custom"`) tools are preserved verbatim: Codex sends
35
+ * `apply_patch`/`exec` with a grammar in `format` and no JSON schema, and
36
+ * rewriting them as function tools loses that grammar — the model then calls a
37
+ * parameterless function the client cannot execute, breaking the tool loop.
38
+ */
39
+ export function normalizeResponsesTools(body) {
40
+ if (!Array.isArray(body.tools)) return;
41
+ const validNames = new Set();
42
+ body.tools = body.tools.filter((tool) => {
43
+ if (!tool || typeof tool !== "object" || Array.isArray(tool)) return false;
44
+
45
+ if (tool.type === "custom") {
46
+ const name =
47
+ typeof tool.name === "string" ? tool.name.trim().slice(0, MAX_TOOL_NAME_LEN) : "";
48
+ if (!name || validNames.has(name)) return false;
49
+ tool.name = name;
50
+ validNames.add(name);
51
+ return true;
52
+ }
53
+
54
+ const fn =
55
+ tool.function && typeof tool.function === "object" && !Array.isArray(tool.function)
56
+ ? tool.function
57
+ : null;
58
+ const rawName =
59
+ typeof tool.name === "string" ? tool.name : typeof fn?.name === "string" ? fn.name : "";
60
+ const name = rawName.trim();
61
+ if (!name) return false;
62
+ const finalName = name.slice(0, MAX_TOOL_NAME_LEN);
63
+ // Two long names can collapse onto the same id after truncation; upstream
64
+ // rejects duplicate declarations, so keep the first.
65
+ if (validNames.has(finalName)) return false;
66
+ const description =
67
+ typeof tool.description === "string"
68
+ ? tool.description
69
+ : typeof fn?.description === "string"
70
+ ? fn.description
71
+ : "";
72
+ let parameters =
73
+ tool.parameters && typeof tool.parameters === "object" && !Array.isArray(tool.parameters)
74
+ ? tool.parameters
75
+ : fn?.parameters && typeof fn.parameters === "object" && !Array.isArray(fn.parameters)
76
+ ? fn.parameters
77
+ : { type: "object", properties: {} };
78
+ // Mirror the request translator: {type:"object"} without properties is rejected
79
+ // by strict Responses backends, so fill in the empty properties map.
80
+ if (parameters.type === "object" && !parameters.properties)
81
+ parameters = { ...parameters, properties: {} };
82
+ for (const k of Object.keys(tool)) delete tool[k];
83
+ tool.type = "function";
84
+ tool.name = finalName;
85
+ if (description) tool.description = description;
86
+ tool.parameters = parameters;
87
+ validNames.add(finalName);
88
+ return true;
89
+ });
90
+ if (
91
+ body.tool_choice &&
92
+ typeof body.tool_choice === "object" &&
93
+ !Array.isArray(body.tool_choice)
94
+ ) {
95
+ // Both {type:"function"} and {type:"custom"} name a declared tool.
96
+ if (body.tool_choice.type === "function" || body.tool_choice.type === "custom") {
97
+ const n = typeof body.tool_choice.name === "string" ? body.tool_choice.name.trim() : "";
98
+ if (!n || !validNames.has(n)) delete body.tool_choice;
99
+ }
100
+ }
101
+ }
102
+
103
+ /**
104
+ * Last line of defense for native Responses clients (sourceFormat === targetFormat
105
+ * skips translation): coerce items in place so malformed tool payloads 400 here
106
+ * with a clear shape instead of upstream as InputValidationError.
107
+ */
108
+ export function sanitizeResponsesItems(body) {
109
+ if (!Array.isArray(body.input)) return;
110
+ body.input = body.input.filter((item) => {
111
+ if (!item || typeof item !== "object" || Array.isArray(item)) return true;
112
+ // Strip prior-turn reasoning items: OpenCode's lanes route to a pooled
113
+ // upstream account, where reasoning `encrypted_content` cannot be validated
114
+ // across rotated accounts or sessions (400 "not issued to this caller").
115
+ // Stateless mode (store=false) then rejects the dangling item as deleted,
116
+ // so dropping prior reasoning keeps multi-turn tool loops working.
117
+ if (item.type === "reasoning") return false;
118
+ delete item.encrypted_content;
119
+ delete item.reasoning_encrypted_content;
120
+ if (item.type === "function_call") {
121
+ if (!item.name || typeof item.name !== "string" || item.name.trim() === "") return false;
122
+ item.name = item.name.trim().slice(0, MAX_TOOL_NAME_LEN);
123
+ item.call_id = clampResponsesCallId(item.call_id);
124
+ item.arguments = coerceResponsesArguments(item.arguments);
125
+ return true;
126
+ }
127
+ if (item.type === "function_call_output") {
128
+ item.call_id = clampResponsesCallId(item.call_id);
129
+ item.output = coerceResponsesOutput(item.output);
130
+ return true;
131
+ }
132
+ // Freeform tool calls (custom tools above): keep them paired and named, but
133
+ // never mint a call_id here — a regenerated id would stop matching its output.
134
+ if (item.type === "custom_tool_call" || item.type === "custom_tool_call_output") {
135
+ if (item.type === "custom_tool_call") {
136
+ if (!item.name || typeof item.name !== "string" || !item.name.trim()) return false;
137
+ item.name = item.name.trim().slice(0, MAX_TOOL_NAME_LEN);
138
+ }
139
+ if (typeof item.call_id === "string" && item.call_id) {
140
+ item.call_id = clampResponsesCallId(item.call_id);
141
+ }
142
+ return true;
143
+ }
144
+ return true;
145
+ });
146
+ }
@@ -26,6 +26,14 @@ import { openaiResponsesToOpenAIResponse } from "../translator/response/openai-r
26
26
  import { ZED_HEADERS, resolveZedModels, zedLlmFetch } from "../shared/zedAuth.js";
27
27
  import { estimateInputTokens } from "../utils/usageTracking.js";
28
28
  import { stripHistoryForContext } from "../services/capacityAdapter.js";
29
+ import {
30
+ stripThinkingSuffix,
31
+ extractThinking,
32
+ applyThinking,
33
+ } from "../translator/concerns/thinkingUnified.js";
34
+ import { reconcileThinkingBudget } from "../translator/formats/claude.js";
35
+ import { DEFAULT_MAX_TOKENS } from "../config/runtimeConfig.js";
36
+ import { getCapabilitiesForModel } from "../providers/capabilities.js";
29
37
 
30
38
  // Wire values for the `provider` field of POST /completions. These are NOT
31
39
  // display names: cloud.zed.dev matches them exactly, and an unrecognized value
@@ -55,9 +63,51 @@ function normalizeZedProvider(value, model) {
55
63
  return ZED_PROVIDER.openai;
56
64
  }
57
65
 
58
- function buildProviderRequest(provider, model, body, stream, credentials) {
66
+ // The shared Claude translator copies sampling fields only — thinking intent is
67
+ // applied later by the translator pipeline, against the executor's target
68
+ // format. Zed's Claude path bypasses that pipeline, so `model(high)` and
69
+ // reasoning_effort used to be dropped with no error.
70
+ //
71
+ // `model` keeps the client's thinking suffix here: applyThinking parses it into
72
+ // the budget/level override, and the cleaned id is only used on the wire.
73
+ function applyZedThinking(claudeRequest, sourceBody, model, raw, log) {
74
+ if (!raw?.supports_thinking) {
75
+ const intent = extractThinking(sourceBody);
76
+ if (intent && intent.mode !== "none") {
77
+ log?.warn?.(
78
+ "ZED",
79
+ `${stripThinkingSuffix(model)} does not support thinking — requested depth omitted`,
80
+ );
81
+ }
82
+ return claudeRequest;
83
+ }
84
+ // No early return on a missing intent: the depth may come from the model
85
+ // suffix alone (`claude-sonnet-4.5(high)`) with no body field to extract.
86
+ applyThinking(FORMATS.CLAUDE, model, claudeRequest, "zed", extractThinking(sourceBody));
87
+ const ceiling =
88
+ Number(raw?.max_output_tokens ?? raw?.maxOutputTokens) ||
89
+ getCapabilitiesForModel("zed", stripThinkingSuffix(model)).maxOutput ||
90
+ DEFAULT_MAX_TOKENS;
91
+ // The shared translator clamps against provider capabilities, not Zed's live
92
+ // catalog, so a model whose real ceiling is lower would still 400 upstream.
93
+ if (claudeRequest.max_tokens) {
94
+ claudeRequest.max_tokens = Math.min(claudeRequest.max_tokens, ceiling);
95
+ }
96
+ return reconcileThinkingBudget(claudeRequest, ceiling);
97
+ }
98
+
99
+ function buildProviderRequest(
100
+ provider,
101
+ model,
102
+ body,
103
+ stream,
104
+ credentials,
105
+ raw = null,
106
+ { log = null, sourceModel = model } = {},
107
+ ) {
59
108
  if (provider === ZED_PROVIDER.anthropic) {
60
- return openaiToClaudeRequest(model, body, true);
109
+ const claudeRequest = openaiToClaudeRequest(model, body, true);
110
+ return applyZedThinking(claudeRequest, body, sourceModel, raw, log);
61
111
  }
62
112
  if (provider === ZED_PROVIDER.google) {
63
113
  const geminiRequest = openaiToGeminiRequest(model, body, true);
@@ -92,16 +142,87 @@ function convertProviderEvent(provider, event, state) {
92
142
  return event;
93
143
  }
94
144
 
95
- function createErrorChunk(model, message) {
145
+ // A stream that ends without a terminal frame leaves non-streaming aggregation
146
+ // (parseSSEToOpenAIResponse) with a finish_reason-less answer and streaming
147
+ // clients waiting for a terminator, so close it explicitly.
148
+ function createFinishChunk(model) {
96
149
  return {
97
- id: `chatcmpl-zed-error-${Date.now()}`,
150
+ id: `chatcmpl-zed-${Date.now()}`,
98
151
  object: "chat.completion.chunk",
99
152
  created: Math.floor(Date.now() / 1000),
100
153
  model,
101
- choices: [{ index: 0, delta: { content: `[Zed error] ${message}` }, finish_reason: "stop" }],
154
+ choices: [{ index: 0, delta: {}, finish_reason: "stop" }],
102
155
  };
103
156
  }
104
157
 
158
+ function errorMessageOf(value) {
159
+ if (!value) return "";
160
+ if (typeof value === "string") return value;
161
+ if (typeof value !== "object") return String(value);
162
+ const nested = value.error && typeof value.error === "object" ? value.error.message : value.error;
163
+ return String(value.message || value.detail || nested || value.code || value.type || "");
164
+ }
165
+
166
+ /**
167
+ * Provider error carried inside a stream frame, or null.
168
+ *
169
+ * Zed forwards the upstream body untouched, so a failure can arrive as an
170
+ * Anthropic `{"type":"error","error":{…}}`, an OpenAI `{"error":{…}}`, or a
171
+ * Responses `response.failed`. The response translators have no case for any of
172
+ * them: passing one through would silently drop the failure.
173
+ */
174
+ function frameErrorOf(event) {
175
+ if (!event || typeof event !== "object" || Array.isArray(event)) return null;
176
+ if (event.type === "error") {
177
+ return {
178
+ message: errorMessageOf(event.error) || errorMessageOf(event) || "upstream error",
179
+ code: String(event.error?.code || event.code || "upstream_error"),
180
+ };
181
+ }
182
+ if (event.type === "response.failed") {
183
+ const failed = event.response || event;
184
+ return {
185
+ message: errorMessageOf(failed) || "upstream response failed",
186
+ code: String(failed.error?.code || failed.code || "response_failed"),
187
+ };
188
+ }
189
+ // Bare `{"error": {…}}` envelope. A normal payload always carries at least one
190
+ // of choices / candidates / output, so those exclude a legitimate `error: null`.
191
+ if (event.error && !event.choices && !event.candidates && !event.output) {
192
+ return {
193
+ message: errorMessageOf(event.error) || "upstream error",
194
+ code: String(event.error?.code || event.error?.type || "upstream_error"),
195
+ };
196
+ }
197
+ return null;
198
+ }
199
+
200
+ // HTTP status for an in-band failure, so the fallback layer reacts the way it
201
+ // would to the equivalent HTTP error (quota cools down, overflow is request-scoped).
202
+ function statusForStreamError(message, code = "") {
203
+ const text = `${code} ${message}`;
204
+ if (isContextOverflowText(text)) return 400;
205
+ if (/rate.?limit|quota|too many requests|tokens per (minute|day)/i.test(text)) return 429;
206
+ if (/overloaded|unavailable|try again/i.test(text)) return 503;
207
+ return 502;
208
+ }
209
+
210
+ // In-band error frame in the shared buildErrorBody shape. Clients aggregate
211
+ // delta.content into the answer and non-streaming aggregation keys off
212
+ // chunk.error, so a failure must travel as an error — never as assistant text.
213
+ function createErrorFrame(message, status, code) {
214
+ const type = status === 400 ? "invalid_request_error" : "upstream_error";
215
+ return `data: ${JSON.stringify({ error: { message, type, code, status } })}\n\n`;
216
+ }
217
+
218
+ function createErrorResponse(message, status, code) {
219
+ const type = status === 400 ? "invalid_request_error" : "upstream_error";
220
+ return new Response(JSON.stringify({ error: { message, type, code, status } }), {
221
+ status,
222
+ headers: { "Content-Type": "application/json" },
223
+ });
224
+ }
225
+
105
226
  function enqueueSseObject(controller, encoder, chunk) {
106
227
  if (!chunk) return;
107
228
  const items = Array.isArray(chunk) ? chunk : [chunk];
@@ -151,32 +272,115 @@ function isContextOverflowText(value) {
151
272
  return OVERFLOW_RE.test(String(value || ""));
152
273
  }
153
274
 
154
- // SSE error frame in the shared buildErrorBody shape ({error:{message,type,
155
- // code}}) so stream aggregation and clients treat it as a failure, not as
156
- // assistant text. Never a fabricated finish_reason.
157
- function createOverflowErrorFrame(message) {
158
- return `data: ${JSON.stringify({
159
- error: {
160
- message,
161
- type: "invalid_request_error",
162
- code: "context_length_exceeded",
163
- },
164
- })}\n\n`;
275
+ function statusFailureOf(status) {
276
+ if (!status) return null;
277
+ if (status.type === "failed" || status.failed) {
278
+ const failed = status.failed || status;
279
+ const message = String(failed.message || failed.error || failed.code || "request failed");
280
+ const code = String(failed.code || failed.error?.code || "");
281
+ return { message, ...failureDetails(message, code) };
282
+ }
283
+ return null;
165
284
  }
166
285
 
167
- function wrapZedCompletionStream(response, provider, model) {
286
+ function failureDetails(message, code) {
287
+ const status = statusForStreamError(message, code);
288
+ if (status !== 400) return { status, code: code || "upstream_error" };
289
+ return {
290
+ status,
291
+ code: "context_length_exceeded",
292
+ message:
293
+ `Context window exceeded: ${message}. ` + `Shorten the conversation or use a larger model.`,
294
+ };
295
+ }
296
+
297
+ /**
298
+ * Read up to the first real payload frame so an immediate failure can still be
299
+ * answered with a real HTTP status (account fallback, non-streaming clients,
300
+ * correct status codes) instead of an HTTP-200 stream that fails silently.
301
+ * `consumed` holds every byte read — the caller replays it, so nothing is lost.
302
+ */
303
+ async function peekZedStream(reader, decoder) {
304
+ let consumed = "";
305
+ let offset = 0;
306
+ let upstreamDone = false;
307
+
308
+ while (true) {
309
+ let nl = consumed.indexOf("\n", offset);
310
+ if (nl === -1 && !upstreamDone) {
311
+ const { done, value } = await reader.read();
312
+ upstreamDone = done;
313
+ consumed += done ? decoder.decode() : decoder.decode(value, { stream: true });
314
+ continue;
315
+ }
316
+ if (offset >= consumed.length) return { failure: null, consumed, upstreamDone };
317
+ if (nl === -1) nl = consumed.length;
318
+
319
+ const line = consumed.slice(offset, nl).replace(/\r$/, "").trim();
320
+ offset = nl + 1;
321
+ if (!line || line.startsWith(":")) continue;
322
+
323
+ const payload = unwrapZedLine(line);
324
+ if (!payload) {
325
+ // Not a JSON frame: an HTML/text error page (proxy, gateway) rather than a
326
+ // provider chunk. Surface it instead of streaming garbage to the client.
327
+ return {
328
+ failure: {
329
+ message: `Zed returned a non-JSON stream frame: ${line.slice(0, 200)}`,
330
+ status: 502,
331
+ code: "invalid_stream_frame",
332
+ },
333
+ consumed,
334
+ upstreamDone,
335
+ };
336
+ }
337
+ if (payload.done) return { failure: null, consumed, upstreamDone };
338
+ if (payload.status) {
339
+ const failure = statusFailureOf(normalizeStatus(payload.status));
340
+ if (failure) return { failure, consumed, upstreamDone };
341
+ continue; // status-only frames (started, …) carry no payload
342
+ }
343
+ const frameError = frameErrorOf(payload.event);
344
+ return {
345
+ failure: frameError
346
+ ? { ...frameError, ...failureDetails(frameError.message, frameError.code) }
347
+ : null,
348
+ consumed,
349
+ upstreamDone,
350
+ };
351
+ }
352
+ }
353
+
354
+ async function wrapZedCompletionStream(response, provider, model) {
168
355
  if (!response.ok || !response.body) return response;
169
356
 
170
357
  const decoder = new TextDecoder();
171
358
  const encoder = new TextEncoder();
359
+ const reader = response.body.getReader();
360
+
361
+ const peek = await peekZedStream(reader, decoder);
362
+ if (peek.failure) {
363
+ await reader.cancel().catch(() => {});
364
+ return createErrorResponse(peek.failure.message, peek.failure.status, peek.failure.code);
365
+ }
366
+
172
367
  const state = initProviderState(provider, model);
173
- let buffer = "";
368
+ let buffer = peek.consumed;
174
369
  let done = false;
370
+ let emittedFinish = false;
175
371
 
176
372
  const finish = (controller) => {
177
373
  if (done) return;
178
- const finalChunk = convertProviderEvent(provider, null, state);
179
- enqueueSseObject(controller, encoder, finalChunk);
374
+ enqueueSseObject(controller, encoder, convertProviderEvent(provider, null, state));
375
+ if (!emittedFinish) enqueueSseObject(controller, encoder, createFinishChunk(model));
376
+ controller.enqueue(encoder.encode("data: [DONE]\n\n"));
377
+ done = true;
378
+ };
379
+
380
+ const abort = (controller, failure) => {
381
+ controller.enqueue(
382
+ encoder.encode(createErrorFrame(failure.message, failure.status, failure.code)),
383
+ );
180
384
  controller.enqueue(encoder.encode("data: [DONE]\n\n"));
181
385
  done = true;
182
386
  };
@@ -191,57 +395,76 @@ function wrapZedCompletionStream(response, provider, model) {
191
395
  }
192
396
  if (payload.status) {
193
397
  const status = normalizeStatus(payload.status);
194
- if (status?.type === "failed" || status?.failed) {
195
- const failed = status.failed || status;
196
- const message = String(failed.message || failed.error || failed.code || "request failed");
197
- // Context overflow must be a clean error, not assistant text:
198
- // clients aggregate delta.content into the answer, and the fallback
199
- // layer keys off status — so emit the error frame + [DONE] with no
200
- // fabricated finish_reason, and skip the trailing translate flush.
201
- if (isContextOverflowText(message)) {
202
- controller.enqueue(
203
- encoder.encode(
204
- createOverflowErrorFrame(
205
- `Context window exceeded for ${model}: ${message}. ` +
206
- `Shorten the conversation or use a larger model.`,
207
- ) + "data: [DONE]\n\n",
208
- ),
209
- );
210
- done = true;
211
- } else {
212
- enqueueSseObject(controller, encoder, createErrorChunk(model, message));
213
- finish(controller);
214
- }
215
- } else if (status?.type === "stream_ended" || status === "stream_ended") {
216
- finish(controller);
217
- }
398
+ const failure = statusFailureOf(status);
399
+ if (failure) abort(controller, failure);
400
+ else if (status?.type === "stream_ended" || status === "stream_ended") finish(controller);
401
+ return;
402
+ }
403
+ const frameError = frameErrorOf(payload.event);
404
+ if (frameError) {
405
+ abort(controller, { ...frameError, ...failureDetails(frameError.message, frameError.code) });
218
406
  return;
219
407
  }
220
408
  const converted = convertProviderEvent(provider, payload.event, state);
409
+ for (const item of Array.isArray(converted) ? converted : [converted]) {
410
+ if (item?.choices?.some((choice) => choice?.finish_reason)) emittedFinish = true;
411
+ }
221
412
  enqueueSseObject(controller, encoder, converted);
222
413
  };
223
414
 
224
- const transformed = response.body.pipeThrough(
225
- new TransformStream({
226
- transform(chunk, controller) {
227
- buffer += decoder.decode(chunk, { stream: true });
228
- let nl;
229
- while ((nl = buffer.indexOf("\n")) !== -1) {
230
- const line = buffer.slice(0, nl);
231
- buffer = buffer.slice(nl + 1);
232
- processLine(line, controller);
415
+ const transformed = new ReadableStream({
416
+ async start(controller) {
417
+ try {
418
+ while (!done) {
419
+ let nl;
420
+ while ((nl = buffer.indexOf("\n")) !== -1) {
421
+ const line = buffer.slice(0, nl);
422
+ buffer = buffer.slice(nl + 1);
423
+ processLine(line, controller);
424
+ if (done) break;
425
+ }
426
+ if (done) break;
427
+ const { done: upstreamDone, value } = await reader.read();
428
+ if (upstreamDone) {
429
+ buffer += decoder.decode();
430
+ if (buffer) {
431
+ processLine(buffer, controller);
432
+ buffer = "";
433
+ }
434
+ break;
435
+ }
436
+ buffer += decoder.decode(value, { stream: true });
233
437
  }
234
- },
235
- flush(controller) {
236
- buffer += decoder.decode();
237
- if (buffer) {
238
- processLine(buffer, controller);
239
- buffer = "";
438
+ } catch (error) {
439
+ if (!done) {
440
+ abort(controller, {
441
+ message: `Zed stream failed: ${error?.message || error}`,
442
+ status: 502,
443
+ code: "stream_failed",
444
+ });
240
445
  }
241
- finish(controller);
242
- },
243
- }),
244
- );
446
+ } finally {
447
+ await Promise.resolve()
448
+ .then(() => reader.cancel())
449
+ .catch(() => {});
450
+ if (!done) {
451
+ try {
452
+ finish(controller);
453
+ } catch {
454
+ /* controller already closed */
455
+ }
456
+ }
457
+ try {
458
+ controller.close();
459
+ } catch {
460
+ /* already closed */
461
+ }
462
+ }
463
+ },
464
+ cancel(reason) {
465
+ return reader.cancel(reason).catch(() => {});
466
+ },
467
+ });
245
468
 
246
469
  return new Response(transformed, {
247
470
  status: response.status,
@@ -284,8 +507,12 @@ class ZedExecutor extends BaseExecutor {
284
507
  }
285
508
 
286
509
  async execute({ model, body, stream, credentials, signal, log, proxyOptions = null }) {
510
+ // chatCore forwards the client's thinking suffix (`model(high)`) so translators
511
+ // can read it, but the upstream model id must never carry it: it breaks the
512
+ // catalog lookup (and with it the context guard) and Zed rejects it.
513
+ const upstreamModel = stripThinkingSuffix(model);
287
514
  const { raw, provider } = await this.resolveModel(
288
- model,
515
+ upstreamModel,
289
516
  credentials,
290
517
  signal,
291
518
  log,
@@ -302,7 +529,7 @@ class ZedExecutor extends BaseExecutor {
302
529
  if (estimateInputTokens(requestBody) > contextLimit) {
303
530
  const trimmed = stripHistoryForContext(requestBody, contextLimit);
304
531
  if (trimmed !== requestBody) {
305
- log?.info?.("ZED", `trimmed history for ${model} to fit ${contextLimit} tokens`);
532
+ log?.info?.("ZED", `trimmed history for ${upstreamModel} to fit ${contextLimit} tokens`);
306
533
  requestBody = trimmed;
307
534
  }
308
535
  }
@@ -310,7 +537,7 @@ class ZedExecutor extends BaseExecutor {
310
537
  if (estimated > contextLimit) {
311
538
  const message =
312
539
  `Context window exceeded: ~${estimated} tokens exceeds the limit of ` +
313
- `${contextLimit} tokens for ${model}. Shorten the conversation or use a larger model.`;
540
+ `${contextLimit} tokens for ${upstreamModel}. Shorten the conversation or use a larger model.`;
314
541
  return {
315
542
  response: new Response(
316
543
  JSON.stringify({
@@ -324,17 +551,25 @@ class ZedExecutor extends BaseExecutor {
324
551
  ),
325
552
  url: `${this.config?.llmBaseUrl || "https://cloud.zed.dev"}/completions`,
326
553
  headers: { "Content-Type": "application/json", Authorization: "Bearer <zed-llm-token>" },
327
- transformedBody: { model, estimatedInputTokens: estimated, contextLimit },
554
+ transformedBody: { model: upstreamModel, estimatedInputTokens: estimated, contextLimit },
328
555
  };
329
556
  }
330
557
  }
331
- const providerRequest = buildProviderRequest(provider, model, requestBody, stream, credentials);
558
+ const providerRequest = buildProviderRequest(
559
+ provider,
560
+ upstreamModel,
561
+ requestBody,
562
+ stream,
563
+ credentials,
564
+ raw,
565
+ { log, sourceModel: model },
566
+ );
332
567
  const bodyRecord = requestBody;
333
568
  const payload = {
334
569
  thread_id: bodyRecord.thread_id || credentials?._clientSessionId,
335
570
  prompt_id: bodyRecord.prompt_id,
336
571
  provider,
337
- model,
572
+ model: upstreamModel,
338
573
  provider_request: providerRequest,
339
574
  };
340
575
 
@@ -356,7 +591,9 @@ class ZedExecutor extends BaseExecutor {
356
591
  },
357
592
  });
358
593
 
359
- const wrapped = response.ok ? wrapZedCompletionStream(response, provider, model) : response;
594
+ const wrapped = response.ok
595
+ ? await wrapZedCompletionStream(response, provider, upstreamModel)
596
+ : response;
360
597
  return {
361
598
  response: wrapped,
362
599
  url: `${this.config?.llmBaseUrl || "https://cloud.zed.dev"}/completions`,
@@ -1,4 +1,4 @@
1
- import { detectFormat, getTargetFormat, resolveTransport } from "../services/provider.js";
1
+ import { detectFormat, getTargetFormat, resolveModelTransport } from "../services/provider.js";
2
2
  import { translateRequest } from "../translator/index.js";
3
3
  import {
4
4
  applyThinking,
@@ -138,20 +138,13 @@ export async function handleChatCore({
138
138
  const alias = PROVIDER_ID_TO_ALIAS[provider] || provider;
139
139
  const modelTargetFormat = getModelTargetFormat(alias, model);
140
140
  // Multi-endpoint providers: pick transport matching sourceFormat → zero translation.
141
- // Per-model guard: only use the transport when the model declares support for that
142
- // sourceFormat — opencode-go models differ in endpoint support (kimi/glm only do
143
- // /chat/completions), so without this guard a claude-format request would wrongly
144
- // route kimi to /messages.
141
+ // Guarded per model: opencode-go models differ in endpoint support, so a
142
+ // claude-format request must not go to /messages for kimi/glm and an OpenAI one
143
+ // must not go to /chat/completions for claude-haiku-5-5 (upstream answers
144
+ // ModelProtocolUnsupported). When the client format has no endpoint, the model's
145
+ // preferred declared endpoint is used and translation handles the wire change.
145
146
  const modelSupportedFormats = getModelSupportedFormats(alias, model);
146
- const runtimeTransport = resolveTransport(provider, sourceFormat);
147
- // Per-model guard: when a model declares supportedFormats, only use the
148
- // sourceFormat-matched transport if that format is declared (opencode-go models
149
- // differ — kimi/glm only do /chat/completions). Undeclared models keep the
150
- // upstream default (use the transport), preserving behavior for glm/deepseek/...
151
- const useTransport =
152
- !modelSupportedFormats || modelSupportedFormats.includes(sourceFormat)
153
- ? runtimeTransport
154
- : null;
147
+ const useTransport = resolveModelTransport(provider, sourceFormat, modelSupportedFormats);
155
148
  // A source-format-matched endpoint keeps the request lossless. Prefer it
156
149
  // over a model-level targetFormat, which is only the fallback for clients
157
150
  // whose wire format has no supported transport (for example MiniMax-M3:
@@ -15,7 +15,6 @@ const OPENAI_COMPAT_PROVIDERS = [
15
15
  "github",
16
16
  "nvidia",
17
17
  "jina-ai",
18
- "vercel-ai-gateway",
19
18
  ];
20
19
 
21
20
  const ADAPTERS = {