zevairouter 1.0.36 → 1.0.38

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 (554) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/cli/app/.next-cli-build/BUILD_ID +1 -1
  3. package/cli/app/.next-cli-build/app-path-routes-manifest.json +3 -3
  4. package/cli/app/.next-cli-build/build-manifest.json +2 -2
  5. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/automation/page.js.nft.json +1 -1
  6. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/automation/page_client-reference-manifest.js +1 -1
  7. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -1
  8. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  9. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
  10. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  11. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  12. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  13. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
  14. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  15. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
  16. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  17. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/context/page.js.nft.json +1 -1
  18. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/context/page_client-reference-manifest.js +1 -1
  19. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  20. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  21. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js.nft.json +1 -1
  22. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  23. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js.nft.json +1 -1
  24. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  25. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js.nft.json +1 -1
  26. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  27. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js.nft.json +1 -1
  28. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  29. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -1
  30. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  31. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  32. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  33. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
  34. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  35. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js +2 -2
  36. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
  37. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  38. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
  39. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  40. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
  41. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  42. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
  43. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  44. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
  45. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  46. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
  47. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  48. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
  49. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  50. package/cli/app/.next-cli-build/server/app/_global-error/page.js.nft.json +1 -1
  51. package/cli/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  52. package/cli/app/.next-cli-build/server/app/_global-error.html +1 -1
  53. package/cli/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  54. package/cli/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  55. package/cli/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  56. package/cli/app/.next-cli-build/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  57. package/cli/app/.next-cli-build/server/app/_global-error.segments/_head.segment.rsc +1 -1
  58. package/cli/app/.next-cli-build/server/app/_global-error.segments/_index.segment.rsc +1 -1
  59. package/cli/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  60. package/cli/app/.next-cli-build/server/app/_not-found/page.js.nft.json +1 -1
  61. package/cli/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  62. package/cli/app/.next-cli-build/server/app/_not-found.html +1 -1
  63. package/cli/app/.next-cli-build/server/app/_not-found.rsc +3 -3
  64. package/cli/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +3 -3
  65. package/cli/app/.next-cli-build/server/app/_not-found.segments/_head.segment.rsc +1 -1
  66. package/cli/app/.next-cli-build/server/app/_not-found.segments/_index.segment.rsc +3 -3
  67. package/cli/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  68. package/cli/app/.next-cli-build/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  69. package/cli/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  70. package/cli/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
  71. package/cli/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
  72. package/cli/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
  73. package/cli/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
  74. package/cli/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
  75. package/cli/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
  76. package/cli/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
  77. package/cli/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  78. package/cli/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
  79. package/cli/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
  80. package/cli/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js.nft.json +1 -1
  81. package/cli/app/.next-cli-build/server/app/api/cli-tools/codex-gateway/accounts/route.js.nft.json +1 -1
  82. package/cli/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
  83. package/cli/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
  84. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js.nft.json +1 -1
  85. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js.nft.json +1 -1
  86. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
  87. package/cli/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js.nft.json +1 -1
  88. package/cli/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
  89. package/cli/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js.nft.json +1 -1
  90. package/cli/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js.nft.json +1 -1
  91. package/cli/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js.nft.json +1 -1
  92. package/cli/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
  93. package/cli/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js.nft.json +1 -1
  94. package/cli/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
  95. package/cli/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
  96. package/cli/app/.next-cli-build/server/app/api/context/[id]/route.js.nft.json +1 -1
  97. package/cli/app/.next-cli-build/server/app/api/context/bulk/route.js.nft.json +1 -1
  98. package/cli/app/.next-cli-build/server/app/api/context/route.js.nft.json +1 -1
  99. package/cli/app/.next-cli-build/server/app/api/health/route.js.nft.json +1 -1
  100. package/cli/app/.next-cli-build/server/app/api/init/route.js +1 -1
  101. package/cli/app/.next-cli-build/server/app/api/init/route.js.nft.json +1 -1
  102. package/cli/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
  103. package/cli/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
  104. package/cli/app/.next-cli-build/server/app/api/locale/route.js.nft.json +1 -1
  105. package/cli/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
  106. package/cli/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
  107. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
  108. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
  109. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
  110. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
  111. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -1
  112. package/cli/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
  113. package/cli/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
  114. package/cli/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
  115. package/cli/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
  116. package/cli/app/.next-cli-build/server/app/api/models/route.js +1 -1
  117. package/cli/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
  118. package/cli/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
  119. package/cli/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
  120. package/cli/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js +1 -1
  121. package/cli/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  122. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/cancel/route.js +1 -1
  123. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  124. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/manual/[workerId]/route.js +1 -1
  125. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  126. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/route.js +1 -1
  127. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/route.js.nft.json +1 -1
  128. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/latest/route.js +1 -1
  129. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/latest/route.js.nft.json +1 -1
  130. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/route.js +1 -1
  131. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/route.js.nft.json +1 -1
  132. package/cli/app/.next-cli-build/server/app/api/oauth/autoclaw/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  133. package/cli/app/.next-cli-build/server/app/api/oauth/autoclaw/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  134. package/cli/app/.next-cli-build/server/app/api/oauth/autoclaw/bulk-import/[jobId]/route.js.nft.json +1 -1
  135. package/cli/app/.next-cli-build/server/app/api/oauth/autoclaw/bulk-import/latest/route.js.nft.json +1 -1
  136. package/cli/app/.next-cli-build/server/app/api/oauth/autoclaw/bulk-import/route.js.nft.json +1 -1
  137. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  138. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  139. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/route.js.nft.json +1 -1
  140. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/latest/route.js.nft.json +1 -1
  141. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/route.js.nft.json +1 -1
  142. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-token/route.js.nft.json +1 -1
  143. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/quota-cookie/route.js.nft.json +1 -1
  144. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  145. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  146. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/route.js.nft.json +1 -1
  147. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/latest/route.js.nft.json +1 -1
  148. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/route.js.nft.json +1 -1
  149. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-token/route.js.nft.json +1 -1
  150. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/quota-cookie/route.js.nft.json +1 -1
  151. package/cli/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js +1 -1
  152. package/cli/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
  153. package/cli/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
  154. package/cli/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js +1 -1
  155. package/cli/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  156. package/cli/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
  157. package/cli/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
  158. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -1
  159. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  160. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  161. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/route.js.nft.json +1 -1
  162. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/latest/route.js.nft.json +1 -1
  163. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/route.js.nft.json +1 -1
  164. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  165. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +1 -1
  166. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  167. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  168. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  169. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/route.js.nft.json +1 -1
  170. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/latest/route.js.nft.json +1 -1
  171. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/route.js.nft.json +1 -1
  172. package/cli/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
  173. package/cli/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  174. package/cli/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
  175. package/cli/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js.nft.json +1 -1
  176. package/cli/app/.next-cli-build/server/app/api/providers/[id]/models/route.js +1 -1
  177. package/cli/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  178. package/cli/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
  179. package/cli/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  180. package/cli/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
  181. package/cli/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  182. package/cli/app/.next-cli-build/server/app/api/providers/bulk-delete/route.js.nft.json +1 -1
  183. package/cli/app/.next-cli-build/server/app/api/providers/client/route.js +1 -1
  184. package/cli/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
  185. package/cli/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js.nft.json +1 -1
  186. package/cli/app/.next-cli-build/server/app/api/providers/route.js +1 -1
  187. package/cli/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
  188. package/cli/app/.next-cli-build/server/app/api/providers/suggested-models/route.js.nft.json +1 -1
  189. package/cli/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  190. package/cli/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
  191. package/cli/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
  192. package/cli/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
  193. package/cli/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
  194. package/cli/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
  195. package/cli/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
  196. package/cli/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
  197. package/cli/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
  198. package/cli/app/.next-cli-build/server/app/api/settings/proxy-test/route.js.nft.json +1 -1
  199. package/cli/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
  200. package/cli/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
  201. package/cli/app/.next-cli-build/server/app/api/shutdown/route.js.nft.json +1 -1
  202. package/cli/app/.next-cli-build/server/app/api/tags/route.js.nft.json +1 -1
  203. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
  204. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/route.js.nft.json +1 -1
  205. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
  206. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -1
  207. package/cli/app/.next-cli-build/server/app/api/translator/load/route.js.nft.json +1 -1
  208. package/cli/app/.next-cli-build/server/app/api/translator/save/route.js.nft.json +1 -1
  209. package/cli/app/.next-cli-build/server/app/api/translator/send/route.js +1 -1
  210. package/cli/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
  211. package/cli/app/.next-cli-build/server/app/api/translator/translate/route.js +1 -1
  212. package/cli/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
  213. package/cli/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  214. package/cli/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  215. package/cli/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
  216. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
  217. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
  218. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
  219. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
  220. package/cli/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js +1 -1
  221. package/cli/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  222. package/cli/app/.next-cli-build/server/app/api/usage/aggregate/route.js.nft.json +1 -1
  223. package/cli/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
  224. package/cli/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
  225. package/cli/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
  226. package/cli/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
  227. package/cli/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  228. package/cli/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
  229. package/cli/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
  230. package/cli/app/.next-cli-build/server/app/api/v1/api/chat/route.js +1 -1
  231. package/cli/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  232. package/cli/app/.next-cli-build/server/app/api/v1/audio/speech/route.js +1 -1
  233. package/cli/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  234. package/cli/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js +1 -1
  235. package/cli/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  236. package/cli/app/.next-cli-build/server/app/api/v1/audio/voices/route.js.nft.json +1 -1
  237. package/cli/app/.next-cli-build/server/app/api/v1/chat/completions/route.js +1 -1
  238. package/cli/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  239. package/cli/app/.next-cli-build/server/app/api/v1/embeddings/route.js +1 -1
  240. package/cli/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  241. package/cli/app/.next-cli-build/server/app/api/v1/images/generations/route.js +1 -1
  242. package/cli/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  243. package/cli/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -1
  244. package/cli/app/.next-cli-build/server/app/api/v1/messages/route.js +1 -1
  245. package/cli/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
  246. package/cli/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js +1 -1
  247. package/cli/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
  248. package/cli/app/.next-cli-build/server/app/api/v1/models/info/route.js.nft.json +1 -1
  249. package/cli/app/.next-cli-build/server/app/api/v1/models/route.js +1 -1
  250. package/cli/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
  251. package/cli/app/.next-cli-build/server/app/api/v1/responses/compact/route.js +1 -1
  252. package/cli/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
  253. package/cli/app/.next-cli-build/server/app/api/v1/responses/route.js +1 -1
  254. package/cli/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
  255. package/cli/app/.next-cli-build/server/app/api/v1/route.js +1 -1
  256. package/cli/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
  257. package/cli/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
  258. package/cli/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
  259. package/cli/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js +1 -1
  260. package/cli/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  261. package/cli/app/.next-cli-build/server/app/api/v1beta/models/route.js.nft.json +1 -1
  262. package/cli/app/.next-cli-build/server/app/api/version/route.js +1 -1
  263. package/cli/app/.next-cli-build/server/app/api/version/route.js.nft.json +1 -1
  264. package/cli/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
  265. package/cli/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
  266. package/cli/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
  267. package/cli/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +1 -1
  268. package/cli/app/.next-cli-build/server/app/callback/page.js.nft.json +1 -1
  269. package/cli/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  270. package/cli/app/.next-cli-build/server/app/callback.html +1 -1
  271. package/cli/app/.next-cli-build/server/app/callback.rsc +3 -3
  272. package/cli/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +3 -3
  273. package/cli/app/.next-cli-build/server/app/callback.segments/_head.segment.rsc +1 -1
  274. package/cli/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +3 -3
  275. package/cli/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +1 -1
  276. package/cli/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  277. package/cli/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
  278. package/cli/app/.next-cli-build/server/app/dashboard/automation.html +1 -1
  279. package/cli/app/.next-cli-build/server/app/dashboard/automation.rsc +5 -5
  280. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation/__PAGE__.segment.rsc +2 -2
  281. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation.segment.rsc +1 -1
  282. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  283. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  284. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_full.segment.rsc +5 -5
  285. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_head.segment.rsc +1 -1
  286. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_index.segment.rsc +3 -3
  287. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_tree.segment.rsc +1 -1
  288. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
  289. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +5 -5
  290. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
  291. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
  292. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  293. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  294. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +5 -5
  295. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
  296. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_index.segment.rsc +3 -3
  297. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
  298. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
  299. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +5 -5
  300. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
  301. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
  302. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  303. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  304. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +5 -5
  305. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
  306. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_index.segment.rsc +3 -3
  307. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
  308. package/cli/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
  309. package/cli/app/.next-cli-build/server/app/dashboard/combos.rsc +5 -5
  310. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
  311. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
  312. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  313. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  314. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +5 -5
  315. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
  316. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_index.segment.rsc +3 -3
  317. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
  318. package/cli/app/.next-cli-build/server/app/dashboard/context.html +1 -1
  319. package/cli/app/.next-cli-build/server/app/dashboard/context.rsc +5 -5
  320. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard/context/__PAGE__.segment.rsc +2 -2
  321. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard/context.segment.rsc +1 -1
  322. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  323. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  324. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_full.segment.rsc +5 -5
  325. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_head.segment.rsc +1 -1
  326. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_index.segment.rsc +3 -3
  327. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_tree.segment.rsc +1 -1
  328. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
  329. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.rsc +5 -5
  330. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
  331. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
  332. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  333. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  334. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +5 -5
  335. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
  336. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_index.segment.rsc +3 -3
  337. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
  338. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
  339. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +5 -5
  340. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
  341. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
  342. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
  343. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  344. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  345. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +5 -5
  346. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
  347. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +3 -3
  348. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +1 -1
  349. package/cli/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
  350. package/cli/app/.next-cli-build/server/app/dashboard/mitm.rsc +5 -5
  351. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
  352. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
  353. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  354. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  355. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +5 -5
  356. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
  357. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_index.segment.rsc +3 -3
  358. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
  359. package/cli/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
  360. package/cli/app/.next-cli-build/server/app/dashboard/profile.rsc +5 -5
  361. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
  362. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
  363. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  364. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  365. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +5 -5
  366. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
  367. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_index.segment.rsc +3 -3
  368. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
  369. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
  370. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.rsc +5 -5
  371. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
  372. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
  373. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  374. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  375. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  376. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +5 -5
  377. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
  378. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_index.segment.rsc +3 -3
  379. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
  380. package/cli/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
  381. package/cli/app/.next-cli-build/server/app/dashboard/providers.rsc +5 -5
  382. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
  383. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  384. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  385. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  386. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +5 -5
  387. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
  388. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_index.segment.rsc +3 -3
  389. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
  390. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
  391. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +5 -5
  392. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
  393. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
  394. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  395. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  396. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +5 -5
  397. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
  398. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +3 -3
  399. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
  400. package/cli/app/.next-cli-build/server/app/dashboard/quota.html +2 -2
  401. package/cli/app/.next-cli-build/server/app/dashboard/quota.rsc +6 -6
  402. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
  403. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
  404. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  405. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  406. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +6 -6
  407. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
  408. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_index.segment.rsc +3 -3
  409. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
  410. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js.nft.json +1 -1
  411. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  412. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  413. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +3 -3
  414. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +3 -3
  415. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  416. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +3 -3
  417. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
  418. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  419. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  420. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  421. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  422. package/cli/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
  423. package/cli/app/.next-cli-build/server/app/dashboard/translator.rsc +5 -5
  424. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
  425. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
  426. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  427. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  428. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +5 -5
  429. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
  430. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_index.segment.rsc +3 -3
  431. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
  432. package/cli/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
  433. package/cli/app/.next-cli-build/server/app/dashboard/usage.rsc +5 -5
  434. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
  435. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
  436. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  437. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  438. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +5 -5
  439. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
  440. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_index.segment.rsc +3 -3
  441. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
  442. package/cli/app/.next-cli-build/server/app/dashboard.html +1 -1
  443. package/cli/app/.next-cli-build/server/app/dashboard.rsc +5 -5
  444. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
  445. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  446. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  447. package/cli/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +5 -5
  448. package/cli/app/.next-cli-build/server/app/dashboard.segments/_head.segment.rsc +1 -1
  449. package/cli/app/.next-cli-build/server/app/dashboard.segments/_index.segment.rsc +3 -3
  450. package/cli/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +1 -1
  451. package/cli/app/.next-cli-build/server/app/index.html +1 -1
  452. package/cli/app/.next-cli-build/server/app/index.rsc +3 -3
  453. package/cli/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  454. package/cli/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +3 -3
  455. package/cli/app/.next-cli-build/server/app/index.segments/_head.segment.rsc +1 -1
  456. package/cli/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +3 -3
  457. package/cli/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +1 -1
  458. package/cli/app/.next-cli-build/server/app/landing/page.js.nft.json +1 -1
  459. package/cli/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  460. package/cli/app/.next-cli-build/server/app/landing.html +1 -1
  461. package/cli/app/.next-cli-build/server/app/landing.rsc +3 -3
  462. package/cli/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +3 -3
  463. package/cli/app/.next-cli-build/server/app/landing.segments/_head.segment.rsc +1 -1
  464. package/cli/app/.next-cli-build/server/app/landing.segments/_index.segment.rsc +3 -3
  465. package/cli/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +1 -1
  466. package/cli/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
  467. package/cli/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
  468. package/cli/app/.next-cli-build/server/app/login/page.js.nft.json +1 -1
  469. package/cli/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  470. package/cli/app/.next-cli-build/server/app/login.html +1 -1
  471. package/cli/app/.next-cli-build/server/app/login.rsc +4 -4
  472. package/cli/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +4 -4
  473. package/cli/app/.next-cli-build/server/app/login.segments/_head.segment.rsc +1 -1
  474. package/cli/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +3 -3
  475. package/cli/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +1 -1
  476. package/cli/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  477. package/cli/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
  478. package/cli/app/.next-cli-build/server/app/manifest.webmanifest/route.js.nft.json +1 -1
  479. package/cli/app/.next-cli-build/server/app/page.js.nft.json +1 -1
  480. package/cli/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  481. package/cli/app/.next-cli-build/server/app-paths-manifest.json +3 -3
  482. package/cli/app/.next-cli-build/server/chunks/2409.js +1 -1
  483. package/cli/app/.next-cli-build/server/chunks/2777.js +1 -1
  484. package/cli/app/.next-cli-build/server/chunks/3104.js +1 -1
  485. package/cli/app/.next-cli-build/server/chunks/3110.js +1 -1
  486. package/cli/app/.next-cli-build/server/chunks/318.js +8 -15
  487. package/cli/app/.next-cli-build/server/chunks/412.js +1 -1
  488. package/cli/app/.next-cli-build/server/chunks/4161.js +1 -1
  489. package/cli/app/.next-cli-build/server/chunks/4177.js +1 -1
  490. package/cli/app/.next-cli-build/server/chunks/4404.js +1 -1
  491. package/cli/app/.next-cli-build/server/chunks/4746.js +1 -1
  492. package/cli/app/.next-cli-build/server/chunks/5024.js +1 -1
  493. package/cli/app/.next-cli-build/server/chunks/5681.js +1 -1
  494. package/cli/app/.next-cli-build/server/chunks/6896.js +1 -1
  495. package/cli/app/.next-cli-build/server/chunks/7153.js +1 -1
  496. package/cli/app/.next-cli-build/server/chunks/8255.js +1 -1
  497. package/cli/app/.next-cli-build/server/chunks/8335.js +10 -0
  498. package/cli/app/.next-cli-build/server/chunks/8590.js +1 -1
  499. package/cli/app/.next-cli-build/server/chunks/8895.js +3 -3
  500. package/cli/app/.next-cli-build/server/chunks/891.js +1 -1
  501. package/cli/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  502. package/cli/app/.next-cli-build/server/pages/404.html +1 -1
  503. package/cli/app/.next-cli-build/server/pages/500.html +1 -1
  504. package/cli/app/.next-cli-build/static/chunks/1321-6e91d87d2a4816b9.js +1 -0
  505. package/cli/app/.next-cli-build/static/chunks/5497-2a485830a005737d.js +7 -0
  506. package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-41ea0d0c8e98a115.js +3 -0
  507. package/cli/app/package.json +3 -3
  508. package/cli/app/public/providers/clinepass.png +0 -0
  509. package/cli/app/public/providers/grok-cli.png +0 -0
  510. package/cli/app/public/providers/kimchi.png +0 -0
  511. package/cli/app/public/providers/kimchi.svg +4 -0
  512. package/cli/app/public/providers/perplexity-agent.png +0 -0
  513. package/cli/package.json +1 -1
  514. package/open-sse/config/appConstants.js +2 -0
  515. package/open-sse/config/providerModels.js +81 -1
  516. package/open-sse/config/providers.js +69 -0
  517. package/open-sse/executors/codebuddy-cn.js +31 -0
  518. package/open-sse/executors/default.js +2 -1
  519. package/open-sse/executors/grok-cli.js +397 -0
  520. package/open-sse/executors/index.js +14 -0
  521. package/open-sse/executors/kimchi.js +123 -0
  522. package/open-sse/executors/mimo-free.js +156 -0
  523. package/open-sse/handlers/chatCore.js +12 -21
  524. package/open-sse/services/kimchiModels.js +176 -0
  525. package/open-sse/services/model.js +5 -0
  526. package/open-sse/services/tokenRefresh.js +2 -0
  527. package/open-sse/services/usage.js +250 -24
  528. package/open-sse/utils/stream.js +14 -0
  529. package/open-sse/utils/thinkingSuffix.js +64 -0
  530. package/package.json +3 -3
  531. package/public/providers/clinepass.png +0 -0
  532. package/public/providers/grok-cli.png +0 -0
  533. package/public/providers/kimchi.png +0 -0
  534. package/public/providers/kimchi.svg +4 -0
  535. package/public/providers/perplexity-agent.png +0 -0
  536. package/src/app/(dashboard)/dashboard/providers/[id]/ModelRow.js +7 -3
  537. package/src/app/(dashboard)/dashboard/providers/[id]/page.js +17 -16
  538. package/src/app/api/oauth/[provider]/[action]/route.js +4 -4
  539. package/src/app/api/providers/[id]/models/route.js +20 -0
  540. package/src/app/api/providers/[id]/test/testUtils.js +33 -3
  541. package/src/app/api/v1/models/route.js +10 -1
  542. package/src/lib/network/connectionProxy.js +27 -0
  543. package/src/lib/oauth/constants/oauth.js +33 -0
  544. package/src/lib/oauth/providers.js +243 -0
  545. package/src/shared/components/NoAuthProxyCard.js +56 -8
  546. package/src/shared/components/OAuthModal.js +24 -7
  547. package/src/shared/constants/providers.js +141 -1
  548. package/src/sse/services/auth.js +11 -4
  549. package/cli/app/.next-cli-build/server/chunks/3188.js +0 -10
  550. package/cli/app/.next-cli-build/static/chunks/1321-1915f34ac5033b82.js +0 -1
  551. package/cli/app/.next-cli-build/static/chunks/5497-f496fb3861cb944d.js +0 -7
  552. package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-00b727c93ebc0e37.js +0 -3
  553. /package/cli/app/.next-cli-build/static/{w0R4xFPIyjPTTgiJ8h4Lz → r3r8UzNCpFb_r_5RqCNis}/_buildManifest.js +0 -0
  554. /package/cli/app/.next-cli-build/static/{w0R4xFPIyjPTTgiJ8h4Lz → r3r8UzNCpFb_r_5RqCNis}/_ssgManifest.js +0 -0
