zevairouter 1.0.90 → 1.0.92

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 (564) hide show
  1. package/cli/app/.next-cli-build/BUILD_ID +1 -1
  2. package/cli/app/.next-cli-build/app-path-routes-manifest.json +10 -10
  3. package/cli/app/.next-cli-build/build-manifest.json +2 -2
  4. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/automation/page.js.nft.json +1 -1
  5. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/automation/page_client-reference-manifest.js +1 -1
  6. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -1
  7. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  8. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
  9. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  10. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  11. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  12. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
  13. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  14. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
  15. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  16. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/context/page.js.nft.json +1 -1
  17. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/context/page_client-reference-manifest.js +1 -1
  18. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  19. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  20. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js.nft.json +1 -1
  21. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  22. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js.nft.json +1 -1
  23. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  24. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js.nft.json +1 -1
  25. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  26. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js.nft.json +1 -1
  27. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  28. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -1
  29. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  30. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  31. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  32. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/playground/page.js.nft.json +1 -1
  33. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/playground/page_client-reference-manifest.js +1 -1
  34. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
  35. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  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/pxpipe/page.js.nft.json +1 -1
  45. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
  46. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js +1 -1
  47. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
  48. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  49. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/terminal/page.js.nft.json +1 -1
  50. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/terminal/page_client-reference-manifest.js +1 -1
  51. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page.js.nft.json +1 -1
  52. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  53. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
  54. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  55. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
  56. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  57. package/cli/app/.next-cli-build/server/app/_global-error/page.js.nft.json +1 -1
  58. package/cli/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  59. package/cli/app/.next-cli-build/server/app/_global-error.html +1 -1
  60. package/cli/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  61. package/cli/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  62. package/cli/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  63. package/cli/app/.next-cli-build/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  64. package/cli/app/.next-cli-build/server/app/_global-error.segments/_head.segment.rsc +1 -1
  65. package/cli/app/.next-cli-build/server/app/_global-error.segments/_index.segment.rsc +1 -1
  66. package/cli/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  67. package/cli/app/.next-cli-build/server/app/_not-found/page.js.nft.json +1 -1
  68. package/cli/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  69. package/cli/app/.next-cli-build/server/app/_not-found.html +1 -1
  70. package/cli/app/.next-cli-build/server/app/_not-found.rsc +3 -3
  71. package/cli/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +3 -3
  72. package/cli/app/.next-cli-build/server/app/_not-found.segments/_head.segment.rsc +1 -1
  73. package/cli/app/.next-cli-build/server/app/_not-found.segments/_index.segment.rsc +3 -3
  74. package/cli/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  75. package/cli/app/.next-cli-build/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  76. package/cli/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  77. package/cli/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
  78. package/cli/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
  79. package/cli/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
  80. package/cli/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
  81. package/cli/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
  82. package/cli/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
  83. package/cli/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
  84. package/cli/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  85. package/cli/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
  86. package/cli/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
  87. package/cli/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js.nft.json +1 -1
  88. package/cli/app/.next-cli-build/server/app/api/cli-tools/codex-gateway/accounts/route.js.nft.json +1 -1
  89. package/cli/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
  90. package/cli/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
  91. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js.nft.json +1 -1
  92. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js.nft.json +1 -1
  93. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
  94. package/cli/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js.nft.json +1 -1
  95. package/cli/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
  96. package/cli/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js.nft.json +1 -1
  97. package/cli/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js.nft.json +1 -1
  98. package/cli/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js.nft.json +1 -1
  99. package/cli/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
  100. package/cli/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js.nft.json +1 -1
  101. package/cli/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
  102. package/cli/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
  103. package/cli/app/.next-cli-build/server/app/api/context/[id]/route.js.nft.json +1 -1
  104. package/cli/app/.next-cli-build/server/app/api/context/bulk/route.js.nft.json +1 -1
  105. package/cli/app/.next-cli-build/server/app/api/context/route.js.nft.json +1 -1
  106. package/cli/app/.next-cli-build/server/app/api/dashboard/chat/completions/route.js.nft.json +1 -1
  107. package/cli/app/.next-cli-build/server/app/api/headroom/extras/route.js.nft.json +1 -1
  108. package/cli/app/.next-cli-build/server/app/api/headroom/proxy/[...path]/route.js.nft.json +1 -1
  109. package/cli/app/.next-cli-build/server/app/api/headroom/restart/route.js.nft.json +1 -1
  110. package/cli/app/.next-cli-build/server/app/api/headroom/start/route.js.nft.json +1 -1
  111. package/cli/app/.next-cli-build/server/app/api/headroom/status/route.js.nft.json +1 -1
  112. package/cli/app/.next-cli-build/server/app/api/headroom/stop/route.js.nft.json +1 -1
  113. package/cli/app/.next-cli-build/server/app/api/health/route.js.nft.json +1 -1
  114. package/cli/app/.next-cli-build/server/app/api/init/route.js.nft.json +1 -1
  115. package/cli/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
  116. package/cli/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
  117. package/cli/app/.next-cli-build/server/app/api/locale/route.js.nft.json +1 -1
  118. package/cli/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
  119. package/cli/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
  120. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
  121. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
  122. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
  123. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
  124. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -1
  125. package/cli/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
  126. package/cli/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
  127. package/cli/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
  128. package/cli/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
  129. package/cli/app/.next-cli-build/server/app/api/models/route.js +1 -1
  130. package/cli/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
  131. package/cli/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
  132. package/cli/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
  133. package/cli/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  134. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  135. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  136. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/route.js.nft.json +1 -1
  137. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/latest/route.js.nft.json +1 -1
  138. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/route.js.nft.json +1 -1
  139. package/cli/app/.next-cli-build/server/app/api/oauth/autoclaw/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  140. package/cli/app/.next-cli-build/server/app/api/oauth/autoclaw/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  141. package/cli/app/.next-cli-build/server/app/api/oauth/autoclaw/bulk-import/[jobId]/route.js.nft.json +1 -1
  142. package/cli/app/.next-cli-build/server/app/api/oauth/autoclaw/bulk-import/latest/route.js.nft.json +1 -1
  143. package/cli/app/.next-cli-build/server/app/api/oauth/autoclaw/bulk-import/route.js.nft.json +1 -1
  144. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/cancel/route.js +1 -1
  145. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  146. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/manual/[workerId]/route.js +1 -1
  147. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  148. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/route.js +1 -1
  149. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/route.js.nft.json +1 -1
  150. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/latest/route.js +1 -1
  151. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/latest/route.js.nft.json +1 -1
  152. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/route.js +1 -1
  153. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/route.js.nft.json +1 -1
  154. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  155. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  156. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/route.js.nft.json +1 -1
  157. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/latest/route.js.nft.json +1 -1
  158. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/route.js.nft.json +1 -1
  159. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-token/route.js.nft.json +1 -1
  160. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/quota-cookie/route.js.nft.json +1 -1
  161. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  162. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  163. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/route.js.nft.json +1 -1
  164. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/latest/route.js.nft.json +1 -1
  165. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/route.js.nft.json +1 -1
  166. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-token/route.js.nft.json +1 -1
  167. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/quota-cookie/route.js.nft.json +1 -1
  168. package/cli/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
  169. package/cli/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
  170. package/cli/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  171. package/cli/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
  172. package/cli/app/.next-cli-build/server/app/api/oauth/grok-cli/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  173. package/cli/app/.next-cli-build/server/app/api/oauth/grok-cli/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  174. package/cli/app/.next-cli-build/server/app/api/oauth/grok-cli/bulk-import/[jobId]/route.js.nft.json +1 -1
  175. package/cli/app/.next-cli-build/server/app/api/oauth/grok-cli/bulk-import/latest/route.js.nft.json +1 -1
  176. package/cli/app/.next-cli-build/server/app/api/oauth/grok-cli/bulk-import/route.js.nft.json +1 -1
  177. package/cli/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
  178. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -1
  179. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  180. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  181. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/route.js.nft.json +1 -1
  182. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/latest/route.js.nft.json +1 -1
  183. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/route.js.nft.json +1 -1
  184. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  185. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +1 -1
  186. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  187. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  188. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  189. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/route.js.nft.json +1 -1
  190. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/latest/route.js.nft.json +1 -1
  191. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/route.js.nft.json +1 -1
  192. package/cli/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
  193. package/cli/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  194. package/cli/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
  195. package/cli/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js.nft.json +1 -1
  196. package/cli/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  197. package/cli/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
  198. package/cli/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  199. package/cli/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
  200. package/cli/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  201. package/cli/app/.next-cli-build/server/app/api/providers/bulk-delete/route.js.nft.json +1 -1
  202. package/cli/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
  203. package/cli/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js.nft.json +1 -1
  204. package/cli/app/.next-cli-build/server/app/api/providers/route.js +1 -1
  205. package/cli/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
  206. package/cli/app/.next-cli-build/server/app/api/providers/suggested-models/route.js.nft.json +1 -1
  207. package/cli/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  208. package/cli/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
  209. package/cli/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
  210. package/cli/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
  211. package/cli/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
  212. package/cli/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
  213. package/cli/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
  214. package/cli/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
  215. package/cli/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
  216. package/cli/app/.next-cli-build/server/app/api/pxpipe/health/route.js.nft.json +1 -1
  217. package/cli/app/.next-cli-build/server/app/api/pxpipe/install/route.js.nft.json +1 -1
  218. package/cli/app/.next-cli-build/server/app/api/pxpipe/restart/route.js.nft.json +1 -1
  219. package/cli/app/.next-cli-build/server/app/api/pxpipe/start/route.js.nft.json +1 -1
  220. package/cli/app/.next-cli-build/server/app/api/pxpipe/stats/route.js.nft.json +1 -1
  221. package/cli/app/.next-cli-build/server/app/api/pxpipe/status/route.js.nft.json +1 -1
  222. package/cli/app/.next-cli-build/server/app/api/pxpipe/stop/route.js.nft.json +1 -1
  223. package/cli/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
  224. package/cli/app/.next-cli-build/server/app/api/settings/proxy-test/route.js.nft.json +1 -1
  225. package/cli/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
  226. package/cli/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
  227. package/cli/app/.next-cli-build/server/app/api/shutdown/route.js.nft.json +1 -1
  228. package/cli/app/.next-cli-build/server/app/api/tags/route.js.nft.json +1 -1
  229. package/cli/app/.next-cli-build/server/app/api/terminal/auth/setup/route.js.nft.json +1 -1
  230. package/cli/app/.next-cli-build/server/app/api/terminal/auth/status/route.js.nft.json +1 -1
  231. package/cli/app/.next-cli-build/server/app/api/terminal/auth/unlock/route.js.nft.json +1 -1
  232. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/input/route.js.nft.json +1 -1
  233. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/resize/route.js.nft.json +1 -1
  234. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/route.js.nft.json +1 -1
  235. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/stream/route.js.nft.json +1 -1
  236. package/cli/app/.next-cli-build/server/app/api/terminal/session/route.js.nft.json +1 -1
  237. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
  238. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/route.js.nft.json +1 -1
  239. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
  240. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -1
  241. package/cli/app/.next-cli-build/server/app/api/translator/load/route.js.nft.json +1 -1
  242. package/cli/app/.next-cli-build/server/app/api/translator/save/route.js.nft.json +1 -1
  243. package/cli/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
  244. package/cli/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
  245. package/cli/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  246. package/cli/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  247. package/cli/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
  248. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
  249. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
  250. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
  251. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
  252. package/cli/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  253. package/cli/app/.next-cli-build/server/app/api/usage/aggregate/route.js +1 -1
  254. package/cli/app/.next-cli-build/server/app/api/usage/aggregate/route.js.nft.json +1 -1
  255. package/cli/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
  256. package/cli/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
  257. package/cli/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
  258. package/cli/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
  259. package/cli/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  260. package/cli/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
  261. package/cli/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
  262. package/cli/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  263. package/cli/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  264. package/cli/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  265. package/cli/app/.next-cli-build/server/app/api/v1/audio/voices/route.js.nft.json +1 -1
  266. package/cli/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  267. package/cli/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  268. package/cli/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  269. package/cli/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -1
  270. package/cli/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
  271. package/cli/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
  272. package/cli/app/.next-cli-build/server/app/api/v1/models/info/route.js.nft.json +1 -1
  273. package/cli/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
  274. package/cli/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
  275. package/cli/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
  276. package/cli/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
  277. package/cli/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
  278. package/cli/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
  279. package/cli/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  280. package/cli/app/.next-cli-build/server/app/api/v1beta/models/route.js.nft.json +1 -1
  281. package/cli/app/.next-cli-build/server/app/api/version/route.js +1 -1
  282. package/cli/app/.next-cli-build/server/app/api/version/route.js.nft.json +1 -1
  283. package/cli/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
  284. package/cli/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
  285. package/cli/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
  286. package/cli/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +1 -1
  287. package/cli/app/.next-cli-build/server/app/callback/page.js.nft.json +1 -1
  288. package/cli/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  289. package/cli/app/.next-cli-build/server/app/callback.html +1 -1
  290. package/cli/app/.next-cli-build/server/app/callback.rsc +3 -3
  291. package/cli/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +3 -3
  292. package/cli/app/.next-cli-build/server/app/callback.segments/_head.segment.rsc +1 -1
  293. package/cli/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +3 -3
  294. package/cli/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +1 -1
  295. package/cli/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  296. package/cli/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
  297. package/cli/app/.next-cli-build/server/app/dashboard/automation.html +1 -1
  298. package/cli/app/.next-cli-build/server/app/dashboard/automation.rsc +5 -5
  299. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation/__PAGE__.segment.rsc +2 -2
  300. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation.segment.rsc +1 -1
  301. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  302. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  303. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_full.segment.rsc +5 -5
  304. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_head.segment.rsc +1 -1
  305. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_index.segment.rsc +3 -3
  306. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_tree.segment.rsc +1 -1
  307. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
  308. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +5 -5
  309. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
  310. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
  311. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  312. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  313. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +5 -5
  314. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
  315. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_index.segment.rsc +3 -3
  316. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
  317. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
  318. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +5 -5
  319. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
  320. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
  321. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  322. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  323. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +5 -5
  324. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
  325. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_index.segment.rsc +3 -3
  326. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
  327. package/cli/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
  328. package/cli/app/.next-cli-build/server/app/dashboard/combos.rsc +5 -5
  329. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
  330. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
  331. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  332. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  333. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +5 -5
  334. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
  335. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_index.segment.rsc +3 -3
  336. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
  337. package/cli/app/.next-cli-build/server/app/dashboard/context.html +1 -1
  338. package/cli/app/.next-cli-build/server/app/dashboard/context.rsc +5 -5
  339. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard/context/__PAGE__.segment.rsc +2 -2
  340. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard/context.segment.rsc +1 -1
  341. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  342. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  343. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_full.segment.rsc +5 -5
  344. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_head.segment.rsc +1 -1
  345. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_index.segment.rsc +3 -3
  346. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_tree.segment.rsc +1 -1
  347. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
  348. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.rsc +5 -5
  349. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
  350. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
  351. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  352. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  353. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +5 -5
  354. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
  355. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_index.segment.rsc +3 -3
  356. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
  357. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
  358. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +5 -5
  359. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
  360. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
  361. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
  362. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  363. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  364. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +5 -5
  365. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
  366. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +3 -3
  367. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +1 -1
  368. package/cli/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
  369. package/cli/app/.next-cli-build/server/app/dashboard/mitm.rsc +5 -5
  370. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
  371. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
  372. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  373. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  374. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +5 -5
  375. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
  376. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_index.segment.rsc +3 -3
  377. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
  378. package/cli/app/.next-cli-build/server/app/dashboard/playground.html +1 -1
  379. package/cli/app/.next-cli-build/server/app/dashboard/playground.rsc +5 -5
  380. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard/playground/__PAGE__.segment.rsc +2 -2
  381. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard/playground.segment.rsc +1 -1
  382. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  383. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  384. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_full.segment.rsc +5 -5
  385. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_head.segment.rsc +1 -1
  386. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_index.segment.rsc +3 -3
  387. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_tree.segment.rsc +1 -1
  388. package/cli/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
  389. package/cli/app/.next-cli-build/server/app/dashboard/profile.rsc +5 -5
  390. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
  391. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
  392. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  393. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  394. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +5 -5
  395. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
  396. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_index.segment.rsc +3 -3
  397. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
  398. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
  399. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.rsc +5 -5
  400. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
  401. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
  402. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  403. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  404. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  405. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +5 -5
  406. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
  407. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_index.segment.rsc +3 -3
  408. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
  409. package/cli/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
  410. package/cli/app/.next-cli-build/server/app/dashboard/providers.rsc +5 -5
  411. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
  412. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  413. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  414. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  415. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +5 -5
  416. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
  417. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_index.segment.rsc +3 -3
  418. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
  419. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
  420. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +5 -5
  421. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
  422. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
  423. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  424. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  425. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +5 -5
  426. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
  427. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +3 -3
  428. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
  429. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.html +1 -1
  430. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.rsc +5 -5
  431. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +2 -2
  432. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe.segment.rsc +1 -1
  433. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  434. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  435. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_full.segment.rsc +5 -5
  436. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_head.segment.rsc +1 -1
  437. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_index.segment.rsc +3 -3
  438. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +1 -1
  439. package/cli/app/.next-cli-build/server/app/dashboard/quota.html +2 -2
  440. package/cli/app/.next-cli-build/server/app/dashboard/quota.rsc +6 -6
  441. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
  442. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
  443. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  444. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  445. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +6 -6
  446. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
  447. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_index.segment.rsc +3 -3
  448. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
  449. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js.nft.json +1 -1
  450. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  451. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  452. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +3 -3
  453. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +3 -3
  454. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  455. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +3 -3
  456. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
  457. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  458. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  459. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  460. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  461. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
  462. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.rsc +5 -5
  463. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +2 -2
  464. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver.segment.rsc +1 -1
  465. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  466. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  467. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +5 -5
  468. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_head.segment.rsc +1 -1
  469. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_index.segment.rsc +3 -3
  470. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +1 -1
  471. package/cli/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
  472. package/cli/app/.next-cli-build/server/app/dashboard/translator.rsc +5 -5
  473. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
  474. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
  475. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  476. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  477. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +5 -5
  478. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
  479. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_index.segment.rsc +3 -3
  480. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
  481. package/cli/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
  482. package/cli/app/.next-cli-build/server/app/dashboard/usage.rsc +5 -5
  483. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
  484. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
  485. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  486. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  487. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +5 -5
  488. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
  489. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_index.segment.rsc +3 -3
  490. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
  491. package/cli/app/.next-cli-build/server/app/dashboard.html +1 -1
  492. package/cli/app/.next-cli-build/server/app/dashboard.rsc +5 -5
  493. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
  494. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  495. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  496. package/cli/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +5 -5
  497. package/cli/app/.next-cli-build/server/app/dashboard.segments/_head.segment.rsc +1 -1
  498. package/cli/app/.next-cli-build/server/app/dashboard.segments/_index.segment.rsc +3 -3
  499. package/cli/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +1 -1
  500. package/cli/app/.next-cli-build/server/app/index.html +1 -1
  501. package/cli/app/.next-cli-build/server/app/index.rsc +3 -3
  502. package/cli/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  503. package/cli/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +3 -3
  504. package/cli/app/.next-cli-build/server/app/index.segments/_head.segment.rsc +1 -1
  505. package/cli/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +3 -3
  506. package/cli/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +1 -1
  507. package/cli/app/.next-cli-build/server/app/landing/page.js.nft.json +1 -1
  508. package/cli/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  509. package/cli/app/.next-cli-build/server/app/landing.html +1 -1
  510. package/cli/app/.next-cli-build/server/app/landing.rsc +3 -3
  511. package/cli/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +3 -3
  512. package/cli/app/.next-cli-build/server/app/landing.segments/_head.segment.rsc +1 -1
  513. package/cli/app/.next-cli-build/server/app/landing.segments/_index.segment.rsc +3 -3
  514. package/cli/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +1 -1
  515. package/cli/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
  516. package/cli/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
  517. package/cli/app/.next-cli-build/server/app/login/page.js.nft.json +1 -1
  518. package/cli/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  519. package/cli/app/.next-cli-build/server/app/login.html +1 -1
  520. package/cli/app/.next-cli-build/server/app/login.rsc +4 -4
  521. package/cli/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +4 -4
  522. package/cli/app/.next-cli-build/server/app/login.segments/_head.segment.rsc +1 -1
  523. package/cli/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +3 -3
  524. package/cli/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +1 -1
  525. package/cli/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  526. package/cli/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
  527. package/cli/app/.next-cli-build/server/app/manifest.webmanifest/route.js.nft.json +1 -1
  528. package/cli/app/.next-cli-build/server/app/page.js.nft.json +1 -1
  529. package/cli/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  530. package/cli/app/.next-cli-build/server/app-paths-manifest.json +10 -10
  531. package/cli/app/.next-cli-build/server/chunks/1019.js +1 -0
  532. package/cli/app/.next-cli-build/server/chunks/3155.js +1 -1
  533. package/cli/app/.next-cli-build/server/chunks/3407.js +1 -1
  534. package/cli/app/.next-cli-build/server/chunks/3831.js +1 -1
  535. package/cli/app/.next-cli-build/server/chunks/4746.js +1 -1
  536. package/cli/app/.next-cli-build/server/chunks/5681.js +1 -1
  537. package/cli/app/.next-cli-build/server/chunks/6896.js +1 -1
  538. package/cli/app/.next-cli-build/server/chunks/8157.js +1 -1
  539. package/cli/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  540. package/cli/app/.next-cli-build/server/pages/404.html +1 -1
  541. package/cli/app/.next-cli-build/server/pages/500.html +1 -1
  542. package/cli/app/.next-cli-build/static/chunks/{3702-6c413110833a0c10.js → 3702-dce896e3750d4f6f.js} +1 -1
  543. package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/quota/page-f3b77e4749e85bd8.js +1 -0
  544. package/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/src/lib/terminal/ptyBridge.py +163 -0
  545. package/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/src/lib/terminal/ptyBridge.py +163 -0
  546. package/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/src/lib/terminal/ptyBridge.py +163 -0
  547. package/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/src/lib/terminal/ptyBridge.py +163 -0
  548. package/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/src/lib/terminal/ptyBridge.py +163 -0
  549. package/cli/app/package.json +1 -1
  550. package/cli/package.json +1 -1
  551. package/open-sse/services/usage.js +105 -2
  552. package/package.json +1 -1
  553. package/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/ProviderLimitCard.js +9 -11
  554. package/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/QuotaProgressBar.js +10 -10
  555. package/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/QuotaTable.js +4 -2
  556. package/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/index.js +41 -9
  557. package/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/utils.js +47 -8
  558. package/src/app/api/usage/aggregate/route.js +16 -1
  559. package/src/lib/oauth/services/cloudflareAiBulkImportManager.js +166 -83
  560. package/src/lib/oauth/services/kiroGoogleAutomation.js +306 -52
  561. package/src/shared/constants/providers.js +3 -0
  562. package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/quota/page-c58270853707170e.js +0 -1
  563. /package/cli/app/.next-cli-build/static/{2bqOfNlrEKL_p8ckmSn98 → jba0lkzn4LzfXxHBpLKVZ}/_buildManifest.js +0 -0
  564. /package/cli/app/.next-cli-build/static/{2bqOfNlrEKL_p8ckmSn98 → jba0lkzn4LzfXxHBpLKVZ}/_ssgManifest.js +0 -0
