@amir83nasr/10router 0.1.15 → 0.1.16

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 (839) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +8 -9
  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 +7 -7
  274. package/.next/server/app/callback.segments/_full.segment.rsc +7 -7
  275. package/.next/server/app/callback.segments/_tree.segment.rsc +2 -2
  276. package/.next/server/app/callback.segments/callback/__PAGE__.segment.rsc +7 -7
  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 +8 -9
  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/6617.js +9 -0
  396. package/.next/server/chunks/6823.js +1 -1
  397. package/.next/server/chunks/6971.js +1 -0
  398. package/.next/server/chunks/7019.js +2 -2
  399. package/.next/server/chunks/7156.js +1 -1
  400. package/.next/server/chunks/7314.js +1 -0
  401. package/.next/server/chunks/7337.js +1 -0
  402. package/.next/server/chunks/7459.js +3 -3
  403. package/.next/server/chunks/7591.js +1 -0
  404. package/.next/server/chunks/7904.js +1 -0
  405. package/.next/server/chunks/8567.js +1 -1
  406. package/.next/server/chunks/8923.js +1 -1
  407. package/.next/server/chunks/9287.js +1 -1
  408. package/.next/server/chunks/9429.js +1 -1
  409. package/.next/server/chunks/9603.js +1 -1
  410. package/.next/server/instrumentation.js +1 -1
  411. package/.next/server/instrumentation.js.nft.json +1 -1
  412. package/.next/server/middleware-build-manifest.js +1 -1
  413. package/.next/server/pages/404.html +1 -1
  414. package/.next/server/pages/500.html +1 -1
  415. package/.next/server/server-reference-manifest.js +1 -1
  416. package/.next/server/server-reference-manifest.json +1 -1
  417. package/.next/static/EsP8l_VAPRRfBiiJPJqQe/_buildManifest.js +1 -0
  418. package/.next/static/chunks/1278-77eb0511471e063a.js +1 -0
  419. package/.next/static/chunks/1660-c4c1cfa3cb7c9b2e.js +1 -0
  420. package/.next/static/chunks/{1699-13ee6864a8a31a96.js → 1699-49be310981e2759e.js} +2 -2
  421. package/.next/static/chunks/{3577-cd98d40e3099e1b0.js → 3577-1f02993330d7fba7.js} +1 -1
  422. package/.next/static/chunks/{5862-f98c2f3d480b80d2.js → 5862-6f3a3a6d4c00100d.js} +1 -1
  423. package/.next/static/chunks/{9150-8316559e1687b4a8.js → 9150-32b4247b1af5e206.js} +1 -1
  424. package/.next/static/chunks/{9ce8c186-3c7d7dbc5d428052.js → 9ce8c186-6cd204e9c27ecee1.js} +1 -1
  425. package/.next/static/chunks/app/(dashboard)/dashboard/console-log/page-361bb54d1d354b4c.js +1 -0
  426. package/.next/static/chunks/app/(dashboard)/dashboard/media-providers/systemone/[id]/{page-7340dad2b87640cf.js → page-a5e128afd334522f.js} +2 -2
  427. package/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-a41e2c8e26eb5956.js +21 -0
  428. package/.next/static/chunks/app/(dashboard)/dashboard/providers/page-feb4f47de991b067.js +1 -0
  429. package/.next/static/chunks/app/(dashboard)/dashboard/quota/page-f718869c90907a6a.js +1 -0
  430. package/.next/static/chunks/app/_global-error/page-f46617319221a4f8.js +1 -0
  431. package/.next/static/chunks/app/api/auth/login/route-f46617319221a4f8.js +1 -0
  432. package/.next/static/chunks/app/api/auth/logout/route-f46617319221a4f8.js +1 -0
  433. package/.next/static/chunks/app/api/auth/oidc/callback/route-f46617319221a4f8.js +1 -0
  434. package/.next/static/chunks/app/api/auth/oidc/start/route-f46617319221a4f8.js +1 -0
  435. package/.next/static/chunks/app/api/auth/oidc/test/route-f46617319221a4f8.js +1 -0
  436. package/.next/static/chunks/app/api/auth/reset-password/route-f46617319221a4f8.js +1 -0
  437. package/.next/static/chunks/app/api/auth/saml/acs/route-f46617319221a4f8.js +1 -0
  438. package/.next/static/chunks/app/api/auth/saml/metadata/route-f46617319221a4f8.js +1 -0
  439. package/.next/static/chunks/app/api/auth/saml/start/route-f46617319221a4f8.js +1 -0
  440. package/.next/static/chunks/app/api/auth/saml/test/route-f46617319221a4f8.js +1 -0
  441. package/.next/static/chunks/app/api/auth/status/route-f46617319221a4f8.js +1 -0
  442. package/.next/static/chunks/app/api/changelog/route-f46617319221a4f8.js +1 -0
  443. package/.next/static/chunks/app/api/cli-tools/all-statuses/route-f46617319221a4f8.js +1 -0
  444. package/.next/static/chunks/app/api/cli-tools/claude-settings/route-f46617319221a4f8.js +1 -0
  445. package/.next/static/chunks/app/api/cli-tools/codex-settings/route-f46617319221a4f8.js +1 -0
  446. package/.next/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-f46617319221a4f8.js +1 -0
  447. package/.next/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-f46617319221a4f8.js +1 -0
  448. package/.next/static/chunks/app/api/cli-tools/cowork-settings/route-f46617319221a4f8.js +1 -0
  449. package/.next/static/chunks/app/api/cli-tools/dsh-settings/route-f46617319221a4f8.js +1 -0
  450. package/.next/static/chunks/app/api/cli-tools/opencode-settings/route-f46617319221a4f8.js +1 -0
  451. package/.next/static/chunks/app/api/combos/[id]/route-f46617319221a4f8.js +1 -0
  452. package/.next/static/chunks/app/api/combos/route-f46617319221a4f8.js +1 -0
  453. package/.next/static/chunks/app/api/headroom/extras/route-f46617319221a4f8.js +1 -0
  454. package/.next/static/chunks/app/api/headroom/proxy/[...path]/route-f46617319221a4f8.js +1 -0
  455. package/.next/static/chunks/app/api/headroom/restart/route-f46617319221a4f8.js +1 -0
  456. package/.next/static/chunks/app/api/headroom/start/route-f46617319221a4f8.js +1 -0
  457. package/.next/static/chunks/app/api/headroom/status/route-f46617319221a4f8.js +1 -0
  458. package/.next/static/chunks/app/api/headroom/stop/route-f46617319221a4f8.js +1 -0
  459. package/.next/static/chunks/app/api/health/route-f46617319221a4f8.js +1 -0
  460. package/.next/static/chunks/app/api/init/route-f46617319221a4f8.js +1 -0
  461. package/.next/static/chunks/app/api/keys/[id]/route-f46617319221a4f8.js +1 -0
  462. package/.next/static/chunks/app/api/keys/route-f46617319221a4f8.js +1 -0
  463. package/.next/static/chunks/app/api/locale/route-f46617319221a4f8.js +1 -0
  464. package/.next/static/chunks/app/api/mcp/[plugin]/message/route-f46617319221a4f8.js +1 -0
  465. package/.next/static/chunks/app/api/mcp/[plugin]/sse/route-f46617319221a4f8.js +1 -0
  466. package/.next/static/chunks/app/api/media-providers/tts/deepgram/voices/route-f46617319221a4f8.js +1 -0
  467. package/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-f46617319221a4f8.js +1 -0
  468. package/.next/static/chunks/app/api/media-providers/tts/inworld/voices/route-f46617319221a4f8.js +1 -0
  469. package/.next/static/chunks/app/api/media-providers/tts/voices/route-f46617319221a4f8.js +1 -0
  470. package/.next/static/chunks/app/api/models/alias/route-f46617319221a4f8.js +1 -0
  471. package/.next/static/chunks/app/api/models/availability/route-f46617319221a4f8.js +1 -0
  472. package/.next/static/chunks/app/api/models/catalog-sync/route-f46617319221a4f8.js +1 -0
  473. package/.next/static/chunks/app/api/models/custom/route-f46617319221a4f8.js +1 -0
  474. package/.next/static/chunks/app/api/models/disabled/route-f46617319221a4f8.js +1 -0
  475. package/.next/static/chunks/app/api/models/route-f46617319221a4f8.js +1 -0
  476. package/.next/static/chunks/app/api/models/test/route-f46617319221a4f8.js +1 -0
  477. package/.next/static/chunks/app/api/oauth/[provider]/[action]/route-f46617319221a4f8.js +1 -0
  478. package/.next/static/chunks/app/api/oauth/codex/bulk-import/route-f46617319221a4f8.js +1 -0
  479. package/.next/static/chunks/app/api/oauth/codex/import-token/route-f46617319221a4f8.js +1 -0
  480. package/.next/static/chunks/app/api/oauth/cursor/auto-import/route-f46617319221a4f8.js +1 -0
  481. package/.next/static/chunks/app/api/oauth/cursor/import/route-f46617319221a4f8.js +1 -0
  482. package/.next/static/chunks/app/api/oauth/gitlab/pat/route-f46617319221a4f8.js +1 -0
  483. package/.next/static/chunks/app/api/oauth/grok-cli/bulk-import/route-f46617319221a4f8.js +1 -0
  484. package/.next/static/chunks/app/api/oauth/iflow/cookie/route-f46617319221a4f8.js +1 -0
  485. package/.next/static/chunks/app/api/oauth/xiaomi-mimo/api-key/route-f46617319221a4f8.js +1 -0
  486. package/.next/static/chunks/app/api/oauth/xiaomi-mimo/auto-import/route-f46617319221a4f8.js +1 -0
  487. package/.next/static/chunks/app/api/pricing/route-f46617319221a4f8.js +1 -0
  488. package/.next/static/chunks/app/api/provider-nodes/[id]/route-f46617319221a4f8.js +1 -0
  489. package/.next/static/chunks/app/api/provider-nodes/route-f46617319221a4f8.js +1 -0
  490. package/.next/static/chunks/app/api/provider-nodes/validate/route-f46617319221a4f8.js +1 -0
  491. package/.next/static/chunks/app/api/providers/[id]/models/route-f46617319221a4f8.js +1 -0
  492. package/.next/static/chunks/app/api/providers/[id]/route-f46617319221a4f8.js +1 -0
  493. package/.next/static/chunks/app/api/providers/[id]/test/route-f46617319221a4f8.js +1 -0
  494. package/.next/static/chunks/app/api/providers/[id]/test-models/route-f46617319221a4f8.js +1 -0
  495. package/.next/static/chunks/app/api/providers/client/route-f46617319221a4f8.js +1 -0
  496. package/.next/static/chunks/app/api/providers/kilo/free-models/route-f46617319221a4f8.js +1 -0
  497. package/.next/static/chunks/app/api/providers/route-f46617319221a4f8.js +1 -0
  498. package/.next/static/chunks/app/api/providers/suggested-models/route-f46617319221a4f8.js +1 -0
  499. package/.next/static/chunks/app/api/providers/test-batch/route-f46617319221a4f8.js +1 -0
  500. package/.next/static/chunks/app/api/providers/validate/route-f46617319221a4f8.js +1 -0
  501. package/.next/static/chunks/app/api/proxy-pools/[id]/route-f46617319221a4f8.js +1 -0
  502. package/.next/static/chunks/app/api/proxy-pools/[id]/test/route-f46617319221a4f8.js +1 -0
  503. package/.next/static/chunks/app/api/proxy-pools/cloudflare-deploy/route-f46617319221a4f8.js +1 -0
  504. package/.next/static/chunks/app/api/proxy-pools/deno-deploy/route-f46617319221a4f8.js +1 -0
  505. package/.next/static/chunks/app/api/proxy-pools/route-f46617319221a4f8.js +1 -0
  506. package/.next/static/chunks/app/api/proxy-pools/vercel-deploy/route-f46617319221a4f8.js +1 -0
  507. package/.next/static/chunks/app/api/pxpipe/health/route-f46617319221a4f8.js +1 -0
  508. package/.next/static/chunks/app/api/pxpipe/install/route-f46617319221a4f8.js +1 -0
  509. package/.next/static/chunks/app/api/pxpipe/logs/route-f46617319221a4f8.js +1 -0
  510. package/.next/static/chunks/app/api/pxpipe/restart/route-f46617319221a4f8.js +1 -0
  511. package/.next/static/chunks/app/api/pxpipe/start/route-f46617319221a4f8.js +1 -0
  512. package/.next/static/chunks/app/api/pxpipe/stats/route-f46617319221a4f8.js +1 -0
  513. package/.next/static/chunks/app/api/pxpipe/status/route-f46617319221a4f8.js +1 -0
  514. package/.next/static/chunks/app/api/pxpipe/stop/route-f46617319221a4f8.js +1 -0
  515. package/.next/static/chunks/app/api/settings/database/route-f46617319221a4f8.js +1 -0
  516. package/.next/static/chunks/app/api/settings/proxy-test/route-f46617319221a4f8.js +1 -0
  517. package/.next/static/chunks/app/api/settings/require-login/route-f46617319221a4f8.js +1 -0
  518. package/.next/static/chunks/app/api/settings/route-f46617319221a4f8.js +1 -0
  519. package/.next/static/chunks/app/api/shutdown/route-f46617319221a4f8.js +1 -0
  520. package/.next/static/chunks/app/api/tags/route-f46617319221a4f8.js +1 -0
  521. package/.next/static/chunks/app/api/translator/console-logs/route-f46617319221a4f8.js +1 -0
  522. package/.next/static/chunks/app/api/translator/console-logs/stream/route-f46617319221a4f8.js +1 -0
  523. package/.next/static/chunks/app/api/translator/load/route-f46617319221a4f8.js +1 -0
  524. package/.next/static/chunks/app/api/translator/save/route-f46617319221a4f8.js +1 -0
  525. package/.next/static/chunks/app/api/translator/send/route-f46617319221a4f8.js +1 -0
  526. package/.next/static/chunks/app/api/translator/translate/route-f46617319221a4f8.js +1 -0
  527. package/.next/static/chunks/app/api/tunnel/disable/route-f46617319221a4f8.js +1 -0
  528. package/.next/static/chunks/app/api/tunnel/enable/route-f46617319221a4f8.js +1 -0
  529. package/.next/static/chunks/app/api/tunnel/status/route-f46617319221a4f8.js +1 -0
  530. package/.next/static/chunks/app/api/tunnel/tailscale-check/route-f46617319221a4f8.js +1 -0
  531. package/.next/static/chunks/app/api/tunnel/tailscale-disable/route-f46617319221a4f8.js +1 -0
  532. package/.next/static/chunks/app/api/tunnel/tailscale-enable/route-f46617319221a4f8.js +1 -0
  533. package/.next/static/chunks/app/api/tunnel/tailscale-install/route-f46617319221a4f8.js +1 -0
  534. package/.next/static/chunks/app/api/usage/[connectionId]/codex-reset-credits/route-f46617319221a4f8.js +1 -0
  535. package/.next/static/chunks/app/api/usage/[connectionId]/route-f46617319221a4f8.js +1 -0
  536. package/.next/static/chunks/app/api/usage/chart/route-f46617319221a4f8.js +1 -0
  537. package/.next/static/chunks/app/api/usage/health/route-f46617319221a4f8.js +1 -0
  538. package/.next/static/chunks/app/api/usage/history/route-f46617319221a4f8.js +1 -0
  539. package/.next/static/chunks/app/api/usage/logs/route-f46617319221a4f8.js +1 -0
  540. package/.next/static/chunks/app/api/usage/providers/route-f46617319221a4f8.js +1 -0
  541. package/.next/static/chunks/app/api/usage/request-details/route-f46617319221a4f8.js +1 -0
  542. package/.next/static/chunks/app/api/usage/request-logs/route-f46617319221a4f8.js +1 -0
  543. package/.next/static/chunks/app/api/usage/stats/route-f46617319221a4f8.js +1 -0
  544. package/.next/static/chunks/app/api/usage/stream/route-f46617319221a4f8.js +1 -0
  545. package/.next/static/chunks/app/api/v1/api/chat/route-f46617319221a4f8.js +1 -0
  546. package/.next/static/chunks/app/api/v1/audio/speech/route-f46617319221a4f8.js +1 -0
  547. package/.next/static/chunks/app/api/v1/audio/transcriptions/route-f46617319221a4f8.js +1 -0
  548. package/.next/static/chunks/app/api/v1/audio/voices/route-f46617319221a4f8.js +1 -0
  549. package/.next/static/chunks/app/api/v1/chat/completions/route-f46617319221a4f8.js +1 -0
  550. package/.next/static/chunks/app/api/v1/embeddings/route-f46617319221a4f8.js +1 -0
  551. package/.next/static/chunks/app/api/v1/images/generations/route-f46617319221a4f8.js +1 -0
  552. package/.next/static/chunks/app/api/v1/messages/count_tokens/route-f46617319221a4f8.js +1 -0
  553. package/.next/static/chunks/app/api/v1/messages/route-f46617319221a4f8.js +1 -0
  554. package/.next/static/chunks/app/api/v1/models/[...model]/route-f46617319221a4f8.js +1 -0
  555. package/.next/static/chunks/app/api/v1/models/info/route-f46617319221a4f8.js +1 -0
  556. package/.next/static/chunks/app/api/v1/models/route-f46617319221a4f8.js +1 -0
  557. package/.next/static/chunks/app/api/v1/responses/compact/route-f46617319221a4f8.js +1 -0
  558. package/.next/static/chunks/app/api/v1/responses/route-f46617319221a4f8.js +1 -0
  559. package/.next/static/chunks/app/api/v1/route-f46617319221a4f8.js +1 -0
  560. package/.next/static/chunks/app/api/v1/search/route-f46617319221a4f8.js +1 -0
  561. package/.next/static/chunks/app/api/v1/systemone/route-f46617319221a4f8.js +1 -0
  562. package/.next/static/chunks/app/api/v1/videos/[id]/route-f46617319221a4f8.js +1 -0
  563. package/.next/static/chunks/app/api/v1/videos/edits/route-f46617319221a4f8.js +1 -0
  564. package/.next/static/chunks/app/api/v1/videos/extensions/route-f46617319221a4f8.js +1 -0
  565. package/.next/static/chunks/app/api/v1/videos/generations/route-f46617319221a4f8.js +1 -0
  566. package/.next/static/chunks/app/api/v1/web/fetch/route-f46617319221a4f8.js +1 -0
  567. package/.next/static/chunks/app/api/v1beta/models/[...path]/route-f46617319221a4f8.js +1 -0
  568. package/.next/static/chunks/app/api/v1beta/models/route-f46617319221a4f8.js +1 -0
  569. package/.next/static/chunks/app/api/version/route-f46617319221a4f8.js +1 -0
  570. package/.next/static/chunks/app/api/version/shutdown/route-f46617319221a4f8.js +1 -0
  571. package/.next/static/chunks/app/api/version/update/route-f46617319221a4f8.js +1 -0
  572. package/.next/static/chunks/app/landing/{page-a76ba2642bd02bf5.js → page-1c5aa0e05b21c61a.js} +1 -1
  573. package/.next/static/chunks/app/manifest.webmanifest/route-f46617319221a4f8.js +1 -0
  574. package/.next/static/chunks/app/page-f46617319221a4f8.js +1 -0
  575. package/.next/static/chunks/next/dist/client/components/builtin/app-error-f46617319221a4f8.js +1 -0
  576. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-f46617319221a4f8.js +1 -0
  577. package/.next/static/chunks/next/dist/client/components/builtin/not-found-f46617319221a4f8.js +1 -0
  578. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-f46617319221a4f8.js +1 -0
  579. package/.next/static/css/e5f3812777d2d9e9.css +1 -0
  580. package/CHANGELOG.md +9 -0
  581. package/open-sse/AGENTS.md +1 -1
  582. package/open-sse/config/errorConfig.js +4 -0
  583. package/open-sse/config/opencodeErrors.js +59 -0
  584. package/open-sse/config/opencodeGo.js +34 -0
  585. package/open-sse/config/providerModels.js +13 -0
  586. package/open-sse/config/providers.js +0 -11
  587. package/open-sse/executors/base.js +4 -1
  588. package/open-sse/executors/index.js +0 -3
  589. package/open-sse/executors/opencode-go.js +28 -103
  590. package/open-sse/executors/opencode-zen.js +31 -105
  591. package/open-sse/executors/opencode.js +40 -106
  592. package/open-sse/executors/opencodeShared.js +146 -0
  593. package/open-sse/executors/zed.js +307 -70
  594. package/open-sse/handlers/embeddingProviders/index.js +0 -1
  595. package/open-sse/handlers/imageProviders/index.js +0 -4
  596. package/open-sse/handlers/imageProviders/openai.js +1 -1
  597. package/open-sse/handlers/search/callers.js +0 -28
  598. package/open-sse/handlers/search/chatSearch.js +1 -57
  599. package/open-sse/handlers/search/normalizers.js +0 -49
  600. package/open-sse/handlers/sttCore.js +0 -17
  601. package/open-sse/handlers/ttsCore.js +1 -1
  602. package/open-sse/handlers/ttsProviders/genericFormats.js +0 -35
  603. package/open-sse/providers/registry/index.js +14 -53
  604. package/open-sse/providers/registry/opencode-go.js +15 -6
  605. package/open-sse/providers/registry/opencode-zen.js +25 -9
  606. package/open-sse/providers/registry/opencode.js +5 -3
  607. package/open-sse/services/accountFallback.js +1 -0
  608. package/open-sse/services/opencodeGoProbe.js +39 -0
  609. package/open-sse/services/usage/glm.js +6 -12
  610. package/open-sse/services/usage/misc.js +1 -92
  611. package/open-sse/services/usage/zed.js +18 -3
  612. package/open-sse/services/usage.js +2 -14
  613. package/open-sse/shared/zedAuth.js +53 -5
  614. package/open-sse/translator/formats/claude.js +47 -19
  615. package/open-sse/utils/error.js +37 -3
  616. package/open-sse/utils/opencodeErrors.js +63 -0
  617. package/open-sse/utils/opencodeFingerprint.js +122 -23
  618. package/open-sse/utils/opencodeFreeUsage.js +57 -12
  619. package/open-sse/utils/usageTracking.js +5 -3
  620. package/package.json +2 -2
  621. package/src/app/(dashboard)/dashboard/console-log/ConsoleLogClient.tsx +10 -0
  622. package/src/app/(dashboard)/dashboard/providers/[id]/ModelRow.tsx +14 -0
  623. package/src/app/(dashboard)/dashboard/providers/[id]/OpenCodeGoConnectionCard.tsx +113 -0
  624. package/src/app/(dashboard)/dashboard/providers/[id]/page.tsx +11 -2
  625. package/src/app/(dashboard)/dashboard/providers/components/ModelsCard.tsx +14 -5
  626. package/src/app/(dashboard)/dashboard/providers/page.tsx +33 -45
  627. package/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/utils.ts +0 -33
  628. package/src/app/api/oauth/[provider]/[action]/route.js +2 -0
  629. package/src/app/api/providers/[id]/models/route.js +0 -3
  630. package/src/app/api/providers/[id]/test/testUtils.js +18 -103
  631. package/src/app/api/providers/validate/route.js +9 -37
  632. package/src/app/api/usage/[connectionId]/route.js +1 -1
  633. package/src/components/app-sidebar.tsx +1 -0
  634. package/src/lib/modelCatalog/sync.js +2 -4
  635. package/src/shared/components/EditConnectionModal.tsx +1 -1
  636. package/src/shared/constants/cliTools.js +1 -9
  637. package/src/shared/constants/models.ts +2 -0
  638. package/src/shared/constants/ttsProviders.ts +0 -21
  639. package/src/shared/utils/providerIcon.ts +0 -12
  640. package/src/sse/services/model.ts +2 -12
  641. package/.next/server/app/api/media-providers/tts/minimax/voices/route.js +0 -1
  642. package/.next/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +0 -1
  643. package/.next/server/app/api/media-providers/tts/minimax/voices/route_client-reference-manifest.js +0 -1
  644. package/.next/server/chunks/1011.js +0 -1
  645. package/.next/server/chunks/1194.js +0 -1
  646. package/.next/server/chunks/1289.js +0 -1
  647. package/.next/server/chunks/1633.js +0 -1
  648. package/.next/server/chunks/3425.js +0 -1
  649. package/.next/server/chunks/4129.js +0 -1
  650. package/.next/server/chunks/5496.js +0 -1
  651. package/.next/server/chunks/5761.js +0 -1
  652. package/.next/server/chunks/6056.js +0 -1
  653. package/.next/server/chunks/7816.js +0 -1
  654. package/.next/server/chunks/8940.js +0 -1
  655. package/.next/static/8QVpvFFKxoB53L449Kgan/_buildManifest.js +0 -1
  656. package/.next/static/chunks/1278-5800a984ad8ad005.js +0 -1
  657. package/.next/static/chunks/1660-7f2e79bde5eff607.js +0 -1
  658. package/.next/static/chunks/app/(dashboard)/dashboard/console-log/page-58a29f3cb409597a.js +0 -1
  659. package/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-fab6f4b4cccc1a6f.js +0 -21
  660. package/.next/static/chunks/app/(dashboard)/dashboard/providers/page-9054f870a5e0f5c6.js +0 -1
  661. package/.next/static/chunks/app/(dashboard)/dashboard/quota/page-61780f0a2b494680.js +0 -1
  662. package/.next/static/chunks/app/_global-error/page-9a2a13ac6b89ba91.js +0 -1
  663. package/.next/static/chunks/app/api/auth/login/route-9a2a13ac6b89ba91.js +0 -1
  664. package/.next/static/chunks/app/api/auth/logout/route-9a2a13ac6b89ba91.js +0 -1
  665. package/.next/static/chunks/app/api/auth/oidc/callback/route-9a2a13ac6b89ba91.js +0 -1
  666. package/.next/static/chunks/app/api/auth/oidc/start/route-9a2a13ac6b89ba91.js +0 -1
  667. package/.next/static/chunks/app/api/auth/oidc/test/route-9a2a13ac6b89ba91.js +0 -1
  668. package/.next/static/chunks/app/api/auth/reset-password/route-9a2a13ac6b89ba91.js +0 -1
  669. package/.next/static/chunks/app/api/auth/saml/acs/route-9a2a13ac6b89ba91.js +0 -1
  670. package/.next/static/chunks/app/api/auth/saml/metadata/route-9a2a13ac6b89ba91.js +0 -1
  671. package/.next/static/chunks/app/api/auth/saml/start/route-9a2a13ac6b89ba91.js +0 -1
  672. package/.next/static/chunks/app/api/auth/saml/test/route-9a2a13ac6b89ba91.js +0 -1
  673. package/.next/static/chunks/app/api/auth/status/route-9a2a13ac6b89ba91.js +0 -1
  674. package/.next/static/chunks/app/api/changelog/route-9a2a13ac6b89ba91.js +0 -1
  675. package/.next/static/chunks/app/api/cli-tools/all-statuses/route-9a2a13ac6b89ba91.js +0 -1
  676. package/.next/static/chunks/app/api/cli-tools/claude-settings/route-9a2a13ac6b89ba91.js +0 -1
  677. package/.next/static/chunks/app/api/cli-tools/codex-settings/route-9a2a13ac6b89ba91.js +0 -1
  678. package/.next/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-9a2a13ac6b89ba91.js +0 -1
  679. package/.next/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-9a2a13ac6b89ba91.js +0 -1
  680. package/.next/static/chunks/app/api/cli-tools/cowork-settings/route-9a2a13ac6b89ba91.js +0 -1
  681. package/.next/static/chunks/app/api/cli-tools/dsh-settings/route-9a2a13ac6b89ba91.js +0 -1
  682. package/.next/static/chunks/app/api/cli-tools/opencode-settings/route-9a2a13ac6b89ba91.js +0 -1
  683. package/.next/static/chunks/app/api/combos/[id]/route-9a2a13ac6b89ba91.js +0 -1
  684. package/.next/static/chunks/app/api/combos/route-9a2a13ac6b89ba91.js +0 -1
  685. package/.next/static/chunks/app/api/headroom/extras/route-9a2a13ac6b89ba91.js +0 -1
  686. package/.next/static/chunks/app/api/headroom/proxy/[...path]/route-9a2a13ac6b89ba91.js +0 -1
  687. package/.next/static/chunks/app/api/headroom/restart/route-9a2a13ac6b89ba91.js +0 -1
  688. package/.next/static/chunks/app/api/headroom/start/route-9a2a13ac6b89ba91.js +0 -1
  689. package/.next/static/chunks/app/api/headroom/status/route-9a2a13ac6b89ba91.js +0 -1
  690. package/.next/static/chunks/app/api/headroom/stop/route-9a2a13ac6b89ba91.js +0 -1
  691. package/.next/static/chunks/app/api/health/route-9a2a13ac6b89ba91.js +0 -1
  692. package/.next/static/chunks/app/api/init/route-9a2a13ac6b89ba91.js +0 -1
  693. package/.next/static/chunks/app/api/keys/[id]/route-9a2a13ac6b89ba91.js +0 -1
  694. package/.next/static/chunks/app/api/keys/route-9a2a13ac6b89ba91.js +0 -1
  695. package/.next/static/chunks/app/api/locale/route-9a2a13ac6b89ba91.js +0 -1
  696. package/.next/static/chunks/app/api/mcp/[plugin]/message/route-9a2a13ac6b89ba91.js +0 -1
  697. package/.next/static/chunks/app/api/mcp/[plugin]/sse/route-9a2a13ac6b89ba91.js +0 -1
  698. package/.next/static/chunks/app/api/media-providers/tts/deepgram/voices/route-9a2a13ac6b89ba91.js +0 -1
  699. package/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-9a2a13ac6b89ba91.js +0 -1
  700. package/.next/static/chunks/app/api/media-providers/tts/inworld/voices/route-9a2a13ac6b89ba91.js +0 -1
  701. package/.next/static/chunks/app/api/media-providers/tts/minimax/voices/route-9a2a13ac6b89ba91.js +0 -1
  702. package/.next/static/chunks/app/api/media-providers/tts/voices/route-9a2a13ac6b89ba91.js +0 -1
  703. package/.next/static/chunks/app/api/models/alias/route-9a2a13ac6b89ba91.js +0 -1
  704. package/.next/static/chunks/app/api/models/availability/route-9a2a13ac6b89ba91.js +0 -1
  705. package/.next/static/chunks/app/api/models/catalog-sync/route-9a2a13ac6b89ba91.js +0 -1
  706. package/.next/static/chunks/app/api/models/custom/route-9a2a13ac6b89ba91.js +0 -1
  707. package/.next/static/chunks/app/api/models/disabled/route-9a2a13ac6b89ba91.js +0 -1
  708. package/.next/static/chunks/app/api/models/route-9a2a13ac6b89ba91.js +0 -1
  709. package/.next/static/chunks/app/api/models/test/route-9a2a13ac6b89ba91.js +0 -1
  710. package/.next/static/chunks/app/api/oauth/[provider]/[action]/route-9a2a13ac6b89ba91.js +0 -1
  711. package/.next/static/chunks/app/api/oauth/codex/bulk-import/route-9a2a13ac6b89ba91.js +0 -1
  712. package/.next/static/chunks/app/api/oauth/codex/import-token/route-9a2a13ac6b89ba91.js +0 -1
  713. package/.next/static/chunks/app/api/oauth/cursor/auto-import/route-9a2a13ac6b89ba91.js +0 -1
  714. package/.next/static/chunks/app/api/oauth/cursor/import/route-9a2a13ac6b89ba91.js +0 -1
  715. package/.next/static/chunks/app/api/oauth/gitlab/pat/route-9a2a13ac6b89ba91.js +0 -1
  716. package/.next/static/chunks/app/api/oauth/grok-cli/bulk-import/route-9a2a13ac6b89ba91.js +0 -1
  717. package/.next/static/chunks/app/api/oauth/iflow/cookie/route-9a2a13ac6b89ba91.js +0 -1
  718. package/.next/static/chunks/app/api/oauth/xiaomi-mimo/api-key/route-9a2a13ac6b89ba91.js +0 -1
  719. package/.next/static/chunks/app/api/oauth/xiaomi-mimo/auto-import/route-9a2a13ac6b89ba91.js +0 -1
  720. package/.next/static/chunks/app/api/pricing/route-9a2a13ac6b89ba91.js +0 -1
  721. package/.next/static/chunks/app/api/provider-nodes/[id]/route-9a2a13ac6b89ba91.js +0 -1
  722. package/.next/static/chunks/app/api/provider-nodes/route-9a2a13ac6b89ba91.js +0 -1
  723. package/.next/static/chunks/app/api/provider-nodes/validate/route-9a2a13ac6b89ba91.js +0 -1
  724. package/.next/static/chunks/app/api/providers/[id]/models/route-9a2a13ac6b89ba91.js +0 -1
  725. package/.next/static/chunks/app/api/providers/[id]/route-9a2a13ac6b89ba91.js +0 -1
  726. package/.next/static/chunks/app/api/providers/[id]/test/route-9a2a13ac6b89ba91.js +0 -1
  727. package/.next/static/chunks/app/api/providers/[id]/test-models/route-9a2a13ac6b89ba91.js +0 -1
  728. package/.next/static/chunks/app/api/providers/client/route-9a2a13ac6b89ba91.js +0 -1
  729. package/.next/static/chunks/app/api/providers/kilo/free-models/route-9a2a13ac6b89ba91.js +0 -1
  730. package/.next/static/chunks/app/api/providers/route-9a2a13ac6b89ba91.js +0 -1
  731. package/.next/static/chunks/app/api/providers/suggested-models/route-9a2a13ac6b89ba91.js +0 -1
  732. package/.next/static/chunks/app/api/providers/test-batch/route-9a2a13ac6b89ba91.js +0 -1
  733. package/.next/static/chunks/app/api/providers/validate/route-9a2a13ac6b89ba91.js +0 -1
  734. package/.next/static/chunks/app/api/proxy-pools/[id]/route-9a2a13ac6b89ba91.js +0 -1
  735. package/.next/static/chunks/app/api/proxy-pools/[id]/test/route-9a2a13ac6b89ba91.js +0 -1
  736. package/.next/static/chunks/app/api/proxy-pools/cloudflare-deploy/route-9a2a13ac6b89ba91.js +0 -1
  737. package/.next/static/chunks/app/api/proxy-pools/deno-deploy/route-9a2a13ac6b89ba91.js +0 -1
  738. package/.next/static/chunks/app/api/proxy-pools/route-9a2a13ac6b89ba91.js +0 -1
  739. package/.next/static/chunks/app/api/proxy-pools/vercel-deploy/route-9a2a13ac6b89ba91.js +0 -1
  740. package/.next/static/chunks/app/api/pxpipe/health/route-9a2a13ac6b89ba91.js +0 -1
  741. package/.next/static/chunks/app/api/pxpipe/install/route-9a2a13ac6b89ba91.js +0 -1
  742. package/.next/static/chunks/app/api/pxpipe/logs/route-9a2a13ac6b89ba91.js +0 -1
  743. package/.next/static/chunks/app/api/pxpipe/restart/route-9a2a13ac6b89ba91.js +0 -1
  744. package/.next/static/chunks/app/api/pxpipe/start/route-9a2a13ac6b89ba91.js +0 -1
  745. package/.next/static/chunks/app/api/pxpipe/stats/route-9a2a13ac6b89ba91.js +0 -1
  746. package/.next/static/chunks/app/api/pxpipe/status/route-9a2a13ac6b89ba91.js +0 -1
  747. package/.next/static/chunks/app/api/pxpipe/stop/route-9a2a13ac6b89ba91.js +0 -1
  748. package/.next/static/chunks/app/api/settings/database/route-9a2a13ac6b89ba91.js +0 -1
  749. package/.next/static/chunks/app/api/settings/proxy-test/route-9a2a13ac6b89ba91.js +0 -1
  750. package/.next/static/chunks/app/api/settings/require-login/route-9a2a13ac6b89ba91.js +0 -1
  751. package/.next/static/chunks/app/api/settings/route-9a2a13ac6b89ba91.js +0 -1
  752. package/.next/static/chunks/app/api/shutdown/route-9a2a13ac6b89ba91.js +0 -1
  753. package/.next/static/chunks/app/api/tags/route-9a2a13ac6b89ba91.js +0 -1
  754. package/.next/static/chunks/app/api/translator/console-logs/route-9a2a13ac6b89ba91.js +0 -1
  755. package/.next/static/chunks/app/api/translator/console-logs/stream/route-9a2a13ac6b89ba91.js +0 -1
  756. package/.next/static/chunks/app/api/translator/load/route-9a2a13ac6b89ba91.js +0 -1
  757. package/.next/static/chunks/app/api/translator/save/route-9a2a13ac6b89ba91.js +0 -1
  758. package/.next/static/chunks/app/api/translator/send/route-9a2a13ac6b89ba91.js +0 -1
  759. package/.next/static/chunks/app/api/translator/translate/route-9a2a13ac6b89ba91.js +0 -1
  760. package/.next/static/chunks/app/api/tunnel/disable/route-9a2a13ac6b89ba91.js +0 -1
  761. package/.next/static/chunks/app/api/tunnel/enable/route-9a2a13ac6b89ba91.js +0 -1
  762. package/.next/static/chunks/app/api/tunnel/status/route-9a2a13ac6b89ba91.js +0 -1
  763. package/.next/static/chunks/app/api/tunnel/tailscale-check/route-9a2a13ac6b89ba91.js +0 -1
  764. package/.next/static/chunks/app/api/tunnel/tailscale-disable/route-9a2a13ac6b89ba91.js +0 -1
  765. package/.next/static/chunks/app/api/tunnel/tailscale-enable/route-9a2a13ac6b89ba91.js +0 -1
  766. package/.next/static/chunks/app/api/tunnel/tailscale-install/route-9a2a13ac6b89ba91.js +0 -1
  767. package/.next/static/chunks/app/api/usage/[connectionId]/codex-reset-credits/route-9a2a13ac6b89ba91.js +0 -1
  768. package/.next/static/chunks/app/api/usage/[connectionId]/route-9a2a13ac6b89ba91.js +0 -1
  769. package/.next/static/chunks/app/api/usage/chart/route-9a2a13ac6b89ba91.js +0 -1
  770. package/.next/static/chunks/app/api/usage/health/route-9a2a13ac6b89ba91.js +0 -1
  771. package/.next/static/chunks/app/api/usage/history/route-9a2a13ac6b89ba91.js +0 -1
  772. package/.next/static/chunks/app/api/usage/logs/route-9a2a13ac6b89ba91.js +0 -1
  773. package/.next/static/chunks/app/api/usage/providers/route-9a2a13ac6b89ba91.js +0 -1
  774. package/.next/static/chunks/app/api/usage/request-details/route-9a2a13ac6b89ba91.js +0 -1
  775. package/.next/static/chunks/app/api/usage/request-logs/route-9a2a13ac6b89ba91.js +0 -1
  776. package/.next/static/chunks/app/api/usage/stats/route-9a2a13ac6b89ba91.js +0 -1
  777. package/.next/static/chunks/app/api/usage/stream/route-9a2a13ac6b89ba91.js +0 -1
  778. package/.next/static/chunks/app/api/v1/api/chat/route-9a2a13ac6b89ba91.js +0 -1
  779. package/.next/static/chunks/app/api/v1/audio/speech/route-9a2a13ac6b89ba91.js +0 -1
  780. package/.next/static/chunks/app/api/v1/audio/transcriptions/route-9a2a13ac6b89ba91.js +0 -1
  781. package/.next/static/chunks/app/api/v1/audio/voices/route-9a2a13ac6b89ba91.js +0 -1
  782. package/.next/static/chunks/app/api/v1/chat/completions/route-9a2a13ac6b89ba91.js +0 -1
  783. package/.next/static/chunks/app/api/v1/embeddings/route-9a2a13ac6b89ba91.js +0 -1
  784. package/.next/static/chunks/app/api/v1/images/generations/route-9a2a13ac6b89ba91.js +0 -1
  785. package/.next/static/chunks/app/api/v1/messages/count_tokens/route-9a2a13ac6b89ba91.js +0 -1
  786. package/.next/static/chunks/app/api/v1/messages/route-9a2a13ac6b89ba91.js +0 -1
  787. package/.next/static/chunks/app/api/v1/models/[...model]/route-9a2a13ac6b89ba91.js +0 -1
  788. package/.next/static/chunks/app/api/v1/models/info/route-9a2a13ac6b89ba91.js +0 -1
  789. package/.next/static/chunks/app/api/v1/models/route-9a2a13ac6b89ba91.js +0 -1
  790. package/.next/static/chunks/app/api/v1/responses/compact/route-9a2a13ac6b89ba91.js +0 -1
  791. package/.next/static/chunks/app/api/v1/responses/route-9a2a13ac6b89ba91.js +0 -1
  792. package/.next/static/chunks/app/api/v1/route-9a2a13ac6b89ba91.js +0 -1
  793. package/.next/static/chunks/app/api/v1/search/route-9a2a13ac6b89ba91.js +0 -1
  794. package/.next/static/chunks/app/api/v1/systemone/route-9a2a13ac6b89ba91.js +0 -1
  795. package/.next/static/chunks/app/api/v1/videos/[id]/route-9a2a13ac6b89ba91.js +0 -1
  796. package/.next/static/chunks/app/api/v1/videos/edits/route-9a2a13ac6b89ba91.js +0 -1
  797. package/.next/static/chunks/app/api/v1/videos/extensions/route-9a2a13ac6b89ba91.js +0 -1
  798. package/.next/static/chunks/app/api/v1/videos/generations/route-9a2a13ac6b89ba91.js +0 -1
  799. package/.next/static/chunks/app/api/v1/web/fetch/route-9a2a13ac6b89ba91.js +0 -1
  800. package/.next/static/chunks/app/api/v1beta/models/[...path]/route-9a2a13ac6b89ba91.js +0 -1
  801. package/.next/static/chunks/app/api/v1beta/models/route-9a2a13ac6b89ba91.js +0 -1
  802. package/.next/static/chunks/app/api/version/route-9a2a13ac6b89ba91.js +0 -1
  803. package/.next/static/chunks/app/api/version/shutdown/route-9a2a13ac6b89ba91.js +0 -1
  804. package/.next/static/chunks/app/api/version/update/route-9a2a13ac6b89ba91.js +0 -1
  805. package/.next/static/chunks/app/manifest.webmanifest/route-9a2a13ac6b89ba91.js +0 -1
  806. package/.next/static/chunks/app/page-9a2a13ac6b89ba91.js +0 -1
  807. package/.next/static/chunks/next/dist/client/components/builtin/app-error-9a2a13ac6b89ba91.js +0 -1
  808. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-9a2a13ac6b89ba91.js +0 -1
  809. package/.next/static/chunks/next/dist/client/components/builtin/not-found-9a2a13ac6b89ba91.js +0 -1
  810. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-9a2a13ac6b89ba91.js +0 -1
  811. package/.next/static/css/efaf98e3b295f727.css +0 -1
  812. package/open-sse/executors/xiaomi-tokenplan.js +0 -20
  813. package/open-sse/handlers/imageProviders/huggingface.js +0 -23
  814. package/open-sse/handlers/ttsProviders/minimax.js +0 -63
  815. package/open-sse/providers/registry/fish-audio.js +0 -31
  816. package/open-sse/providers/registry/glm-cn.js +0 -39
  817. package/open-sse/providers/registry/groq.js +0 -62
  818. package/open-sse/providers/registry/huggingface.js +0 -40
  819. package/open-sse/providers/registry/minimax-cn.js +0 -82
  820. package/open-sse/providers/registry/minimax.js +0 -94
  821. package/open-sse/providers/registry/siliconflow.js +0 -39
  822. package/open-sse/providers/registry/vercel-ai-gateway.js +0 -42
  823. package/open-sse/providers/registry/xiaomi-tokenplan.js +0 -66
  824. package/open-sse/providers/registry/xquik.js +0 -31
  825. package/open-sse/services/usage/groq.js +0 -133
  826. package/open-sse/services/usage/minimax.js +0 -297
  827. package/public/providers/fish-audio.png +0 -0
  828. package/public/providers/glm-cn.png +0 -0
  829. package/public/providers/groq.png +0 -0
  830. package/public/providers/huggingface.png +0 -0
  831. package/public/providers/minimax-cn.png +0 -0
  832. package/public/providers/minimax.png +0 -0
  833. package/public/providers/siliconflow.png +0 -0
  834. package/public/providers/vercel-ai-gateway.png +0 -0
  835. package/public/providers/vercel.png +0 -0
  836. package/public/providers/xiaomi-tokenplan.png +0 -0
  837. package/public/providers/xquik.png +0 -0
  838. package/src/app/api/media-providers/tts/minimax/voices/route.js +0 -126
  839. /package/.next/static/{8QVpvFFKxoB53L449Kgan → EsP8l_VAPRRfBiiJPJqQe}/_ssgManifest.js +0 -0
