zevairouter 1.0.12 → 1.0.14

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 (637) hide show
  1. package/README.md +125 -44
  2. package/cli/app/.next-cli-build/BUILD_ID +1 -1
  3. package/cli/app/.next-cli-build/app-path-routes-manifest.json +3 -3
  4. package/cli/app/.next-cli-build/build-manifest.json +2 -2
  5. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/automation/page.js +1 -1
  6. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/automation/page.js.nft.json +1 -1
  7. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/automation/page_client-reference-manifest.js +1 -1
  8. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js +1 -1
  9. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -1
  10. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  11. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +1 -1
  12. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
  13. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  14. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js +1 -1
  15. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  16. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  17. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js +1 -1
  18. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
  19. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  20. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js +1 -1
  21. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
  22. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  23. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js +1 -1
  24. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  25. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  26. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js +1 -1
  27. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js.nft.json +1 -1
  28. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  29. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js +1 -1
  30. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js.nft.json +1 -1
  31. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  32. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js +1 -1
  33. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js.nft.json +1 -1
  34. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  35. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js +1 -1
  36. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js.nft.json +1 -1
  37. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  38. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js +1 -1
  39. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -1
  40. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  41. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js +1 -1
  42. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  43. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  44. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js +2 -2
  45. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
  46. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  47. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js +1 -1
  48. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
  49. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  50. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js +1 -1
  51. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
  52. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  53. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js +1 -1
  54. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
  55. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  56. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js +1 -1
  57. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
  58. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  59. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js +2 -2
  60. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
  61. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  62. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js +1 -1
  63. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js.nft.json +1 -1
  64. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
  65. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js +1 -1
  66. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
  67. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  68. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js +1 -1
  69. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
  70. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  71. package/cli/app/.next-cli-build/server/app/_global-error/page.js.nft.json +1 -1
  72. package/cli/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  73. package/cli/app/.next-cli-build/server/app/_global-error.html +1 -1
  74. package/cli/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  75. package/cli/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  76. package/cli/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  77. package/cli/app/.next-cli-build/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  78. package/cli/app/.next-cli-build/server/app/_global-error.segments/_head.segment.rsc +1 -1
  79. package/cli/app/.next-cli-build/server/app/_global-error.segments/_index.segment.rsc +1 -1
  80. package/cli/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  81. package/cli/app/.next-cli-build/server/app/_not-found/page.js +1 -1
  82. package/cli/app/.next-cli-build/server/app/_not-found/page.js.nft.json +1 -1
  83. package/cli/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  84. package/cli/app/.next-cli-build/server/app/_not-found.html +1 -1
  85. package/cli/app/.next-cli-build/server/app/_not-found.rsc +4 -4
  86. package/cli/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +4 -4
  87. package/cli/app/.next-cli-build/server/app/_not-found.segments/_head.segment.rsc +1 -1
  88. package/cli/app/.next-cli-build/server/app/_not-found.segments/_index.segment.rsc +4 -4
  89. package/cli/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  90. package/cli/app/.next-cli-build/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  91. package/cli/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  92. package/cli/app/.next-cli-build/server/app/api/auth/login/route.js +1 -1
  93. package/cli/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
  94. package/cli/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
  95. package/cli/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js +1 -1
  96. package/cli/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
  97. package/cli/app/.next-cli-build/server/app/api/auth/oidc/start/route.js +1 -1
  98. package/cli/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
  99. package/cli/app/.next-cli-build/server/app/api/auth/oidc/test/route.js +1 -1
  100. package/cli/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
  101. package/cli/app/.next-cli-build/server/app/api/auth/status/route.js +1 -1
  102. package/cli/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
  103. package/cli/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js +1 -1
  104. package/cli/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
  105. package/cli/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js +1 -1
  106. package/cli/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  107. package/cli/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js +1 -1
  108. package/cli/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
  109. package/cli/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
  110. package/cli/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js.nft.json +1 -1
  111. package/cli/app/.next-cli-build/server/app/api/cli-tools/codex-gateway/accounts/route.js +1 -1
  112. package/cli/app/.next-cli-build/server/app/api/cli-tools/codex-gateway/accounts/route.js.nft.json +1 -1
  113. package/cli/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
  114. package/cli/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
  115. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js.nft.json +1 -1
  116. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js.nft.json +1 -1
  117. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js +1 -1
  118. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
  119. package/cli/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js.nft.json +1 -1
  120. package/cli/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
  121. package/cli/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js.nft.json +1 -1
  122. package/cli/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js.nft.json +1 -1
  123. package/cli/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js.nft.json +1 -1
  124. package/cli/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
  125. package/cli/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js.nft.json +1 -1
  126. package/cli/app/.next-cli-build/server/app/api/combos/[id]/route.js +1 -1
  127. package/cli/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
  128. package/cli/app/.next-cli-build/server/app/api/combos/route.js +1 -1
  129. package/cli/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
  130. package/cli/app/.next-cli-build/server/app/api/health/route.js.nft.json +1 -1
  131. package/cli/app/.next-cli-build/server/app/api/init/route.js +1 -1
  132. package/cli/app/.next-cli-build/server/app/api/init/route.js.nft.json +1 -1
  133. package/cli/app/.next-cli-build/server/app/api/keys/[id]/route.js +1 -1
  134. package/cli/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
  135. package/cli/app/.next-cli-build/server/app/api/keys/route.js +1 -1
  136. package/cli/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
  137. package/cli/app/.next-cli-build/server/app/api/locale/route.js.nft.json +1 -1
  138. package/cli/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
  139. package/cli/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
  140. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js +1 -1
  141. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
  142. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js +1 -1
  143. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
  144. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js +1 -1
  145. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
  146. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js +1 -1
  147. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
  148. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -1
  149. package/cli/app/.next-cli-build/server/app/api/models/alias/route.js +1 -1
  150. package/cli/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
  151. package/cli/app/.next-cli-build/server/app/api/models/availability/route.js +1 -1
  152. package/cli/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
  153. package/cli/app/.next-cli-build/server/app/api/models/custom/route.js +1 -1
  154. package/cli/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
  155. package/cli/app/.next-cli-build/server/app/api/models/disabled/route.js +1 -1
  156. package/cli/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
  157. package/cli/app/.next-cli-build/server/app/api/models/route.js +1 -1
  158. package/cli/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
  159. package/cli/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
  160. package/cli/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
  161. package/cli/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js +1 -1
  162. package/cli/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  163. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/cancel/route.js +1 -1
  164. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  165. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/manual/[workerId]/route.js +1 -1
  166. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  167. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/route.js +1 -1
  168. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/route.js.nft.json +1 -1
  169. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/latest/route.js +1 -1
  170. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/latest/route.js.nft.json +1 -1
  171. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/route.js +1 -1
  172. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/route.js.nft.json +1 -1
  173. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/cancel/route.js +1 -1
  174. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  175. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/manual/[workerId]/route.js +1 -1
  176. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  177. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/route.js +1 -1
  178. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/route.js.nft.json +1 -1
  179. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/latest/route.js +1 -1
  180. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/latest/route.js.nft.json +1 -1
  181. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/route.js +1 -1
  182. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/route.js.nft.json +1 -1
  183. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-token/route.js +1 -1
  184. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-token/route.js.nft.json +1 -1
  185. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/quota-cookie/route.js +1 -1
  186. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/quota-cookie/route.js.nft.json +1 -1
  187. package/cli/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js +1 -1
  188. package/cli/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
  189. package/cli/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
  190. package/cli/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js +1 -1
  191. package/cli/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  192. package/cli/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js +1 -1
  193. package/cli/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
  194. package/cli/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js +1 -1
  195. package/cli/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
  196. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -1
  197. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/cancel/route.js +1 -1
  198. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  199. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/manual/[workerId]/route.js +1 -1
  200. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  201. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/route.js +1 -1
  202. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/route.js.nft.json +1 -1
  203. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/latest/route.js +1 -1
  204. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/latest/route.js.nft.json +1 -1
  205. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/route.js +1 -1
  206. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/route.js.nft.json +1 -1
  207. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js +1 -1
  208. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  209. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +1 -1
  210. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js +1 -1
  211. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  212. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/cancel/route.js +1 -1
  213. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  214. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/manual/[workerId]/route.js +1 -1
  215. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  216. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/route.js +1 -1
  217. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/route.js.nft.json +1 -1
  218. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/latest/route.js +1 -1
  219. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/latest/route.js.nft.json +1 -1
  220. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/route.js +1 -1
  221. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/route.js.nft.json +1 -1
  222. package/cli/app/.next-cli-build/server/app/api/pricing/route.js +1 -1
  223. package/cli/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
  224. package/cli/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js +1 -1
  225. package/cli/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  226. package/cli/app/.next-cli-build/server/app/api/provider-nodes/route.js +1 -1
  227. package/cli/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
  228. package/cli/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js.nft.json +1 -1
  229. package/cli/app/.next-cli-build/server/app/api/providers/[id]/models/route.js +1 -1
  230. package/cli/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  231. package/cli/app/.next-cli-build/server/app/api/providers/[id]/route.js +1 -1
  232. package/cli/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
  233. package/cli/app/.next-cli-build/server/app/api/providers/[id]/test/route.js +1 -1
  234. package/cli/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  235. package/cli/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
  236. package/cli/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  237. package/cli/app/.next-cli-build/server/app/api/providers/client/route.js +1 -1
  238. package/cli/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
  239. package/cli/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js.nft.json +1 -1
  240. package/cli/app/.next-cli-build/server/app/api/providers/route.js +1 -1
  241. package/cli/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
  242. package/cli/app/.next-cli-build/server/app/api/providers/suggested-models/route.js.nft.json +1 -1
  243. package/cli/app/.next-cli-build/server/app/api/providers/test-batch/route.js +1 -1
  244. package/cli/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  245. package/cli/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
  246. package/cli/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
  247. package/cli/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js +1 -1
  248. package/cli/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
  249. package/cli/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js +1 -1
  250. package/cli/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
  251. package/cli/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js +1 -1
  252. package/cli/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
  253. package/cli/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js +1 -1
  254. package/cli/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
  255. package/cli/app/.next-cli-build/server/app/api/proxy-pools/route.js +1 -1
  256. package/cli/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
  257. package/cli/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js +1 -1
  258. package/cli/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
  259. package/cli/app/.next-cli-build/server/app/api/settings/database/route.js +1 -1
  260. package/cli/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
  261. package/cli/app/.next-cli-build/server/app/api/settings/proxy-test/route.js.nft.json +1 -1
  262. package/cli/app/.next-cli-build/server/app/api/settings/require-login/route.js +1 -1
  263. package/cli/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
  264. package/cli/app/.next-cli-build/server/app/api/settings/route.js +1 -1
  265. package/cli/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
  266. package/cli/app/.next-cli-build/server/app/api/shutdown/route.js.nft.json +1 -1
  267. package/cli/app/.next-cli-build/server/app/api/tags/route.js.nft.json +1 -1
  268. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
  269. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/route.js.nft.json +1 -1
  270. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +2 -2
  271. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -1
  272. package/cli/app/.next-cli-build/server/app/api/translator/load/route.js.nft.json +1 -1
  273. package/cli/app/.next-cli-build/server/app/api/translator/save/route.js.nft.json +1 -1
  274. package/cli/app/.next-cli-build/server/app/api/translator/send/route.js +1 -1
  275. package/cli/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
  276. package/cli/app/.next-cli-build/server/app/api/translator/translate/route.js +1 -1
  277. package/cli/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
  278. package/cli/app/.next-cli-build/server/app/api/tunnel/disable/route.js +1 -1
  279. package/cli/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  280. package/cli/app/.next-cli-build/server/app/api/tunnel/enable/route.js +1 -1
  281. package/cli/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  282. package/cli/app/.next-cli-build/server/app/api/tunnel/status/route.js +1 -1
  283. package/cli/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
  284. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js +1 -1
  285. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
  286. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js +1 -1
  287. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
  288. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js +1 -1
  289. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
  290. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js +1 -1
  291. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
  292. package/cli/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js +1 -1
  293. package/cli/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  294. package/cli/app/.next-cli-build/server/app/api/usage/chart/route.js +1 -1
  295. package/cli/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
  296. package/cli/app/.next-cli-build/server/app/api/usage/history/route.js +1 -1
  297. package/cli/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
  298. package/cli/app/.next-cli-build/server/app/api/usage/providers/route.js +1 -1
  299. package/cli/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
  300. package/cli/app/.next-cli-build/server/app/api/usage/request-details/route.js +1 -1
  301. package/cli/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
  302. package/cli/app/.next-cli-build/server/app/api/usage/request-logs/route.js +1 -1
  303. package/cli/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  304. package/cli/app/.next-cli-build/server/app/api/usage/stats/route.js +1 -1
  305. package/cli/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
  306. package/cli/app/.next-cli-build/server/app/api/usage/stream/route.js +2 -2
  307. package/cli/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
  308. package/cli/app/.next-cli-build/server/app/api/v1/api/chat/route.js +1 -1
  309. package/cli/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  310. package/cli/app/.next-cli-build/server/app/api/v1/audio/speech/route.js +1 -1
  311. package/cli/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  312. package/cli/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js +1 -1
  313. package/cli/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  314. package/cli/app/.next-cli-build/server/app/api/v1/audio/voices/route.js.nft.json +1 -1
  315. package/cli/app/.next-cli-build/server/app/api/v1/chat/completions/route.js +1 -1
  316. package/cli/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  317. package/cli/app/.next-cli-build/server/app/api/v1/embeddings/route.js +1 -1
  318. package/cli/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  319. package/cli/app/.next-cli-build/server/app/api/v1/images/generations/route.js +1 -1
  320. package/cli/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  321. package/cli/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -1
  322. package/cli/app/.next-cli-build/server/app/api/v1/messages/route.js +1 -1
  323. package/cli/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
  324. package/cli/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js +1 -1
  325. package/cli/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
  326. package/cli/app/.next-cli-build/server/app/api/v1/models/info/route.js +1 -1
  327. package/cli/app/.next-cli-build/server/app/api/v1/models/info/route.js.nft.json +1 -1
  328. package/cli/app/.next-cli-build/server/app/api/v1/models/route.js +1 -1
  329. package/cli/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
  330. package/cli/app/.next-cli-build/server/app/api/v1/responses/compact/route.js +1 -1
  331. package/cli/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
  332. package/cli/app/.next-cli-build/server/app/api/v1/responses/route.js +1 -1
  333. package/cli/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
  334. package/cli/app/.next-cli-build/server/app/api/v1/route.js +1 -1
  335. package/cli/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
  336. package/cli/app/.next-cli-build/server/app/api/v1/search/route.js +1 -1
  337. package/cli/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
  338. package/cli/app/.next-cli-build/server/app/api/v1/web/fetch/route.js +1 -1
  339. package/cli/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
  340. package/cli/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js +1 -1
  341. package/cli/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  342. package/cli/app/.next-cli-build/server/app/api/v1beta/models/route.js +1 -1
  343. package/cli/app/.next-cli-build/server/app/api/v1beta/models/route.js.nft.json +1 -1
  344. package/cli/app/.next-cli-build/server/app/api/version/route.js +1 -1
  345. package/cli/app/.next-cli-build/server/app/api/version/route.js.nft.json +1 -1
  346. package/cli/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
  347. package/cli/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
  348. package/cli/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
  349. package/cli/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +1 -1
  350. package/cli/app/.next-cli-build/server/app/callback/page.js +1 -1
  351. package/cli/app/.next-cli-build/server/app/callback/page.js.nft.json +1 -1
  352. package/cli/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  353. package/cli/app/.next-cli-build/server/app/callback.html +1 -1
  354. package/cli/app/.next-cli-build/server/app/callback.rsc +4 -4
  355. package/cli/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +4 -4
  356. package/cli/app/.next-cli-build/server/app/callback.segments/_head.segment.rsc +1 -1
  357. package/cli/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +4 -4
  358. package/cli/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +2 -2
  359. package/cli/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  360. package/cli/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
  361. package/cli/app/.next-cli-build/server/app/dashboard/automation.html +1 -1
  362. package/cli/app/.next-cli-build/server/app/dashboard/automation.rsc +6 -6
  363. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation/__PAGE__.segment.rsc +2 -2
  364. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation.segment.rsc +1 -1
  365. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  366. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  367. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_full.segment.rsc +6 -6
  368. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_head.segment.rsc +1 -1
  369. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_index.segment.rsc +4 -4
  370. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_tree.segment.rsc +2 -2
  371. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
  372. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +6 -6
  373. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
  374. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
  375. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  376. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  377. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +6 -6
  378. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
  379. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_index.segment.rsc +4 -4
  380. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +2 -2
  381. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
  382. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +6 -6
  383. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
  384. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
  385. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  386. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  387. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +6 -6
  388. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
  389. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_index.segment.rsc +4 -4
  390. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +2 -2
  391. package/cli/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
  392. package/cli/app/.next-cli-build/server/app/dashboard/combos.rsc +6 -6
  393. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
  394. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
  395. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  396. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  397. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +6 -6
  398. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
  399. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_index.segment.rsc +4 -4
  400. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +2 -2
  401. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
  402. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.rsc +6 -6
  403. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
  404. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
  405. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  406. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  407. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +6 -6
  408. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
  409. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_index.segment.rsc +4 -4
  410. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +2 -2
  411. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
  412. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +6 -6
  413. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
  414. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
  415. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
  416. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  417. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  418. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +6 -6
  419. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
  420. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +4 -4
  421. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +2 -2
  422. package/cli/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
  423. package/cli/app/.next-cli-build/server/app/dashboard/mitm.rsc +6 -6
  424. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
  425. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
  426. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  427. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  428. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +6 -6
  429. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
  430. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_index.segment.rsc +4 -4
  431. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +2 -2
  432. package/cli/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
  433. package/cli/app/.next-cli-build/server/app/dashboard/profile.rsc +6 -6
  434. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
  435. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
  436. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  437. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  438. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +6 -6
  439. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
  440. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_index.segment.rsc +4 -4
  441. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +2 -2
  442. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
  443. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.rsc +6 -6
  444. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
  445. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
  446. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  447. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  448. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  449. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +6 -6
  450. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
  451. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_index.segment.rsc +4 -4
  452. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +2 -2
  453. package/cli/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
  454. package/cli/app/.next-cli-build/server/app/dashboard/providers.rsc +6 -6
  455. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
  456. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  457. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  458. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  459. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +6 -6
  460. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
  461. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_index.segment.rsc +4 -4
  462. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +2 -2
  463. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
  464. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +6 -6
  465. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
  466. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
  467. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  468. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  469. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +6 -6
  470. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
  471. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +4 -4
  472. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +2 -2
  473. package/cli/app/.next-cli-build/server/app/dashboard/quota.html +2 -2
  474. package/cli/app/.next-cli-build/server/app/dashboard/quota.rsc +7 -7
  475. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
  476. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
  477. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  478. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  479. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +7 -7
  480. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
  481. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_index.segment.rsc +4 -4
  482. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +2 -2
  483. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js +1 -1
  484. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js.nft.json +1 -1
  485. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  486. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  487. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +4 -4
  488. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +4 -4
  489. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  490. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +4 -4
  491. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
  492. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  493. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  494. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  495. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  496. package/cli/app/.next-cli-build/server/app/dashboard/skills.html +1 -1
  497. package/cli/app/.next-cli-build/server/app/dashboard/skills.rsc +6 -6
  498. package/cli/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +2 -2
  499. package/cli/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills.segment.rsc +1 -1
  500. package/cli/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  501. package/cli/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  502. package/cli/app/.next-cli-build/server/app/dashboard/skills.segments/_full.segment.rsc +6 -6
  503. package/cli/app/.next-cli-build/server/app/dashboard/skills.segments/_head.segment.rsc +1 -1
  504. package/cli/app/.next-cli-build/server/app/dashboard/skills.segments/_index.segment.rsc +4 -4
  505. package/cli/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.segment.rsc +2 -2
  506. package/cli/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
  507. package/cli/app/.next-cli-build/server/app/dashboard/translator.rsc +6 -6
  508. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
  509. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
  510. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  511. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  512. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +6 -6
  513. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
  514. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_index.segment.rsc +4 -4
  515. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +2 -2
  516. package/cli/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
  517. package/cli/app/.next-cli-build/server/app/dashboard/usage.rsc +6 -6
  518. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
  519. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
  520. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  521. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  522. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +6 -6
  523. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
  524. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_index.segment.rsc +4 -4
  525. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +2 -2
  526. package/cli/app/.next-cli-build/server/app/dashboard.html +1 -1
  527. package/cli/app/.next-cli-build/server/app/dashboard.rsc +6 -6
  528. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
  529. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  530. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  531. package/cli/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +6 -6
  532. package/cli/app/.next-cli-build/server/app/dashboard.segments/_head.segment.rsc +1 -1
  533. package/cli/app/.next-cli-build/server/app/dashboard.segments/_index.segment.rsc +4 -4
  534. package/cli/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +2 -2
  535. package/cli/app/.next-cli-build/server/app/index.html +1 -1
  536. package/cli/app/.next-cli-build/server/app/index.rsc +4 -4
  537. package/cli/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  538. package/cli/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +4 -4
  539. package/cli/app/.next-cli-build/server/app/index.segments/_head.segment.rsc +1 -1
  540. package/cli/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +4 -4
  541. package/cli/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +2 -2
  542. package/cli/app/.next-cli-build/server/app/landing/page.js +1 -1
  543. package/cli/app/.next-cli-build/server/app/landing/page.js.nft.json +1 -1
  544. package/cli/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  545. package/cli/app/.next-cli-build/server/app/landing.html +1 -1
  546. package/cli/app/.next-cli-build/server/app/landing.rsc +4 -4
  547. package/cli/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +4 -4
  548. package/cli/app/.next-cli-build/server/app/landing.segments/_head.segment.rsc +1 -1
  549. package/cli/app/.next-cli-build/server/app/landing.segments/_index.segment.rsc +4 -4
  550. package/cli/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +2 -2
  551. package/cli/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
  552. package/cli/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
  553. package/cli/app/.next-cli-build/server/app/login/page.js +1 -1
  554. package/cli/app/.next-cli-build/server/app/login/page.js.nft.json +1 -1
  555. package/cli/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  556. package/cli/app/.next-cli-build/server/app/login.html +1 -1
  557. package/cli/app/.next-cli-build/server/app/login.rsc +5 -5
  558. package/cli/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +5 -5
  559. package/cli/app/.next-cli-build/server/app/login.segments/_head.segment.rsc +1 -1
  560. package/cli/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +4 -4
  561. package/cli/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +2 -2
  562. package/cli/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  563. package/cli/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
  564. package/cli/app/.next-cli-build/server/app/manifest.webmanifest/route.js.nft.json +1 -1
  565. package/cli/app/.next-cli-build/server/app/page.js +1 -1
  566. package/cli/app/.next-cli-build/server/app/page.js.nft.json +1 -1
  567. package/cli/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  568. package/cli/app/.next-cli-build/server/app-paths-manifest.json +3 -3
  569. package/cli/app/.next-cli-build/server/chunks/2777.js +1 -0
  570. package/cli/app/.next-cli-build/server/chunks/3104.js +1 -1
  571. package/cli/app/.next-cli-build/server/chunks/3110.js +1 -1
  572. package/cli/app/.next-cli-build/server/chunks/3159.js +1 -0
  573. package/cli/app/.next-cli-build/server/chunks/318.js +1 -1
  574. package/cli/app/.next-cli-build/server/chunks/{7879.js → 3188.js} +3 -3
  575. package/cli/app/.next-cli-build/server/chunks/3593.js +1 -1
  576. package/cli/app/.next-cli-build/server/chunks/4043.js +14 -0
  577. package/cli/app/.next-cli-build/server/chunks/4055.js +1 -1
  578. package/cli/app/.next-cli-build/server/chunks/4161.js +1 -0
  579. package/cli/app/.next-cli-build/server/chunks/4739.js +1 -1
  580. package/cli/app/.next-cli-build/server/chunks/4746.js +1 -1
  581. package/cli/app/.next-cli-build/server/chunks/4780.js +1 -1
  582. package/cli/app/.next-cli-build/server/chunks/5024.js +1 -0
  583. package/cli/app/.next-cli-build/server/chunks/507.js +1 -1
  584. package/cli/app/.next-cli-build/server/chunks/5217.js +1 -1
  585. package/cli/app/.next-cli-build/server/chunks/5258.js +1 -1
  586. package/cli/app/.next-cli-build/server/chunks/6896.js +1 -1
  587. package/cli/app/.next-cli-build/server/chunks/698.js +1 -1
  588. package/cli/app/.next-cli-build/server/chunks/7153.js +1 -1
  589. package/cli/app/.next-cli-build/server/chunks/7965.js +1 -1
  590. package/cli/app/.next-cli-build/server/chunks/{1517.js → 8255.js} +1 -1
  591. package/cli/app/.next-cli-build/server/chunks/8520.js +1 -1
  592. package/cli/app/.next-cli-build/server/chunks/8590.js +1 -1
  593. package/cli/app/.next-cli-build/server/chunks/891.js +1 -1
  594. package/cli/app/.next-cli-build/server/chunks/915.js +1 -1
  595. package/cli/app/.next-cli-build/server/chunks/9326.js +1 -1
  596. package/cli/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  597. package/cli/app/.next-cli-build/server/middleware.js +2 -2
  598. package/cli/app/.next-cli-build/server/pages/404.html +1 -1
  599. package/cli/app/.next-cli-build/server/pages/500.html +1 -1
  600. package/cli/app/.next-cli-build/static/chunks/1321-8460c1d61e66cdd9.js +1 -0
  601. package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/profile/{page-ad6c0d386a0a9e15.js → page-ec740b92f0fead18.js} +1 -1
  602. package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/quota/page-00add5a971054c3c.js +1 -0
  603. package/cli/app/.next-cli-build/static/css/{705fa00a1e55feb4.css → 20176eae83d8ef2f.css} +1 -1
  604. package/cli/app/package.json +3 -3
  605. package/cli/package.json +1 -1
  606. package/open-sse/config/appConstants.js +27 -2
  607. package/open-sse/config/providers.js +2 -1
  608. package/open-sse/executors/antigravity.js +39 -8
  609. package/open-sse/services/antigravityHeaderScrub.js +75 -0
  610. package/open-sse/services/antigravityIdentity.js +115 -0
  611. package/open-sse/services/antigravityObfuscation.js +92 -0
  612. package/open-sse/services/usage.js +150 -45
  613. package/package.json +3 -3
  614. package/src/app/(dashboard)/dashboard/profile/page.js +15 -0
  615. package/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/index.js +3 -3
  616. package/src/app/api/init/route.js +8 -0
  617. package/src/app/api/oauth/antigravity/bulk-import/route.js +2 -0
  618. package/src/app/api/usage/[connectionId]/route.js +22 -170
  619. package/src/app/globals.css +5 -7
  620. package/src/lib/db/index.js +6 -0
  621. package/src/lib/db/repos/quotaCacheRepo.js +80 -0
  622. package/src/lib/db/schema.js +15 -0
  623. package/src/lib/localDb.js +2 -0
  624. package/src/lib/oauth/services/antigravityBulkImportManager.js +1 -1
  625. package/src/lib/usage/quotaRefresh.js +61 -0
  626. package/src/lib/usage/quotaService.js +146 -0
  627. package/src/sse/services/auth.js +45 -1
  628. package/cli/app/.next-cli-build/server/chunks/1051.js +0 -1
  629. package/cli/app/.next-cli-build/server/chunks/1322.js +0 -1
  630. package/cli/app/.next-cli-build/server/chunks/4884.js +0 -13
  631. package/cli/app/.next-cli-build/server/chunks/5723.js +0 -1
  632. package/cli/app/.next-cli-build/server/chunks/6064.js +0 -1
  633. package/cli/app/.next-cli-build/server/chunks/6505.js +0 -1
  634. package/cli/app/.next-cli-build/static/chunks/1321-9e3d0d6db171adb2.js +0 -1
  635. package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/quota/page-be4721f0e8d602c8.js +0 -1
  636. /package/cli/app/.next-cli-build/static/{Fz9IMC9Po2I6i0Ou1e39w → AcNhouZGB-IW1HaLcuwFO}/_buildManifest.js +0 -0
  637. /package/cli/app/.next-cli-build/static/{Fz9IMC9Po2I6i0Ou1e39w → AcNhouZGB-IW1HaLcuwFO}/_ssgManifest.js +0 -0
