zevairouter 1.0.37 → 1.0.39

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 (541) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/cli/app/.next-cli-build/BUILD_ID +1 -1
  3. package/cli/app/.next-cli-build/app-path-routes-manifest.json +5 -5
  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.nft.json +1 -1
  36. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  37. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
  38. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  39. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
  40. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  41. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
  42. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  43. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
  44. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  45. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
  46. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  47. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
  48. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  49. package/cli/app/.next-cli-build/server/app/_global-error/page.js.nft.json +1 -1
  50. package/cli/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  51. package/cli/app/.next-cli-build/server/app/_global-error.html +1 -1
  52. package/cli/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  53. package/cli/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  54. package/cli/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  55. package/cli/app/.next-cli-build/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  56. package/cli/app/.next-cli-build/server/app/_global-error.segments/_head.segment.rsc +1 -1
  57. package/cli/app/.next-cli-build/server/app/_global-error.segments/_index.segment.rsc +1 -1
  58. package/cli/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  59. package/cli/app/.next-cli-build/server/app/_not-found/page.js.nft.json +1 -1
  60. package/cli/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  61. package/cli/app/.next-cli-build/server/app/_not-found.html +1 -1
  62. package/cli/app/.next-cli-build/server/app/_not-found.rsc +3 -3
  63. package/cli/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +3 -3
  64. package/cli/app/.next-cli-build/server/app/_not-found.segments/_head.segment.rsc +1 -1
  65. package/cli/app/.next-cli-build/server/app/_not-found.segments/_index.segment.rsc +3 -3
  66. package/cli/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  67. package/cli/app/.next-cli-build/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  68. package/cli/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  69. package/cli/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
  70. package/cli/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
  71. package/cli/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
  72. package/cli/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
  73. package/cli/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
  74. package/cli/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
  75. package/cli/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
  76. package/cli/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  77. package/cli/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
  78. package/cli/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
  79. package/cli/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js.nft.json +1 -1
  80. package/cli/app/.next-cli-build/server/app/api/cli-tools/codex-gateway/accounts/route.js.nft.json +1 -1
  81. package/cli/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
  82. package/cli/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
  83. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js.nft.json +1 -1
  84. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js.nft.json +1 -1
  85. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
  86. package/cli/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js.nft.json +1 -1
  87. package/cli/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
  88. package/cli/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js.nft.json +1 -1
  89. package/cli/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js.nft.json +1 -1
  90. package/cli/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js.nft.json +1 -1
  91. package/cli/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
  92. package/cli/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js.nft.json +1 -1
  93. package/cli/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
  94. package/cli/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
  95. package/cli/app/.next-cli-build/server/app/api/context/[id]/route.js.nft.json +1 -1
  96. package/cli/app/.next-cli-build/server/app/api/context/bulk/route.js.nft.json +1 -1
  97. package/cli/app/.next-cli-build/server/app/api/context/route.js.nft.json +1 -1
  98. package/cli/app/.next-cli-build/server/app/api/health/route.js.nft.json +1 -1
  99. package/cli/app/.next-cli-build/server/app/api/init/route.js +1 -1
  100. package/cli/app/.next-cli-build/server/app/api/init/route.js.nft.json +1 -1
  101. package/cli/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
  102. package/cli/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
  103. package/cli/app/.next-cli-build/server/app/api/locale/route.js.nft.json +1 -1
  104. package/cli/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
  105. package/cli/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
  106. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
  107. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
  108. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
  109. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
  110. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -1
  111. package/cli/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
  112. package/cli/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
  113. package/cli/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
  114. package/cli/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
  115. package/cli/app/.next-cli-build/server/app/api/models/route.js +1 -1
  116. package/cli/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
  117. package/cli/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
  118. package/cli/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
  119. package/cli/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js +1 -1
  120. package/cli/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  121. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/cancel/route.js +1 -1
  122. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  123. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/manual/[workerId]/route.js +1 -1
  124. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  125. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/route.js +1 -1
  126. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/route.js.nft.json +1 -1
  127. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/latest/route.js +1 -1
  128. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/latest/route.js.nft.json +1 -1
  129. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/route.js +1 -1
  130. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/route.js.nft.json +1 -1
  131. package/cli/app/.next-cli-build/server/app/api/oauth/autoclaw/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  132. package/cli/app/.next-cli-build/server/app/api/oauth/autoclaw/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  133. package/cli/app/.next-cli-build/server/app/api/oauth/autoclaw/bulk-import/[jobId]/route.js.nft.json +1 -1
  134. package/cli/app/.next-cli-build/server/app/api/oauth/autoclaw/bulk-import/latest/route.js.nft.json +1 -1
  135. package/cli/app/.next-cli-build/server/app/api/oauth/autoclaw/bulk-import/route.js.nft.json +1 -1
  136. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  137. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  138. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/route.js.nft.json +1 -1
  139. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/latest/route.js.nft.json +1 -1
  140. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/route.js.nft.json +1 -1
  141. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-token/route.js.nft.json +1 -1
  142. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/quota-cookie/route.js.nft.json +1 -1
  143. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  144. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  145. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/route.js.nft.json +1 -1
  146. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/latest/route.js.nft.json +1 -1
  147. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/route.js.nft.json +1 -1
  148. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-token/route.js.nft.json +1 -1
  149. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/quota-cookie/route.js.nft.json +1 -1
  150. package/cli/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js +1 -1
  151. package/cli/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
  152. package/cli/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
  153. package/cli/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js +1 -1
  154. package/cli/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  155. package/cli/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
  156. package/cli/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
  157. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -1
  158. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  159. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  160. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/route.js.nft.json +1 -1
  161. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/latest/route.js.nft.json +1 -1
  162. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/route.js.nft.json +1 -1
  163. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  164. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +1 -1
  165. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  166. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  167. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  168. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/route.js.nft.json +1 -1
  169. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/latest/route.js.nft.json +1 -1
  170. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/route.js.nft.json +1 -1
  171. package/cli/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
  172. package/cli/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  173. package/cli/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
  174. package/cli/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js.nft.json +1 -1
  175. package/cli/app/.next-cli-build/server/app/api/providers/[id]/models/route.js +1 -1
  176. package/cli/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  177. package/cli/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
  178. package/cli/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  179. package/cli/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
  180. package/cli/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  181. package/cli/app/.next-cli-build/server/app/api/providers/bulk-delete/route.js.nft.json +1 -1
  182. package/cli/app/.next-cli-build/server/app/api/providers/client/route.js +1 -1
  183. package/cli/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
  184. package/cli/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js.nft.json +1 -1
  185. package/cli/app/.next-cli-build/server/app/api/providers/route.js +1 -1
  186. package/cli/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
  187. package/cli/app/.next-cli-build/server/app/api/providers/suggested-models/route.js.nft.json +1 -1
  188. package/cli/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  189. package/cli/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
  190. package/cli/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
  191. package/cli/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
  192. package/cli/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
  193. package/cli/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
  194. package/cli/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
  195. package/cli/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
  196. package/cli/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
  197. package/cli/app/.next-cli-build/server/app/api/settings/proxy-test/route.js.nft.json +1 -1
  198. package/cli/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
  199. package/cli/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
  200. package/cli/app/.next-cli-build/server/app/api/shutdown/route.js.nft.json +1 -1
  201. package/cli/app/.next-cli-build/server/app/api/tags/route.js.nft.json +1 -1
  202. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
  203. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/route.js.nft.json +1 -1
  204. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
  205. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -1
  206. package/cli/app/.next-cli-build/server/app/api/translator/load/route.js.nft.json +1 -1
  207. package/cli/app/.next-cli-build/server/app/api/translator/save/route.js.nft.json +1 -1
  208. package/cli/app/.next-cli-build/server/app/api/translator/send/route.js +1 -1
  209. package/cli/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
  210. package/cli/app/.next-cli-build/server/app/api/translator/translate/route.js +1 -1
  211. package/cli/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
  212. package/cli/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  213. package/cli/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  214. package/cli/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
  215. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
  216. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
  217. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
  218. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
  219. package/cli/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js +1 -1
  220. package/cli/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  221. package/cli/app/.next-cli-build/server/app/api/usage/aggregate/route.js.nft.json +1 -1
  222. package/cli/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
  223. package/cli/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
  224. package/cli/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
  225. package/cli/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
  226. package/cli/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  227. package/cli/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
  228. package/cli/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
  229. package/cli/app/.next-cli-build/server/app/api/v1/api/chat/route.js +1 -1
  230. package/cli/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  231. package/cli/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  232. package/cli/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  233. package/cli/app/.next-cli-build/server/app/api/v1/audio/voices/route.js.nft.json +1 -1
  234. package/cli/app/.next-cli-build/server/app/api/v1/chat/completions/route.js +1 -1
  235. package/cli/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  236. package/cli/app/.next-cli-build/server/app/api/v1/embeddings/route.js +1 -1
  237. package/cli/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  238. package/cli/app/.next-cli-build/server/app/api/v1/images/generations/route.js +1 -1
  239. package/cli/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  240. package/cli/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -1
  241. package/cli/app/.next-cli-build/server/app/api/v1/messages/route.js +1 -1
  242. package/cli/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
  243. package/cli/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js +1 -1
  244. package/cli/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
  245. package/cli/app/.next-cli-build/server/app/api/v1/models/info/route.js.nft.json +1 -1
  246. package/cli/app/.next-cli-build/server/app/api/v1/models/route.js +1 -1
  247. package/cli/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
  248. package/cli/app/.next-cli-build/server/app/api/v1/responses/compact/route.js +1 -1
  249. package/cli/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
  250. package/cli/app/.next-cli-build/server/app/api/v1/responses/route.js +1 -1
  251. package/cli/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
  252. package/cli/app/.next-cli-build/server/app/api/v1/route.js +1 -1
  253. package/cli/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
  254. package/cli/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
  255. package/cli/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
  256. package/cli/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js +1 -1
  257. package/cli/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  258. package/cli/app/.next-cli-build/server/app/api/v1beta/models/route.js.nft.json +1 -1
  259. package/cli/app/.next-cli-build/server/app/api/version/route.js +1 -1
  260. package/cli/app/.next-cli-build/server/app/api/version/route.js.nft.json +1 -1
  261. package/cli/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
  262. package/cli/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
  263. package/cli/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
  264. package/cli/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +1 -1
  265. package/cli/app/.next-cli-build/server/app/callback/page.js.nft.json +1 -1
  266. package/cli/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  267. package/cli/app/.next-cli-build/server/app/callback.html +1 -1
  268. package/cli/app/.next-cli-build/server/app/callback.rsc +3 -3
  269. package/cli/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +3 -3
  270. package/cli/app/.next-cli-build/server/app/callback.segments/_head.segment.rsc +1 -1
  271. package/cli/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +3 -3
  272. package/cli/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +1 -1
  273. package/cli/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  274. package/cli/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
  275. package/cli/app/.next-cli-build/server/app/dashboard/automation.html +1 -1
  276. package/cli/app/.next-cli-build/server/app/dashboard/automation.rsc +5 -5
  277. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation/__PAGE__.segment.rsc +2 -2
  278. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation.segment.rsc +1 -1
  279. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  280. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  281. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_full.segment.rsc +5 -5
  282. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_head.segment.rsc +1 -1
  283. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_index.segment.rsc +3 -3
  284. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_tree.segment.rsc +1 -1
  285. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
  286. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +5 -5
  287. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
  288. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
  289. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  290. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  291. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +5 -5
  292. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
  293. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_index.segment.rsc +3 -3
  294. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
  295. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
  296. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +5 -5
  297. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
  298. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
  299. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  300. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  301. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +5 -5
  302. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
  303. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_index.segment.rsc +3 -3
  304. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
  305. package/cli/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
  306. package/cli/app/.next-cli-build/server/app/dashboard/combos.rsc +5 -5
  307. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
  308. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
  309. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  310. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  311. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +5 -5
  312. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
  313. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_index.segment.rsc +3 -3
  314. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
  315. package/cli/app/.next-cli-build/server/app/dashboard/context.html +1 -1
  316. package/cli/app/.next-cli-build/server/app/dashboard/context.rsc +5 -5
  317. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard/context/__PAGE__.segment.rsc +2 -2
  318. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard/context.segment.rsc +1 -1
  319. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  320. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  321. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_full.segment.rsc +5 -5
  322. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_head.segment.rsc +1 -1
  323. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_index.segment.rsc +3 -3
  324. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_tree.segment.rsc +1 -1
  325. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
  326. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.rsc +5 -5
  327. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
  328. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
  329. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  330. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  331. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +5 -5
  332. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
  333. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_index.segment.rsc +3 -3
  334. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
  335. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
  336. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +5 -5
  337. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
  338. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
  339. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
  340. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  341. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  342. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +5 -5
  343. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
  344. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +3 -3
  345. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +1 -1
  346. package/cli/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
  347. package/cli/app/.next-cli-build/server/app/dashboard/mitm.rsc +5 -5
  348. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
  349. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
  350. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  351. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  352. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +5 -5
  353. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
  354. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_index.segment.rsc +3 -3
  355. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
  356. package/cli/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
  357. package/cli/app/.next-cli-build/server/app/dashboard/profile.rsc +5 -5
  358. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
  359. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
  360. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  361. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  362. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +5 -5
  363. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
  364. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_index.segment.rsc +3 -3
  365. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
  366. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
  367. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.rsc +5 -5
  368. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
  369. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
  370. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  371. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  372. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  373. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +5 -5
  374. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
  375. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_index.segment.rsc +3 -3
  376. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
  377. package/cli/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
  378. package/cli/app/.next-cli-build/server/app/dashboard/providers.rsc +5 -5
  379. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
  380. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  381. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  382. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  383. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +5 -5
  384. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
  385. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_index.segment.rsc +3 -3
  386. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
  387. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
  388. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +5 -5
  389. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
  390. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
  391. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  392. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  393. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +5 -5
  394. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
  395. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +3 -3
  396. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
  397. package/cli/app/.next-cli-build/server/app/dashboard/quota.html +2 -2
  398. package/cli/app/.next-cli-build/server/app/dashboard/quota.rsc +6 -6
  399. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
  400. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
  401. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  402. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  403. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +6 -6
  404. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
  405. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_index.segment.rsc +3 -3
  406. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
  407. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js.nft.json +1 -1
  408. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  409. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  410. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +3 -3
  411. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +3 -3
  412. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  413. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +3 -3
  414. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
  415. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  416. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  417. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  418. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  419. package/cli/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
  420. package/cli/app/.next-cli-build/server/app/dashboard/translator.rsc +5 -5
  421. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
  422. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
  423. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  424. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  425. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +5 -5
  426. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
  427. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_index.segment.rsc +3 -3
  428. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
  429. package/cli/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
  430. package/cli/app/.next-cli-build/server/app/dashboard/usage.rsc +5 -5
  431. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
  432. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
  433. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  434. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  435. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +5 -5
  436. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
  437. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_index.segment.rsc +3 -3
  438. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
  439. package/cli/app/.next-cli-build/server/app/dashboard.html +1 -1
  440. package/cli/app/.next-cli-build/server/app/dashboard.rsc +5 -5
  441. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
  442. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  443. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  444. package/cli/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +5 -5
  445. package/cli/app/.next-cli-build/server/app/dashboard.segments/_head.segment.rsc +1 -1
  446. package/cli/app/.next-cli-build/server/app/dashboard.segments/_index.segment.rsc +3 -3
  447. package/cli/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +1 -1
  448. package/cli/app/.next-cli-build/server/app/index.html +1 -1
  449. package/cli/app/.next-cli-build/server/app/index.rsc +3 -3
  450. package/cli/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  451. package/cli/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +3 -3
  452. package/cli/app/.next-cli-build/server/app/index.segments/_head.segment.rsc +1 -1
  453. package/cli/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +3 -3
  454. package/cli/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +1 -1
  455. package/cli/app/.next-cli-build/server/app/landing/page.js.nft.json +1 -1
  456. package/cli/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  457. package/cli/app/.next-cli-build/server/app/landing.html +1 -1
  458. package/cli/app/.next-cli-build/server/app/landing.rsc +3 -3
  459. package/cli/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +3 -3
  460. package/cli/app/.next-cli-build/server/app/landing.segments/_head.segment.rsc +1 -1
  461. package/cli/app/.next-cli-build/server/app/landing.segments/_index.segment.rsc +3 -3
  462. package/cli/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +1 -1
  463. package/cli/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
  464. package/cli/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
  465. package/cli/app/.next-cli-build/server/app/login/page.js.nft.json +1 -1
  466. package/cli/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  467. package/cli/app/.next-cli-build/server/app/login.html +1 -1
  468. package/cli/app/.next-cli-build/server/app/login.rsc +4 -4
  469. package/cli/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +4 -4
  470. package/cli/app/.next-cli-build/server/app/login.segments/_head.segment.rsc +1 -1
  471. package/cli/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +3 -3
  472. package/cli/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +1 -1
  473. package/cli/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  474. package/cli/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
  475. package/cli/app/.next-cli-build/server/app/manifest.webmanifest/route.js.nft.json +1 -1
  476. package/cli/app/.next-cli-build/server/app/page.js.nft.json +1 -1
  477. package/cli/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  478. package/cli/app/.next-cli-build/server/app-paths-manifest.json +5 -5
  479. package/cli/app/.next-cli-build/server/chunks/2409.js +1 -1
  480. package/cli/app/.next-cli-build/server/chunks/2777.js +1 -1
  481. package/cli/app/.next-cli-build/server/chunks/3104.js +1 -1
  482. package/cli/app/.next-cli-build/server/chunks/3110.js +2 -2
  483. package/cli/app/.next-cli-build/server/chunks/318.js +7 -14
  484. package/cli/app/.next-cli-build/server/chunks/412.js +1 -1
  485. package/cli/app/.next-cli-build/server/chunks/4161.js +1 -1
  486. package/cli/app/.next-cli-build/server/chunks/4177.js +1 -1
  487. package/cli/app/.next-cli-build/server/chunks/4404.js +1 -1
  488. package/cli/app/.next-cli-build/server/chunks/4746.js +1 -1
  489. package/cli/app/.next-cli-build/server/chunks/5024.js +1 -1
  490. package/cli/app/.next-cli-build/server/chunks/5681.js +1 -1
  491. package/cli/app/.next-cli-build/server/chunks/6896.js +1 -1
  492. package/cli/app/.next-cli-build/server/chunks/7153.js +1 -1
  493. package/cli/app/.next-cli-build/server/chunks/8255.js +1 -1
  494. package/cli/app/.next-cli-build/server/chunks/8335.js +10 -0
  495. package/cli/app/.next-cli-build/server/chunks/8590.js +1 -1
  496. package/cli/app/.next-cli-build/server/chunks/891.js +1 -1
  497. package/cli/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  498. package/cli/app/.next-cli-build/server/pages/404.html +1 -1
  499. package/cli/app/.next-cli-build/server/pages/500.html +1 -1
  500. package/cli/app/.next-cli-build/static/chunks/1321-53a57ac6c933faea.js +1 -0
  501. package/cli/app/.next-cli-build/static/chunks/5497-2a485830a005737d.js +7 -0
  502. package/cli/app/package.json +3 -3
  503. package/cli/app/public/providers/clinepass.png +0 -0
  504. package/cli/app/public/providers/grok-cli.png +0 -0
  505. package/cli/app/public/providers/kimchi.png +0 -0
  506. package/cli/app/public/providers/kimchi.svg +4 -0
  507. package/cli/app/public/providers/perplexity-agent.png +0 -0
  508. package/cli/package.json +1 -1
  509. package/open-sse/config/appConstants.js +2 -0
  510. package/open-sse/config/providerModels.js +49 -0
  511. package/open-sse/config/providers.js +55 -0
  512. package/open-sse/executors/default.js +2 -1
  513. package/open-sse/executors/grok-cli.js +397 -0
  514. package/open-sse/executors/index.js +7 -0
  515. package/open-sse/executors/kimchi.js +123 -0
  516. package/open-sse/services/kimchiModels.js +176 -0
  517. package/open-sse/services/tokenRefresh.js +2 -0
  518. package/open-sse/services/usage.js +174 -0
  519. package/open-sse/utils/sessionManager.js +149 -0
  520. package/package.json +3 -3
  521. package/public/providers/clinepass.png +0 -0
  522. package/public/providers/grok-cli.png +0 -0
  523. package/public/providers/kimchi.png +0 -0
  524. package/public/providers/kimchi.svg +4 -0
  525. package/public/providers/perplexity-agent.png +0 -0
  526. package/src/app/api/oauth/[provider]/[action]/route.js +4 -4
  527. package/src/app/api/providers/[id]/models/route.js +20 -0
  528. package/src/app/api/providers/[id]/test/testUtils.js +33 -3
  529. package/src/app/api/v1/models/route.js +10 -1
  530. package/src/lib/network/connectionProxy.js +27 -0
  531. package/src/lib/oauth/constants/oauth.js +33 -0
  532. package/src/lib/oauth/providers.js +243 -0
  533. package/src/shared/components/NoAuthProxyCard.js +56 -8
  534. package/src/shared/components/OAuthModal.js +24 -7
  535. package/src/shared/constants/providers.js +82 -0
  536. package/src/sse/services/auth.js +11 -4
  537. package/cli/app/.next-cli-build/server/chunks/3188.js +0 -10
  538. package/cli/app/.next-cli-build/static/chunks/1321-1c8d1bf3bb5f6953.js +0 -1
  539. package/cli/app/.next-cli-build/static/chunks/5497-f496fb3861cb944d.js +0 -7
  540. /package/cli/app/.next-cli-build/static/{Jh26f1tVQgrKUbeB6pi5A → 9lvqG1bZ9y7Wzit-RVeNQ}/_buildManifest.js +0 -0
  541. /package/cli/app/.next-cli-build/static/{Jh26f1tVQgrKUbeB6pi5A → 9lvqG1bZ9y7Wzit-RVeNQ}/_ssgManifest.js +0 -0