@@ -104,6 +104,9 @@ const GOOGLE_LOGIN_BUTTON_SELECTORS = [
104
104
  'button:has-text("Login with Google")',
105
105
  'button:has-text("Continue with Google")',
106
106
  'button:has-text("Sign in with Google")',
107
+ // Cloudflare dash: visible label is just "Google", aria is "Continue with Google"
108
+ 'button[aria-label*="Continue with Google" i]',
109
+ 'button[aria-label*="Google" i]',
107
110
  'button:has-text("Google")',
108
111
  'a:has-text("Google")',
109
112
  'div[role="button"]:has-text("Continue with Google")',
@@ -112,7 +115,7 @@ const GOOGLE_LOGIN_BUTTON_SELECTORS = [
112
115
  'span:has-text("Continue with Google")',
113
116
  'span:has-text("Login with Google")',
114
117
  'span:has-text("Google")',
115
- '[aria-label*="Google"]',
118
+ '[aria-label*="Google" i]',
116
119
  '[data-provider*="google" i]',
117
120
  // xAI / Grok device + account pages
118
121
  'button:has-text("Login with Google")',
@@ -120,6 +123,18 @@ const GOOGLE_LOGIN_BUTTON_SELECTORS = [
120
123
  '[data-testid*="google" i]',
121
124
  ];
122
125
 
126
+ /** OneTrust / cookie walls that block the first Google click (Cloudflare login). */
127
+ const COOKIE_DISMISS_SELECTORS = [
128
+ '#onetrust-accept-btn-handler',
129
+ '#onetrust-reject-all-handler',
130
+ '#accept-recommended-btn-handler',
131
+ 'button:has-text("Allow All")',
132
+ 'button:has-text("Reject All")',
133
+ 'button:has-text("Accept All")',
134
+ 'button:has-text("Accept all")',
135
+ 'button:has-text("Confirm My Choices")',
136
+ ];
137
+
123
138
  const TERMS_CHECKBOX_SELECTORS = [
124
139
  '#agree-policy-account',
125
140
  '#agree-policy',
@@ -565,6 +580,61 @@ function isGrokish(serviceLabel) {
565
580
  return /grok|cloudflare/i.test(String(serviceLabel || ""));
566
581
  }
567
582
 
583
+ function isCloudflareLoginUrl(url) {
584
+ try {
585
+ const u = new URL(url || "");
586
+ return u.hostname === "dash.cloudflare.com" && u.pathname.includes("/login");
587
+ } catch {
588
+ return false;
589
+ }
590
+ }
591
+
592
+ async function dismissCookieBanners(page, reportStep) {
593
+ // Cookie / OneTrust modals steal the first clicks (CF login shows "Allow All").
594
+ // Fast path: one scan — must stay cheap because the main automation loop
595
+ // calls this on every tick (dashboard harvest must not burn 2s here).
596
+ for (const selector of COOKIE_DISMISS_SELECTORS) {
597
+ try {
598
+ const loc = page.locator(selector).first();
599
+ if (await loc.isVisible({ timeout: 100 }).catch(() => false)) {
600
+ // noWaitAfter: banner click must not wait on any incidental navigation
601
+ await loc.click({ timeout: 2_000, noWaitAfter: true }).catch(() => null);
602
+ reportStep?.("dismissing_cookies", "Dismissed cookie / privacy banner");
603
+ return true;
604
+ }
605
+ } catch {
606
+ /* next */
607
+ }
608
+ }
609
+ const viaApi = await page.evaluate(() => {
610
+ try {
611
+ if (typeof window.OneTrust?.AllowAll === "function") {
612
+ const banner = document.querySelector(
613
+ "#onetrust-banner-sdk, #onetrust-consent-sdk, #onetrust-accept-btn-handler",
614
+ );
615
+ // Only invoke when a banner is actually present — AllowAll on every
616
+ // loop tick is wasteful and can re-open consent UI.
617
+ if (!banner) return false;
618
+ window.OneTrust.AllowAll();
619
+ return true;
620
+ }
621
+ const btn = document.querySelector("#onetrust-accept-btn-handler");
622
+ if (btn && btn.offsetParent !== null) {
623
+ btn.click();
624
+ return true;
625
+ }
626
+ } catch {
627
+ /* ignore */
628
+ }
629
+ return false;
630
+ }).catch(() => false);
631
+ if (viaApi) {
632
+ reportStep?.("dismissing_cookies", "Dismissed cookie / privacy banner");
633
+ return true;
634
+ }
635
+ return false;
636
+ }
637
+
568
638
  // Google bounces flagged (headless) browsers:
569
639
  // - myaccount.google.com/not-supported
570
640
  // - accounts.google.com/v3/signin/rejected ("This browser or app may not be secure")
@@ -1357,6 +1427,17 @@ async function handleProviderOnboarding(page, reportStep, serviceLabel) {
1357
1427
  return false;
1358
1428
  }
1359
1429
 
1430
+ // Cloudflare dashboard / login: "Allow All" cookie + "Sign in" must not be
1431
+ // treated as provider onboarding Continues.
1432
+ try {
1433
+ const host = new URL(page.url()).hostname || "";
1434
+ if (host === "dash.cloudflare.com" || host.endsWith(".cloudflare.com")) {
1435
+ return false;
1436
+ }
1437
+ } catch {
1438
+ /* ignore */
1439
+ }
1440
+
1360
1441
  // If Google SSO is still offered, do not mash generic Continue.
1361
1442
  if (await providerHasGoogleLogin(page)) {
1362
1443
  return false;
@@ -1430,13 +1511,33 @@ async function handleXaiDeviceCodeConfirm(page, reportStep, { alreadyAuthed = fa
1430
1511
  return true;
1431
1512
  }
1432
1513
 
1514
+ /**
1515
+ * Click a Google SSO control without waiting for the cross-origin navigation.
1516
+ *
1517
+ * Playwright's default click() waits for navigations started by the action.
1518
+ * CF → accounts.google.com through a residential proxy often exceeds 5s, so the
1519
+ * click "fails" even though OAuth already started — then we re-click for 30–40s.
1520
+ */
1521
+ async function clickSsoControl(page, locator) {
1522
+ const enabled = await locator.isEnabled().catch(() => true);
1523
+ if (!enabled) return false;
1524
+ await locator.scrollIntoViewIfNeeded().catch(() => null);
1525
+ const clicked = await locator
1526
+ .click({ timeout: 2_500, force: true, noWaitAfter: true })
1527
+ .then(() => true)
1528
+ .catch(() => false);
1529
+ if (clicked) return true;
1530
+ // Trusted mouse path (also does not wait on navigation).
1531
+ return clickLocatorCenter(page, locator).catch(() => false);
1532
+ }
1533
+
1433
1534
  async function clickGoogleLoginRole(page) {
1434
- // Role-based matches are more reliable on SPA auth shells (xAI, etc.)
1435
- // than CSS :has-text alone — especially when the label is nested.
1535
+ // Role-based matches are more reliable on SPA auth shells (xAI, CF, etc.)
1536
+ // than CSS :has-text alone — especially when the label is nested / aria-only.
1436
1537
  const roleNames = [
1538
+ /continue with google/i,
1437
1539
  /login with google/i,
1438
1540
  /log in with google/i,
1439
- /continue with google/i,
1440
1541
  /sign up with google/i,
1441
1542
  /sign in with google/i,
1442
1543
  /^google$/i,
@@ -1445,10 +1546,7 @@ async function clickGoogleLoginRole(page) {
1445
1546
  try {
1446
1547
  const btn = page.getByRole("button", { name }).first();
1447
1548
  if (await btn.isVisible({ timeout: 250 }).catch(() => false)) {
1448
- const enabled = await btn.isEnabled().catch(() => true);
1449
- if (!enabled) continue;
1450
- await btn.click({ timeout: 5_000 });
1451
- return true;
1549
+ if (await clickSsoControl(page, btn)) return true;
1452
1550
  }
1453
1551
  } catch {
1454
1552
  /* next */
@@ -1456,13 +1554,30 @@ async function clickGoogleLoginRole(page) {
1456
1554
  try {
1457
1555
  const link = page.getByRole("link", { name }).first();
1458
1556
  if (await link.isVisible({ timeout: 200 }).catch(() => false)) {
1459
- await link.click({ timeout: 5_000 });
1460
- return true;
1557
+ if (await clickSsoControl(page, link)) return true;
1461
1558
  }
1462
1559
  } catch {
1463
1560
  /* next */
1464
1561
  }
1465
1562
  }
1563
+ // Cloudflare: button text "Google", aria-label "Continue with Google"
1564
+ try {
1565
+ const ariaBtn = page.locator('button[aria-label*="Google" i]').first();
1566
+ if (await ariaBtn.isVisible({ timeout: 200 }).catch(() => false)) {
1567
+ if (await clickSsoControl(page, ariaBtn)) return true;
1568
+ }
1569
+ } catch {
1570
+ /* ignore */
1571
+ }
1572
+ // Last resort: CSS text match with noWaitAfter
1573
+ try {
1574
+ const textBtn = page.locator('button:has-text("Google")').first();
1575
+ if (await textBtn.isVisible({ timeout: 150 }).catch(() => false)) {
1576
+ if (await clickSsoControl(page, textBtn)) return true;
1577
+ }
1578
+ } catch {
1579
+ /* ignore */
1580
+ }
1466
1581
  return false;
1467
1582
  }
1468
1583
 
@@ -1508,6 +1623,8 @@ async function ensureProviderTermsChecked(page, reportStep) {
1508
1623
  async function handleProviderLoginGate(page, reportStep, { allowGoogleClick = true } = {}) {
1509
1624
  if (isGoogleAuthPage(page)) return false;
1510
1625
 
1626
+ await dismissCookieBanners(page, reportStep);
1627
+
1511
1628
  const confirmedExistingDialog = await clickFirstActionable(page, PRIVACY_CONFIRM_BUTTON_SELECTORS);
1512
1629
  if (confirmedExistingDialog) {
1513
1630
  reportStep("accepting_provider_privacy_dialog", "Confirmed provider privacy agreement dialog");
@@ -1525,8 +1642,25 @@ async function handleProviderLoginGate(page, reportStep, { allowGoogleClick = tr
1525
1642
 
1526
1643
  // Prefer explicit Google SSO over generic Continue (device code pages
1527
1644
  // often have both — clicking Continue without a session yields invalid_code).
1645
+ // Cloudflare: click Google SSO only — never the CF email "Sign in" form.
1528
1646
  const clickedGoogleRole = await clickGoogleLoginRole(page);
1529
- const clickedGoogle = clickedGoogleRole || await clickFirstActionable(page, GOOGLE_LOGIN_BUTTON_SELECTORS);
1647
+ let clickedGoogle = clickedGoogleRole;
1648
+ if (!clickedGoogle) {
1649
+ // Selector fallback with noWaitAfter (clickFirstActionable waits on nav — bad for SSO).
1650
+ for (const selector of GOOGLE_LOGIN_BUTTON_SELECTORS.slice(0, 16)) {
1651
+ try {
1652
+ const loc = page.locator(selector).first();
1653
+ if (await loc.isVisible({ timeout: 100 }).catch(() => false)) {
1654
+ if (await clickSsoControl(page, loc)) {
1655
+ clickedGoogle = true;
1656
+ break;
1657
+ }
1658
+ }
1659
+ } catch {
1660
+ /* next */
1661
+ }
1662
+ }
1663
+ }
1530
1664
  if (clickedGoogle) {
1531
1665
  reportStep("selecting_google_login", "Selecting Google login");
1532
1666
 
@@ -1536,10 +1670,12 @@ async function handleProviderLoginGate(page, reportStep, { allowGoogleClick = tr
1536
1670
  }
1537
1671
 
1538
1672
  // Wait for OAuth redirect to Google (or email field) — event-driven.
1673
+ // CF→Google through proxy can take a few seconds; click already returned (noWaitAfter).
1674
+ const onCf = isCloudflareLoginUrl(page.url?.() || "");
1539
1675
  const reached = await waitForPageAdvance(page, {
1540
1676
  urlMatch: (u) => isGoogleHostname(u),
1541
1677
  selector: EMAIL_INPUT_SELECTOR,
1542
- timeout: 12_000,
1678
+ timeout: onCf ? 10_000 : 12_000,
1543
1679
  });
1544
1680
  if (reached || isGoogleAuthPage(page)) {
1545
1681
  reportStep("google_login_page", "Reached Google sign-in after provider SSO");
@@ -1879,6 +2015,10 @@ export async function runGoogleAccountAutomation({
1879
2015
  successStep = "oauth_success_received",
1880
2016
  successMessage = "OAuth success received",
1881
2017
  onStep,
2018
+ /** When true, skip page.goto(authUrl) — caller already navigated (e.g. CF pre-click Google). */
2019
+ skipGoto = false,
2020
+ /** Caller already clicked Google SSO; wait for accounts.google.com before re-clicking. */
2021
+ expectGoogleSoon = false,
1882
2022
  }) {
1883
2023
  const startTime = Date.now();
1884
2024
  const reportStep = (step, message) => {
@@ -1897,7 +2037,9 @@ export async function runGoogleAccountAutomation({
1897
2037
  let deviceInvalidReopenCount = 0;
1898
2038
  // Cooldowns prevent double-submit only — not artificial pacing.
1899
2039
  const PASSWORD_RESUBMIT_COOLDOWN_MS = isGrokish(serviceLabel) ? 6_000 : 18_000;
1900
- const EMAIL_RESUBMIT_COOLDOWN_MS = isGrokish(serviceLabel) ? 3_000 : 8_000;
2040
+ // Longer email cooldown for fast bulk — Google identifier page can sit 5–10s
2041
+ // after Next; re-typing the whole email wastes another 10–15s.
2042
+ const EMAIL_RESUBMIT_COOLDOWN_MS = isGrokish(serviceLabel) ? 12_000 : 8_000;
1901
2043
  const GOOGLE_SSO_COOLDOWN_MS = isGrokish(serviceLabel) ? 3_000 : 8_000;
1902
2044
  // Don't hammer Allow — xAI rate_limits rapid device posts.
1903
2045
  const DEVICE_APPROVE_COOLDOWN_MS = 3_000;
@@ -1909,46 +2051,90 @@ export async function runGoogleAccountAutomation({
1909
2051
  // Loop poll: race successPromise — keep tiny so fast networks aren't stalled.
1910
2052
  const loopTickMs = isGrokFlow ? 120 : 500;
1911
2053
 
1912
- reportStep(openingStep, openingMessage);
1913
- await page.goto(authUrl, { waitUntil: "domcontentloaded", timeout: 60_000 });
1914
- // Wait for interactive UI (Continue / Google / email), not a fixed sleep.
1915
- await waitUntil(
1916
- async () =>
1917
- isGoogleAuthPage(page)
1918
- || (await getFirstVisibleLocator(page, 'button:has-text("Continue"), button:has-text("Login with Google"), button:has-text("Google")'))
1919
- || (await getFirstVisibleLocator(page, EMAIL_INPUT_SELECTOR)),
1920
- { timeout: isGrokFlow ? 6_000 : 12_000, interval: 80 },
1921
- );
1922
- if (!isGrokFlow) {
1923
- await waitThroughGoogleInterstitials(page, reportStep, interstitialOpts(8_000));
1924
- }
1925
-
1926
- // Provider shells (xAI device, CodeBuddy, …) must pick Google SSO first.
1927
- // Never type credentials into provider user_code / email fields.
1928
- // xAI: confirm device user_code first, then Google SSO — event-driven retries.
1929
- for (let attempt = 0; attempt < (isGrokFlow ? 6 : 2); attempt += 1) {
1930
- if (isGoogleAuthPage(page)) break;
1931
- if (await handleXaiDeviceCodeConfirm(page, reportStep)) {
1932
- continue;
1933
- }
1934
- if (await handleProviderLoginGate(page, reportStep)) {
2054
+ let alreadyOnGoogle = skipGoto && isGoogleAuthPage(page);
2055
+ if (!skipGoto) {
2056
+ reportStep(openingStep, openingMessage);
2057
+ await page.goto(authUrl, { waitUntil: "domcontentloaded", timeout: 60_000 });
2058
+ await dismissCookieBanners(page, reportStep);
2059
+ } else if (alreadyOnGoogle) {
2060
+ reportStep("google_login_page", "Already on Google sign-in — filling credentials");
2061
+ } else if (expectGoogleSoon) {
2062
+ // CF (etc.) already clicked Google — wait for redirect, do NOT re-goto / re-click yet.
2063
+ reportStep("waiting_google_redirect", "Waiting for Google after provider SSO click");
2064
+ const reached = await waitUntil(() => isGoogleAuthPage(page), {
2065
+ timeout: 25_000,
2066
+ interval: 100,
2067
+ });
2068
+ if (reached) {
2069
+ alreadyOnGoogle = true;
1935
2070
  googleLoginSelectedAt = Date.now();
1936
- if (isGoogleAuthPage(page)) break;
1937
- // Gate already waited for Google URL; only brief yield if still on provider.
1938
- await yieldMs(50);
1939
- continue;
2071
+ reportStep("google_login_page", "Reached Google sign-in after provider SSO");
2072
+ } else {
2073
+ reportStep("google_redirect_slow", "Google redirect slow — will retry SSO click");
1940
2074
  }
1941
- // SPA not ready — poll for buttons, don't sleep 600ms blindly.
1942
- const ready = await waitUntil(
1943
- async () =>
1944
- (await providerHasGoogleLogin(page))
1945
- || /enter the code|login with google|continue/i.test(await readPageText(page).catch(() => "")),
1946
- { timeout: 800, interval: 80 },
2075
+ } else {
2076
+ reportStep(openingStep, openingMessage);
2077
+ await dismissCookieBanners(page, reportStep);
2078
+ }
2079
+
2080
+ // Cloudflare login always shows email/password fields — do NOT treat those as
2081
+ // "ready for Google email fill". Wait for Google SSO button / Google page only.
2082
+ const onCfLogin = isCloudflareLoginUrl(page.url?.() || "") || /cloudflare/i.test(String(serviceLabel || ""));
2083
+
2084
+ if (!alreadyOnGoogle) {
2085
+ await waitUntil(
2086
+ async () => {
2087
+ if (isGoogleAuthPage(page)) return true;
2088
+ if (await getFirstVisibleLocator(
2089
+ page,
2090
+ 'button[aria-label*="Google" i], button:has-text("Continue with Google"), button:has-text("Login with Google"), button:has-text("Google")',
2091
+ )) {
2092
+ return true;
2093
+ }
2094
+ if (!onCfLogin && (await getFirstVisibleLocator(page, EMAIL_INPUT_SELECTOR))) {
2095
+ return true;
2096
+ }
2097
+ if (!onCfLogin && (await getFirstVisibleLocator(page, 'button:has-text("Continue")'))) {
2098
+ return true;
2099
+ }
2100
+ return false;
2101
+ },
2102
+ { timeout: isGrokFlow ? 8_000 : 12_000, interval: 80 },
1947
2103
  );
1948
- if (!ready) await yieldMs(100);
1949
- }
1950
- if (!isGrokFlow) {
1951
- await waitThroughGoogleInterstitials(page, reportStep, interstitialOpts(6_000));
2104
+ if (!isGrokFlow) {
2105
+ await waitThroughGoogleInterstitials(page, reportStep, interstitialOpts(8_000));
2106
+ }
2107
+
2108
+ // Provider shells (xAI device, CodeBuddy, Cloudflare, …) must pick Google SSO first.
2109
+ // Never type credentials into provider email fields (CF has its own email/password).
2110
+ for (let attempt = 0; attempt < (isGrokFlow || onCfLogin ? 8 : 2); attempt += 1) {
2111
+ if (isGoogleAuthPage(page)) break;
2112
+ await dismissCookieBanners(page, reportStep);
2113
+ if (await handleXaiDeviceCodeConfirm(page, reportStep)) {
2114
+ continue;
2115
+ }
2116
+ if (await handleProviderLoginGate(page, reportStep)) {
2117
+ googleLoginSelectedAt = Date.now();
2118
+ if (isGoogleAuthPage(page)) break;
2119
+ // Gate already waited for Google URL; only brief yield if still on provider.
2120
+ await yieldMs(50);
2121
+ continue;
2122
+ }
2123
+ // SPA not ready — poll for Google SSO (not CF email form).
2124
+ const ready = await waitUntil(
2125
+ async () =>
2126
+ isGoogleAuthPage(page)
2127
+ || (await providerHasGoogleLogin(page))
2128
+ || /enter the code|login with google|continue with google/i.test(
2129
+ await readPageText(page).catch(() => ""),
2130
+ ),
2131
+ { timeout: 600, interval: 80 },
2132
+ );
2133
+ if (!ready) await yieldMs(80);
2134
+ }
2135
+ if (!isGrokFlow) {
2136
+ await waitThroughGoogleInterstitials(page, reportStep, interstitialOpts(6_000));
2137
+ }
1952
2138
  }
1953
2139
 
1954
2140
  // Only fill Google email once we are actually on accounts.google.com.
@@ -2003,6 +2189,50 @@ export async function runGoogleAccountAutomation({
2003
2189
  };
2004
2190
  }
2005
2191
 
2192
+ // Cloudflare: after Google password, land on dash — park on harvest promise.
2193
+ // Do NOT thrash cookie dismiss / generic Approve (starves token API work).
2194
+ if (
2195
+ isGrokFlow
2196
+ && seenGoogleAuth
2197
+ && passwordSubmittedAt
2198
+ && /cloudflare/i.test(String(serviceLabel || ""))
2199
+ ) {
2200
+ try {
2201
+ const u = new URL(page.url?.() || "");
2202
+ const onDash =
2203
+ u.hostname === "dash.cloudflare.com"
2204
+ && !u.pathname.includes("/login")
2205
+ && !u.href.includes("oidcJwt");
2206
+ if (onDash) {
2207
+ reportStep(
2208
+ "waiting_cf_harvest",
2209
+ "On Cloudflare dashboard — waiting for Workers AI token harvest",
2210
+ );
2211
+ // Yield the page: only race success (longer tick while harvesting).
2212
+ const parked = await Promise.race([
2213
+ successPromise
2214
+ .then((result) => ({ kind: "success", result }))
2215
+ .catch((error) => ({ kind: "success_error", error })),
2216
+ yieldMs(2_000).then(() => null),
2217
+ ]);
2218
+ if (parked?.kind === "success") {
2219
+ reportStep(successStep, successMessage);
2220
+ return { status: "success", ...parked.result };
2221
+ }
2222
+ if (parked?.kind === "success_error") {
2223
+ reportStep("oauth_timeout", `Timed out waiting for ${serviceLabel} authorization`);
2224
+ return {
2225
+ status: "failed_timeout",
2226
+ error: parked.error?.message || `Timed out waiting for ${serviceLabel} authorization`,
2227
+ };
2228
+ }
2229
+ continue;
2230
+ }
2231
+ } catch {
2232
+ /* fall through */
2233
+ }
2234
+ }
2235
+
2006
2236
  // Unblock SetSID / empty Google interstitials before other handlers
2007
2237
  const waited = await waitThroughGoogleInterstitials(
2008
2238
  page,
@@ -2236,10 +2466,26 @@ export async function runGoogleAccountAutomation({
2236
2466
 
2237
2467
  // On xAI before Google login, APPROVE selectors match "Continue with Google"
2238
2468
  // via :has-text("Continue") and wreck the device code → Invalid action loop.
2469
+ // On Cloudflare login, "Allow All" cookies + "Sign in" must not be mashed.
2470
+ await dismissCookieBanners(page, reportStep);
2471
+ const onCfHost = (() => {
2472
+ try {
2473
+ const h = new URL(page.url()).hostname || "";
2474
+ return h === "dash.cloudflare.com" || h.endsWith(".cloudflare.com");
2475
+ } catch {
2476
+ return false;
2477
+ }
2478
+ })();
2239
2479
  const mayGenericApprove =
2240
2480
  isGoogleAuthPage(page)
2241
- || (seenGoogleAuth && passwordSubmittedAt && !(await providerHasGoogleLogin(page)));
2242
- if (mayGenericApprove) {
2481
+ || (
2482
+ seenGoogleAuth
2483
+ && passwordSubmittedAt
2484
+ && !(await providerHasGoogleLogin(page))
2485
+ && !isCloudflareLoginUrl(page.url?.() || "")
2486
+ );
2487
+ if (mayGenericApprove && !isCloudflareLoginUrl(page.url?.() || "")) {
2488
+ // Avoid OneTrust "Allow All" as if it were OAuth approve when still mid-flow
2243
2489
  const clickedApprove = await clickFirstVisible(page, APPROVE_BUTTON_SELECTORS);
2244
2490
  if (clickedApprove) {
2245
2491
  reportStep("approving_consent", `Approving Google or ${serviceLabel} consent`);
@@ -2248,6 +2494,11 @@ export async function runGoogleAccountAutomation({
2248
2494
  continue;
2249
2495
  }
2250
2496
  }
2497
+ // Cloudflare login stuck: keep hammering Google SSO only
2498
+ if (onCfHost && !seenGoogleAuth && (await handleProviderLoginGate(page, reportStep))) {
2499
+ googleLoginSelectedAt = Date.now();
2500
+ continue;
2501
+ }
2251
2502
 
2252
2503
  // Periodic diagnostics so jobs aren't opaque "waiting" spam
2253
2504
  if (Math.floor((Date.now() - startTime) / 5000) !== Math.floor((Date.now() - startTime - loopTickMs) / 5000)) {
@@ -2331,4 +2582,7 @@ export const __test__ = {
2331
2582
  handleXaiDeviceCodeConfirm,
2332
2583
  GOOGLE_LOGIN_BUTTON_SELECTORS,
2333
2584
  isGrokish,
2585
+ dismissCookieBanners,
2586
+ clickGoogleLoginRole,
2587
+ isCloudflareLoginUrl,
2334
2588
  };
@@ -426,6 +426,8 @@ export const USAGE_SUPPORTED_PROVIDERS = [
426
426
  "iflow",
427
427
  // Wave 2: Grok CLI / Grok Build billing
428
428
  "grok-cli",
429
+ // Cloudflare Workers AI (API token + accountId)
430
+ "cloudflare-ai",
429
431
  // Multi-account quota expansion
430
432
  "xai",
431
433
  "cline",
@@ -442,6 +444,7 @@ export const USAGE_APIKEY_PROVIDERS = [
442
444
  "minimax-cn",
443
445
  "codebuddy",
444
446
  "codebuddy-cn",
447
+ "cloudflare-ai",
445
448
  "xai",
446
449
  "clinepass",
447
450
  ];
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3826],{5498:(e,t,a)=>{Promise.resolve().then(a.bind(a,75095)),Promise.resolve().then(a.bind(a,25086))},75095:(e,t,a)=>{"use strict";a.d(t,{default:()=>A});var r=a(95155),s=a(12115),n=a(57250),l=a(42793);function i(e,t){return t&&0!==t?!e||e<0?100:e>=t?0:Math.round((t-e)/t*100):0}function o(e,t){if(!t||"object"!=typeof t)return[];let a=[];try{switch(e.toLowerCase()){case"github":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{a.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null})});break;case"antigravity":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{a.push({name:t.displayName||e,modelKey:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null,remainingPercentage:t.remainingPercentage})});break;case"codex":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{a.push({name:e,used:t.used||0,total:t.total||0,remaining:t.remaining,resetAt:t.resetAt||null})});break;case"kiro":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{a.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null})});break;case"qoder":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{("organization"!==e||t&&0!==(Number(t.total)||0))&&a.push({name:"user"===e?"Personal":"organization"===e?"Organization":e,used:t.used||0,total:t.total||0,unit:t.unit,resetAt:t.resetAt||null})});break;case"autoclaw":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{a.push({name:"points"===e?"Points":e,used:t.used||0,total:t.total||0,unit:t.unit,resetAt:t.resetAt||null})});break;case"claude":t.message?a.push({name:"error",used:0,total:0,resetAt:null,message:t.message}):t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{a.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null})});break;case"grok-cli":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{a.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null,remainingPercentage:t.remainingPercentage,unlimited:!0===t.unlimited})});break;default:t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{a.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null,...null!=t.remainingPercentage?{remainingPercentage:t.remainingPercentage}:{},...!0===t.unlimited?{unlimited:!0}:{}})})}}catch(t){return console.error(`Error parsing quota data for ${e}:`,t),[]}let r=(0,l.KC)(e);if(r.length>0){let e=new Map(r.map((e,t)=>[e.id,t]));a.sort((t,a)=>{let r=t.modelKey||t.name,s=a.modelKey||a.name;return(e.get(r)??999)-(e.get(s)??999)})}return a}function c({quotas:e=[],compact:t=!1,sortMode:a="default",showSortLabel:n=!1}){let[l,o]=(0,s.useState)(1),d=(0,s.useMemo)(()=>e.map((e,t)=>({...e,index:t,remaining:e?.remaining!==void 0?Math.max(0,Math.round(e.remaining)):e?.remainingPercentage!==void 0?Math.round(e.remainingPercentage):i(e?.used,e?.total)})),[e]),u=(0,s.useMemo)(()=>"remaining-asc"===a?[...d].sort((e,t)=>e.remaining-t.remaining||e.name.localeCompare(t.name)):"remaining-desc"===a?[...d].sort((e,t)=>t.remaining-e.remaining||e.name.localeCompare(t.name)):d,[d,a]),m=Math.max(1,Math.ceil(u.length/10));if((0,s.useEffect)(()=>{o(1)},[a,e]),(0,s.useEffect)(()=>{o(e=>Math.min(e,m))},[m]),!e||0===e.length)return null;let h=u.slice((l-1)*10,10*l),x=0===u.length?0:(l-1)*10+1,b=Math.min(10*l,u.length),p=t?"py-1 px-1.5":"py-2 px-3",g=t?"text-[11px]":"text-sm",f=t?"text-[11px]":"text-sm",v=t?"text-[10px] leading-tight":"text-xs";return(0,r.jsxs)("div",{className:"space-y-2",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,r.jsxs)("div",{className:"text-[10px] text-text-muted",children:[u.length," quota",u.length>1?"s":""]}),n&&(0,r.jsx)("div",{className:"rounded-md border border-black/10 bg-black/[0.02] px-2 py-1 text-[10px] text-text-muted dark:border-white/10 dark:bg-white/[0.03]",children:"Sorted by account remaining"})]}),(0,r.jsx)("div",{className:"overflow-x-auto",children:(0,r.jsx)("table",{className:"w-full table-fixed text-left",children:(0,r.jsx)("tbody",{children:h.map(e=>{var a;let s=(a=e.remaining)>70?{text:"text-green-600 dark:text-green-400",bg:"bg-green-500",bgLight:"bg-green-500/10",emoji:"\uD83D\uDFE2"}:a>=30?{text:"text-yellow-600 dark:text-yellow-400",bg:"bg-yellow-500",bgLight:"bg-yellow-500/10",emoji:"\uD83D\uDFE1"}:{text:"text-red-600 dark:text-red-400",bg:"bg-red-500",bgLight:"bg-red-500/10",emoji:"\uD83D\uDD34"},n=function(e){if(!e)return"-";try{let t="string"==typeof e?new Date(e):e,a=new Date,r=t-a;if(r<=0)return"-";let s=Math.ceil(r/6e4);if(s<60)return`${s}m`;let n=Math.floor(s/60),l=s%60;if(n<24)return`${n}h ${l}m`;let i=Math.floor(n/24);return`${i}d ${n%24}h ${l}m`}catch(e){return"-"}}(e.resetAt),l=function(e){if(!e)return null;try{let t=new Date(e),a=new Date,r=new Date(a.getFullYear(),a.getMonth(),a.getDate()),s=new Date(r);s.setDate(s.getDate()+1);let n="";n=t>=r&&t<s?"Today":t>=s&&t<new Date(s.getTime()+864e5)?"Tomorrow":t.toLocaleDateString("en-US",{month:"short",day:"numeric"});let l=t.toLocaleTimeString("en-US",{hour:"numeric",minute:"2-digit",hour12:!0});return`${n}, ${l}`}catch{return null}}(e.resetAt);return(0,r.jsxs)("tr",{className:"border-b border-black/5 dark:border-white/5 hover:bg-black/[0.02] dark:hover:bg-white/[0.02] transition-colors",children:[(0,r.jsx)("td",{className:`${p} w-[30%]`,children:(0,r.jsxs)("div",{className:"flex items-center gap-1.5 min-w-0",children:[(0,r.jsx)("span",{className:"text-[10px] shrink-0",children:s.emoji}),(0,r.jsx)("span",{className:`${g} font-medium text-text-primary truncate`,children:e.name})]})}),(0,r.jsx)("td",{className:`${p} w-[45%]`,children:(0,r.jsxs)("div",{className:t?"space-y-1":"space-y-1.5",children:[(0,r.jsx)("div",{className:`${t?"h-1":"h-1.5"} rounded-full overflow-hidden border ${s.bgLight} ${0===e.remaining?"border-black/10 dark:border-white/10":"border-transparent"}`,children:(0,r.jsx)("div",{className:`h-full transition-all duration-300 ${s.bg}`,style:{width:`${Math.min(e.remaining,100)}%`}})}),(0,r.jsxs)("div",{className:`flex items-center justify-between ${t?"text-[10px]":"text-xs"}`,children:[(0,r.jsxs)("span",{className:"text-text-muted",children:[e.used.toLocaleString()," / ",e.total>0?e.total.toLocaleString():"∞"]}),(0,r.jsxs)("span",{className:`font-medium ${s.text}`,children:[e.remaining,"%"]})]})]})}),(0,r.jsx)("td",{className:`${p} w-[25%]`,children:"-"!==n||l?t?(0,r.jsx)("div",{className:`${f} text-text-primary font-medium truncate`,title:l||"",children:"-"!==n?`in ${n}`:l}):(0,r.jsxs)("div",{className:"space-y-0.5",children:["-"!==n&&(0,r.jsxs)("div",{className:`${f} text-text-primary font-medium`,children:["in ",n]}),l&&(0,r.jsx)("div",{className:`${v} text-text-muted`,children:l})]}):(0,r.jsx)("div",{className:`${f} text-text-muted italic`,children:"N/A"})})]},`${e.name}-${e.index}`)})})})}),m>1&&(0,r.jsxs)("div",{className:"rounded-md border border-black/10 bg-black/[0.02] px-2 py-1.5 dark:border-white/10 dark:bg-white/[0.03]",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between gap-2 text-[10px] text-text-muted",children:[(0,r.jsxs)("span",{children:["Showing ",x,"-",b," of ",u.length]}),(0,r.jsxs)("span",{children:["Page ",l," / ",m]})]}),(0,r.jsxs)("div",{className:"mt-1.5 flex items-center justify-end gap-1",children:[(0,r.jsx)("button",{type:"button",onClick:()=>o(e=>Math.max(1,e-1)),disabled:1===l,className:"flex h-6 items-center rounded-md border border-black/10 px-2 text-[10px] text-text-primary transition-colors hover:bg-black/5 disabled:cursor-not-allowed disabled:opacity-40 dark:border-white/10 dark:hover:bg-white/5",children:"Prev"}),(0,r.jsx)("button",{type:"button",onClick:()=>o(e=>Math.min(m,e+1)),disabled:l===m,className:"flex h-6 items-center rounded-md border border-black/10 px-2 text-[10px] text-text-primary transition-colors hover:bg-black/5 disabled:cursor-not-allowed disabled:opacity-40 dark:border-white/10 dark:hover:bg-white/5",children:"Next"})]})]})]})}var d=a(98542),u=a(84588),m=a(35497),h=a(52679);function x(e){let t=e=>"string"==typeof e&&/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e);return t(e.email)?e.email:(t(e.name),e.name)}function b(e,t){let a=t[e.id]?.quotas?.[0];return a&&"number"==typeof a.remaining?a.remaining:1/0}function p(e){return h.Q2[e]?.name||e}function g(e){let t={};return e.forEach(e=>{t[e.id]=!0}),t}function f(e,t){let a=new Set(t.map(e=>e.id));return Object.fromEntries(Object.entries(e).filter(([e])=>a.has(e)))}async function v(e,t){return await e(t)}let y="quotaCacheData";function k(){try{let e=window.localStorage.getItem(y);return e?JSON.parse(e):{}}catch(e){return console.error("Error reading quota cache:",e),{}}}function w(e,t){try{let a=k();a[e]={...t,cachedAt:new Date().toISOString()},window.localStorage.setItem(y,JSON.stringify(a))}catch(e){console.error("Error writing quota cache:",e)}}let j="quotaAutoRefresh",N=[{value:"all",label:"All accounts"},{value:"active",label:"Active"},{value:"inactive",label:"Turned off"}],S=[{value:"single",label:"Satuan",icon:"account_circle"},{value:"bulk",label:"Bulk",icon:"stacks"}],C=[{value:"default",label:"Default quota order"},{value:"remaining-asc",label:"% quota: low to high"},{value:"remaining-desc",label:"% quota: high to low"}],$=[10,20,50,100];function A(){let[e,t]=(0,s.useState)([]),[a,l]=(0,s.useState)({}),[A,q]=(0,s.useState)({}),[E,P]=(0,s.useState)({}),[M,D]=(0,s.useState)(!0),[O,I]=(0,s.useState)(null),[T,L]=(0,s.useState)(!1),[_,z]=(0,s.useState)(!1),[F,U]=(0,s.useState)(60),[R,J]=(0,s.useState)(!0),[K,B]=(0,s.useState)(null),[Q,W]=(0,s.useState)(null),[G,H]=(0,s.useState)(!1),[Y,V]=(0,s.useState)(null),[X,Z]=(0,s.useState)([]),[ee,et]=(0,s.useState)("all"),[ea,er]=(0,s.useState)([]),[es,en]=(0,s.useState)("single"),[el,ei]=(0,s.useState)("all"),[eo,ec]=(0,s.useState)("default"),[ed,eu]=(0,s.useState)(!1),[em,eh]=(0,s.useState)(!1),[ex,eb]=(0,s.useState)(!1),[ep,eg]=(0,s.useState)({}),[ef,ev]=(0,s.useState)({}),[ey,ek]=(0,s.useState)(1),[ew,ej]=(0,s.useState)(20),[eN,eS]=(0,s.useState)(String(20)),[eC,e$]=(0,s.useState)({page:1,pageSize:20,total:0,totalPages:1}),[eA,eq]=(0,s.useState)({eligibleConnections:0,providerFilteredConnections:0}),eE=(0,s.useRef)(null),eP=(0,s.useRef)(null),eM=(0,s.useCallback)(async(e=ey)=>{try{var a,r;let s=new URLSearchParams({page:String(e),pageSize:String(ew),accountStatus:el,sort:"priority"});"all"!==ee&&s.set("provider",ee);let n=await fetch(`/api/providers/client?${s.toString()}`);if(!n.ok)throw Error("Failed to fetch connections");let l=await n.json(),i=l.connections||[],o=(a=l.pagination,a||{page:1,pageSize:ew,total:0,totalPages:1}),c=function(e,t=0){return e||{eligibleConnections:t,providerFilteredConnections:t}}(l.totals,i.length);return t(i),er(l.providerOptions||[]),e$(o),eq(c),ek((r=l.pagination,r?.page||e)),i}catch(e){return console.error("Error fetching connections:",e),t([]),er([]),e$({page:1,pageSize:ew,total:0,totalPages:1}),eq({eligibleConnections:0,providerFilteredConnections:0}),[]}},[el,ey,ew,ee]),eD=(0,s.useCallback)(async(e,t,a=!1)=>{q(t=>({...t,[e]:!0})),P(t=>({...t,[e]:null}));try{console.log(`[ProviderLimits] Fetching quota for ${t} (${e})`);let r=await fetch(`/api/usage/${e}${a?"?refresh=1":""}`);if(!r.ok){let a=(await r.json().catch(()=>({}))).error||r.statusText;if(404===r.status)return void console.warn(`[ProviderLimits] Connection not found for ${t}, skipping`);if(401===r.status){console.warn(`[ProviderLimits] Auth error for ${t}:`,a);let r={quotas:[],message:a};l(t=>({...t,[e]:r})),w(e,r);return}throw Error(`HTTP ${r.status}: ${a}`)}let s=await r.json();console.log(`[ProviderLimits] Got quota for ${t}:`,s);let n={quotas:o(t,s),plan:s.plan||null,message:s.message||null,raw:s};l(t=>({...t,[e]:n})),w(e,n)}catch(a){console.error(`[ProviderLimits] Error fetching quota for ${t} (${e}):`,a),P(t=>({...t,[e]:a.message||"Failed to fetch quota"}))}finally{q(t=>({...t,[e]:!1}))}},[]),eO=(0,s.useCallback)(async(e,t)=>{await eD(e,t),I(new Date)},[eD]),eI=(0,s.useCallback)(async(e,t=!1)=>{if(e&&"all"!==e){ev(t=>({...t,[e]:!0}));try{let a=`/api/usage/aggregate?provider=${encodeURIComponent(e)}${t?"&refresh=1":""}`,r=await fetch(a);if(!r.ok)throw Error("Failed to fetch aggregate");let s=await r.json(),n=o(e,s);eg(t=>({...t,[e]:{quotas:n,plan:s.plan||null,accountCount:s.accountCount||0,accountsWithQuota:s.accountsWithQuota||0,deadCount:s.deadCount||0}}))}catch(t){console.error(`[ProviderLimits] Aggregate fetch error for ${e}:`,t)}finally{ev(t=>({...t,[e]:!1}))}}},[]),eT=(0,s.useCallback)(async(e,t)=>{if("bulk"===es&&t){await eI(t,!0),I(new Date);return}e?.length&&(q(t=>({...t,...Object.fromEntries(e.map(e=>[e,!0]))})),await Promise.all(e.map(e=>eD(e,t))),I(new Date))},[eD,es,eI]),eL=(0,s.useCallback)(async e=>{if(confirm("Delete this connection?")){B(e);try{if((await fetch(`/api/providers/${e}`,{method:"DELETE"})).ok){l(t=>{let a={...t};return delete a[e],a}),q(t=>{let a={...t};return delete a[e],a}),P(t=>{let a={...t};return delete a[e],a});try{let t=k();t[e]&&(delete t[e],window.localStorage.setItem(y,JSON.stringify(t)))}catch(e){console.error("Error deleting cache entry:",e)}await v(eM,ey)}}catch(e){console.error("Error deleting connection:",e)}finally{B(null)}}},[eM,ey]),e_=(0,s.useCallback)(async(e,t)=>{W(e);try{(await fetch(`/api/providers/${e}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({isActive:t})})).ok&&(l(e=>({...e})),await v(eM,ey))}catch(e){console.error("Error updating connection status:",e)}finally{W(null)}},[eM,ey]),ez=(0,s.useCallback)(async e=>{if(!Y?.id)return;let t=Y.id,a=Y.provider;try{(await fetch(`/api/providers/${t}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})).ok&&(await eM(),H(!1),V(null),h.wb.includes(a)&&await eD(t,a))}catch(e){console.error("Error saving connection:",e)}},[Y,eM,eD]);(0,s.useEffect)(()=>{let e=!1;return fetch("/api/proxy-pools?isActive=true",{cache:"no-store"}).then(e=>e.json()).then(t=>{!e&&t?.proxyPools&&Z(t.proxyPools)}).catch(()=>{}),()=>{e=!0}},[]);let eF=(0,s.useCallback)(async()=>{if(!_){z(!0),U(60);try{let e=await eM(ey);q(g(e)),P(t=>f(t,e)),l(t=>f(t,e)),await Promise.all(e.map(e=>eD(e.id,e.provider,!0))),"bulk"===es&&("all"!==ee?[ee]:ea.map(e=>e.value||e).filter(e=>"all"!==e)).forEach(e=>eI(e,!0)),I(new Date)}catch(e){console.error("Error refreshing all providers:",e)}finally{z(!1)}}},[_,eM,eD,ey,es,ee,ea,eI]);(0,s.useEffect)(()=>{(async()=>{J(!0);let e=await eM(ey);J(!1),q(g(e)),P(t=>f(t,e)),l(t=>f(t,e)),await Promise.all(e.map(e=>eD(e.id,e.provider))),I(new Date)})()},[eM,eD,ey]),(0,s.useEffect)(()=>{"bulk"!==es||("all"!==ee?[ee]:ea.map(e=>e.value||e).filter(e=>"all"!==e)).forEach(e=>eI(e))},[es,ee,ea,eI]),(0,s.useEffect)(()=>{let e=window.localStorage.getItem(j);D(null===e||"true"===e),L(!0)},[]),(0,s.useEffect)(()=>{T&&window.localStorage.setItem(j,String(M))},[M,T]),(0,s.useEffect)(()=>{if(!T||!M){eE.current&&(clearInterval(eE.current),eE.current=null),eP.current&&(clearInterval(eP.current),eP.current=null);return}return eE.current=setInterval(()=>{eF()},6e4),eP.current=setInterval(()=>{U(e=>e<=1?60:e-1)},1e3),()=>{eE.current&&clearInterval(eE.current),eP.current&&clearInterval(eP.current)}},[M,eF,T]),(0,s.useEffect)(()=>{let e=()=>{document.hidden?(eE.current&&(clearInterval(eE.current),eE.current=null),eP.current&&(clearInterval(eP.current),eP.current=null)):M&&T&&(eE.current=setInterval(eF,6e4),eP.current=setInterval(()=>{U(e=>e<=1?60:e-1)},1e3))};return document.addEventListener("visibilitychange",e),()=>{document.removeEventListener("visibilitychange",e)}},[M,eF,T]);let eU=(0,s.useMemo)(()=>(function(e,t,a,r,s){if("codex"===r&&"default"!==s)return[...e].sort((e,a)=>{let r=b(e,t),n=b(a,t),l="remaining-asc"===s?r-n:n-r;return 0!==l?l:(x(e)||"").localeCompare(x(a)||"")});if(!a)return e;let n=e=>{let a=(t[e.id]?.quotas||[]).map(e=>e.resetAt?new Date(e.resetAt).getTime():1/0).filter(e=>Number.isFinite(e));return a.length>0?Math.min(...a):1/0};return[...e].sort((e,t)=>{let a=n(e)-n(t);return 0!==a?a:(e.provider||"").localeCompare(t.provider||"")||(x(e)||"").localeCompare(x(t)||"")})})(e,a,ed,ee,eo),[e,a,ed,ee,eo]),eR=(0,s.useMemo)(()=>{let e;return e=new Map,eU.forEach(t=>{t.provider&&(e.has(t.provider)||e.set(t.provider,[]),e.get(t.provider).push(t))}),[...e.entries()].map(([e,t])=>(function(e,t,a,r,s){if(!t.length)return null;let n=[],l=[],i=null,o=!1;return t.forEach(e=>{let t=a[e.id];Array.isArray(t?.quotas)&&n.push(...t.quotas),t?.message&&!i&&(i=t.message),s[e.id]&&l.push(s[e.id]),r[e.id]&&(o=!0)}),{id:`${e}-aggregate`,provider:e,name:p(e),email:`${t.length} accounts`,isActive:t.some(e=>e.isActive??!0),isAggregate:!0,quota:{quotas:function(e=[]){let t=new Map;return e.forEach(e=>{if(!e?.name)return;let a=t.get(e.name)||{name:e.name,used:0,total:0,resetAt:e.resetAt||null};a.used+=Number(e.used)||0,a.total+=Number(e.total)||0,e.resetAt&&(!a.resetAt||new Date(e.resetAt).getTime()<new Date(a.resetAt).getTime())&&(a.resetAt=e.resetAt),t.set(e.name,a)}),[...t.values()]}(n),message:0===n.length&&i||null},isLoading:o,error:!n.length&&l.length>0?l[0]:null,connectionIds:t.map(e=>e.id)}})(e,t,a,A,E)).filter(Boolean)},[eU,a,A,E]),eJ=(0,s.useMemo)(()=>Object.keys(ep).length?eR.map(e=>{let t=ep[e.provider];return t&&t.quotas?.length?{...e,email:`${t.accountCount||e.connectionIds?.length||0} accounts`,quota:{...e.quota,quotas:t.quotas,message:null},isLoading:ef[e.provider]||!1}:e}):eR,[eR,ep,ef]),eK=(0,s.useMemo)(()=>"bulk"===es?eJ:eU,[es,eJ,eU]),eB=e=>{let t=a[e.id]?.quotas;return!!t?.length&&t.some(e=>!!e.total&&!(e.total<=0)&&5>=i(e.used,e.total))},eQ=(0,s.useCallback)(async(e,t)=>{if(e.length&&!ex){eb(!0);try{await Promise.all(e.map(e=>fetch(`/api/providers/${e}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({isActive:t})}))),await v(eM,ey)}catch(e){console.error("Error bulk toggling connections:",e)}finally{eb(!1)}}},[ex,eM,ey]),eW="all"===ee?"All providers":ee,eG=eA.eligibleConnections>0,eH=eK.length>0,eY=eA.eligibleConnections?eA.providerFilteredConnections?{icon:"filter_alt_off",title:"No Accounts On This Page",description:"Try moving to another page or refreshing the current filters."}:{icon:"filter_alt_off",title:"No Accounts Match Current Filters",description:"all"===ee?"Try changing the account status filter to see more quota trackers.":`No ${"inactive"===el?"turned off":"active"===el?"active":"matching"} accounts found for ${ee}.`}:{icon:"cloud_off",title:"No Providers Connected",description:"Connect to providers with OAuth to track your API quota limits and usage."},eV=function(e){var t;let{start:a,end:r}=(t=e).total?{start:(t.page-1)*t.pageSize+1,end:Math.min(t.page*t.pageSize,t.total)}:{start:0,end:0};return`Showing ${a}-${r} of ${e.total}`}(eC),eX=!$.includes(ew);return R||eG?R||eH?(0,r.jsxs)("div",{className:"space-y-6",children:[(0,r.jsx)("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-end",children:(0,r.jsxs)("div",{className:"flex flex-wrap items-center gap-1.5",children:[(0,r.jsxs)("div",{className:"relative",children:[(0,r.jsxs)("button",{type:"button",onClick:()=>eh(e=>!e),className:"flex h-8 items-center justify-between gap-1 rounded-lg border border-black/10 bg-black/[0.02] px-2 text-xs text-text-primary transition-colors hover:bg-black/5 dark:border-white/10 dark:bg-white/[0.03] dark:hover:bg-white/10","aria-haspopup":"menu","aria-expanded":em,title:"Filter quota providers",children:[(0,r.jsxs)("span",{className:"flex min-w-0 items-center gap-1.5",children:["all"===ee?(0,r.jsx)("span",{className:"material-symbols-outlined text-[14px] text-text-muted",children:"apps"}):(0,r.jsx)(n.A,{src:`/providers/${ee}.png`,alt:ee,size:18,className:"size-[18px] rounded object-contain",fallbackText:ee.slice(0,2).toUpperCase()}),(0,r.jsx)("span",{className:"truncate capitalize hidden lg:inline",children:eW})]}),(0,r.jsx)("span",{className:"material-symbols-outlined text-[14px] text-text-muted",children:"expand_more"})]}),em&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("button",{type:"button",className:"fixed inset-0 z-30 bg-transparent","aria-label":"Close provider filter",onClick:()=>eh(!1)}),(0,r.jsxs)("div",{className:"absolute left-0 z-40 mt-2 w-64 overflow-hidden rounded-2xl border border-black/10 bg-surface/95 p-1.5 shadow-xl shadow-black/10 backdrop-blur dark:border-white/10 dark:bg-surface/95 sm:w-72",children:[(0,r.jsxs)("button",{type:"button",onClick:()=>{"all"!==ee&&ek(1),et("all"),eh(!1)},className:`flex w-full items-center gap-3 rounded-xl px-3 py-2.5 text-left text-sm transition-colors ${"all"===ee?"bg-primary/10 text-primary":"text-text-primary hover:bg-black/5 dark:hover:bg-white/10"}`,children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-[22px]",children:"apps"}),(0,r.jsx)("span",{className:"font-medium",children:"All providers"}),"all"===ee&&(0,r.jsx)("span",{className:"material-symbols-outlined ml-auto text-[20px]",children:"check"})]}),(0,r.jsx)("div",{className:"my-1 h-px bg-black/10 dark:bg-white/10"}),(0,r.jsx)("div",{className:"max-h-72 overflow-y-auto pr-1",children:ea.map(e=>(0,r.jsxs)("button",{type:"button",onClick:()=>{ee!==e&&ek(1),et(e),eh(!1)},className:`flex w-full items-center gap-3 rounded-xl px-3 py-2.5 text-left text-sm transition-colors ${ee===e?"bg-primary/10 text-primary":"text-text-primary hover:bg-black/5 dark:hover:bg-white/10"}`,children:[(0,r.jsx)(n.A,{src:`/providers/${e}.png`,alt:e,size:24,className:"size-6 rounded-md object-contain",fallbackText:e.slice(0,2).toUpperCase()}),(0,r.jsx)("span",{className:"font-medium capitalize",children:e}),ee===e&&(0,r.jsx)("span",{className:"material-symbols-outlined ml-auto text-[20px]",children:"check"})]},e))})]})]})]}),(0,r.jsx)("div",{className:"inline-flex h-8 overflow-hidden rounded-lg border border-black/10 bg-black/[0.02] dark:border-white/10 dark:bg-white/[0.03]",children:S.map(e=>(0,r.jsxs)("button",{type:"button",onClick:()=>en(e.value),"aria-pressed":es===e.value,className:`flex h-full items-center gap-1.5 px-2 text-xs transition-colors ${es===e.value?"bg-primary text-white":"text-text-primary hover:bg-black/5 dark:hover:bg-white/10"}`,title:`Show quota in ${e.label} mode`,children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:e.icon}),(0,r.jsx)("span",{className:"hidden sm:inline",children:e.label})]},e.value))}),(0,r.jsx)("select",{value:el,onChange:e=>{let t=e.target.value;el!==t&&ek(1),ei(t)},className:"h-8 rounded-lg border border-black/10 bg-black/[0.02] px-2 text-xs text-text-primary outline-none transition-colors hover:bg-black/5 dark:border-white/10 dark:bg-white/[0.03] dark:hover:bg-white/10","aria-label":"Filter accounts by status",children:N.map(e=>(0,r.jsx)("option",{value:e.value,children:e.label},e.value))}),"codex"===ee&&(0,r.jsx)("select",{value:eo,onChange:e=>ec(e.target.value),className:"h-8 rounded-lg border border-black/10 bg-black/[0.02] px-2 text-xs text-text-primary outline-none transition-colors hover:bg-black/5 dark:border-white/10 dark:bg-white/[0.03] dark:hover:bg-white/10","aria-label":"Sort Codex quotas by remaining",children:C.map(e=>(0,r.jsx)("option",{value:e.value,children:e.label},e.value))}),(0,r.jsxs)("button",{type:"button",onClick:()=>eu(e=>!e),"aria-pressed":ed,className:`flex h-8 shrink-0 items-center gap-1 rounded-lg border px-2 text-xs transition-colors ${ed?"border-amber-500/40 bg-amber-500/10 text-amber-500":"border-black/10 text-text-primary hover:bg-black/5 dark:border-white/10 dark:hover:bg-white/5"}`,title:"Sort accounts by earliest quota reset time",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"hourglass_top"}),(0,r.jsx)("span",{className:"hidden sm:inline",children:"Expiring first"})]}),(0,r.jsxs)("button",{type:"button",onClick:()=>{eQ(eU.filter(e=>(e.isActive??!0)&&eB(e)).map(e=>e.id),!1)},disabled:ex,className:"flex h-8 shrink-0 items-center gap-1 rounded-lg border border-red-500/30 px-2 text-xs text-red-500 transition-colors hover:bg-red-500/10 disabled:opacity-50",title:"Disable connections with depleted quota on the current page",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"block"}),(0,r.jsx)("span",{className:"hidden sm:inline",children:"Turn off Empty"})]}),(0,r.jsxs)("button",{type:"button",onClick:()=>{eQ(eU.filter(e=>!(e.isActive??!0)&&!eB(e)).map(e=>e.id),!0)},disabled:ex,className:"flex h-8 shrink-0 items-center gap-1 rounded-lg border border-emerald-500/30 px-2 text-xs text-emerald-500 transition-colors hover:bg-emerald-500/10 disabled:opacity-50",title:"Enable connections that still have quota on the current page",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"check_circle"}),(0,r.jsx)("span",{className:"hidden sm:inline",children:"Turn on Available"})]}),(0,r.jsxs)("button",{onClick:()=>D(e=>!e),className:"flex h-8 shrink-0 items-center gap-1 rounded-lg border border-black/10 px-2 text-xs transition-colors hover:bg-black/5 dark:border-white/10 dark:hover:bg-white/5",title:M?"Disable auto-refresh":"Enable auto-refresh",children:[(0,r.jsx)("span",{className:`material-symbols-outlined text-[14px] ${M?"text-primary":"text-text-muted"}`,children:M?"toggle_on":"toggle_off"}),(0,r.jsx)("span",{className:"hidden text-text-primary sm:inline",children:"Auto-refresh"}),M&&(0,r.jsxs)("span",{className:"text-[10px] text-text-muted tabular-nums",children:["(",F,"s)"]})]}),(0,r.jsx)("button",{type:"button",onClick:eF,disabled:_,className:"flex h-8 shrink-0 items-center gap-1 rounded-lg border border-black/10 px-2 text-xs text-text-primary transition-colors hover:bg-black/5 dark:border-white/10 dark:hover:bg-white/5 disabled:opacity-50",title:"Refresh all",children:(0,r.jsx)("span",{className:`material-symbols-outlined text-[14px] ${_?"animate-spin":""}`,children:"refresh"})})]})}),ed&&(0,r.jsx)("div",{className:"rounded-xl border border-amber-500/20 bg-amber-500/10 px-3 py-2 text-xs text-amber-700 dark:text-amber-300",children:"Expiring-first currently reorders accounts inside the current page. Cross-page ordering still follows backend pagination."}),(0,r.jsx)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-3",children:eK.map(e=>{let t=!0===e.isAggregate,s=t?e.quota:a[e.id],l=t?e.isLoading:A[e.id],i=t?e.error:E[e.id],o=!1===e.isActive,m=!t&&(K===e.id||Q===e.id);return(0,r.jsxs)(u.default,{padding:"none",className:`min-w-0 ${o?"opacity-60":""}`,children:[(0,r.jsx)("div",{className:"px-3 py-2 border-b border-black/10 dark:border-white/10",children:(0,r.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 min-w-0",children:[(0,r.jsx)("div",{className:"w-8 h-8 shrink-0 rounded-md flex items-center justify-center overflow-hidden",children:(0,r.jsx)(n.A,{src:`/providers/${e.provider}.png`,alt:e.provider,size:32,className:"object-contain",fallbackText:e.provider?.slice(0,2).toUpperCase()||"PR"})}),(0,r.jsxs)("div",{className:"min-w-0",children:[(0,r.jsx)("h3",{className:"text-sm font-semibold text-text-primary capitalize truncate",children:e.name||p(e.provider)}),x(e)?(0,r.jsx)("p",{className:"text-xs text-text-muted truncate",children:x(e)}):null]})]}),(0,r.jsxs)("div",{className:"flex items-center gap-1 shrink-0",children:[(0,r.jsx)("button",{type:"button",onClick:()=>t?eT(e.connectionIds,e.provider):eO(e.id,e.provider),disabled:l||m,"aria-label":"Refresh quota",className:"p-1.5 rounded-lg hover:bg-black/5 dark:hover:bg-white/5 transition-colors disabled:opacity-50",title:"Refresh quota",children:(0,r.jsx)("span",{className:`material-symbols-outlined text-[18px] text-text-muted ${l?"animate-spin":""}`,children:"refresh"})}),!t&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("button",{type:"button",onClick:()=>{V(e),H(!0)},disabled:m,"aria-label":"Edit connection",className:"p-1.5 rounded-lg hover:bg-black/5 dark:hover:bg-white/5 text-text-muted hover:text-primary transition-colors disabled:opacity-50",title:"Edit connection",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"edit"})}),(0,r.jsx)("button",{type:"button",onClick:()=>eL(e.id),disabled:m,"aria-label":"Delete connection",className:"p-1.5 rounded-lg hover:bg-red-500/10 text-red-500 transition-colors disabled:opacity-50",title:"Delete connection",children:(0,r.jsx)("span",{className:`material-symbols-outlined text-[18px] ${K===e.id?"animate-pulse":""}`,children:"delete"})}),(0,r.jsx)("div",{className:"inline-flex items-center pl-0.5",title:e.isActive??!0?"Disable connection":"Enable connection",children:(0,r.jsx)(d.default,{size:"sm",checked:e.isActive??!0,disabled:m,onChange:t=>e_(e.id,t)})})]})]})]})}),(0,r.jsx)("div",{className:"px-2 py-1.5",children:l?(0,r.jsx)("div",{className:"text-center py-5 text-text-muted",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-[28px] animate-spin",children:"progress_activity"})}):i?(0,r.jsxs)("div",{className:"text-center py-5",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-[28px] text-red-500",children:"error"}),(0,r.jsx)("p",{className:"mt-1.5 text-xs text-text-muted",children:i})]}):s?.message?(0,r.jsx)("div",{className:"text-center py-5",children:(0,r.jsx)("p",{className:"text-xs text-text-muted",children:s.message})}):(0,r.jsx)(c,{quotas:s?.quotas,compact:!0,sortMode:"default",showSortLabel:"codex"===e.provider&&"default"!==eo})})]},e.id)})}),(0,r.jsx)("div",{className:"rounded-xl border border-black/10 bg-black/[0.02] px-3 py-2 dark:border-white/10 dark:bg-white/[0.03]",children:(0,r.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,r.jsx)("span",{className:"text-xs text-text-muted",children:eV}),(0,r.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,r.jsxs)("select",{value:eX?"custom":String(ew),onChange:e=>{let t=e.target.value;if("custom"===t)return;let a=Number.parseInt(t,10);Number.isFinite(a)&&(ek(1),ej(a),eS(String(a)))},className:"h-8 rounded-lg border border-black/10 bg-black/[0.02] px-2 text-xs text-text-primary outline-none transition-colors hover:bg-black/5 dark:border-white/10 dark:bg-white/[0.03] dark:hover:bg-white/10","aria-label":"Accounts per page",children:[$.map(e=>(0,r.jsxs)("option",{value:String(e),children:[e," / page"]},e)),(0,r.jsx)("option",{value:"custom",children:"Custom"})]}),(0,r.jsx)("input",{type:"number",min:"1",max:String(500),inputMode:"numeric",value:eN,onChange:e=>eS(e.target.value),onBlur:()=>{let e=Number.parseInt(eN,10);if(!Number.isFinite(e))return void eS(String(ew));let t=Math.min(500,Math.max(1,e));ek(1),ej(t),eS(String(t))},onKeyDown:e=>{if("Enter"!==e.key)return;let t=Number.parseInt(eN,10);if(!Number.isFinite(t))return void eS(String(ew));let a=Math.min(500,Math.max(1,t));ek(1),ej(a),eS(String(a))},className:"h-8 w-20 rounded-lg border border-black/10 bg-black/[0.02] px-2 text-xs text-text-primary outline-none transition-colors hover:bg-black/5 dark:border-white/10 dark:bg-white/[0.03] dark:hover:bg-white/10","aria-label":"Custom accounts per page",placeholder:"Custom"}),(0,r.jsxs)("span",{className:"text-xs text-text-muted",children:["Page ",eC.page," / ",eC.totalPages]})]}),(0,r.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,r.jsx)("button",{type:"button",onClick:()=>ek(1),disabled:eC.page<=1||R||_,className:"flex h-8 items-center rounded-lg border border-black/10 px-3 text-xs text-text-primary transition-colors hover:bg-black/5 disabled:cursor-not-allowed disabled:opacity-40 dark:border-white/10 dark:hover:bg-white/5",children:"First Page"}),(0,r.jsx)("button",{type:"button",onClick:()=>ek(e=>Math.max(1,e-1)),disabled:eC.page<=1||R||_,className:"flex h-8 w-8 items-center justify-center rounded-lg border border-black/10 text-text-primary transition-colors hover:bg-black/5 disabled:cursor-not-allowed disabled:opacity-40 dark:border-white/10 dark:hover:bg-white/5","aria-label":"Previous accounts page",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"chevron_left"})}),(0,r.jsx)("button",{type:"button",onClick:()=>ek(e=>Math.min(eC.totalPages,e+1)),disabled:eC.page>=eC.totalPages||R||_,className:"flex h-8 w-8 items-center justify-center rounded-lg border border-black/10 text-text-primary transition-colors hover:bg-black/5 disabled:cursor-not-allowed disabled:opacity-40 dark:border-white/10 dark:hover:bg-white/5","aria-label":"Next accounts page",children:(0,r.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"chevron_right"})}),(0,r.jsx)("button",{type:"button",onClick:()=>ek(eC.totalPages),disabled:eC.page>=eC.totalPages||R||_,className:"flex h-8 items-center rounded-lg border border-black/10 px-3 text-xs text-text-primary transition-colors hover:bg-black/5 disabled:cursor-not-allowed disabled:opacity-40 dark:border-white/10 dark:hover:bg-white/5",children:"Last Page"})]})]})}),(0,r.jsx)(m.wI,{isOpen:G,connection:Y,proxyPools:X,onSave:ez,onClose:()=>{H(!1),V(null)}})]}):(0,r.jsx)(u.default,{padding:"lg",children:(0,r.jsxs)("div",{className:"text-center py-12",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-[64px] text-text-muted opacity-20",children:eY.icon}),(0,r.jsx)("h3",{className:"mt-4 text-lg font-semibold text-text-primary",children:eY.title}),(0,r.jsx)("p",{className:"mt-2 text-sm text-text-muted max-w-md mx-auto",children:eY.description})]})}):(0,r.jsx)(u.default,{padding:"lg",children:(0,r.jsxs)("div",{className:"text-center py-12",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-[64px] text-text-muted opacity-20",children:"cloud_off"}),(0,r.jsx)("h3",{className:"mt-4 text-lg font-semibold text-text-primary",children:"No Providers Connected"}),(0,r.jsx)("p",{className:"mt-2 text-sm text-text-muted max-w-md mx-auto",children:"Connect to providers with OAuth to track your API quota limits and usage."})]})})}}},e=>{e.O(0,[2574,3862,4343,3702,5497,8441,3794,7358],()=>e(e.s=5498)),_N_E=e.O()}]);