@@ -80,7 +80,18 @@ export function fingerprintToolKey(name) {
80
80
  return OPENCODE_FINGERPRINT_TOOLS.includes(trimmed) ? trimmed : "";
81
81
  }
82
82
 
83
- /** Read a tool name from either flat ({name}) or chat ({function:{name}}) shape. */
83
+ /**
84
+ * Tool declaration shapes. The fingerprint must be written in the same shape as
85
+ * the body it travels in: Claude's Messages API reads `input_schema` and rejects
86
+ * chat-shaped `function` envelopes outright.
87
+ */
88
+ export const TOOL_SHAPE = {
89
+ CHAT: "chat", // {type:"function", function:{name, description, parameters}}
90
+ FLAT: "flat", // {type:"function", name, description, parameters} (Responses)
91
+ CLAUDE: "claude", // {name, description, input_schema} (Anthropic Messages)
92
+ };
93
+
94
+ /** Read a tool name from flat ({name}), chat ({function:{name}}) or Claude shape. */
84
95
  function toolNameOf(tool) {
85
96
  if (!tool || typeof tool !== "object" || Array.isArray(tool)) return "";
86
97
  if (typeof tool.name === "string" && tool.name.trim()) return tool.name.trim();
@@ -96,17 +107,76 @@ function chatFunctionOf(tool) {
96
107
  return fn && typeof fn === "object" && !Array.isArray(fn) ? fn : null;
97
108
  }
98
109
 
110
+ /** Serialized input schema for a tool in any supported shape. */
111
+ function toolSchemaOf(tool) {
112
+ const def = chatFunctionOf(tool) || tool;
113
+ return def?.parameters ?? def?.input_schema ?? null;
114
+ }
115
+
99
116
  /** True when `tool` already carries OpenCode's exact definition for `key`. */
100
117
  function isFingerprintDefinition(tool, key) {
101
118
  const def = tool && (chatFunctionOf(tool) || tool);
102
119
  const want = FINGERPRINT_TOOL_DEFINITIONS[key];
103
120
  return (
104
121
  !!def &&
105
- def.description === want.description &&
106
- JSON.stringify(def.parameters) === JSON.stringify(want.parameters)
122
+ normalizePlatformSentence(def.description) === want.description &&
123
+ JSON.stringify(toolSchemaOf(tool)) === JSON.stringify(want.parameters)
107
124
  );
108
125
  }
109
126
 
127
+ /** Build one fingerprint tool declaration in the requested shape. */
128
+ function buildFingerprintTool(name, shape) {
129
+ const { description, parameters } = FINGERPRINT_TOOL_DEFINITIONS[name];
130
+ if (shape === TOOL_SHAPE.CLAUDE) return { name, description, input_schema: parameters };
131
+ if (shape === TOOL_SHAPE.FLAT) {
132
+ return { type: "function", name, description, parameters, strict: false };
133
+ }
134
+ return { type: "function", function: { name, description, parameters } };
135
+ }
136
+
137
+ /** Normalize the legacy boolean argument (true = flat, false = chat). */
138
+ function normalizeShape(shape) {
139
+ if (shape === TOOL_SHAPE.CLAUDE || shape === TOOL_SHAPE.FLAT || shape === TOOL_SHAPE.CHAT) {
140
+ return shape;
141
+ }
142
+ return shape ? TOOL_SHAPE.FLAT : TOOL_SHAPE.CHAT;
143
+ }
144
+
145
+ /** Claude bodies declare `system` and `input_schema`; Chat bodies never do. */
146
+ export function detectToolShape(body) {
147
+ if (!body || typeof body !== "object") return TOOL_SHAPE.CHAT;
148
+ if (body.system !== undefined) return TOOL_SHAPE.CLAUDE;
149
+ if (Array.isArray(body.tools) && body.tools.some((tool) => !!tool?.input_schema)) {
150
+ return TOOL_SHAPE.CLAUDE;
151
+ }
152
+ return TOOL_SHAPE.CHAT;
153
+ }
154
+
155
+ // OpenCode ships the same tool with OS-specific wording: "Commands run on Linux
156
+ // using bash." vs "Commands run on Windows using powershell.". The upstream gate
157
+ // compares descriptions verbatim, so a Windows caller's tool must travel with the
158
+ // canonical sentence — otherwise it looks like a foreign tool, gets renamed to
159
+ // `shell_client` and the client rejects the call (#5011).
160
+ const PLATFORM_SENTENCE_RE =
161
+ /Commands run on (?:Linux using bash|Windows using powershell(?:\.exe)?)\./;
162
+ const CANONICAL_PLATFORM_SENTENCE = "Commands run on Linux using bash.";
163
+
164
+ function normalizePlatformSentence(text) {
165
+ return typeof text === "string"
166
+ ? text.replace(PLATFORM_SENTENCE_RE, CANONICAL_PLATFORM_SENTENCE)
167
+ : text;
168
+ }
169
+
170
+ /** Same tool, with the platform sentence rewritten to the canonical wording. */
171
+ function withCanonicalPlatformSentence(tool, key) {
172
+ const want = FINGERPRINT_TOOL_DEFINITIONS[key];
173
+ const fn = chatFunctionOf(tool);
174
+ const target = fn || tool;
175
+ if (target.description === want.description) return tool;
176
+ const description = normalizePlatformSentence(target.description);
177
+ return fn ? { ...tool, function: { ...fn, description } } : { ...tool, description };
178
+ }
179
+
110
180
  function withToolName(tool, name) {
111
181
  const fn = chatFunctionOf(tool);
112
182
  return fn ? { ...tool, function: { ...fn, name } } : { ...tool, name };
@@ -145,7 +215,7 @@ export function concealFingerprintToolNames(tools) {
145
215
  seen.add(key);
146
216
 
147
217
  if (isFingerprintDefinition(tool, key)) {
148
- out.push(tool);
218
+ out.push(withCanonicalPlatformSentence(tool, key));
149
219
  continue;
150
220
  }
151
221
 
@@ -163,17 +233,13 @@ export function concealFingerprintToolNames(tools) {
163
233
  *
164
234
  * @returns {string[]} names that were appended
165
235
  */
166
- export function appendMissingFingerprintTools(tools, flat) {
236
+ export function appendMissingFingerprintTools(tools, shape) {
167
237
  const appended = [];
168
238
  if (!Array.isArray(tools)) return appended;
239
+ const resolved = normalizeShape(shape);
169
240
  for (const name of OPENCODE_FINGERPRINT_TOOLS) {
170
241
  if (tools.some((tool) => fingerprintToolKey(toolNameOf(tool)) === name)) continue;
171
- const { description, parameters } = FINGERPRINT_TOOL_DEFINITIONS[name];
172
- tools.push(
173
- flat
174
- ? { type: "function", name, description, parameters, strict: false }
175
- : { type: "function", function: { name, description, parameters } },
176
- );
242
+ tools.push(buildFingerprintTool(name, resolved));
177
243
  appended.push(name);
178
244
  }
179
245
  return appended;
@@ -214,7 +280,8 @@ export function aliasHistoryToolCalls(body, map) {
214
280
 
215
281
  if (Array.isArray(body.input)) {
216
282
  body.input = body.input.map((item) =>
217
- item?.type === "function_call" && aliases.has(item.name)
283
+ (item?.type === "function_call" || item?.type === "custom_tool_call") &&
284
+ aliases.has(item.name)
218
285
  ? { ...item, name: aliases.get(item.name) }
219
286
  : item,
220
287
  );
@@ -222,9 +289,19 @@ export function aliasHistoryToolCalls(body, map) {
222
289
 
223
290
  if (Array.isArray(body.messages)) {
224
291
  body.messages = body.messages.map((msg) => {
225
- if (!Array.isArray(msg?.tool_calls)) return msg;
292
+ // Claude shape: prior tool_use blocks live in the content array.
293
+ const content = Array.isArray(msg?.content)
294
+ ? msg.content.map((block) =>
295
+ block?.type === "tool_use" && aliases.has(block.name)
296
+ ? { ...block, name: aliases.get(block.name) }
297
+ : block,
298
+ )
299
+ : null;
300
+ const withContent = content && content !== msg.content ? { ...msg, content } : msg;
301
+
302
+ if (!Array.isArray(msg?.tool_calls)) return withContent;
226
303
  return {
227
- ...msg,
304
+ ...withContent,
228
305
  tool_calls: msg.tool_calls.map((call) =>
229
306
  aliases.has(call?.function?.name)
230
307
  ? { ...call, function: { ...call.function, name: aliases.get(call.function.name) } }
@@ -240,21 +317,41 @@ export function aliasHistoryToolCalls(body, map) {
240
317
  // in the system prompt instead. Upstream does not gate on the prompt text.
241
318
  // Wording matters: "not available" made the model also refuse the caller's own
242
319
  // Read/Bash; "placeholders ... use the other tools" kept those working.
243
- function noteUnavailableTools(body, flat, names) {
320
+ function noteUnavailableTools(body, shape, names) {
244
321
  const list = names.map((name) => `\`${name}\``).join(" or ");
245
322
  const note =
246
323
  names.length > 1
247
324
  ? `Do not call the ${list} tools; they are placeholders that do nothing. Use the other tools you have been given instead.`
248
325
  : `Do not call the ${list} tool; it is a placeholder that does nothing. Use the other tools you have been given instead.`;
249
- if (flat) {
326
+ // Anthropic rejects role "system" inside `messages`; its prompt lives in the
327
+ // top-level `system` field. A Claude body must never receive the chat note,
328
+ // even when a caller passed the chat shape.
329
+ const resolved = detectToolShape(body) === TOOL_SHAPE.CLAUDE ? TOOL_SHAPE.CLAUDE : shape;
330
+ if (resolved === TOOL_SHAPE.FLAT) {
250
331
  body.instructions =
251
332
  typeof body.instructions === "string" && body.instructions.trim()
252
333
  ? `${body.instructions}\n\n${note}`
253
334
  : note;
254
335
  return;
255
336
  }
256
- // OpenAI chat shape only; Claude-shaped bodies carry `system` instead.
257
- if (!Array.isArray(body.messages) || body.system !== undefined) return;
337
+ if (resolved === TOOL_SHAPE.CLAUDE) {
338
+ // Anthropic carries the prompt in `system`, as a string or text blocks.
339
+ if (typeof body.system === "string") {
340
+ body.system = body.system.trim() ? `${body.system}\n\n${note}` : note;
341
+ return;
342
+ }
343
+ if (Array.isArray(body.system) && body.system.length > 0) {
344
+ const last = body.system[body.system.length - 1];
345
+ body.system =
346
+ last?.type === "text"
347
+ ? [...body.system.slice(0, -1), { ...last, text: `${last.text}\n\n${note}` }]
348
+ : [...body.system, { type: "text", text: note }];
349
+ return;
350
+ }
351
+ body.system = note;
352
+ return;
353
+ }
354
+ if (!Array.isArray(body.messages)) return;
258
355
  const first = body.messages[0];
259
356
  if (first?.role === "system" && typeof first.content === "string") {
260
357
  body.messages = [
@@ -271,22 +368,24 @@ function noteUnavailableTools(body, flat, names) {
271
368
  * fingerprint definitions, and tell the model the appended ones are off-limits.
272
369
  *
273
370
  * @param {object} body
274
- * @param {boolean} flat - true for Responses tools ({name}), false for chat tools
371
+ * @param {string|boolean} shape - TOOL_SHAPE value; `true`/`false` are accepted
372
+ * for the Responses and chat shapes respectively
275
373
  * @returns {Map<string,string>} map: sent name -> original name
276
374
  */
277
- export function applyFingerprintTools(body, flat) {
375
+ export function applyFingerprintTools(body, shape) {
278
376
  if (!body || typeof body !== "object") return new Map();
377
+ const resolved = normalizeShape(shape === undefined ? detectToolShape(body) : shape);
279
378
 
280
379
  const { tools, map } = concealFingerprintToolNames(body.tools);
281
380
  body.tools = Array.isArray(tools) ? tools : [];
282
- const appended = appendMissingFingerprintTools(body.tools, flat);
381
+ const appended = appendMissingFingerprintTools(body.tools, resolved);
283
382
  retargetToolChoice(body, map);
284
383
  aliasHistoryToolCalls(body, map);
285
- if (appended.length) noteUnavailableTools(body, flat, appended);
384
+ if (appended.length) noteUnavailableTools(body, resolved, appended);
286
385
 
287
386
  // Responses keeps its explicit auto default. Never default to "none": upstream
288
387
  // answers tool_choice "none" with 403 FreeTierError.
289
- if (!body.tool_choice && flat) body.tool_choice = "auto";
388
+ if (!body.tool_choice && resolved === TOOL_SHAPE.FLAT) body.tool_choice = "auto";
290
389
 
291
390
  recordRenamedToolNames(body, map);
292
391
  return map;
@@ -1,3 +1,9 @@
1
+ import {
2
+ OPENCODE_ENTITLEMENT_MESSAGE,
3
+ isFreeTierEntitlementMessage,
4
+ } from "../config/opencodeErrors.js";
5
+ import { isQuotaError, readErrorEnvelope } from "./opencodeErrors.js";
6
+
1
7
  // Short in-memory backoff for the OpenCode free lane (`Authorization: Bearer public`).
2
8
  //
3
9
  // Root cause it addresses: the free lane is one global upstream quota pool behind
@@ -35,27 +41,37 @@ export function parseRetryAfterMs(value) {
35
41
  }
36
42
 
37
43
  // Returns { status, message, resetsAtMs } for FreeUsageLimit 429s, else null so
38
- // callers fall through to the default parser.
44
+ // callers fall through to the default parser. Entitlement failures (free models
45
+ // requested through an API key) are permanent: no breaker, actionable message.
39
46
  export function parseFreeUsageError(response, bodyText) {
40
47
  try {
41
48
  if (!response || response.status !== 429) return null;
42
- let type = "";
43
- let msg = "";
44
- try {
45
- const json = JSON.parse(bodyText || "{}");
46
- const err = json?.error && typeof json.error === "object" ? json.error : null;
47
- type = err?.type || json?.type || "";
48
- msg = err?.message || json?.message || "";
49
- } catch {
50
- msg = bodyText || "";
49
+ const envelope = readErrorEnvelope(bodyText);
50
+ const str = envelope.message || "";
51
+ if (isFreeTierEntitlementMessage(str)) {
52
+ return {
53
+ status: 429,
54
+ kind: "entitlement",
55
+ message: OPENCODE_ENTITLEMENT_MESSAGE,
56
+ resetsAtMs: null,
57
+ };
51
58
  }
52
- const str = typeof msg === "string" ? msg : JSON.stringify(msg);
53
- if (type !== "FreeUsageLimitError" && !/rate limit/i.test(str)) return null;
59
+ if (envelope.type !== "FreeUsageLimitError" && !isQuotaError(str)) return null;
54
60
  const retryMs = parseRetryAfterMs(response.headers?.get?.("retry-after"));
55
61
  const resetsAtMs = retryMs ? Date.now() + retryMs : null;
56
62
  const hint = retryMs ? ` (retry after ${humanMs(retryMs)})` : "";
63
+ // Our own synthetic 429 (already carries the "(local backoff, …)" hint): don't relabel it "upstream".
64
+ if (/local backoff/i.test(str)) {
65
+ return {
66
+ status: 429,
67
+ kind: "quota",
68
+ message: `OpenCode free-tier quota exhausted: ${str}`,
69
+ resetsAtMs,
70
+ };
71
+ }
57
72
  return {
58
73
  status: 429,
74
+ kind: "quota",
59
75
  message: `OpenCode free-tier quota exhausted upstream${hint}: ${str || "Rate limit exceeded"}`,
60
76
  resetsAtMs,
61
77
  };
@@ -64,6 +80,19 @@ export function parseFreeUsageError(response, bodyText) {
64
80
  }
65
81
  }
66
82
 
83
+ // Classify an upstream response as a permanent entitlement gate (vs a quota
84
+ // window) without consuming it. Used by executors to decide whether the local
85
+ // breaker may record a cooldown.
86
+ export async function isEntitlementResponse(response) {
87
+ if (!response || response.status !== 429) return false;
88
+ try {
89
+ const bodyText = await response.clone().text();
90
+ return isFreeTierEntitlementMessage(readErrorEnvelope(bodyText).message);
91
+ } catch {
92
+ return false;
93
+ }
94
+ }
95
+
67
96
  // Remaining cooldown for key, or 0. Lazily evicts expired entries.
68
97
  export function freeUsageRemainingMs(key) {
69
98
  const until = breaker.get(key);
@@ -113,3 +142,19 @@ export function syntheticFreeUsageResponse(remainingMs) {
113
142
  },
114
143
  );
115
144
  }
145
+
146
+ // Fail-fast response for free-tier models requested on a keyed lane. No
147
+ // retry-after: the gate is a plan entitlement, not a temporary window.
148
+ export function syntheticEntitlementResponse() {
149
+ return new Response(
150
+ JSON.stringify({
151
+ type: "error",
152
+ error: { type: "FreeUsageLimitError", message: OPENCODE_ENTITLEMENT_MESSAGE },
153
+ metadata: {},
154
+ }),
155
+ {
156
+ status: 429,
157
+ headers: { "content-type": "application/json" },
158
+ },
159
+ );
160
+ }
@@ -181,8 +181,9 @@ export function canonicalizeUsage(usage) {
181
181
  if (!usage || typeof usage !== "object" || Array.isArray(usage)) return null;
182
182
 
183
183
  const num = (v) => (Number.isFinite(Number(v)) ? Number(v) : 0);
184
- const completion = num(usage.completion_tokens ?? usage.output_tokens);
185
184
  const reasoning = num(usage.reasoning_tokens);
185
+ // Some upstreams report completion_tokens: 0 while spending everything on reasoning.
186
+ const completion = Math.max(num(usage.completion_tokens ?? usage.output_tokens), reasoning);
186
187
  // Fall back to the nested prompt_tokens_details.cache_creation_tokens shape
187
188
  // (buildUsage()'s OpenAI-forwarding format) when the top-level field is
188
189
  // absent, so callers that pass a buildUsage() object through don't silently
@@ -309,12 +310,13 @@ export function extractUsage(chunk) {
309
310
 
310
311
  // OpenAI format (also covers DeepSeek which uses prompt_cache_hit_tokens)
311
312
  if (chunk.usage && typeof chunk.usage === "object" && chunk.usage.prompt_tokens !== undefined) {
313
+ const reasoningTokens = chunk.usage.completion_tokens_details?.reasoning_tokens;
312
314
  return normalizeUsage({
313
315
  prompt_tokens: chunk.usage.prompt_tokens,
314
- completion_tokens: chunk.usage.completion_tokens || 0,
316
+ completion_tokens: Math.max(chunk.usage.completion_tokens || 0, reasoningTokens || 0),
315
317
  cached_tokens:
316
318
  chunk.usage.prompt_tokens_details?.cached_tokens || chunk.usage.prompt_cache_hit_tokens,
317
- reasoning_tokens: chunk.usage.completion_tokens_details?.reasoning_tokens,
319
+ reasoning_tokens: reasoningTokens,
318
320
  prompt_tokens_details: chunk.usage.prompt_tokens_details,
319
321
  completion_tokens_details: chunk.usage.completion_tokens_details,
320
322
  });
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@amir83nasr/10router",
3
- "version": "0.1.15",
3
+ "version": "0.1.16",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/Amir83Nasr/10Router.git"
7
7
  },
8
- "packageManager": "pnpm@12.6.0",
8
+ "packageManager": "pnpm@12.15.0",
9
9
  "description": "10Router dashboard",
10
10
  "bin": {
11
11
  "10router": "bin/10router.mjs"
@@ -293,6 +293,15 @@ export default function ConsoleLogClient() {
293
293
  logRef.current.scrollTop = logRef.current.scrollHeight;
294
294
  }, [logs, autoScroll]);
295
295
 
296
+ // Scrolling away from the bottom disengages Follow, so reading an older
297
+ // line isn't interrupted by every new one; scrolling back re-engages it.
298
+ const handleScroll = () => {
299
+ const el = logRef.current;
300
+ if (!el) return;
301
+ const atBottom = el.scrollHeight - el.scrollTop - el.clientHeight < 40;
302
+ setAutoScroll(atBottom);
303
+ };
304
+
296
305
  const toggleLevel = (level: LogLevel) => {
297
306
  setLevels((prev) => {
298
307
  const next = new Set(prev);
@@ -407,6 +416,7 @@ export default function ConsoleLogClient() {
407
416
  <CardContent className="pt-0">
408
417
  <div
409
418
  ref={logRef}
419
+ onScroll={handleScroll}
410
420
  className="h-[calc(100vh-220px)] overflow-y-auto rounded-b-lg border border-border bg-card p-2 font-mono text-xs"
411
421
  >
412
422
  {logs.length === 0 ? (
@@ -1,5 +1,6 @@
1
1
  import Icon from "@/shared/components/Icon";
2
2
  import { CapacityBadges } from "@/shared/components";
3
+ import { Badge } from "@/components/ui/badge";
3
4
  import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip";
4
5
 
5
6
  export default function ModelRow({
@@ -53,6 +54,19 @@ export default function ModelRow({
53
54
  <CapacityBadges caps={caps} colorOverride="text-muted-foreground/70" size={12} />
54
55
  </span>
55
56
  </div>
57
+ {isFree && (
58
+ <Tooltip>
59
+ <TooltipTrigger asChild>
60
+ <Badge className="shrink-0 bg-green-500/10 font-bold text-green-600 dark:text-green-500">
61
+ FREE
62
+ </Badge>
63
+ </TooltipTrigger>
64
+ <TooltipContent>
65
+ Free model: works through the free OpenCode lane. An OpenCode Zen/Go API key cannot
66
+ unlock it.
67
+ </TooltipContent>
68
+ </Tooltip>
69
+ )}
56
70
  {onTest && (
57
71
  <div className="relative shrink-0 group/btn">
58
72
  <button
@@ -0,0 +1,113 @@
1
+ "use client";
2
+ import Icon from "@/shared/components/Icon";
3
+ import { Card, CardContent } from "@/components/ui/card";
4
+ import { Button } from "@/components/ui/button";
5
+ import { OPENCODE_URLS } from "open-sse/config/opencodeErrors.js";
6
+ import {
7
+ OPENCODE_GO_DOCS_URL,
8
+ OPENCODE_GO_ENDPOINTS,
9
+ OPENCODE_GO_PLANS,
10
+ OPENCODE_GO_SETUP_NOTES,
11
+ } from "open-sse/config/opencodeGo.js";
12
+
13
+ interface OpenCodeGoConnectionCardProps {
14
+ connectionCount: number;
15
+ activeCount: number;
16
+ onAddConnection: () => void;
17
+ }
18
+
19
+ const SETUP_STEPS = [
20
+ "Subscribe to a Go plan in the OpenCode Console.",
21
+ "Copy your OpenCode API key from the same account.",
22
+ "Add it as a connection below. The x-opencode-session header is set automatically.",
23
+ ];
24
+
25
+ export default function OpenCodeGoConnectionCard({
26
+ connectionCount,
27
+ activeCount,
28
+ onAddConnection,
29
+ }: OpenCodeGoConnectionCardProps) {
30
+ const statusText =
31
+ connectionCount === 0 ? "No connections yet" : `${activeCount} of ${connectionCount} active`;
32
+
33
+ return (
34
+ <Card>
35
+ <CardContent>
36
+ <div className="mb-4 flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between">
37
+ <div className="min-w-0">
38
+ <h2 className="text-lg font-semibold">OpenCode Go Connection</h2>
39
+ <p className="text-sm text-muted-foreground">{statusText}</p>
40
+ </div>
41
+ <Button size="sm" onClick={onAddConnection} className="w-full sm:w-auto">
42
+ <Icon name="add" />
43
+ Add Connection
44
+ </Button>
45
+ </div>
46
+
47
+ <div className="mb-4 grid grid-cols-1 gap-2 sm:grid-cols-2">
48
+ {OPENCODE_GO_PLANS.map((plan) => (
49
+ <div
50
+ key={plan.id}
51
+ className="flex items-center justify-between rounded-lg border border-border px-3 py-2"
52
+ >
53
+ <span className="text-sm font-medium">{plan.name}</span>
54
+ <span className="text-sm text-muted-foreground">{plan.price}</span>
55
+ </div>
56
+ ))}
57
+ </div>
58
+
59
+ <div className="mb-4">
60
+ <h3 className="mb-2 text-sm font-medium">Endpoints</h3>
61
+ <ul className="flex flex-col gap-2">
62
+ {OPENCODE_GO_ENDPOINTS.map((endpoint) => (
63
+ <li
64
+ key={endpoint.format}
65
+ className="flex flex-col gap-0.5 rounded-lg border border-border px-3 py-2"
66
+ >
67
+ <span className="text-sm font-medium">{endpoint.label}</span>
68
+ <code className="break-all text-xs text-muted-foreground">{endpoint.url}</code>
69
+ <span className="text-xs text-muted-foreground">{endpoint.note}</span>
70
+ </li>
71
+ ))}
72
+ </ul>
73
+ </div>
74
+
75
+ <ol className="mb-4 flex list-decimal flex-col gap-1.5 pl-5 text-sm text-muted-foreground">
76
+ {SETUP_STEPS.map((step) => (
77
+ <li key={step}>{step}</li>
78
+ ))}
79
+ </ol>
80
+
81
+ <ul className="mb-4 flex flex-col gap-2 rounded-lg border border-blue-500/30 bg-blue-500/10 px-3 py-2 text-xs leading-relaxed text-blue-600 dark:text-blue-400">
82
+ {OPENCODE_GO_SETUP_NOTES.map((note) => (
83
+ <li key={note} className="flex gap-2">
84
+ <Icon name="info" className="mt-0.5 text-[16px] shrink-0" />
85
+ <span className="min-w-0">{note}</span>
86
+ </li>
87
+ ))}
88
+ </ul>
89
+
90
+ <div className="flex flex-col gap-2 sm:flex-row sm:gap-4">
91
+ <a
92
+ href={OPENCODE_URLS.go}
93
+ target="_blank"
94
+ rel="noopener noreferrer"
95
+ className="inline-flex items-center gap-1 text-xs text-primary hover:underline"
96
+ >
97
+ Subscribe to Go
98
+ <Icon name="open_in_new" className="text-sm" />
99
+ </a>
100
+ <a
101
+ href={OPENCODE_GO_DOCS_URL}
102
+ target="_blank"
103
+ rel="noopener noreferrer"
104
+ className="inline-flex items-center gap-1 text-xs text-primary hover:underline"
105
+ >
106
+ OpenCode Go docs
107
+ <Icon name="open_in_new" className="text-sm" />
108
+ </a>
109
+ </div>
110
+ </CardContent>
111
+ </Card>
112
+ );
113
+ }
@@ -36,7 +36,7 @@ import {
36
36
  isAnthropicCompatibleProvider,
37
37
  AI_PROVIDERS,
38
38
  } from "@/shared/constants/providers";
39
- import { getModelsByProviderId, getModelKind } from "@/shared/constants/models";
39
+ import { getModelsByProviderId, getModelKind, isFreeTierModel } from "@/shared/constants/models";
40
40
  import { useCopyToClipboard } from "@/shared/hooks/useCopyToClipboard";
41
41
  import { useModelCaps } from "@/shared/hooks/useModelCaps";
42
42
  import { translate } from "@/i18n/runtime";
@@ -51,6 +51,7 @@ import { ArrowLeftRight, Server, Unplug } from "lucide-react";
51
51
  import PassthroughModelsSection from "./PassthroughModelsSection";
52
52
  import CompatibleModelsSection from "./CompatibleModelsSection";
53
53
  import ConnectionRow from "./ConnectionRow";
54
+ import OpenCodeGoConnectionCard from "./OpenCodeGoConnectionCard";
54
55
  import AddApiKeyModal from "./AddApiKeyModal";
55
56
  import EditCompatibleNodeModal from "./EditCompatibleNodeModal";
56
57
  import AddCustomModelModal from "./AddCustomModelModal";
@@ -1128,7 +1129,7 @@ export default function ProviderDetailPage() {
1128
1129
  : undefined
1129
1130
  }
1130
1131
  isTesting={testingModelIds.has(model.id)}
1131
- isFree={model.isFree}
1132
+ isFree={model.isFree || isFreeTierModel(providerStorageAlias, model.id)}
1132
1133
  onDisable={() => handleDisableModel(model.id)}
1133
1134
  caps={getCaps(`${providerId}/${model.id}`)}
1134
1135
  />
@@ -1436,6 +1437,14 @@ export default function ProviderDetailPage() {
1436
1437
  </Card>
1437
1438
  )}
1438
1439
 
1440
+ {providerId === "opencode-go" && (
1441
+ <OpenCodeGoConnectionCard
1442
+ connectionCount={connections.length}
1443
+ activeCount={connections.filter((conn) => conn.isActive !== false).length}
1444
+ onAddConnection={triggerAddConnection}
1445
+ />
1446
+ )}
1447
+
1439
1448
  {/* Connections */}
1440
1449
  {isFreeNoAuth ? (
1441
1450
  <NoAuthProxyCard providerId={providerId} />
@@ -3,10 +3,11 @@ import Icon from "@/shared/components/Icon";
3
3
 
4
4
  import { useState, useCallback, useEffect } from "react";
5
5
  import { Card, CardContent } from "@/components/ui/card";
6
+ import { Badge } from "@/components/ui/badge";
6
7
  import { Button } from "@/components/ui/button";
7
8
  import { Dialog, DialogContent, DialogHeader, DialogTitle } from "@/components/ui/dialog";
8
9
  import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip";
9
- import { getModelsByProviderId, getModelKind } from "@/shared/constants/models";
10
+ import { getModelsByProviderId, getModelKind, isFreeTierModel } from "@/shared/constants/models";
10
11
  import { getProviderAlias } from "@/shared/constants/providers";
11
12
  import { useCopyToClipboard } from "@/shared/hooks/useCopyToClipboard";
12
13
 
@@ -83,9 +84,17 @@ export function ModelRow({
83
84
  </span>
84
85
  </div>
85
86
  {isFree && (
86
- <span className="text-[10px] font-bold text-green-500 bg-green-500/10 px-1.5 py-0.5 rounded">
87
- FREE
88
- </span>
87
+ <Tooltip>
88
+ <TooltipTrigger asChild>
89
+ <Badge className="bg-green-500/10 font-bold text-green-600 dark:text-green-500">
90
+ FREE
91
+ </Badge>
92
+ </TooltipTrigger>
93
+ <TooltipContent>
94
+ Free model: works through the free OpenCode lane. An OpenCode Zen/Go API key cannot
95
+ unlock it.
96
+ </TooltipContent>
97
+ </Tooltip>
89
98
  )}
90
99
  {isCustom && (
91
100
  <Tooltip>
@@ -299,7 +308,7 @@ export default function ModelsCard({ providerId, kindFilter, providerAliasOverri
299
308
  testStatus={modelTestResults[model.id]}
300
309
  onTest={() => handleTestModel(model.id)}
301
310
  isTesting={testingModelId === model.id}
302
- isFree={model.isFree}
311
+ isFree={model.isFree || isFreeTierModel(providerAlias, model.id)}
303
312
  />
304
313
  );
305
314
  })}