@@ -129,6 +129,8 @@ export async function getUsageForProvider(connection, proxyOptions = null) {
129
129
  case "minimax":
130
130
  case "minimax-cn":
131
131
  return await getMiniMaxUsage(apiKey, provider, proxyOptions);
132
+ case "grok-cli":
133
+ return await getGrokCliUsage(accessToken, providerSpecificData, proxyOptions);
132
134
  default:
133
135
  return { message: `Usage API not implemented for ${provider}` };
134
136
  }
@@ -343,21 +345,33 @@ function parseCodeBuddyUsage(payload) {
343
345
  };
344
346
  }
345
347
 
348
+ // Split refill packs (monthly cycle resets) vs one-shot bonus packs so the UI
349
+ // does not imply bonus credits replenish every month (ported from 9router).
350
+ const REFILL_GAP_MS = 2 * 24 * 60 * 60 * 1000;
351
+ const cycleEndMs = (acc) => {
352
+ const r = parseResetTime(acc.CycleEndTime);
353
+ return r ? new Date(r).getTime() : Number.POSITIVE_INFINITY;
354
+ };
355
+ const isRefill = (acc) => {
356
+ const ce = cycleEndMs(acc);
357
+ const de = Number(acc.DeductionEndTime);
358
+ return Number.isFinite(ce) && Number.isFinite(de) && de - ce > REFILL_GAP_MS;
359
+ };
360
+ const byExpiry = (a, b) => cycleEndMs(a) - cycleEndMs(b);
361
+
362
+ const refills = accounts.filter(isRefill).sort(byExpiry);
363
+ const bonuses = accounts.filter((a) => !isRefill(a)).sort(byExpiry);
364
+
346
365
  const quotas = {};