@@ -31,7 +31,16 @@ const MINIMAX_USAGE_URLS = {
31
31
 
32
32
  // Antigravity API config (from Quotio)
33
33
  const ANTIGRAVITY_CONFIG = {
34
- quotaApiUrl: "https://cloudcode-pa.googleapis.com/v1internal:fetchAvailableModels",
34
+ // Multiple upstream domains — Google routes free/paid accounts differently and
35
+ // some hosts 403 where others 200. Try in order until one answers (ported from
36
+ // OmniRoute antigravityUpstream.ts).
37
+ quotaApiHosts: [
38
+ "https://daily-cloudcode-pa.googleapis.com",
39
+ "https://cloudcode-pa.googleapis.com",
40
+ "https://daily-cloudcode-pa.sandbox.googleapis.com",
41
+ ],
42
+ fetchAvailableModelsPath: "/v1internal:fetchAvailableModels",
43
+ retrieveUserQuotaPath: "/v1internal:retrieveUserQuota",
35
44
  loadProjectApiUrl: "https://cloudcode-pa.googleapis.com/v1internal:loadCodeAssist",
36
45
  tokenUrl: "https://oauth2.googleapis.com/token",
37
46
  clientId: "1071006060591-tmhssin2h21lcre235vtolojh4g403ep.apps.googleusercontent.com",
@@ -94,7 +103,7 @@ export async function getUsageForProvider(connection, proxyOptions = null) {
94
103
  case "gemini-cli":
95
104
  return await getGeminiUsage(accessToken, providerDataWithProjectId, proxyOptions);
96
105
  case "antigravity":
97
- return await getAntigravityUsage(accessToken, providerSpecificData, proxyOptions);
106
+ return await getAntigravityUsage(accessToken, providerDataWithProjectId, proxyOptions);
98
107
  case "claude":
99
108
  return await getClaudeUsage(accessToken, proxyOptions);
100
109
  case "codex":
@@ -659,51 +668,88 @@ async function getGeminiSubscriptionInfo(accessToken, proxyOptions = null) {
659
668
  }
660
669
 
661
670
  /**
662
- * Antigravity Usage - Fetch quota from Google Cloud Code API
671
+ * POST to the first Antigravity host that answers (2xx/401/403). Returns
672
+ * { response, host } or throws if every host is unreachable.
663
673
  */
664
- async function getAntigravityUsage(accessToken, providerSpecificData, proxyOptions = null) {
665
- try {
666
- // Fetch subscription info once \u2014 reuse for both projectId and plan
667
- const subscriptionInfo = await getAntigravitySubscriptionInfo(accessToken, proxyOptions);
668
- const projectId = subscriptionInfo?.cloudaicompanionProject || null;
669
-
670
- // Fetch quota data with timeout
674
+ async function antigravityQuotaFetch(path, accessToken, bodyObj, proxyOptions) {
675
+ let lastError = null;
676
+ for (const host of ANTIGRAVITY_CONFIG.quotaApiHosts) {
671
677
  const controller = new AbortController();
672
- const timeoutId = setTimeout(() => controller.abort(), 10000); // 10s timeout
673
-
674
- let response;
678
+ const timeoutId = setTimeout(() => controller.abort(), 10000);
675
679
  try {
676
- response = await proxyAwareFetch(ANTIGRAVITY_CONFIG.quotaApiUrl, {
680
+ const response = await proxyAwareFetch(`${host}${path}`, {
677
681
  method: "POST",
678
682
  headers: {
679
683
  "Authorization": `Bearer ${accessToken}`,
680
684
  "User-Agent": ANTIGRAVITY_CONFIG.userAgent,
681
685
  "Content-Type": "application/json",
682
- "X-Client-Name": "antigravity",
683
- "X-Client-Version": "1.107.0",
684
686
  "x-request-source": "local", // MITM bypass
685
687
  },
686
- body: JSON.stringify({
687
- ...(projectId ? { project: projectId } : {})
688
- }),
688
+ body: JSON.stringify(bodyObj || {}),
689
689
  signal: controller.signal,
690
690
  }, proxyOptions);
691
+ // A definitive answer (ok, or auth/permission verdict) ends the loop; only
692
+ // transient upstream errors (5xx / network) fall through to the next host.
693
+ if (response.ok || response.status === 401 || response.status === 403) {
694
+ return { response, host };
695
+ }
696
+ lastError = new Error(`Antigravity API error: ${response.status}`);
697
+ } catch (error) {
698
+ lastError = error;
691
699
  } finally {
692
700
  clearTimeout(timeoutId);
693
701
  }
702
+ }
703
+ if (lastError) throw lastError;
704
+ throw new Error("Antigravity API unavailable");
705
+ }
694
706
 
695
- if (response.status === 403) {
696
- return {
697
- message: "Antigravity quota API access forbidden. Chat may still work.",
698
- quotas: {}
699
- };
707
+ /**
708
+ * Antigravity Usage - Fetch quota from Google Cloud Code API.
709
+ *
710
+ * Two upstream sources are merged:
711
+ * - fetchAvailableModels: catalog + per-model quotaInfo (can be stale/full).
712
+ * - retrieveUserQuota: per-model consumption buckets (source of truth).
713
+ * retrieveUserQuota wins when it reports a model, matching OmniRoute behaviour.
714
+ */
715
+ async function getAntigravityUsage(accessToken, providerSpecificData, proxyOptions = null) {
716
+ try {
717
+ // Prefer the projectId stored on the connection; fall back to loadCodeAssist.
718
+ const savedProjectId = normalizeCloudCodeProjectId(providerSpecificData?.projectId);
719
+ let subscriptionInfo = null;
720
+ let projectId = savedProjectId;
721
+ if (!projectId) {
722
+ subscriptionInfo = await getAntigravitySubscriptionInfo(accessToken, proxyOptions);
723
+ projectId = normalizeCloudCodeProjectId(subscriptionInfo?.cloudaicompanionProject);
724
+ }
725
+
726
+ // fetchAvailableModels (catalog) \u2014 required. retrieveUserQuota (live) \u2014 best effort.
727
+ let modelsResp;
728
+ try {
729
+ modelsResp = await antigravityQuotaFetch(
730
+ ANTIGRAVITY_CONFIG.fetchAvailableModelsPath,
731
+ accessToken,
732
+ projectId ? { project: projectId } : {},
733
+ proxyOptions
734
+ );
735
+ } catch (error) {
736
+ return { message: `Antigravity quota unavailable: ${error.message}. Chat may still work.` };
700
737
  }
701
738
 
739
+ const response = modelsResp.response;
740
+
702
741
  if (response.status === 401) {
703
- return {
704
- message: "Antigravity quota API authentication expired. Chat may still work.",
705
- quotas: {}
706
- };
742
+ // Distinguish a dead account (refresh token revoked/deleted) from a merely
743
+ // stale access token, so the dashboard can tell the user which is which.
744
+ const deadReason = await getAntigravityAccountDeadReason(providerSpecificData, proxyOptions);
745
+ if (deadReason) {
746
+ return { accountDead: true, message: `Antigravity account ${deadReason}. Reconnect won't help \u2014 recreate the account.`, quotas: {} };
747
+ }
748
+ return { message: "Antigravity quota API authentication expired. Chat may still work.", quotas: {} };
749
+ }
750
+
751
+ if (response.status === 403) {
752
+ return { message: "Antigravity quota API access forbidden (tier may not expose quota). Chat may still work.", quotas: {} };
707
753
  }
708
754
 
709
755
  if (!response.ok) {
@@ -711,11 +757,33 @@ async function getAntigravityUsage(accessToken, providerSpecificData, proxyOptio
711
757
  }
712
758
 
713
759
  const data = await response.json();
714
- const quotas = {};
715
760
 
716
- // Parse model quotas (inspired by vscode-antigravity-cockpit)
761
+ // Live consumption buckets keyed by modelId (source of truth).
762
+ // retrieveUserQuota works with or without a project — send the project when
763
+ // we have one, otherwise an empty body (Google resolves the default project).
764
+ const liveBuckets = new Map();
765
+ try {
766
+ const quotaResp = await antigravityQuotaFetch(
767
+ ANTIGRAVITY_CONFIG.retrieveUserQuotaPath,
768
+ accessToken,
769
+ projectId ? { project: projectId } : {},
770
+ proxyOptions
771
+ );
772
+ if (quotaResp.response.ok) {
773
+ const quotaData = await quotaResp.response.json();
774
+ if (Array.isArray(quotaData.buckets)) {
775
+ for (const bucket of quotaData.buckets) {
776
+ const id = String(bucket.modelId || "").trim();
777
+ if (id) liveBuckets.set(id, bucket);
778
+ }
779
+ }
780
+ }
781
+ } catch {
782
+ // Non-fatal: fall back to catalog-only quotaInfo.
783
+ }
784
+
785
+ const quotas = {};
717
786
  if (data.models) {
718
- // Filter only recommended/important models (must match PROVIDER_MODELS ag ids)
719
787
  const importantModels = [
720
788
  'gemini-3-flash-agent',
721
789
  'gemini-3.5-flash-low',
@@ -729,32 +797,27 @@ async function getAntigravityUsage(accessToken, providerSpecificData, proxyOptio
729
797
  ];
730
798
 
731
799
  for (const [modelKey, info] of Object.entries(data.models)) {
732
- // Skip models without quota info
733
- if (!info.quotaInfo) {
734
- continue;
735
- }
800
+ if (info.isInternal || !importantModels.includes(modelKey)) continue;
736
801
 
737
- // Skip internal models and non-important models
738
- if (info.isInternal || !importantModels.includes(modelKey)) {
739
- continue;
740
- }
802
+ // retrieveUserQuota bucket wins over the (possibly stale) catalog quotaInfo.
803
+ const live = liveBuckets.get(modelKey);
804
+ const quotaSource = live || info.quotaInfo;
805
+ if (!quotaSource) continue;
741
806
 
742
- const remainingFraction = info.quotaInfo.remainingFraction || 0;
807
+ const remainingFraction = Number(quotaSource.remainingFraction) || 0;
743
808
  const remainingPercentage = remainingFraction * 100;
744
-
745
- // Convert percentage to used/total for UI compatibility
746
809
  const total = 1000; // Normalized base
747
810
  const remaining = Math.round(total * remainingFraction);
748
- const used = total - remaining;
811
+ const used = Math.max(0, total - remaining);
749
812
 
750
- // Use modelKey as key (matches PROVIDER_MODELS id)
751
813
  quotas[modelKey] = {
752
814
  used,
753
815
  total,
754
- resetAt: parseResetTime(info.quotaInfo.resetTime),
816
+ resetAt: parseResetTime(quotaSource.resetTime),
755
817
  remainingPercentage,
756
818
  unlimited: false,
757
819
  displayName: info.displayName || modelKey,
820
+ quotaSource: live ? "retrieveUserQuota" : "fetchAvailableModels",
758
821
  };
759
822
  }
760
823
  }
@@ -770,6 +833,48 @@ async function getAntigravityUsage(accessToken, providerSpecificData, proxyOptio
770
833
  }
771
834
  }
772
835
 
836
+ /**
837
+ * Probe whether an Antigravity account is permanently dead (refresh token
838
+ * revoked / account deleted). Returns a short reason string, or null if the
839
+ * account looks alive (or we can't tell). Used to turn a misleading
840
+ * "authentication expired" into an actionable "account deleted" verdict.
841
+ */
842
+ async function getAntigravityAccountDeadReason(providerSpecificData, proxyOptions = null) {
843
+ const refreshToken = providerSpecificData?.refreshToken;
844
+ if (!refreshToken) return null;
845
+ try {
846
+ const controller = new AbortController();
847
+ const timeoutId = setTimeout(() => controller.abort(), 10000);
848
+ let response;
849
+ try {
850
+ response = await proxyAwareFetch(ANTIGRAVITY_CONFIG.tokenUrl, {
851
+ method: "POST",
852
+ headers: { "Content-Type": "application/x-www-form-urlencoded" },
853
+ body: new URLSearchParams({
854
+ client_id: ANTIGRAVITY_CONFIG.clientId,
855
+ client_secret: ANTIGRAVITY_CONFIG.clientSecret,
856
+ refresh_token: refreshToken,
857
+ grant_type: "refresh_token",
858
+ }),
859
+ signal: controller.signal,
860
+ }, proxyOptions);
861
+ } finally {
862
+ clearTimeout(timeoutId);
863
+ }
864
+ if (response.ok) return null; // refresh works \u2192 account alive, token just stale
865
+ const body = await response.json().catch(() => ({}));
866
+ if (body.error === "invalid_grant") {
867
+ const desc = (body.error_description || "").toLowerCase();
868
+ if (desc.includes("deleted")) return "has been deleted";
869
+ if (desc.includes("disabled") || desc.includes("suspend")) return "is disabled/suspended";
870
+ return "authorization was revoked";
871
+ }
872
+ return null;
873
+ } catch {
874
+ return null;
875
+ }
876
+ }
877
+
773
878
  /**
774
879
  * Get Antigravity project ID from subscription info
775
880
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zevairouter",
3
- "version": "1.0.12",
3
+ "version": "1.0.14",
4
4
  "description": "ZevaiRouter - AI Router with provider automation, multi-account workflows, and quota tracking",
5
5
  "bin": {
6
6
  "zevai": "./cli/cli.js"
@@ -62,7 +62,7 @@
62
62
  "socks-proxy-agent": "^10.1.0",
63
63
  "sql.js": "^1.14.1",
64
64
  "undici": "^8.4.1",
65
- "uuid": "^13.0.0",
65
+ "uuid": "^14.0.1",
66
66
  "zustand": "^5.0.10"
67
67
  },
68
68
  "optionalDependencies": {
@@ -74,7 +74,7 @@
74
74
  "comment_camoufox_js": "optional stealth-Firefox engine for bulk-import; runtime auto-installs to user data dir if user picks Camoufox in the modal but the package is missing — Chromium remains the default and works without this dep",
75
75
  "devDependencies": {
76
76
  "@tailwindcss/postcss": "^4.1.18",
77
- "esbuild": "^0.25.12",
77
+ "esbuild": "^0.28.1",
78
78
  "eslint": "^9",
79
79
  "eslint-config-next": "16.2.9",
80
80
  "postcss": "^8.5.6",
@@ -946,6 +946,21 @@ export default function ProfilePage() {
946
946
  </div>
947
947
  )}
948
948
 
949
+ {/* Most Quota (smart routing) */}
950
+ <div className="flex items-start sm:items-center justify-between gap-4 pt-4 border-t border-border/50">
951
+ <div className="flex-1 min-w-0">
952
+ <p className="font-medium text-sm sm:text-base">Most Quota</p>
953
+ <p className="text-xs sm:text-sm text-text-muted">
954
+ Pick the account with the most remaining quota (uses cached usage)
955
+ </p>
956
+ </div>
957
+ <Toggle
958
+ checked={settings.fallbackStrategy === "most-quota"}
959
+ onChange={() => updateFallbackStrategy(settings.fallbackStrategy === "most-quota" ? "fill-first" : "most-quota")}
960
+ disabled={loading}
961
+ />
962
+ </div>
963
+
949
964
  {/* Combo Round Robin */}
950
965
  <div className="flex items-start sm:items-center justify-between gap-4 pt-4 border-t border-border/50">
951
966
  <div className="flex-1 min-w-0">
@@ -403,7 +403,7 @@ export default function ProviderLimits() {
403
403
  );
404
404
 
405
405
  // Fetch quota for a specific connection
406
- const fetchQuota = useCallback(async (connectionId, provider) => {
406
+ const fetchQuota = useCallback(async (connectionId, provider, force = false) => {
407
407
  setLoading((prev) => ({ ...prev, [connectionId]: true }));
408
408
  setErrors((prev) => ({ ...prev, [connectionId]: null }));
409
409
 
@@ -411,7 +411,7 @@ export default function ProviderLimits() {
411
411
  console.log(
412
412
  `[ProviderLimits] Fetching quota for ${provider} (${connectionId})`,
413
413
  );
414
- const response = await fetch(`/api/usage/${connectionId}`);
414
+ const response = await fetch(`/api/usage/${connectionId}${force ? "?refresh=1" : ""}`);
415
415
 
416
416
  if (!response.ok) {
417
417
  const errorData = await response.json().catch(() => ({}));
@@ -636,7 +636,7 @@ export default function ProviderLimits() {
636
636
  );
637
637
 
638
638
  await Promise.all(
639
- visibleConnections.map((conn) => fetchQuota(conn.id, conn.provider)),
639
+ visibleConnections.map((conn) => fetchQuota(conn.id, conn.provider, true)),
640
640
  );
641
641
 
642
642
  setLastUpdated(new Date());
@@ -1,4 +1,12 @@
1
1
  // This API route is called automatically to initialize app
2
+ import { startQuotaRefreshLoop } from "@/lib/usage/quotaRefresh";
3
+
2
4
  export async function GET() {
5
+ // Start the background quota-refresh loop (guarded so it only starts once).
6
+ try {
7
+ startQuotaRefreshLoop();
8
+ } catch (e) {
9
+ console.warn(`[Init] quota refresh loop start failed: ${e.message}`);
10
+ }
3
11
  return new Response("Initialized", { status: 200 });
4
12
  }
@@ -31,6 +31,8 @@ export async function POST(request) {
31
31
  accounts,
32
32
  concurrency: body?.concurrency,
33
33
  engine: body?.engine,
34
+ proxyPoolMode: body?.proxyPoolMode,
35
+ proxyPoolId: body?.proxyPoolId,
34
36
  });
35
37
 
36
38
  return NextResponse.json({
@@ -1,188 +1,40 @@
1
1
  // Ensure proxyFetch is loaded to patch globalThis.fetch
2
2
  import "open-sse/index.js";
3
3
 
4
- import { getProviderConnectionById, updateProviderConnection } from "@/lib/localDb";
5
- import { getUsageForProvider } from "open-sse/services/usage.js";
6
- import { getExecutor } from "open-sse/executors/index.js";
7
- import { resolveConnectionProxyConfig } from "@/lib/network/connectionProxy";
8
- import { USAGE_APIKEY_PROVIDERS } from "@/shared/constants/providers";
4
+ import { getQuotaSnapshot } from "@/lib/localDb";
5
+ import { resolveUsageForConnection } from "@/lib/usage/quotaService";
9
6
 
10
- // Detect auth-expired messages returned by usage providers instead of throwing
11
- const AUTH_EXPIRED_PATTERNS = ["expired", "authentication", "unauthorized", "401", "re-authorize"];
12
- function isAuthExpiredMessage(usage) {
13
- if (!usage?.message) return false;
14
- const msg = usage.message.toLowerCase();
15
- return AUTH_EXPIRED_PATTERNS.some((p) => msg.includes(p));
16
- }
17
-
18
- /**
19
- * Refresh credentials using executor and update database
20
- * @param {boolean} force - Skip needsRefresh check and always attempt refresh
21
- * @returns Promise<{ connection, refreshed: boolean }>
22
- */
23
- async function refreshAndUpdateCredentials(connection, force = false, proxyOptions = null) {
24
- const executor = getExecutor(connection.provider);
25
-
26
- // Build credentials object from connection
27
- const credentials = {
28
- accessToken: connection.accessToken,
29
- refreshToken: connection.refreshToken,
30
- idToken: connection.idToken,
31
- expiresAt: connection.expiresAt || connection.tokenExpiresAt,
32
- lastRefreshAt: connection.lastRefreshAt,
33
- connectionId: connection.id,
34
- providerSpecificData: connection.providerSpecificData,
35
- // For GitHub
36
- copilotToken: connection.providerSpecificData?.copilotToken,
37
- copilotTokenExpiresAt: connection.providerSpecificData?.copilotTokenExpiresAt,
38
- };
39
-
40
- // Check if refresh is needed (skip when force=true)
41
- const needsRefresh = force || executor.needsRefresh(credentials);
42
-
43
- if (!needsRefresh) {
44
- return { connection, refreshed: false };
45
- }
46
-
47
- // Use executor's refreshCredentials method (with optional proxy)
48
- const refreshResult = await executor.refreshCredentials(credentials, console, proxyOptions);
49
-
50
- if (!refreshResult) {
51
- // Refresh failed but we still have an accessToken — try with existing token
52
- if (connection.accessToken) {
53
- return { connection, refreshed: false };
54
- }
55
- throw new Error("Failed to refresh credentials. Please re-authorize the connection.");
56
- }
57
-
58
- // Build update object
59
- const now = new Date().toISOString();
60
- const updateData = {
61
- updatedAt: now,
62
- };
63
-
64
- // Update accessToken if present
65
- if (refreshResult.accessToken) {
66
- updateData.accessToken = refreshResult.accessToken;
67
- }
68
-
69
- // Update refreshToken if present
70
- if (refreshResult.refreshToken) {
71
- updateData.refreshToken = refreshResult.refreshToken;
72
- }
73
-
74
- if (refreshResult.idToken) {
75
- updateData.idToken = refreshResult.idToken;
76
- }
77
-
78
- if (refreshResult.lastRefreshAt) {
79
- updateData.lastRefreshAt = refreshResult.lastRefreshAt;
80
- }
81
-
82
- // Update token expiry
83
- if (refreshResult.expiresIn) {
84
- updateData.expiresAt = new Date(Date.now() + refreshResult.expiresIn * 1000).toISOString();
85
- updateData.expiresIn = refreshResult.expiresIn;
86
- } else if (refreshResult.expiresAt) {
87
- updateData.expiresAt = refreshResult.expiresAt;
88
- }
89
-
90
- // Handle provider-specific data (copilotToken for GitHub, etc.)
91
- const providerSpecificUpdates = {
92
- ...(refreshResult.providerSpecificData || {}),
93
- ...(refreshResult.copilotToken ? { copilotToken: refreshResult.copilotToken } : {}),
94
- ...(refreshResult.copilotTokenExpiresAt ? { copilotTokenExpiresAt: refreshResult.copilotTokenExpiresAt } : {}),
95
- };
96
- if (Object.keys(providerSpecificUpdates).length > 0) {
97
- updateData.providerSpecificData = {
98
- ...(connection.providerSpecificData || {}),
99
- ...providerSpecificUpdates,
100
- };
101
- }
102
-
103
- // Update database
104
- await updateProviderConnection(connection.id, updateData);
105
-
106
- // Return updated connection
107
- const updatedConnection = {
108
- ...connection,
109
- ...updateData,
110
- providerSpecificData: updateData.providerSpecificData || connection.providerSpecificData,
111
- };
112
-
113
- return {
114
- connection: updatedConnection,
115
- refreshed: true,
116
- };
117
- }
7
+ // Serve cached quota when it's fresher than this; otherwise fetch live.
8
+ const CACHE_FRESH_MS = 60 * 1000;
118
9
 
119
10
  /**
120
- * GET /api/usage/[connectionId] - Get usage data for a specific connection
11
+ * GET /api/usage/[connectionId] - Get usage data for a specific connection.
12
+ *
13
+ * Reads the server-side quota cache first (instant); only hits the upstream API
14
+ * when the cache is stale or `?refresh=1` is passed. Live fetches also write the
15
+ * cache so routing + dashboard stay in sync.
121
16
  */
122
17
  export async function GET(request, { params }) {
123
- let connection;
18
+ let connectionId;
124
19
  try {
125
- const { connectionId } = await params;
126
-
127
-
128
- // Get connection from database
129
- connection = await getProviderConnectionById(connectionId);
130
- if (!connection) {
131
- return Response.json({ error: "Connection not found" }, { status: 404 });
132
- }
133
-
134
- // Allow OAuth connections, plus whitelisted apikey providers (glm/minimax/...)
135
- const isOAuth = connection.authType === "oauth";
136
- const isApikeyEligible =
137
- connection.authType === "apikey" &&
138
- USAGE_APIKEY_PROVIDERS.includes(connection.provider);
139
-
140
- if (!isOAuth && !isApikeyEligible) {
141
- return Response.json({ message: "Usage not available for this connection" });
142
- }
143
-
144
- // Resolve connection proxy config; force strictProxy=false so quota/refresh fall back to direct on failure
145
- const proxyConfig = await resolveConnectionProxyConfig(connection.providerSpecificData);
146
- const proxyOptions = {
147
- connectionProxyEnabled: proxyConfig.connectionProxyEnabled === true,
148
- connectionProxyUrl: proxyConfig.connectionProxyUrl || "",
149
- connectionNoProxy: proxyConfig.connectionNoProxy || "",
150
- vercelRelayUrl: proxyConfig.vercelRelayUrl || "",
151
- strictProxy: false,
152
- };
153
-
154
- // Refresh credentials only for OAuth connections (apikey has no token refresh)
155
- if (isOAuth) {
156
- try {
157
- const result = await refreshAndUpdateCredentials(connection, false, proxyOptions);
158
- connection = result.connection;
159
- } catch (refreshError) {
160
- console.error("[Usage API] Credential refresh failed:", refreshError);
161
- return Response.json({
162
- error: `Credential refresh failed: ${refreshError.message}`
163
- }, { status: 401 });
20
+ ({ connectionId } = await params);
21
+ const url = new URL(request.url);
22
+ const force = url.searchParams.get("refresh") === "1";
23
+
24
+ if (!force) {
25
+ const snap = await getQuotaSnapshot(connectionId);
26
+ if (snap?.usage && Date.now() - new Date(snap.fetchedAt).getTime() < CACHE_FRESH_MS) {
27
+ return Response.json({ ...snap.usage, cached: true, fetchedAt: snap.fetchedAt });
164
28
  }
165
29
  }
166
30
 
167
- // Fetch usage from provider API
168
- let usage = await getUsageForProvider(connection, proxyOptions);
169
-
170
- // If provider returned an auth-expired message instead of throwing,
171
- // force-refresh token and retry once (OAuth only)
172
- if (isOAuth && isAuthExpiredMessage(usage) && connection.refreshToken) {
173
- try {
174
- const retryResult = await refreshAndUpdateCredentials(connection, true, proxyOptions);
175
- connection = retryResult.connection;
176
- usage = await getUsageForProvider(connection, proxyOptions);
177
- } catch (retryError) {
178
- console.warn(`[Usage] ${connection.provider}: force refresh failed: ${retryError.message}`);
179
- }
31
+ const usage = await resolveUsageForConnection(connectionId, { writeCache: true, force });
32
+ if (usage?.notFound) {
33
+ return Response.json({ error: "Connection not found" }, { status: 404 });
180
34
  }
181
-
182
35
  return Response.json(usage);
183
36
  } catch (error) {
184
- const provider = connection?.provider ?? "unknown";
185
- console.warn(`[Usage] ${provider}: ${error.message}`);
37
+ console.warn(`[Usage] ${connectionId || "unknown"}: ${error.message}`);
186
38
  return Response.json({ error: error.message }, { status: 500 });
187
39
  }
188
40
  }
@@ -510,11 +510,9 @@ button {
510
510
  0 1px 2px rgba(15, 23, 42, 0.05),
511
511
  0 10px 24px -10px rgba(15, 23, 42, 0.18),
512
512
  0 24px 48px -24px rgba(15, 23, 42, 0.22);
513
- transform: perspective(1200px) translateZ(0);
514
- transform-style: preserve-3d;
515
- transition: transform 0.35s cubic-bezier(0.22, 1, 0.36, 1),
513
+ transform: translateY(0);
514
+ transition: transform 0.3s cubic-bezier(0.22, 1, 0.36, 1),
516
515
  box-shadow 0.35s cubic-bezier(0.22, 1, 0.36, 1);
517
- will-change: transform;
518
516
  }
519
517
  .card-3d::before {
520
518
  content: "";
@@ -527,7 +525,7 @@ button {
527
525
  }
528
526
  .card-3d > * { position: relative; z-index: 1; }
529
527
  .card-3d:hover {
530
- transform: perspective(1200px) translateY(-3px) rotateX(1deg) rotateY(-1deg);
528
+ transform: translateY(-3px);
531
529
  box-shadow:
532
530
  inset 0 1px 0 0 rgba(255, 255, 255, 0.6),
533
531
  0 2px 4px rgba(15, 23, 42, 0.06),
@@ -568,8 +566,8 @@ button {
568
566
  0 44px 80px -28px rgba(0, 0, 0, 0.72);
569
567
  }
570
568
 
571
- /* Respect reduced-motion: keep depth, drop the tilt/scale animation */
569
+ /* Respect reduced-motion: keep depth, drop the movement */
572
570
  @media (prefers-reduced-motion: reduce) {
573
571
  .card-3d { transition: box-shadow 0.3s ease; }
574
- .card-3d:hover { transform: perspective(1200px) translateY(-2px); }
572
+ .card-3d:hover { transform: none; }
575
573
  }
@@ -27,6 +27,12 @@ export {
27
27
  createProxyPool, updateProxyPool, deleteProxyPool,
28
28
  } from "./repos/proxyPoolsRepo.js";
29
29
 
30
+ // Quota cache (server-side per-account quota snapshots for routing)
31
+ export {
32
+ saveQuotaSnapshot, getQuotaSnapshot, getAllQuotaSnapshots,
33
+ deleteQuotaSnapshot, getCachedRemainingPercent,
34
+ } from "./repos/quotaCacheRepo.js";
35
+
30
36
  // API keys
31
37
  export {
32
38
  getApiKeys, getApiKeyById, createApiKey, updateApiKey, deleteApiKey, validateApiKey,