@@ -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: {
@@ -16,10 +16,12 @@ import {
16
16
  QWEN_CONFIG,
17
17
  CLAUDE_CONFIG,
18
18
  CLINE_CONFIG,
19
+ KIMCHI_CONFIG,
19
20
  KILOCODE_CONFIG,
20
21
  CODEBUDDY_CONFIG,
21
22
  CODEBUDDY_CN_CONFIG,
22
23
  } from "@/lib/oauth/constants/oauth";
24
+ import { PROVIDERS } from "open-sse/config/providers.js";
23
25
  import { buildClineHeaders } from "@/shared/utils/clineAuth";
24
26
 
25
27
  // OAuth provider test endpoints
@@ -86,6 +88,34 @@ const OAUTH_TEST_CONFIG = {
86
88
  authPrefix: "Bearer ",
87
89
  },
88
90
  cline: { refreshable: true },
91
+ clinepass: { refreshable: true },
92
+ kimchi: {
93
+ url: KIMCHI_CONFIG.validationUrl || "https://api.cast.ai/v1/llm/openai/supported-providers",
94
+ method: "GET",
95
+ authHeader: "Authorization",
96
+ authPrefix: "Bearer ",
97
+ extraHeaders: {
98
+ Accept: "application/json",
99
+ "User-Agent": "kimchi/0.1.40",
100
+ },
101
+ refreshable: false,
102
+ },
103
+ "grok-cli": {
104
+ url: PROVIDERS["grok-cli"]?.userUrl || "https://cli-chat-proxy.grok.com/v1/user",
105
+ method: "GET",
106
+ authHeader: "Authorization",
107
+ authPrefix: "Bearer ",
108
+ extraHeaders: {
109
+ Accept: "application/json",
110
+ ...(PROVIDERS["grok-cli"]?.headers || {
111
+ "User-Agent": "grok-pager/0.2.93 grok-shell/0.2.93 (linux; x86_64)",
112
+ "x-xai-token-auth": "xai-grok-cli",
113
+ "x-grok-client-identifier": "grok-pager",
114
+ "x-grok-client-version": "0.2.93",
115
+ }),
116
+ },
117
+ refreshable: true,
118
+ },
89
119
  gitlab: {
90
120
  // Test by hitting the GitLab user API — requires api or read_user scope
91
121
  url: "https://gitlab.com/api/v4/user",
@@ -131,7 +161,7 @@ async function refreshOAuthToken(connection) {
131
161
  return { accessToken: data.access_token, expiresIn: data.expires_in, refreshToken: data.refresh_token || refreshToken };
132
162
  }
133
163
 
134
- if (provider === "codex") {
164
+ if (provider === "codex" || provider === "grok-cli" || provider === "xai") {
135
165
  return await refreshProviderCredentials(provider, connection, console);
136
166
  }
137
167
 
@@ -191,7 +221,7 @@ async function refreshOAuthToken(connection) {
191
221
  return { accessToken: data.access_token, expiresIn: data.expires_in, refreshToken: data.refresh_token || refreshToken };
192
222
  }
193
223
 
194
- if (provider === "cline") {
224
+ if (provider === "cline" || provider === "clinepass") {
195
225
  const response = await fetch(CLINE_CONFIG.refreshUrl, {
196
226
  method: "POST",
197
227
  headers: { "Content-Type": "application/json", Accept: "application/json" },
@@ -310,7 +340,7 @@ async function testOAuthConnection(connection, effectiveProxy = null) {
310
340
  return { valid: true, error: null, refreshed: false, newTokens: null };
311
341
  }
312
342
 
313
- if (connection.provider === "cline") {
343
+ if (connection.provider === "cline" || connection.provider === "clinepass") {
314
344
  const tryProbe = async (token) => {
315
345
  const res = await probeClineAccessToken(token);
316
346
  if (res.ok) return { valid: true, error: null, refreshed, newTokens };
@@ -9,6 +9,7 @@ import { getProviderConnections, getCombos, getCustomModels, getModelAliases } f
9
9
  import { getDisabledModels } from "@/lib/disabledModelsDb";
10
10
  import { resolveKiroModels } from "open-sse/services/kiroModels.js";
11
11
  import { resolveQoderModels } from "open-sse/services/qoderModels.js";
12
+ import { resolveKimchiModels } from "open-sse/services/kimchiModels.js";
12
13
  import { buildCodexGatewayModelEntries } from "@/sse/services/codexGateway.js";
13
14
 
14
15
  // Per-provider live model resolvers. Each receives a connection record and
@@ -35,7 +36,15 @@ const LIVE_MODEL_RESOLVERS = {
35
36
  return {
36
37
  models: result.models.map((m) => ({ id: m.id, name: m.name })),
37
38
  };
38
- }
39
+ },
40
+ kimchi: async (conn) => {
41
+ const result = await resolveKimchiModels({
42
+ accessToken: conn.accessToken,
43
+ apiKey: conn.apiKey,
44
+ providerSpecificData: conn.providerSpecificData || {},
45
+ }, { log: console });
46
+ return result?.models?.length ? { models: result.models } : null;
47
+ },
39
48
  };
40
49
 
41
50
  const parseOpenAIStyleModels = (data) => {
@@ -6,6 +6,33 @@ function normalizeString(value) {
6
6
  return String(value).trim();
7
7
  }
8
8
 
9
+ // ─── Proxy pool rotation state (in-memory) ─────────────────────────
10
+ const rotateState = new Map(); // providerId → { index }
11
+
12
+ /**
13
+ * Pick one proxy pool ID from a list based on strategy.
14
+ * round-robin: cycle sequentially (in-memory, resets on restart)
15
+ * random: uniform random pick
16
+ * none/single: return first entry
17
+ */
18
+ export function pickProxyPoolId(poolIds, strategy, providerId) {
19
+ if (!poolIds || poolIds.length === 0) return null;
20
+ if (poolIds.length === 1) return poolIds[0];
21
+
22
+ if (strategy === "round-robin") {
23
+ const state = rotateState.get(providerId) || { index: -1 };
24
+ state.index = (state.index + 1) % poolIds.length;
25
+ rotateState.set(providerId, state);
26
+ return poolIds[state.index];
27
+ }
28
+
29
+ if (strategy === "random") {
30
+ return poolIds[Math.floor(Math.random() * poolIds.length)];
31
+ }
32
+
33
+ return poolIds[0]; // "none" or unknown
34
+ }
35
+
9
36
  /**
10
37
  * Normalize legacy proxy configuration.
11
38
  */
@@ -232,6 +232,36 @@ export const CLINE_CONFIG = {
232
232
  refreshUrl: "https://api.cline.bot/api/v1/auth/refresh",
233
233
  };
234
234
 
235
+ // ClinePass OAuth — same endpoints as Cline
236
+ export const CLINEPASS_CONFIG = {
237
+ appBaseUrl: "https://app.cline.bot",
238
+ apiBaseUrl: "https://api.cline.bot",
239
+ authorizeUrl: "https://api.cline.bot/api/v1/auth/authorize",
240
+ tokenUrl: "https://api.cline.bot/api/v1/auth/token",
241
+ tokenExchangeUrl: "https://api.cline.bot/api/v1/auth/token",
242
+ refreshUrl: "https://api.cline.bot/api/v1/auth/refresh",
243
+ };
244
+
245
+ // Kimchi browser-token OAuth (callback ?token=... or pasted token)
246
+ export const KIMCHI_CONFIG = {
247
+ webAppUrl: "https://app.kimchi.dev",
248
+ validationUrl: "https://api.cast.ai/v1/llm/openai/supported-providers",
249
+ userInfoUrl: "https://app.kimchi.dev/api/v1/me",
250
+ modelsUrl: "https://llm.kimchi.dev/v1/models/metadata?include_in_cli=true",
251
+ };
252
+
253
+ // Grok CLI / Grok Build device-code OAuth (cli-chat-proxy.grok.com)
254
+ export const GROK_CLI_CONFIG = {
255
+ clientId: "b1a00492-073a-47ea-816f-4c329264a828",
256
+ deviceCodeUrl: "https://auth.x.ai/oauth2/device/code",
257
+ tokenUrl: "https://auth.x.ai/oauth2/token",
258
+ refreshUrl: "https://auth.x.ai/oauth2/token",
259
+ scope:
260
+ "openid profile email offline_access grok-cli:access api:access conversations:read conversations:write",
261
+ referrer: "grok-build",
262
+ refreshLeadMs: 5 * 60 * 1000,
263
+ };
264
+
235
265
  // GitLab Duo OAuth Configuration (Authorization Code Flow with PKCE)
236
266
  // Supports both OAuth (PKCE) and Personal Access Token (PAT) modes
237
267
  export const GITLAB_CONFIG = {
@@ -298,7 +328,10 @@ export const PROVIDERS = {
298
328
  KIMI_CODING: "kimi-coding",
299
329
  KILOCODE: "kilocode",
300
330
  CLINE: "cline",
331
+ CLINEPASS: "clinepass",
301
332
  GITLAB: "gitlab",
302
333
  CODEBUDDY: "codebuddy",
303
334
  CODEBUDDY_CN: "codebuddy-cn",
335
+ KIMCHI: "kimchi",
336
+ GROK_CLI: "grok-cli",
304
337
  };
@@ -22,6 +22,9 @@ import {
22
22
  KIMI_CODING_CONFIG,
23
23
  KILOCODE_CONFIG,
24
24
  CLINE_CONFIG,
25
+ CLINEPASS_CONFIG,
26
+ KIMCHI_CONFIG,
27
+ GROK_CLI_CONFIG,
25
28
  GITLAB_CONFIG,
26
29
  CODEBUDDY_CONFIG,
27
30
  CODEBUDDY_CN_CONFIG,
@@ -1173,6 +1176,246 @@ const PROVIDERS = {
1173
1176
  providerSpecificData: { firstName: tokens.firstName, lastName: tokens.lastName },
1174
1177
  }),
1175
1178
  },
1179
+ // ClinePass — same OAuth as Cline, separate connection catalog
1180
+ clinepass: {
1181
+ config: CLINEPASS_CONFIG,
1182
+ flowType: "authorization_code",
1183
+ buildAuthUrl: (config, redirectUri) => {
1184
+ const params = new URLSearchParams({
1185
+ client_type: "extension",
1186
+ callback_url: redirectUri,
1187
+ redirect_uri: redirectUri,
1188
+ });
1189
+ return `${config.authorizeUrl}?${params.toString()}`;
1190
+ },
1191
+ exchangeToken: async (config, code, redirectUri) => {
1192
+ try {
1193
+ let base64 = code;
1194
+ const padding = 4 - (base64.length % 4);
1195
+ if (padding !== 4) base64 += "=".repeat(padding);
1196
+ const decoded = Buffer.from(base64, "base64").toString("utf-8");
1197
+ const lastBrace = decoded.lastIndexOf("}");
1198
+ if (lastBrace === -1) throw new Error("No JSON found in decoded code");
1199
+ const tokenData = JSON.parse(decoded.substring(0, lastBrace + 1));
1200
+ return {
1201
+ access_token: tokenData.accessToken,
1202
+ refresh_token: tokenData.refreshToken,
1203
+ email: tokenData.email,
1204
+ firstName: tokenData.firstName,
1205
+ lastName: tokenData.lastName,
1206
+ expires_at: tokenData.expiresAt,
1207
+ };
1208
+ } catch (e) {
1209
+ const tokenUrl = config.tokenUrl || config.tokenExchangeUrl;
1210
+ const response = await fetch(tokenUrl, {
1211
+ method: "POST",
1212
+ headers: { "Content-Type": "application/json", Accept: "application/json" },
1213
+ body: JSON.stringify({ grant_type: "authorization_code", code, client_type: "extension", redirect_uri: redirectUri }),
1214
+ });
1215
+ if (!response.ok) {
1216
+ const error = await response.text();
1217
+ throw new Error(`ClinePass token exchange failed: ${error}`);
1218
+ }
1219
+ const data = await response.json();
1220
+ return {
1221
+ access_token: data.data?.accessToken || data.accessToken,
1222
+ refresh_token: data.data?.refreshToken || data.refreshToken,
1223
+ email: data.data?.userInfo?.email || "",
1224
+ expires_at: data.data?.expiresAt || data.expiresAt,
1225
+ };
1226
+ }
1227
+ },
1228
+ mapTokens: (tokens) => ({
1229
+ accessToken: tokens.access_token,
1230
+ refreshToken: tokens.refresh_token,
1231
+ expiresIn: tokens.expires_at
1232
+ ? Math.floor((new Date(tokens.expires_at).getTime() - Date.now()) / 1000)
1233
+ : 3600,
1234
+ email: tokens.email,
1235
+ providerSpecificData: { firstName: tokens.firstName, lastName: tokens.lastName },
1236
+ }),
1237
+ },
1238
+ // Grok CLI / Grok Build — device code flow to auth.x.ai
1239
+ "grok-cli": {
1240
+ config: GROK_CLI_CONFIG,
1241
+ flowType: "device_code",
1242
+ requestDeviceCode: async (config) => {
1243
+ const body = new URLSearchParams({
1244
+ client_id: config.clientId,
1245
+ scope: config.scope,
1246
+ });
1247
+ if (config.referrer) body.set("referrer", config.referrer);
1248
+
1249
+ const response = await fetch(config.deviceCodeUrl, {
1250
+ method: "POST",
1251
+ headers: {
1252
+ "Content-Type": "application/x-www-form-urlencoded",
1253
+ Accept: "application/json",
1254
+ "User-Agent": "grok-pager/0.2.93 grok-shell/0.2.93 (linux; x86_64)",
1255
+ },
1256
+ body,
1257
+ });
1258
+
1259
+ if (!response.ok) {
1260
+ const error = await response.text();
1261
+ throw new Error(`Grok CLI device code request failed: ${error}`);
1262
+ }
1263
+
1264
+ return await response.json();
1265
+ },
1266
+ pollToken: async (config, deviceCode) => {
1267
+ const response = await fetch(config.tokenUrl, {
1268
+ method: "POST",
1269
+ headers: {
1270
+ "Content-Type": "application/x-www-form-urlencoded",
1271
+ Accept: "application/json",
1272
+ "User-Agent": "grok-pager/0.2.93 grok-shell/0.2.93 (linux; x86_64)",
1273
+ },
1274
+ body: new URLSearchParams({
1275
+ grant_type: "urn:ietf:params:oauth:grant-type:device_code",
1276
+ device_code: deviceCode,
1277
+ client_id: config.clientId,
1278
+ }),
1279
+ });
1280
+
1281
+ let data;
1282
+ try {
1283
+ data = await response.json();
1284
+ } catch {
1285
+ const text = await response.text();
1286
+ data = { error: "invalid_response", error_description: text };
1287
+ }
1288
+
1289
+ const pending =
1290
+ data?.error === "authorization_pending" ||
1291
+ data?.error === "slow_down";
1292
+ return {
1293
+ ok: response.ok || pending,
1294
+ data,
1295
+ };
1296
+ },
1297
+ postExchange: async (tokens) => {
1298
+ try {
1299
+ const res = await fetch("https://cli-chat-proxy.grok.com/v1/user", {
1300
+ headers: {
1301
+ Authorization: `Bearer ${tokens.access_token}`,
1302
+ Accept: "application/json",
1303
+ "User-Agent": "grok-pager/0.2.93 grok-shell/0.2.93 (linux; x86_64)",
1304
+ "x-xai-token-auth": "xai-grok-cli",
1305
+ "x-grok-client-version": "0.2.93",
1306
+ },
1307
+ });
1308
+ if (res.ok) return { user: await res.json() };
1309
+ } catch {
1310
+ /* ignore */
1311
+ }
1312
+ return { user: null };
1313
+ },
1314
+ mapTokens: (tokens, extra) => {
1315
+ const email =
1316
+ decodeXaiIdTokenEmail(tokens.id_token) ||
1317
+ extractEmailFromAccessToken(tokens.access_token) ||
1318
+ extra?.user?.email ||
1319
+ null;
1320
+ const userId =
1321
+ extra?.user?.userId ||
1322
+ extra?.user?.principalId ||
1323
+ null;
1324
+ const displayName = [extra?.user?.firstName, extra?.user?.lastName]
1325
+ .filter(Boolean)
1326
+ .join(" ")
1327
+ .trim() || null;
1328
+
1329
+ return {
1330
+ accessToken: tokens.access_token,
1331
+ refreshToken: tokens.refresh_token || null,
1332
+ expiresIn: tokens.expires_in,
1333
+ scope: tokens.scope,
1334
+ email: email || undefined,
1335
+ displayName: displayName || undefined,
1336
+ providerSpecificData: {
1337
+ authMethod: "device_code",
1338
+ idToken: tokens.id_token || null,
1339
+ email: email || null,
1340
+ userId,
1341
+ hasGrokCodeAccess: extra?.user?.hasGrokCodeAccess ?? null,
1342
+ subscriptionTier: extra?.user?.subscriptionTier ?? null,
1343
+ },
1344
+ };
1345
+ },
1346
+ },
1347
+ // Kimchi — browser token callback (token query param or pasted token)
1348
+ kimchi: {
1349
+ config: KIMCHI_CONFIG,
1350
+ flowType: "browser_token",
1351
+ buildAuthUrl: (config, redirectUri, state) => {
1352
+ const baseUrl = (config.webAppUrl || "https://app.kimchi.dev").replace(/\/+$/, "");
1353
+ const params = new URLSearchParams({
1354
+ callback: redirectUri,
1355
+ state,
1356
+ });
1357
+ return `${baseUrl}/cli-auth?${params.toString()}`;
1358
+ },
1359
+ exchangeToken: async (config, token) => {
1360
+ const accessToken = String(token || "").trim();
1361
+ if (!accessToken) {
1362
+ throw new Error("Missing Kimchi token");
1363
+ }
1364
+
1365
+ const validationUrl = config.validationUrl || "https://api.cast.ai/v1/llm/openai/supported-providers";
1366
+ const validationRes = await fetch(validationUrl, {
1367
+ method: "GET",
1368
+ headers: {
1369
+ Accept: "application/json",
1370
+ Authorization: `Bearer ${accessToken}`,
1371
+ },
1372
+ });
1373
+ if (!validationRes.ok) {
1374
+ throw new Error(`Kimchi token validation failed: ${validationRes.status}`);
1375
+ }
1376
+
1377
+ let userInfo = {};
1378
+ if (config.userInfoUrl) {
1379
+ try {
1380
+ const userRes = await fetch(config.userInfoUrl, {
1381
+ method: "GET",
1382
+ headers: {
1383
+ Accept: "application/json",
1384
+ Authorization: `Bearer ${accessToken}`,
1385
+ },
1386
+ });
1387
+ if (userRes.ok) {
1388
+ userInfo = await userRes.json();
1389
+ }
1390
+ } catch {
1391
+ userInfo = {};
1392
+ }
1393
+ }
1394
+
1395
+ return {
1396
+ access_token: accessToken,
1397
+ token_type: "Bearer",
1398
+ _kimchiUser: userInfo,
1399
+ };
1400
+ },
1401
+ mapTokens: (tokens) => {
1402
+ const user = tokens._kimchiUser || {};
1403
+ const userId = user.id ? String(user.id) : "";
1404
+ const username = user.username || "";
1405
+ const email = user.email || (userId ? `kimchi-user-${userId}` : null);
1406
+ return {
1407
+ accessToken: tokens.access_token,
1408
+ refreshToken: null,
1409
+ email,
1410
+ displayName: user.name || username || null,
1411
+ providerSpecificData: {
1412
+ authMethod: "browser_token",
1413
+ userId,
1414
+ username,
1415
+ },
1416
+ };
1417
+ },
1418
+ },
1176
1419
  // GitLab Duo - Authorization Code Flow with PKCE
1177
1420
  // Supports two login modes via loginMode metadata: "oauth" (default) or "pat"
1178
1421
  gitlab: {
@@ -1,16 +1,22 @@
1
1
  "use client";
2
2
 
3
- import { useEffect, useState } from "react";
3
+ import { useCallback, useEffect, useState } from "react";
4
4
  import PropTypes from "prop-types";
5
5
  import Card from "./Card";
6
6
  import Select from "./Select";
7
7
  import Badge from "./Badge";
8
8
 
9
9
  const NONE_PROXY_POOL_VALUE = "__none__";
10
+ const STRATEGIES = [
11
+ { value: "none", label: "None (single pool)" },
12
+ { value: "round-robin", label: "Round-robin" },
13
+ { value: "random", label: "Random" },
14
+ ];
10
15
 
11
16
  export default function NoAuthProxyCard({ providerId }) {
12
17
  const [proxyPools, setProxyPools] = useState([]);
13
18
  const [proxyPoolId, setProxyPoolId] = useState(NONE_PROXY_POOL_VALUE);
19
+ const [rotateStrategy, setRotateStrategy] = useState("none");
14
20
  const [saving, setSaving] = useState(false);
15
21
  const [savedFlash, setSavedFlash] = useState(false);
16
22
 
@@ -24,20 +30,22 @@ export default function NoAuthProxyCard({ providerId }) {
24
30
  setProxyPools(poolData.proxyPools || []);
25
31
  const override = (settingsData.providerStrategies || {})[providerId] || {};
26
32
  setProxyPoolId(override.proxyPoolId || NONE_PROXY_POOL_VALUE);
33
+ setRotateStrategy(override.rotateStrategy || "none");
27
34
  }).catch(() => {});
28
35
  return () => { cancelled = true; };
29
36
  }, [providerId]);
30
37
 
31
- const handleChange = async (newValue) => {
32
- setProxyPoolId(newValue);
38
+ const save = useCallback(async (poolId, strategy) => {
33
39
  setSaving(true);
34
40
  try {
35
41
  const res = await fetch("/api/settings", { cache: "no-store" });
36
42
  const data = res.ok ? await res.json() : {};
37
43
  const current = data.providerStrategies || {};
38
44
  const override = { ...(current[providerId] || {}) };
39
- if (newValue === NONE_PROXY_POOL_VALUE) delete override.proxyPoolId;
40
- else override.proxyPoolId = newValue;
45
+ if (poolId === NONE_PROXY_POOL_VALUE) delete override.proxyPoolId;
46
+ else override.proxyPoolId = poolId;
47
+ if (strategy === "none") delete override.rotateStrategy;
48
+ else override.rotateStrategy = strategy;
41
49
  const updated = { ...current };
42
50
  if (Object.keys(override).length === 0) delete updated[providerId];
43
51
  else updated[providerId] = override;
@@ -49,12 +57,25 @@ export default function NoAuthProxyCard({ providerId }) {
49
57
  setSavedFlash(true);
50
58
  setTimeout(() => setSavedFlash(false), 1500);
51
59
  } catch (e) {
52
- console.log("Save proxyPoolId error:", e);
60
+ console.log("Save proxy config error:", e);
53
61
  } finally {
54
62
  setSaving(false);
55
63
  }
64
+ }, [providerId]);
65
+
66
+ const handlePoolChange = (newPoolId) => {
67
+ setProxyPoolId(newPoolId);
68
+ save(newPoolId, rotateStrategy);
69
+ };
70
+
71
+ const handleStrategyChange = (newStrategy) => {
72
+ setRotateStrategy(newStrategy);
73
+ save(proxyPoolId, newStrategy);
56
74
  };
57
75
 
76
+ const canRotate = proxyPools.length >= 2;
77
+ const isRotation = rotateStrategy !== "none";
78
+
58
79
  return (
59
80
  <Card>
60
81
  <div className="flex items-center gap-3 mb-4">
@@ -67,16 +88,43 @@ export default function NoAuthProxyCard({ providerId }) {
67
88
  </div>
68
89
  {savedFlash && <Badge variant="success" size="sm">Saved</Badge>}
69
90
  </div>
91
+
70
92
  <Select
71
93
  label="Proxy Pool"
72
94
  value={proxyPoolId}
73
- onChange={(e) => handleChange(e.target.value)}
74
- disabled={saving}
95
+ onChange={(e) => handlePoolChange(e.target.value)}
96
+ disabled={saving || isRotation}
75
97
  options={[
76
98
  { value: NONE_PROXY_POOL_VALUE, label: "None (direct)" },
77
99
  ...proxyPools.map((pool) => ({ value: pool.id, label: pool.name })),
78
100
  ]}
101
+ hint={isRotation ? "Pool selector is ignored when rotation is active — all active pools are used." : undefined}
79
102
  />
103
+
104
+ <div className="flex flex-col gap-2 mt-4">
105
+ <label className="text-sm font-medium text-text-main">Rotation Strategy</label>
106
+ <select
107
+ value={rotateStrategy}
108
+ onChange={(e) => handleStrategyChange(e.target.value)}
109
+ disabled={saving}
110
+ className="py-2 px-3 text-sm text-text-main bg-white dark:bg-white/5 border border-black/10 dark:border-white/10 rounded-md focus:ring-1 focus:ring-primary/30 focus:border-primary/50 focus:outline-none transition-all disabled:opacity-50"
111
+ >
112
+ {STRATEGIES.map((s) => (
113
+ <option key={s.value} value={s.value} disabled={s.value !== "none" && !canRotate}>
114
+ {s.label}
115
+ </option>
116
+ ))}
117
+ </select>
118
+ <p className="text-xs text-text-muted">
119
+ {!canRotate
120
+ ? `Need at least 2 active proxy pools for rotation.`
121
+ : isRotation
122
+ ? rotateStrategy === "round-robin"
123
+ ? `Rotating through all ${proxyPools.length} active pools in order. State is in-memory (resets on restart).`
124
+ : `Picking a random pool from ${proxyPools.length} active pools each request.`
125
+ : `Uses the selected pool above. Set to Round-robin or Random to rotate across all active pools.`}
126
+ </p>
127
+ </div>
80
128
  </Card>
81
129
  );
82
130
  }