347
366
  let hasProPackage = false;
348
367
 
349
- for (const account of accounts) {
350
- if (!account || typeof account !== "object") continue;
351
- const label = getCodeBuddyQuotaLabel(account.PackageCode);
352
- if (!label) continue;
353
-
354
- if (account.PackageCode === CODEBUDDY_CONFIG.packageCodes.proMon || account.PackageCode === CODEBUDDY_CONFIG.packageCodes.proYear) {
368
+ const addQuota = (label, account, { recurring }) => {
369
+ const quota = getCodeBuddyQuotaValues(account, { useCycle: recurring });
370
+ if (!quota) return;
371
+ if (account.PackageCode === CODEBUDDY_CONFIG.packageCodes.proMon
372
+ || account.PackageCode === CODEBUDDY_CONFIG.packageCodes.proYear) {
355
373
  hasProPackage = true;
356
374
  }
357
-
358
- const quota = getCodeBuddyQuotaValues(account);
359
- if (!quota) continue;
360
-
361
375
  if (!quotas[label]) {
362
376
  quotas[label] = {
363
377
  used: 0,
@@ -366,13 +380,37 @@ function parseCodeBuddyUsage(payload) {
366
380
  resetAt: null,
367
381
  unit: "credits",
368
382
  unlimited: false,
383
+ recurring,
369
384
  };
370
385
  }
371
-
372
386
  quotas[label].used += quota.used;
373
387
  quotas[label].total += quota.total;
374
388
  quotas[label].remaining += quota.remaining;
375
389
  quotas[label].resetAt = getEarlierReset(quotas[label].resetAt, quota.resetAt);
390
+ quotas[label].recurring = quotas[label].recurring && recurring;
391
+ };
392
+
393
+ // Aggregate ALL refill packs into one Monthly row and ALL bonus packs into one
394
+ // Bonus row — Tencent often returns many small gift packages (10–20 rows) for a
395
+ // single account, which flooded the dashboard as Bonus Pack 1..N.
396
+ for (const account of refills) {
397
+ addQuota("Monthly Credits", account, { recurring: true });
398
+ }
399
+ for (const account of bonuses) {
400
+ addQuota("Bonus Credits", account, { recurring: false });
401
+ }
402
+ if (bonuses.length > 0 && quotas["Bonus Credits"]) {
403
+ quotas["Bonus Credits"].packCount = bonuses.length;
404
+ }
405
+
406
+ // Fallback: if classification produced nothing, keep old package-label merge.
407
+ if (Object.keys(quotas).length === 0) {
408
+ for (const account of accounts) {
409
+ if (!account || typeof account !== "object") continue;
410
+ const label = getCodeBuddyQuotaLabel(account.PackageCode) || "Other Credits";
411
+ const recurring = label !== "Activity Credits" && label !== "Gift Credits";
412
+ addQuota(recurring ? "Monthly Credits" : "Bonus Credits", account, { recurring });
413
+ }
376
414
  }
377
415
 
378
416
  if (Object.keys(quotas).length === 0) {
@@ -389,8 +427,10 @@ function parseCodeBuddyUsage(payload) {
389
427
  : 0;
390
428
  }
391
429
 
430
+ const plan = hasProPackage ? "Pro" : "Free";
392
431
  return {
393
- plan: hasProPackage ? "Pro" : "Free",
432
+ plan,
433
+ // packCount stays on Bonus Credits for UI/detail if needed; no noisy top-level message
394
434
  quotas,
395
435
  };
396
436
  }
@@ -414,18 +454,32 @@ function getCodeBuddyQuotaLabel(packageCode) {
414
454
  }
415
455
  }
416
456
 
417
- function getCodeBuddyQuotaValues(account) {
418
- const total = firstFiniteNumber(
419
- account.CycleCapacitySizePrecise,
420
- account.CycleCapacitySize,
421
- account.CapacitySizePrecise,
422
- account.CapacitySize,
423
- );
424
- const remaining = firstFiniteNumber(
425
- account.CycleCapacityRemainPrecise,
426
- account.CapacityRemainPrecise,
427
- account.CapacityRemain,
428
- );
457
+ function getCodeBuddyQuotaValues(account, { useCycle = true } = {}) {
458
+ // Refill packs: Cycle* fields = current period. Bonus packs: plain Capacity* = lifetime one-shot.
459
+ const total = useCycle
460
+ ? firstFiniteNumber(
461
+ account.CycleCapacitySizePrecise,
462
+ account.CycleCapacitySize,
463
+ account.CapacitySizePrecise,
464
+ account.CapacitySize,
465
+ )
466
+ : firstFiniteNumber(
467
+ account.CapacitySizePrecise,
468
+ account.CapacitySize,
469
+ account.CycleCapacitySizePrecise,
470
+ account.CycleCapacitySize,
471
+ );
472
+ const remaining = useCycle
473
+ ? firstFiniteNumber(
474
+ account.CycleCapacityRemainPrecise,
475
+ account.CapacityRemainPrecise,
476
+ account.CapacityRemain,
477
+ )
478
+ : firstFiniteNumber(
479
+ account.CapacityRemainPrecise,
480
+ account.CapacityRemain,
481
+ account.CycleCapacityRemainPrecise,
482
+ );
429
483
  const used = firstFiniteNumber(
430
484
  account.CapacityUsedPrecise,
431
485
  account.CapacityUsed,
@@ -1750,3 +1804,175 @@ async function getAutoclawUsage(accessToken, proxyOptions = null, connection = n
1750
1804
  return { message: `AutoClaw connected. Unable to fetch balance: ${error.message}` };
1751
1805
  }
1752
1806
  }
1807
+
1808
+ // ─── Grok CLI / Grok Build usage (cli-chat-proxy.grok.com) ─────────────────
1809
+
1810
+ function unwrapGrokCliVal(value, fallback = 0) {
1811
+ if (value == null) return fallback;
1812
+ if (typeof value === "object" && !Array.isArray(value) && "val" in value) {
1813
+ return toFiniteNumber(value.val, fallback);
1814
+ }
1815
+ return toFiniteNumber(value, fallback);
1816
+ }
1817
+
1818
+ function buildGrokCliUsageHeaders(accessToken, providerSpecificData = {}) {
1819
+ const psd = providerSpecificData || {};
1820
+ const headers = {
1821
+ Authorization: `Bearer ${accessToken}`,
1822
+ Accept: "application/json",
1823
+ "User-Agent": "grok-pager/0.2.93 grok-shell/0.2.93 (linux; x86_64)",
1824
+ "x-xai-token-auth": "xai-grok-cli",
1825
+ "x-grok-client-identifier": "grok-pager",
1826
+ "x-grok-client-version": "0.2.93",
1827
+ };
1828
+ const email = psd.email;
1829
+ const userId = psd.userId || psd.principalId;
1830
+ if (email) headers["x-email"] = email;
1831
+ if (userId) headers["x-userid"] = userId;
1832
+ return headers;
1833
+ }
1834
+
1835
+ function resolveGrokCliPlan(user, config) {
1836
+ const tier = typeof user?.subscriptionTier === "string" ? user.subscriptionTier.trim() : "";
1837
+ if (tier) {
1838
+ return tier
1839
+ .replace(/[_-]+/g, " ")
1840
+ .replace(/\b\w/g, (c) => c.toUpperCase());
1841
+ }
1842
+ if (user?.hasGrokCodeAccess === true) return "Grok Code";
1843
+ if (config?.isUnifiedBillingUser === true) return "Grok Build";
1844
+ return "Grok Build";
1845
+ }
1846
+
1847
+ function makeGrokCliQuota({ used, total, resetAt, unlimited = false }) {
1848
+ const safeTotal = Math.max(0, toFiniteNumber(total, 0));
1849
+ const safeUsed = Math.max(0, toFiniteNumber(used, 0));
1850
+ if (unlimited || safeTotal === 0) {
1851
+ return {
1852
+ used: safeUsed,
1853
+ total: 0,
1854
+ remainingPercentage: unlimited ? 100 : 0,
1855
+ resetAt: resetAt || null,
1856
+ unlimited: true,
1857
+ };
1858
+ }
1859
+ const remaining = Math.max(0, safeTotal - safeUsed);
1860
+ const remainingPercentage = (remaining / safeTotal) * 100;
1861
+ return {
1862
+ used: safeUsed,
1863
+ total: safeTotal,
1864
+ remainingPercentage,
1865
+ resetAt: resetAt || null,
1866
+ unlimited: false,
1867
+ };
1868
+ }
1869
+
1870
+ export function parseGrokCliBilling(billing, user = null) {
1871
+ const root = billing && typeof billing === "object" ? billing : {};
1872
+ const config =
1873
+ root.config && typeof root.config === "object" && !Array.isArray(root.config)
1874
+ ? root.config
1875
+ : root;
1876
+
1877
+ const periodEnd =
1878
+ parseResetTime(config.billingPeriodEnd) ||
1879
+ parseResetTime(config.currentPeriod?.end) ||
1880
+ parseResetTime(root.billingPeriodEnd) ||
1881
+ null;
1882
+
1883
+ const quotas = {};
1884
+
1885
+ const onDemandCap = unwrapGrokCliVal(config.onDemandCap ?? root.onDemandCap, NaN);
1886
+ const onDemandUsed = unwrapGrokCliVal(config.onDemandUsed ?? root.onDemandUsed, NaN);
1887
+ if (Number.isFinite(onDemandCap) && onDemandCap > 0) {
1888
+ const used = Number.isFinite(onDemandUsed) ? Math.max(0, onDemandUsed) : 0;
1889
+ quotas["On-demand"] = makeGrokCliQuota({
1890
+ used,
1891
+ total: onDemandCap,
1892
+ resetAt: periodEnd,
1893
+ });
1894
+ } else if (Number.isFinite(onDemandCap) && onDemandCap === 0 && Number.isFinite(onDemandUsed)) {
1895
+ quotas["On-demand"] = {
1896
+ used: 1,
1897
+ total: 1,
1898
+ remainingPercentage: 0,
1899
+ resetAt: periodEnd,
1900
+ unlimited: false,
1901
+ };
1902
+ }
1903
+
1904
+ const prepaid = unwrapGrokCliVal(config.prepaidBalance ?? root.prepaidBalance, NaN);
1905
+ if (Number.isFinite(prepaid) && prepaid > 0) {
1906
+ quotas["Prepaid"] = {
1907
+ used: 0,
1908
+ total: prepaid,
1909
+ remainingPercentage: 100,
1910
+ resetAt: null,
1911
+ unlimited: false,
1912
+ };
1913
+ }
1914
+
1915
+ return {
1916
+ plan: resolveGrokCliPlan(user, config),
1917
+ quotas,
1918
+ periodEnd,
1919
+ };
1920
+ }
1921
+
1922
+ /**
1923
+ * Grok CLI / Grok Build usage from cli-chat-proxy billing + user endpoints.
1924
+ */
1925
+ export async function getGrokCliUsage(accessToken, providerSpecificData = null, proxyOptions = null) {
1926
+ if (!accessToken) {
1927
+ return { message: "Grok CLI access token not available." };
1928
+ }
1929
+
1930
+ const headers = buildGrokCliUsageHeaders(accessToken, providerSpecificData);
1931
+ const BILLING_URL = "https://cli-chat-proxy.grok.com/v1/billing?format=credits";
1932
+ const USER_URL = "https://cli-chat-proxy.grok.com/v1/user?include=subscription";
1933
+
1934
+ try {
1935
+ const [billingRes, userRes] = await Promise.all([
1936
+ proxyAwareFetch(BILLING_URL, { method: "GET", headers }, proxyOptions),
1937
+ proxyAwareFetch(USER_URL, { method: "GET", headers }, proxyOptions).catch(() => null),
1938
+ ]);
1939
+
1940
+ if (billingRes.status === 401 || billingRes.status === 403) {
1941
+ return { message: "Grok CLI authentication expired. Please re-authorize." };
1942
+ }
1943
+
1944
+ if (!billingRes.ok) {
1945
+ const errText = await billingRes.text().catch(() => "");
1946
+ const trimmed = errText ? `: ${errText.slice(0, 200)}` : "";
1947
+ return { message: `Grok CLI billing API error (${billingRes.status})${trimmed}` };
1948
+ }
1949
+
1950
+ const billing = await billingRes.json().catch(() => null);
1951
+ if (!billing || typeof billing !== "object") {
1952
+ return { message: "Grok CLI billing response was not JSON." };
1953
+ }
1954
+
1955
+ let user = null;
1956
+ if (userRes?.ok) {
1957
+ user = await userRes.json().catch(() => null);
1958
+ }
1959
+
1960
+ const parsed = parseGrokCliBilling(billing, user);
1961
+
1962
+ if (!parsed.quotas || Object.keys(parsed.quotas).length === 0) {
1963
+ return {
1964
+ plan: parsed.plan,
1965
+ message:
1966
+ "Grok Build connected, but no credit allotment was returned. Free promo may be exhausted — upgrade at https://grok.com/supergrok or add credits at https://grok.com/?_s=usage.",
1967
+ quotas: {},
1968
+ };
1969
+ }
1970
+
1971
+ return {
1972
+ plan: parsed.plan,
1973
+ quotas: parsed.quotas,
1974
+ };
1975
+ } catch (error) {
1976
+ return { message: `Grok CLI usage error: ${error.message}` };
1977
+ }
1978
+ }
@@ -126,6 +126,20 @@ export function createSSEStream(options = {}) {
126
126
  }
127
127
  }
128
128
 
129
+ // Strip empty tool_calls arrays that break AI SDK reasoning tracking.
130
+ // Some providers (e.g. CodeBuddy CN) include `"tool_calls": []` in
131
+ // every streaming delta. @ai-sdk/openai-compatible checks
132
+ // `delta.tool_calls != null` — an empty array passes this check,
133
+ // causing premature `reasoning-end` on every chunk.
134
+ if (parsed?.choices) {
135
+ for (const choice of parsed.choices) {
136
+ if (choice.delta?.tool_calls && Array.isArray(choice.delta.tool_calls) && choice.delta.tool_calls.length === 0) {
137
+ delete choice.delta.tool_calls;
138
+ fieldsInjected = true;
139
+ }
140
+ }
141
+ }
142
+
129
143
  if (!hasValuableContent(parsed, FORMATS.OPENAI)) {
130
144
  continue;
131
145
  }
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Model-name thinking suffix helpers: `provider/model(high)` → clean model + effort.
3
+ * Lightweight port of 9router thinkingUnified strip/parse (no full capabilities matrix).
4
+ */
5
+
6
+ const KNOWN_LEVELS = new Set([
7
+ "none", "off", "auto", "minimal", "low", "medium", "high", "xhigh", "max", "on", "thinking",
8
+ ]);
9
+
10
+ /** Strip trailing `model(value)` → `model` (no-op when absent). */
11
+ export function stripThinkingSuffix(model) {
12
+ if (typeof model !== "string") return model;
13
+ const m = model.match(/^(.*)\([^()]+\)\s*$/);
14
+ return m ? m[1].trim() : model;
15
+ }
16
+
17
+ /**
18
+ * Parse `model(value)` → { cleanModel, level }.
19
+ * level is null when no valid suffix is present.
20
+ */
21
+ export function parseThinkingSuffix(model) {
22
+ if (typeof model !== "string") return { cleanModel: model, level: null };
23
+ const m = model.match(/^(.*)\(([^()]+)\)\s*$/);
24
+ if (!m) return { cleanModel: model, level: null };
25
+ const cleanModel = m[1].trim();
26
+ const raw = m[2].trim().toLowerCase();
27
+ if (!KNOWN_LEVELS.has(raw) && !/^\d+$/.test(raw)) {
28
+ return { cleanModel: model, level: null };
29
+ }
30
+ if (raw === "off") return { cleanModel, level: "none" };
31
+ if (raw === "on" || raw === "thinking") return { cleanModel, level: "high" };
32
+ return { cleanModel, level: raw };
33
+ }
34
+
35
+ /**
36
+ * Apply parsed suffix (or providerThinking.mode) onto body as reasoning_effort / thinking.
37
+ * Mutates a shallow copy of body; returns { body, cleanModel }.
38
+ */
39
+ export function applyThinkingFromModelAndSettings(model, body, providerThinking) {
40
+ const { cleanModel, level: suffixLevel } = parseThinkingSuffix(model);
41
+ let next = body && typeof body === "object" ? { ...body } : body || {};
42
+
43
+ const mode = suffixLevel || (providerThinking?.mode && providerThinking.mode !== "auto"
44
+ ? providerThinking.mode
45
+ : null);
46
+
47
+ if (!mode) {
48
+ return { body: next, cleanModel, applied: null };
49
+ }
50
+
51
+ if (mode === "on") {
52
+ if (!next.thinking) next = { ...next, thinking: { type: "enabled", budget_tokens: 10000 } };
53
+ } else if (mode === "off" || mode === "none") {
54
+ next = { ...next, thinking: { type: "disabled" } };
55
+ delete next.reasoning_effort;
56
+ if (next.reasoning && typeof next.reasoning === "object") {
57
+ next.reasoning = { ...next.reasoning, effort: "none" };
58
+ }
59
+ } else if (!next.reasoning_effort) {
60
+ next = { ...next, reasoning_effort: mode };
61
+ }
62
+
63
+ return { body: next, cleanModel, applied: mode };
64
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zevairouter",
3
- "version": "1.0.36",
3
+ "version": "1.0.38",
4
4
  "description": "ZevaiRouter - AI Router with provider automation, multi-account workflows, and quota tracking",
5
5
  "bin": {
6
6
  "zevai": "./cli/cli.js"
@@ -70,8 +70,8 @@
70
70
  "camoufox-js": "^0.11.0",
71
71
  "playwright": "^1.54.2"
72
72
  },
73
- "comment_better_sqlite3": "kept in optionalDependencies so npm install doesn't fail on systems without build tools \u2014 sql.js is used as fallback at runtime",
74
- "comment_camoufox_js": "optional stealth-Firefox engine for bulk-import; runtime auto-installs to user data dir if user picks Camoufox in the modal but the package is missing \u2014 Chromium remains the default and works without this dep",
73
+ "comment_better_sqlite3": "kept in optionalDependencies so npm install doesn't fail on systems without build tools sql.js is used as fallback at runtime",
74
+ "comment_camoufox_js": "optional stealth-Firefox engine for bulk-import; runtime auto-installs to user data dir if user picks Camoufox in the modal but the package is missing Chromium remains the default and works without this dep",
75
75
  "devDependencies": {
76
76
  "@tailwindcss/postcss": "^4.1.18",
77
77
  "esbuild": "^0.28.1",
Binary file
Binary file
Binary file
@@ -0,0 +1,4 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="104" height="104" viewBox="0 0 104 104">
2
+ <circle cx="52" cy="52" r="52" fill="#FF521D"/>
3
+ <path d="M68.4459 24.9438C69.8639 24.1762 71.6471 23.7178 73.4821 24.2163C73.8278 24.2966 74.1339 24.3916 74.4362 24.5024L75.9186 25.0464L75.5104 26.5727C75.3469 27.1827 75.202 27.723 75.0387 28.3325L74.6442 29.8042L73.1354 29.5972C73.0242 29.5819 72.9246 29.5753 72.8082 29.5747C72.2474 29.5865 71.7542 29.8645 71.2662 30.6772C70.8883 31.307 70.5939 32.1486 70.3815 33.1079C74.871 36.0331 77.8444 41.0994 77.8444 46.8638C77.8443 49.5292 77.2072 52.0505 76.0758 54.2798C71.5108 64.3996 54.1783 84.8815 23.4655 79.0083C21.8797 78.7048 20.9918 77.4165 20.902 76.1245C20.8141 74.8561 21.479 73.487 22.8981 72.8813C31.0698 69.394 35.5884 65.7091 38.5983 61.2329C41.6553 56.6866 43.2606 51.1907 45.3287 43.7251C46.7942 36.1645 53.4462 30.4547 61.4362 30.4546L61.8834 30.4604C62.4398 30.4755 62.9894 30.519 63.5309 30.5884C63.9515 29.7288 64.4424 28.8863 65.0211 28.0659L65.1745 27.8423C65.9623 26.731 67.1108 25.6667 68.4459 24.9438Z" fill="#18181A"/>
4
+ </svg>
@@ -1,6 +1,6 @@
1
1
  import PropTypes from "prop-types";
2
2
 
3
- export default function ModelRow({ model, fullModel, alias, copied, onCopy, testStatus, isCustom, isFree, onDeleteAlias, onTest, isTesting, onDisable }) {
3
+ export default function ModelRow({ model, fullModel, alias, copied, onCopy, testStatus, isCustom, isFree, onDeleteAlias, onTest, isTesting, onDisable, thinkingSuffix }) {
4
4
  const borderColor = testStatus === "ok"
5
5
  ? "border-green-500/40"
6
6
  : testStatus === "error"
@@ -13,6 +13,9 @@ export default function ModelRow({ model, fullModel, alias, copied, onCopy, test
13
13
  ? "#ef4444"
14
14
  : undefined;
15
15
 
16
+ // Copy/display includes optional thinking level: alias/model(high)
17
+ const displayModel = thinkingSuffix ? `${fullModel}(${thinkingSuffix})` : fullModel;
18
+
16
19
  return (
17
20
  <div className={`group min-w-0 max-w-full rounded-lg border px-3 py-2 ${borderColor} hover:bg-sidebar/50`}>
18
21
  <div className="flex min-w-0 items-start gap-2 sm:items-center">
@@ -23,7 +26,7 @@ export default function ModelRow({ model, fullModel, alias, copied, onCopy, test
23
26
  {testStatus === "ok" ? "check_circle" : testStatus === "error" ? "cancel" : "smart_toy"}
24
27
  </span>
25
28
  <div className="flex min-w-0 flex-1 flex-col gap-1">
26
- <code className="max-w-[72vw] truncate rounded bg-sidebar px-1.5 py-0.5 font-mono text-xs text-text-muted sm:max-w-[360px]">{fullModel}</code>
29
+ <code className="max-w-[72vw] truncate rounded bg-sidebar px-1.5 py-0.5 font-mono text-xs text-text-muted sm:max-w-[360px]">{displayModel}</code>
27
30
  {model.name && <span className="truncate pl-1 text-[9px] italic text-text-muted/70">{model.name}</span>}
28
31
  </div>
29
32
  {onTest && (
@@ -44,7 +47,7 @@ export default function ModelRow({ model, fullModel, alias, copied, onCopy, test
44
47
  )}
45
48
  <div className="relative shrink-0 group/btn">
46
49
  <button
47
- onClick={() => onCopy(fullModel, `model-${model.id}`)}
50
+ onClick={() => onCopy(displayModel, `model-${model.id}`)}
48
51
  className="rounded p-0.5 text-text-muted hover:bg-sidebar hover:text-primary"
49
52
  >
50
53
  <span className="material-symbols-outlined text-sm">
@@ -92,4 +95,5 @@ ModelRow.propTypes = {
92
95
  onTest: PropTypes.func,
93
96
  isTesting: PropTypes.bool,
94
97
  onDisable: PropTypes.func,
98
+ thinkingSuffix: PropTypes.string,
95
99
  };
@@ -5,7 +5,7 @@ import { useParams, useRouter } from "next/navigation";
5
5
  import Link from "next/link";
6
6
  import Image from "next/image";
7
7
  import { Card, Button, Badge, Input, Modal, CardSkeleton, OAuthModal, KiroOAuthWrapper, CursorAuthModal, IFlowCookieModal, CodeBuddyQuotaCookieModal, GitLabAuthModal, Toggle, Select, EditConnectionModal, NoAuthProxyCard, ConfirmModal, Pagination } from "@/shared/components";
8
- import { OAUTH_PROVIDERS, APIKEY_PROVIDERS, FREE_PROVIDERS, FREE_TIER_PROVIDERS, WEB_COOKIE_PROVIDERS, getProviderAlias, isOpenAICompatibleProvider, isAnthropicCompatibleProvider, AI_PROVIDERS, THINKING_CONFIG } from "@/shared/constants/providers";
8
+ import { OAUTH_PROVIDERS, APIKEY_PROVIDERS, FREE_PROVIDERS, FREE_TIER_PROVIDERS, WEB_COOKIE_PROVIDERS, getProviderAlias, isOpenAICompatibleProvider, isAnthropicCompatibleProvider, AI_PROVIDERS, THINKING_CONFIG, THINKING_LEVEL_PICKER_OPTIONS } from "@/shared/constants/providers";
9
9
  import { getModelsByProviderId } from "@/shared/constants/models";
10
10
  import { useCopyToClipboard } from "@/shared/hooks/useCopyToClipboard";
11
11
  import { translate } from "@/i18n/runtime";
@@ -1245,6 +1245,7 @@ export default function ProviderDetailPage() {
1245
1245
  isTesting={testingModelId === model.id}
1246
1246
  isCustom
1247
1247
  isFree={false}
1248
+ thinkingSuffix={thinkingMode && thinkingMode !== "auto" && thinkingMode !== "off" && thinkingMode !== "none" ? thinkingMode : null}
1248
1249
  />
1249
1250
  ))}
1250
1251
 
@@ -1269,6 +1270,7 @@ export default function ProviderDetailPage() {
1269
1270
  isTesting={testingModelId === model.id}
1270
1271
  isFree={model.isFree}
1271
1272
  onDisable={() => handleDisableModel(model.id)}
1273
+ thinkingSuffix={thinkingMode && thinkingMode !== "auto" && thinkingMode !== "off" && thinkingMode !== "none" ? thinkingMode : null}
1272
1274
  />
1273
1275
  );
1274
1276
  })}
@@ -1578,21 +1580,20 @@ export default function ProviderDetailPage() {
1578
1580
  )}
1579
1581
  </>
1580
1582
  )}
1581
- {/* Thinking config */}
1582
- {/* {thinkingConfig && (
1583
- <div className="flex items-center gap-2">
1584
- <span className="text-xs text-text-muted font-medium">Thinking</span>
1585
- <select
1586
- value={thinkingMode}
1587
- onChange={(e) => handleThinkingModeChange(e.target.value)}
1588
- className="text-xs px-2 py-1 border border-border rounded-md bg-background focus:outline-none focus:border-primary"
1589
- >
1590
- {thinkingConfig.options.map((opt) => (
1591
- <option key={opt} value={opt}>{opt.charAt(0).toUpperCase() + opt.slice(1)}</option>
1592
- ))}
1593
- </select>
1594
- </div>
1595
- )} */}
1583
+ {/* Thinking level picker — injects providerThinking + suffixes model copy as model(level) */}
1584
+ <div className="flex items-center gap-2">
1585
+ <span className="text-xs text-text-muted font-medium">Thinking</span>
1586
+ <select
1587
+ value={thinkingMode}
1588
+ onChange={(e) => handleThinkingModeChange(e.target.value)}
1589
+ className="text-xs px-2 py-1 border border-border rounded-md bg-background focus:outline-none focus:border-primary"
1590
+ title="Forces reasoning_effort on requests; model chips copy as alias/model(level)"
1591
+ >
1592
+ {(thinkingConfig?.options || THINKING_LEVEL_PICKER_OPTIONS).map((opt) => (
1593
+ <option key={opt} value={opt}>{opt.charAt(0).toUpperCase() + opt.slice(1)}</option>
1594
+ ))}
1595
+ </select>
1596
+ </div>
1596
1597
  {/* Round Robin toggle */}
1597
1598
  <div className="flex flex-wrap items-center gap-2">
1598
1599
  <span className="text-xs text-text-muted font-medium">Round Robin</span>
@@ -151,7 +151,7 @@ export async function GET(request, { params }) {
151
151
  : undefined;
152
152
 
153
153
  // Providers that don't use PKCE for device code
154
- const noPkceDeviceProviders = ["github", "kiro", "kimi-coding", "kilocode", "codebuddy", "codebuddy-cn", "qoder"];
154
+ const noPkceDeviceProviders = ["github", "kiro", "kimi-coding", "kilocode", "codebuddy", "codebuddy-cn", "qoder", "grok-cli"];
155
155
  let deviceData;
156
156
  if (noPkceDeviceProviders.includes(provider)) {
157
157
  deviceData = await requestDeviceCode(provider, undefined, deviceOptions);
@@ -232,9 +232,9 @@ export async function POST(request, { params }) {
232
232
  });
233
233
  }
234
234
 
235
- // Cline uses authorization_code without PKCE
236
- const noPkceExchangeProviders = ["cline"];
237
- if (!code || !redirectUri || (!codeVerifier && !noPkceExchangeProviders.includes(provider))) {
235
+ // Cline/ClinePass/Kimchi use authorization_code or browser_token without PKCE
236
+ const noPkceExchangeProviders = ["cline", "clinepass", "kimchi"];
237
+ if (!code || (!redirectUri && provider !== "kimchi") || (!codeVerifier && !noPkceExchangeProviders.includes(provider))) {
238
238
  return NextResponse.json({ error: "Missing required fields" }, { status: 400 });
239
239
  }
240
240
 
@@ -6,6 +6,8 @@ import { refreshGoogleToken, updateProviderCredentials } from "@/sse/services/to
6
6
  import { resolveOllamaLocalHost } from "open-sse/config/providers.js";
7
7
  import { resolveKiroModels } from "open-sse/services/kiroModels.js";
8
8
  import { resolveQoderModels } from "open-sse/services/qoderModels.js";
9
+ import { resolveKimchiModels } from "open-sse/services/kimchiModels.js";
10
+ import { getModelsByProviderId } from "open-sse/config/providerModels.js";
9
11
 
10
12
  const GEMINI_CLI_MODELS_URL = "https://cloudcode-pa.googleapis.com/v1internal:fetchAvailableModels";
11
13
 
@@ -241,6 +243,24 @@ const PROVIDER_MODELS_CONFIG = {
241
243
  nvidia: createOpenAIModelsConfig("https://integrate.api.nvidia.com/v1/models"),
242
244
  assemblyai: createOpenAIModelsConfig("https://api.assemblyai.com/v1/models"),
243
245
  "vercel-ai-gateway": createOpenAIModelsConfig("https://ai-gateway.vercel.sh/v1/models"),
246
+ "perplexity-agent": createOpenAIModelsConfig("https://api.perplexity.ai/v1/models"),
247
+ "grok-cli": createOpenAIModelsConfig("https://cli-chat-proxy.grok.com/v1/models"),
248
+ kimchi: {
249
+ customResolver: async (connection) => {
250
+ const result = await resolveKimchiModels({
251
+ accessToken: connection.accessToken,
252
+ apiKey: connection.apiKey,
253
+ providerSpecificData: connection.providerSpecificData || {},
254
+ }, { forceRefresh: true, log: console });
255
+ if (result?.models?.length) {
256
+ return { models: result.models };
257
+ }
258
+ return {
259
+ models: getModelsByProviderId("kimchi"),
260
+ warning: "Kimchi returned no live models; falling back to static catalog.",
261
+ };
262
+ }
263
+ },
244
264
 
245
265
  // Custom resolvers (non-OpenAI-shaped APIs / token-refresh flows)
246
266
  kiro: {