zevairouter 1.0.73 → 1.0.74

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 (553) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/README.md +30 -6
  3. package/cli/app/.next-cli-build/BUILD_ID +1 -1
  4. package/cli/app/.next-cli-build/app-path-routes-manifest.json +7 -7
  5. package/cli/app/.next-cli-build/build-manifest.json +2 -2
  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.nft.json +1 -1
  9. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  10. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
  11. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  12. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  13. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  14. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
  15. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  16. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
  17. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  18. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/context/page.js.nft.json +1 -1
  19. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/context/page_client-reference-manifest.js +1 -1
  20. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  21. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  22. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js.nft.json +1 -1
  23. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  24. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js.nft.json +1 -1
  25. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  26. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js.nft.json +1 -1
  27. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  28. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js.nft.json +1 -1
  29. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  30. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -1
  31. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  32. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  33. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  34. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/playground/page.js.nft.json +1 -1
  35. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/playground/page_client-reference-manifest.js +1 -1
  36. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
  37. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  38. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
  39. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  40. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
  41. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  42. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
  43. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  44. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
  45. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  46. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page.js.nft.json +1 -1
  47. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
  48. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
  49. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  50. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/terminal/page.js.nft.json +1 -1
  51. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/terminal/page_client-reference-manifest.js +1 -1
  52. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page.js.nft.json +1 -1
  53. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  54. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
  55. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  56. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
  57. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  58. package/cli/app/.next-cli-build/server/app/_global-error/page.js.nft.json +1 -1
  59. package/cli/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  60. package/cli/app/.next-cli-build/server/app/_global-error.html +1 -1
  61. package/cli/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  62. package/cli/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  63. package/cli/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  64. package/cli/app/.next-cli-build/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  65. package/cli/app/.next-cli-build/server/app/_global-error.segments/_head.segment.rsc +1 -1
  66. package/cli/app/.next-cli-build/server/app/_global-error.segments/_index.segment.rsc +1 -1
  67. package/cli/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  68. package/cli/app/.next-cli-build/server/app/_not-found/page.js.nft.json +1 -1
  69. package/cli/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  70. package/cli/app/.next-cli-build/server/app/_not-found.html +1 -1
  71. package/cli/app/.next-cli-build/server/app/_not-found.rsc +3 -3
  72. package/cli/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +3 -3
  73. package/cli/app/.next-cli-build/server/app/_not-found.segments/_head.segment.rsc +1 -1
  74. package/cli/app/.next-cli-build/server/app/_not-found.segments/_index.segment.rsc +3 -3
  75. package/cli/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  76. package/cli/app/.next-cli-build/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  77. package/cli/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  78. package/cli/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
  79. package/cli/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
  80. package/cli/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
  81. package/cli/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
  82. package/cli/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
  83. package/cli/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
  84. package/cli/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
  85. package/cli/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  86. package/cli/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
  87. package/cli/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
  88. package/cli/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js.nft.json +1 -1
  89. package/cli/app/.next-cli-build/server/app/api/cli-tools/codex-gateway/accounts/route.js.nft.json +1 -1
  90. package/cli/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
  91. package/cli/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
  92. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js.nft.json +1 -1
  93. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js.nft.json +1 -1
  94. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
  95. package/cli/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js.nft.json +1 -1
  96. package/cli/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
  97. package/cli/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js.nft.json +1 -1
  98. package/cli/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js.nft.json +1 -1
  99. package/cli/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js.nft.json +1 -1
  100. package/cli/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
  101. package/cli/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js.nft.json +1 -1
  102. package/cli/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
  103. package/cli/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
  104. package/cli/app/.next-cli-build/server/app/api/context/[id]/route.js.nft.json +1 -1
  105. package/cli/app/.next-cli-build/server/app/api/context/bulk/route.js.nft.json +1 -1
  106. package/cli/app/.next-cli-build/server/app/api/context/route.js.nft.json +1 -1
  107. package/cli/app/.next-cli-build/server/app/api/dashboard/chat/completions/route.js.nft.json +1 -1
  108. package/cli/app/.next-cli-build/server/app/api/headroom/extras/route.js.nft.json +1 -1
  109. package/cli/app/.next-cli-build/server/app/api/headroom/proxy/[...path]/route.js.nft.json +1 -1
  110. package/cli/app/.next-cli-build/server/app/api/headroom/restart/route.js.nft.json +1 -1
  111. package/cli/app/.next-cli-build/server/app/api/headroom/start/route.js.nft.json +1 -1
  112. package/cli/app/.next-cli-build/server/app/api/headroom/status/route.js.nft.json +1 -1
  113. package/cli/app/.next-cli-build/server/app/api/headroom/stop/route.js.nft.json +1 -1
  114. package/cli/app/.next-cli-build/server/app/api/health/route.js.nft.json +1 -1
  115. package/cli/app/.next-cli-build/server/app/api/init/route.js.nft.json +1 -1
  116. package/cli/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
  117. package/cli/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
  118. package/cli/app/.next-cli-build/server/app/api/locale/route.js.nft.json +1 -1
  119. package/cli/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
  120. package/cli/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
  121. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
  122. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
  123. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
  124. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
  125. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -1
  126. package/cli/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
  127. package/cli/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
  128. package/cli/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
  129. package/cli/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
  130. package/cli/app/.next-cli-build/server/app/api/models/route.js +1 -1
  131. package/cli/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
  132. package/cli/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
  133. package/cli/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
  134. package/cli/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  135. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/cancel/route.js +1 -1
  136. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  137. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/manual/[workerId]/route.js +1 -1
  138. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  139. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/route.js +1 -1
  140. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/route.js.nft.json +1 -1
  141. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/latest/route.js +1 -1
  142. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/latest/route.js.nft.json +1 -1
  143. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/route.js +1 -1
  144. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/route.js.nft.json +1 -1
  145. package/cli/app/.next-cli-build/server/app/api/oauth/autoclaw/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  146. package/cli/app/.next-cli-build/server/app/api/oauth/autoclaw/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  147. package/cli/app/.next-cli-build/server/app/api/oauth/autoclaw/bulk-import/[jobId]/route.js.nft.json +1 -1
  148. package/cli/app/.next-cli-build/server/app/api/oauth/autoclaw/bulk-import/latest/route.js.nft.json +1 -1
  149. package/cli/app/.next-cli-build/server/app/api/oauth/autoclaw/bulk-import/route.js.nft.json +1 -1
  150. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  151. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  152. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/route.js.nft.json +1 -1
  153. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/latest/route.js.nft.json +1 -1
  154. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/route.js.nft.json +1 -1
  155. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-token/route.js.nft.json +1 -1
  156. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/quota-cookie/route.js.nft.json +1 -1
  157. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  158. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  159. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/route.js.nft.json +1 -1
  160. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/latest/route.js.nft.json +1 -1
  161. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/route.js.nft.json +1 -1
  162. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-token/route.js.nft.json +1 -1
  163. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/quota-cookie/route.js.nft.json +1 -1
  164. package/cli/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
  165. package/cli/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
  166. package/cli/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  167. package/cli/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
  168. package/cli/app/.next-cli-build/server/app/api/oauth/grok-cli/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  169. package/cli/app/.next-cli-build/server/app/api/oauth/grok-cli/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  170. package/cli/app/.next-cli-build/server/app/api/oauth/grok-cli/bulk-import/[jobId]/route.js.nft.json +1 -1
  171. package/cli/app/.next-cli-build/server/app/api/oauth/grok-cli/bulk-import/latest/route.js.nft.json +1 -1
  172. package/cli/app/.next-cli-build/server/app/api/oauth/grok-cli/bulk-import/route.js.nft.json +1 -1
  173. package/cli/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
  174. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -1
  175. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  176. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  177. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/route.js.nft.json +1 -1
  178. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/latest/route.js.nft.json +1 -1
  179. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/route.js.nft.json +1 -1
  180. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  181. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +1 -1
  182. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  183. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  184. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  185. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/route.js.nft.json +1 -1
  186. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/latest/route.js.nft.json +1 -1
  187. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/route.js.nft.json +1 -1
  188. package/cli/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
  189. package/cli/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  190. package/cli/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
  191. package/cli/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js.nft.json +1 -1
  192. package/cli/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  193. package/cli/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
  194. package/cli/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  195. package/cli/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
  196. package/cli/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  197. package/cli/app/.next-cli-build/server/app/api/providers/bulk-delete/route.js.nft.json +1 -1
  198. package/cli/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
  199. package/cli/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js.nft.json +1 -1
  200. package/cli/app/.next-cli-build/server/app/api/providers/route.js +1 -1
  201. package/cli/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
  202. package/cli/app/.next-cli-build/server/app/api/providers/suggested-models/route.js.nft.json +1 -1
  203. package/cli/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  204. package/cli/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
  205. package/cli/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
  206. package/cli/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
  207. package/cli/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
  208. package/cli/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
  209. package/cli/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
  210. package/cli/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
  211. package/cli/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
  212. package/cli/app/.next-cli-build/server/app/api/pxpipe/health/route.js.nft.json +1 -1
  213. package/cli/app/.next-cli-build/server/app/api/pxpipe/install/route.js.nft.json +1 -1
  214. package/cli/app/.next-cli-build/server/app/api/pxpipe/restart/route.js.nft.json +1 -1
  215. package/cli/app/.next-cli-build/server/app/api/pxpipe/start/route.js.nft.json +1 -1
  216. package/cli/app/.next-cli-build/server/app/api/pxpipe/stats/route.js.nft.json +1 -1
  217. package/cli/app/.next-cli-build/server/app/api/pxpipe/status/route.js.nft.json +1 -1
  218. package/cli/app/.next-cli-build/server/app/api/pxpipe/stop/route.js.nft.json +1 -1
  219. package/cli/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
  220. package/cli/app/.next-cli-build/server/app/api/settings/proxy-test/route.js.nft.json +1 -1
  221. package/cli/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
  222. package/cli/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
  223. package/cli/app/.next-cli-build/server/app/api/shutdown/route.js.nft.json +1 -1
  224. package/cli/app/.next-cli-build/server/app/api/tags/route.js.nft.json +1 -1
  225. package/cli/app/.next-cli-build/server/app/api/terminal/auth/setup/route.js.nft.json +1 -1
  226. package/cli/app/.next-cli-build/server/app/api/terminal/auth/status/route.js.nft.json +1 -1
  227. package/cli/app/.next-cli-build/server/app/api/terminal/auth/unlock/route.js.nft.json +1 -1
  228. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/input/route.js.nft.json +1 -1
  229. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/resize/route.js.nft.json +1 -1
  230. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/route.js.nft.json +1 -1
  231. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/stream/route.js.nft.json +1 -1
  232. package/cli/app/.next-cli-build/server/app/api/terminal/session/route.js.nft.json +1 -1
  233. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
  234. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/route.js.nft.json +1 -1
  235. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
  236. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -1
  237. package/cli/app/.next-cli-build/server/app/api/translator/load/route.js.nft.json +1 -1
  238. package/cli/app/.next-cli-build/server/app/api/translator/save/route.js.nft.json +1 -1
  239. package/cli/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
  240. package/cli/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
  241. package/cli/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  242. package/cli/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  243. package/cli/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
  244. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
  245. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
  246. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
  247. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
  248. package/cli/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  249. package/cli/app/.next-cli-build/server/app/api/usage/aggregate/route.js.nft.json +1 -1
  250. package/cli/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
  251. package/cli/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
  252. package/cli/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
  253. package/cli/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
  254. package/cli/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  255. package/cli/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
  256. package/cli/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
  257. package/cli/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  258. package/cli/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  259. package/cli/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  260. package/cli/app/.next-cli-build/server/app/api/v1/audio/voices/route.js.nft.json +1 -1
  261. package/cli/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  262. package/cli/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  263. package/cli/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  264. package/cli/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -1
  265. package/cli/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
  266. package/cli/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
  267. package/cli/app/.next-cli-build/server/app/api/v1/models/info/route.js.nft.json +1 -1
  268. package/cli/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
  269. package/cli/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
  270. package/cli/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
  271. package/cli/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
  272. package/cli/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
  273. package/cli/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
  274. package/cli/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  275. package/cli/app/.next-cli-build/server/app/api/v1beta/models/route.js.nft.json +1 -1
  276. package/cli/app/.next-cli-build/server/app/api/version/route.js +1 -1
  277. package/cli/app/.next-cli-build/server/app/api/version/route.js.nft.json +1 -1
  278. package/cli/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
  279. package/cli/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
  280. package/cli/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
  281. package/cli/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +1 -1
  282. package/cli/app/.next-cli-build/server/app/callback/page.js.nft.json +1 -1
  283. package/cli/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  284. package/cli/app/.next-cli-build/server/app/callback.html +1 -1
  285. package/cli/app/.next-cli-build/server/app/callback.rsc +3 -3
  286. package/cli/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +3 -3
  287. package/cli/app/.next-cli-build/server/app/callback.segments/_head.segment.rsc +1 -1
  288. package/cli/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +3 -3
  289. package/cli/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +1 -1
  290. package/cli/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  291. package/cli/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
  292. package/cli/app/.next-cli-build/server/app/dashboard/automation.html +1 -1
  293. package/cli/app/.next-cli-build/server/app/dashboard/automation.rsc +5 -5
  294. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation/__PAGE__.segment.rsc +2 -2
  295. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation.segment.rsc +1 -1
  296. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  297. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  298. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_full.segment.rsc +5 -5
  299. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_head.segment.rsc +1 -1
  300. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_index.segment.rsc +3 -3
  301. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_tree.segment.rsc +1 -1
  302. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
  303. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +5 -5
  304. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
  305. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
  306. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  307. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  308. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +5 -5
  309. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
  310. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_index.segment.rsc +3 -3
  311. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
  312. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
  313. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +5 -5
  314. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
  315. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
  316. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  317. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  318. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +5 -5
  319. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
  320. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_index.segment.rsc +3 -3
  321. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
  322. package/cli/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
  323. package/cli/app/.next-cli-build/server/app/dashboard/combos.rsc +5 -5
  324. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
  325. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
  326. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  327. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  328. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +5 -5
  329. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
  330. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_index.segment.rsc +3 -3
  331. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
  332. package/cli/app/.next-cli-build/server/app/dashboard/context.html +1 -1
  333. package/cli/app/.next-cli-build/server/app/dashboard/context.rsc +5 -5
  334. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard/context/__PAGE__.segment.rsc +2 -2
  335. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard/context.segment.rsc +1 -1
  336. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  337. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  338. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_full.segment.rsc +5 -5
  339. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_head.segment.rsc +1 -1
  340. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_index.segment.rsc +3 -3
  341. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_tree.segment.rsc +1 -1
  342. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
  343. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.rsc +5 -5
  344. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
  345. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
  346. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  347. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  348. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +5 -5
  349. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
  350. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_index.segment.rsc +3 -3
  351. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
  352. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
  353. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +5 -5
  354. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
  355. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
  356. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
  357. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  358. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  359. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +5 -5
  360. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
  361. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +3 -3
  362. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +1 -1
  363. package/cli/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
  364. package/cli/app/.next-cli-build/server/app/dashboard/mitm.rsc +5 -5
  365. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
  366. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
  367. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  368. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  369. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +5 -5
  370. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
  371. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_index.segment.rsc +3 -3
  372. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
  373. package/cli/app/.next-cli-build/server/app/dashboard/playground.html +1 -1
  374. package/cli/app/.next-cli-build/server/app/dashboard/playground.rsc +5 -5
  375. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard/playground/__PAGE__.segment.rsc +2 -2
  376. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard/playground.segment.rsc +1 -1
  377. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  378. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  379. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_full.segment.rsc +5 -5
  380. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_head.segment.rsc +1 -1
  381. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_index.segment.rsc +3 -3
  382. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_tree.segment.rsc +1 -1
  383. package/cli/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
  384. package/cli/app/.next-cli-build/server/app/dashboard/profile.rsc +5 -5
  385. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
  386. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
  387. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  388. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  389. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +5 -5
  390. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
  391. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_index.segment.rsc +3 -3
  392. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
  393. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
  394. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.rsc +5 -5
  395. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
  396. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
  397. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  398. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  399. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  400. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +5 -5
  401. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
  402. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_index.segment.rsc +3 -3
  403. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
  404. package/cli/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
  405. package/cli/app/.next-cli-build/server/app/dashboard/providers.rsc +5 -5
  406. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
  407. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  408. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  409. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  410. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +5 -5
  411. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
  412. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_index.segment.rsc +3 -3
  413. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
  414. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
  415. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +5 -5
  416. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
  417. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
  418. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  419. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  420. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +5 -5
  421. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
  422. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +3 -3
  423. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
  424. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.html +1 -1
  425. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.rsc +5 -5
  426. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +2 -2
  427. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe.segment.rsc +1 -1
  428. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  429. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  430. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_full.segment.rsc +5 -5
  431. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_head.segment.rsc +1 -1
  432. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_index.segment.rsc +3 -3
  433. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +1 -1
  434. package/cli/app/.next-cli-build/server/app/dashboard/quota.html +2 -2
  435. package/cli/app/.next-cli-build/server/app/dashboard/quota.rsc +6 -6
  436. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
  437. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
  438. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  439. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  440. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +6 -6
  441. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
  442. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_index.segment.rsc +3 -3
  443. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
  444. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js.nft.json +1 -1
  445. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  446. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  447. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +3 -3
  448. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +3 -3
  449. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  450. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +3 -3
  451. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
  452. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  453. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  454. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  455. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  456. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
  457. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.rsc +5 -5
  458. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +2 -2
  459. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver.segment.rsc +1 -1
  460. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  461. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  462. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +5 -5
  463. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_head.segment.rsc +1 -1
  464. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_index.segment.rsc +3 -3
  465. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +1 -1
  466. package/cli/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
  467. package/cli/app/.next-cli-build/server/app/dashboard/translator.rsc +5 -5
  468. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
  469. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
  470. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  471. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  472. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +5 -5
  473. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
  474. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_index.segment.rsc +3 -3
  475. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
  476. package/cli/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
  477. package/cli/app/.next-cli-build/server/app/dashboard/usage.rsc +5 -5
  478. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
  479. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
  480. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  481. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  482. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +5 -5
  483. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
  484. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_index.segment.rsc +3 -3
  485. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
  486. package/cli/app/.next-cli-build/server/app/dashboard.html +1 -1
  487. package/cli/app/.next-cli-build/server/app/dashboard.rsc +5 -5
  488. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
  489. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  490. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  491. package/cli/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +5 -5
  492. package/cli/app/.next-cli-build/server/app/dashboard.segments/_head.segment.rsc +1 -1
  493. package/cli/app/.next-cli-build/server/app/dashboard.segments/_index.segment.rsc +3 -3
  494. package/cli/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +1 -1
  495. package/cli/app/.next-cli-build/server/app/index.html +1 -1
  496. package/cli/app/.next-cli-build/server/app/index.rsc +3 -3
  497. package/cli/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  498. package/cli/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +3 -3
  499. package/cli/app/.next-cli-build/server/app/index.segments/_head.segment.rsc +1 -1
  500. package/cli/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +3 -3
  501. package/cli/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +1 -1
  502. package/cli/app/.next-cli-build/server/app/landing/page.js.nft.json +1 -1
  503. package/cli/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  504. package/cli/app/.next-cli-build/server/app/landing.html +1 -1
  505. package/cli/app/.next-cli-build/server/app/landing.rsc +3 -3
  506. package/cli/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +3 -3
  507. package/cli/app/.next-cli-build/server/app/landing.segments/_head.segment.rsc +1 -1
  508. package/cli/app/.next-cli-build/server/app/landing.segments/_index.segment.rsc +3 -3
  509. package/cli/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +1 -1
  510. package/cli/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
  511. package/cli/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
  512. package/cli/app/.next-cli-build/server/app/login/page.js.nft.json +1 -1
  513. package/cli/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  514. package/cli/app/.next-cli-build/server/app/login.html +1 -1
  515. package/cli/app/.next-cli-build/server/app/login.rsc +4 -4
  516. package/cli/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +4 -4
  517. package/cli/app/.next-cli-build/server/app/login.segments/_head.segment.rsc +1 -1
  518. package/cli/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +3 -3
  519. package/cli/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +1 -1
  520. package/cli/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  521. package/cli/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
  522. package/cli/app/.next-cli-build/server/app/manifest.webmanifest/route.js.nft.json +1 -1
  523. package/cli/app/.next-cli-build/server/app/page.js.nft.json +1 -1
  524. package/cli/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  525. package/cli/app/.next-cli-build/server/app-paths-manifest.json +7 -7
  526. package/cli/app/.next-cli-build/server/chunks/3110.js +2 -2
  527. package/cli/app/.next-cli-build/server/chunks/3407.js +1 -1
  528. package/cli/app/.next-cli-build/server/chunks/415.js +1 -1
  529. package/cli/app/.next-cli-build/server/chunks/4177.js +1 -1
  530. package/cli/app/.next-cli-build/server/chunks/4746.js +1 -1
  531. package/cli/app/.next-cli-build/server/chunks/6896.js +1 -1
  532. package/cli/app/.next-cli-build/server/chunks/7276.js +1 -1
  533. package/cli/app/.next-cli-build/server/chunks/7828.js +1 -1
  534. package/cli/app/.next-cli-build/server/chunks/8160.js +1 -0
  535. package/cli/app/.next-cli-build/server/chunks/9489.js +1 -1
  536. package/cli/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  537. package/cli/app/.next-cli-build/server/pages/404.html +1 -1
  538. package/cli/app/.next-cli-build/server/pages/500.html +1 -1
  539. package/cli/app/.next-cli-build/static/chunks/{3702-4d2e4b7e4bdf361e.js → 3702-ddebcb4f44fccb12.js} +1 -1
  540. 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/src/lib/terminal/ptyBridge.py +163 -0
  541. 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/src/lib/terminal/ptyBridge.py +163 -0
  542. package/cli/app/package.json +1 -1
  543. package/cli/package.json +1 -1
  544. package/open-sse/executors/antigravity.js +10 -1
  545. package/open-sse/services/projectId.js +206 -49
  546. package/open-sse/translator/request/openai-to-gemini.js +8 -2
  547. package/package.json +1 -1
  548. package/src/lib/oauth/providers.js +17 -52
  549. package/src/lib/oauth/services/antigravityBulkImportManager.js +51 -1
  550. package/src/sse/handlers/chat.js +42 -7
  551. package/src/sse/services/auth.js +1 -1
  552. /package/cli/app/.next-cli-build/static/{ZmhcxPfn8Y_X2WWVQG99n → lcoqz143DcT3N-jD5HWHn}/_buildManifest.js +0 -0
  553. /package/cli/app/.next-cli-build/static/{ZmhcxPfn8Y_X2WWVQG99n → lcoqz143DcT3N-jD5HWHn}/_ssgManifest.js +0 -0
@@ -1,10 +1,14 @@
1
1
  /**
2
2
  * Project ID Service - Fetch and cache real Project IDs from Google Cloud Code API
3
3
  *
4
- *
5
4
  * Instead of generating random project IDs (e.g. "useful-spark-a1b2c"),
6
5
  * this service fetches the real Project ID bound to the authenticated user's account.
7
6
  * This significantly reduces the risk of being flagged by Google's anti-abuse systems.
7
+ *
8
+ * Account types:
9
+ * - free-tier (personal Gmail): loadCodeAssist / onboardUser returns a managed project id
10
+ * - standard-tier + userDefinedCloudaicompanionProject (GSuite/DASHER): caller must supply
11
+ * a real GCP project the user can access (Code Assist license + IAM)
8
12
  */
9
13
 
10
14
  import { CLOUD_CODE_API, LOAD_CODE_ASSIST_HEADERS, LOAD_CODE_ASSIST_METADATA } from "../config/appConstants.js";
@@ -75,36 +79,72 @@ startCacheCleanup();
75
79
 
76
80
  // ─── Public API ───────────────────────────────────────────────────────────────
77
81
 
82
+ /**
83
+ * Normalize a project id that may be a string or { id }.
84
+ * @param {unknown} value
85
+ * @returns {string|null}
86
+ */
87
+ export function normalizeProjectId(value) {
88
+ if (typeof value === "string") {
89
+ const id = value.trim();
90
+ return id || null;
91
+ }
92
+ if (value && typeof value === "object" && typeof value.id === "string") {
93
+ const id = value.id.trim();
94
+ return id || null;
95
+ }
96
+ return null;
97
+ }
98
+
99
+ /**
100
+ * Detect whether a project id looks like a synthetic/random id we used to generate
101
+ * (e.g. "useful-spark-a1b2c"). Real GCP ids and Google-managed free-tier ids are kept.
102
+ * @param {string|null|undefined} projectId
103
+ * @returns {boolean}
104
+ */
105
+ export function isSyntheticProjectId(projectId) {
106
+ if (!projectId || typeof projectId !== "string") return false;
107
+ // Historical generator: adj-noun-5hex
108
+ return /^(useful|bright|swift|calm|bold)-(fuze|wave|spark|flow|core)-[0-9a-f]{5}$/i.test(projectId.trim());
109
+ }
110
+
78
111
  /**
79
112
  * Get the Project ID for a connection, with caching.
80
- * Returns null on failure (callers should fall back to random generation).
113
+ * Returns null on failure (callers must NOT invent a random project id).
81
114
  *
82
115
  * @param {string} connectionId - The connection identifier for cache keying
83
116
  * @param {string} accessToken - Valid OAuth access token
117
+ * @param {{ preferredProjectId?: string|null }} [options]
84
118
  * @returns {Promise<string|null>} Real project ID or null
85
119
  */
86
- export async function getProjectIdForConnection(connectionId, accessToken) {
120
+ export async function getProjectIdForConnection(connectionId, accessToken, options = {}) {
87
121
  if (!connectionId || !accessToken) return null;
88
122
 
89
- // Return cached value if still fresh
123
+ const preferred = normalizeProjectId(options.preferredProjectId);
124
+
125
+ // Return cached value if still fresh (unless preferred is set and differs)
90
126
  const cached = projectIdCache.get(connectionId);
91
127
  if (cached && Date.now() - cached.fetchedAt < CACHE_TTL_MS) {
92
- return cached.projectId;
128
+ if (!preferred || preferred === cached.projectId) {
129
+ return cached.projectId;
130
+ }
93
131
  }
94
132
 
95
- // Deduplicate concurrent fetches for the same connection
96
- if (pendingFetches.has(connectionId)) {
97
- return pendingFetches.get(connectionId).promise;
133
+ // Deduplicate concurrent fetches for the same connection+preferred
134
+ const pendingKey = preferred ? `${connectionId}::${preferred}` : connectionId;
135
+ if (pendingFetches.has(pendingKey)) {
136
+ return pendingFetches.get(pendingKey).promise;
98
137
  }
99
138
 
100
- // Each fetch gets its own AbortController so it can be canceled via removeConnection()
101
139
  const controller = new AbortController();
102
140
 
103
141
  const promise = (async () => {
104
142
  try {
105
- const projectId = await fetchProjectId(accessToken, controller.signal);
143
+ const projectId = await fetchProjectId(accessToken, controller.signal, {
144
+ preferredProjectId: preferred,
145
+ });
106
146
  if (projectId) {
107
- projectIdCache.set(connectionId, {projectId, fetchedAt: Date.now()});
147
+ projectIdCache.set(connectionId, { projectId, fetchedAt: Date.now() });
108
148
  return projectId;
109
149
  }
110
150
  console.warn("[ProjectId] could not fetch projectId for connection", connectionId.slice(0, 8));
@@ -113,14 +153,38 @@ export async function getProjectIdForConnection(connectionId, accessToken) {
113
153
  console.warn(`[ProjectId] Error fetching project ID: ${error.message}`);
114
154
  return null;
115
155
  } finally {
116
- pendingFetches.delete(connectionId);
156
+ pendingFetches.delete(pendingKey);
117
157
  }
118
158
  })();
119
159
 
120
- pendingFetches.set(connectionId, {promise, controller, startedAt: Date.now()});
160
+ pendingFetches.set(pendingKey, { promise, controller, startedAt: Date.now() });
121
161
  return promise;
122
162
  }
123
163
 
164
+ /**
165
+ * Resolve project id for an access token without connection caching.
166
+ * Used by OAuth postExchange / bulk import.
167
+ *
168
+ * @param {string} accessToken
169
+ * @param {{ preferredProjectId?: string|null }} [options]
170
+ * @returns {Promise<{ projectId: string|null, tierId: string|null, requiresUserProject: boolean, loadRaw?: object, error?: string }>}
171
+ */
172
+ export async function resolveCloudCodeProject(accessToken, options = {}) {
173
+ if (!accessToken) {
174
+ return { projectId: null, tierId: null, requiresUserProject: false, error: "missing access token" };
175
+ }
176
+ try {
177
+ return await resolveProjectFromApi(accessToken, undefined, options);
178
+ } catch (error) {
179
+ return {
180
+ projectId: null,
181
+ tierId: null,
182
+ requiresUserProject: false,
183
+ error: error?.message || String(error),
184
+ };
185
+ }
186
+ }
187
+
124
188
  /**
125
189
  * Invalidate the cached project ID for a connection.
126
190
  * Call this when a connection's credentials are fully revoked or refreshed.
@@ -131,36 +195,46 @@ export function invalidateProjectId(connectionId) {
131
195
 
132
196
  /**
133
197
  * Fully remove a connection: abort any in-flight fetch and delete its cached project ID.
134
- * Wire this into your connection close / disconnect lifecycle events to prevent memory leaks.
135
198
  *
136
199
  * @param {string} connectionId
137
200
  */
138
201
  export function removeConnection(connectionId) {
139
202
  if (!connectionId) return;
140
203
  projectIdCache.delete(connectionId);
141
- const pending = pendingFetches.get(connectionId);
142
- if (pending) {
143
- try { pending.controller.abort(); } catch (_) { /* ignore */ }
144
- pendingFetches.delete(connectionId);
204
+ for (const [key, pending] of pendingFetches) {
205
+ if (key === connectionId || key.startsWith(`${connectionId}::`)) {
206
+ try { pending.controller.abort(); } catch (_) { /* ignore */ }
207
+ pendingFetches.delete(key);
208
+ }
145
209
  }
146
210
  }
147
211
 
148
212
  // ─── Internal helpers ─────────────────────────────────────────────────────────
149
213
 
150
214
  /**
151
- * Fetch project ID via loadCodeAssist endpoint.
152
- * Falls back to onboardUser when loadCodeAssist returns no project.
153
- *
154
- * @param {string} accessToken
155
- * @param {AbortSignal} signal
215
+ * @param {string} accessToken
216
+ * @param {AbortSignal} [signal]
217
+ * @param {{ preferredProjectId?: string|null }} [options]
156
218
  * @returns {Promise<string|null>}
157
219
  */
158
- async function fetchProjectId(accessToken, signal) {
220
+ async function fetchProjectId(accessToken, signal, options = {}) {
221
+ const result = await resolveProjectFromApi(accessToken, signal, options);
222
+ return result.projectId;
223
+ }
224
+
225
+ /**
226
+ * @param {string} accessToken
227
+ * @param {AbortSignal} [signal]
228
+ * @param {{ preferredProjectId?: string|null }} [options]
229
+ */
230
+ async function resolveProjectFromApi(accessToken, signal, options = {}) {
231
+ const preferred = normalizeProjectId(options.preferredProjectId);
232
+
159
233
  const response = await fetch(CLOUD_CODE_API.loadCodeAssist, {
160
234
  method: "POST",
161
235
  headers: { ...LOAD_CODE_ASSIST_HEADERS, "Authorization": `Bearer ${accessToken}` },
162
236
  body: JSON.stringify({ metadata: LOAD_CODE_ASSIST_METADATA }),
163
- signal
237
+ signal,
164
238
  });
165
239
 
166
240
  if (!response.ok) {
@@ -169,44 +243,84 @@ async function fetchProjectId(accessToken, signal) {
169
243
  }
170
244
 
171
245
  const data = await response.json();
172
- const projectId = extractProjectId(data);
173
- if (projectId) return projectId;
246
+ const existing = extractProjectId(data);
247
+ if (existing) {
248
+ return {
249
+ projectId: existing,
250
+ tierId: pickTierId(data) || null,
251
+ requiresUserProject: false,
252
+ loadRaw: data,
253
+ };
254
+ }
174
255
 
175
- // Determine the tier to use for onboarding
176
- let tierID = "legacy-tier";
177
- if (Array.isArray(data.allowedTiers)) {
178
- for (const tier of data.allowedTiers) {
179
- if (tier && typeof tier === "object" && tier.isDefault === true) {
180
- if (tier.id && typeof tier.id === "string" && tier.id.trim()) {
181
- tierID = tier.id.trim();
182
- break;
183
- }
184
- }
256
+ const tierInfo = pickTierInfo(data);
257
+ const tierId = tierInfo.tierId || "free-tier";
258
+ const requiresUserProject = !!tierInfo.userDefined;
259
+
260
+ // Workspace / DASHER: free-tier blocked at loadCodeAssist. Chat still works with an
261
+ // existing managed Cloud Code project string (from free-tier peers / stored id)
262
+ // no GCP console setup required. Only onboard when caller supplies a preferred id.
263
+ if (requiresUserProject) {
264
+ if (!preferred) {
265
+ console.warn(
266
+ "[ProjectId] GSuite/DASHER has no free-tier project from loadCodeAssist; " +
267
+ "caller should reuse a stored/peer managed project id."
268
+ );
269
+ return {
270
+ projectId: null,
271
+ tierId,
272
+ requiresUserProject: true,
273
+ loadRaw: data,
274
+ error: "no managed project on account; use stored or peer projectId",
275
+ };
185
276
  }
277
+ const onboarded = await onboardUser(accessToken, tierId, signal, preferred);
278
+ return {
279
+ projectId: onboarded || preferred,
280
+ tierId,
281
+ requiresUserProject: true,
282
+ loadRaw: data,
283
+ error: undefined,
284
+ };
186
285
  }
187
286
 
188
- return onboardUser(accessToken, tierID, signal);
287
+ // free-tier / auto project: onboard without a project string
288
+ const onboarded = await onboardUser(accessToken, tierId, signal, null);
289
+ return {
290
+ projectId: onboarded,
291
+ tierId,
292
+ requiresUserProject: false,
293
+ loadRaw: data,
294
+ error: onboarded ? undefined : "onboardUser did not return a project id",
295
+ };
189
296
  }
190
297
 
191
298
  /**
192
299
  * Fetch project ID via onboardUser endpoint (polls until done).
193
300
  *
194
- * @param {string} accessToken
195
- * @param {string} tierID
196
- * @param {AbortSignal} externalSignal – propagated from the connection's AbortController
301
+ * @param {string} accessToken
302
+ * @param {string} tierID
303
+ * @param {AbortSignal} [externalSignal]
304
+ * @param {string|null} [cloudaicompanionProject] - string project id for standard-tier
197
305
  * @returns {Promise<string|null>}
198
306
  */
199
- async function onboardUser(accessToken, tierID, externalSignal) {
200
- console.log(`[ProjectId] Onboarding user with tier: ${tierID}`);
307
+ async function onboardUser(accessToken, tierID, externalSignal, cloudaicompanionProject = null) {
308
+ console.log(
309
+ `[ProjectId] Onboarding user with tier: ${tierID}` +
310
+ (cloudaicompanionProject ? ` project=${cloudaicompanionProject}` : "")
311
+ );
201
312
 
202
313
  const reqBody = { tierId: tierID, metadata: LOAD_CODE_ASSIST_METADATA };
314
+ // API expects a scalar string for cloudaicompanionProject (not {id: ...}).
315
+ if (cloudaicompanionProject) {
316
+ reqBody.cloudaicompanionProject = cloudaicompanionProject;
317
+ }
318
+
203
319
  const MAX_ATTEMPTS = 5;
204
320
 
205
321
  for (let attempt = 1; attempt <= MAX_ATTEMPTS; attempt++) {
206
- // Bail out immediately if the connection was removed
207
322
  if (externalSignal?.aborted) return null;
208
323
 
209
- // Per-attempt timeout controller; forwards external abort as well
210
324
  const localCtrl = new AbortController();
211
325
  const timeoutId = setTimeout(() => localCtrl.abort(), 30_000);
212
326
  const forwardAbort = () => localCtrl.abort();
@@ -217,7 +331,7 @@ async function onboardUser(accessToken, tierID, externalSignal) {
217
331
  method: "POST",
218
332
  headers: { ...LOAD_CODE_ASSIST_HEADERS, "Authorization": `Bearer ${accessToken}` },
219
333
  body: JSON.stringify(reqBody),
220
- signal: localCtrl.signal
334
+ signal: localCtrl.signal,
221
335
  });
222
336
 
223
337
  clearTimeout(timeoutId);
@@ -235,10 +349,14 @@ async function onboardUser(accessToken, tierID, externalSignal) {
235
349
  console.log(`[ProjectId] Successfully onboarded, project ID: ${projectId}`);
236
350
  return projectId;
237
351
  }
352
+ // Some standard-tier responses echo empty object; fall back to requested project.
353
+ if (cloudaicompanionProject) {
354
+ console.log(`[ProjectId] onboard done without id; using preferred project ${cloudaicompanionProject}`);
355
+ return cloudaicompanionProject;
356
+ }
238
357
  throw new Error("onboardUser done but no project_id in response");
239
358
  }
240
359
 
241
- // Server not done yet – wait and retry
242
360
  console.log(`[ProjectId] Onboard attempt ${attempt}/${MAX_ATTEMPTS}: not done yet, waiting...`);
243
361
  await new Promise(resolve => setTimeout(resolve, 2000));
244
362
 
@@ -246,14 +364,13 @@ async function onboardUser(accessToken, tierID, externalSignal) {
246
364
  clearTimeout(timeoutId);
247
365
  if (error.name === "AbortError") {
248
366
  console.warn(`[ProjectId] onboardUser attempt ${attempt} aborted (timeout or connection removed)`);
249
- if (externalSignal?.aborted) return null; // connection gone – stop retrying
367
+ if (externalSignal?.aborted) return null;
250
368
  continue;
251
369
  }
252
370
  if (attempt === MAX_ATTEMPTS) {
253
371
  console.warn(`[ProjectId] onboardUser failed after ${MAX_ATTEMPTS} attempts: ${error.message}`);
254
372
  return null;
255
373
  }
256
- // Continue to next attempt instead of throwing (which would skip remaining retries)
257
374
  console.warn(`[ProjectId] onboardUser attempt ${attempt} failed: ${error.message}, retrying...`);
258
375
  await new Promise(resolve => setTimeout(resolve, 2000));
259
376
  } finally {
@@ -265,6 +382,46 @@ async function onboardUser(accessToken, tierID, externalSignal) {
265
382
  return null;
266
383
  }
267
384
 
385
+ function pickTierInfo(data) {
386
+ let tierId = null;
387
+ let userDefined = false;
388
+
389
+ if (data?.currentTier?.id && typeof data.currentTier.id === "string") {
390
+ tierId = data.currentTier.id.trim();
391
+ userDefined = !!data.currentTier.userDefinedCloudaicompanionProject;
392
+ }
393
+
394
+ if (Array.isArray(data?.allowedTiers)) {
395
+ for (const tier of data.allowedTiers) {
396
+ if (tier && typeof tier === "object" && tier.isDefault === true && tier.id) {
397
+ tierId = String(tier.id).trim();
398
+ userDefined = !!tier.userDefinedCloudaicompanionProject;
399
+ break;
400
+ }
401
+ }
402
+ // If no default, prefer free-tier when present (personal accounts).
403
+ if (!tierId) {
404
+ const free = data.allowedTiers.find(t => t?.id === "free-tier");
405
+ if (free) {
406
+ tierId = "free-tier";
407
+ userDefined = !!free.userDefinedCloudaicompanionProject;
408
+ } else if (data.allowedTiers[0]?.id) {
409
+ tierId = String(data.allowedTiers[0].id).trim();
410
+ userDefined = !!data.allowedTiers[0].userDefinedCloudaicompanionProject;
411
+ }
412
+ }
413
+ }
414
+
415
+ // free-tier is never user-defined even if flag is missing
416
+ if (tierId === "free-tier") userDefined = false;
417
+
418
+ return { tierId, userDefined };
419
+ }
420
+
421
+ function pickTierId(data) {
422
+ return pickTierInfo(data).tierId;
423
+ }
424
+
268
425
  /**
269
426
  * Extract project ID from loadCodeAssist response.
270
427
  */
@@ -269,7 +269,10 @@ export function openaiToGeminiCLIRequest(model, body, stream) {
269
269
 
270
270
  // Wrap Gemini CLI format in Cloud Code wrapper
271
271
  function wrapInCloudCodeEnvelope(model, geminiCLI, credentials = null, isAntigravity = false) {
272
- const projectId = credentials?.projectId || generateProjectId();
272
+ const projectId =
273
+ credentials?.projectId ||
274
+ credentials?.providerSpecificData?.projectId ||
275
+ generateProjectId();
273
276
 
274
277
  const envelope = {
275
278
  project: projectId,
@@ -318,7 +321,10 @@ function wrapInCloudCodeEnvelope(model, geminiCLI, credentials = null, isAntigra
318
321
 
319
322
  // Wrap Claude format in Cloud Code envelope for Antigravity
320
323
  function wrapInCloudCodeEnvelopeForClaude(model, claudeRequest, credentials = null) {
321
- const projectId = credentials?.projectId || generateProjectId();
324
+ const projectId =
325
+ credentials?.projectId ||
326
+ credentials?.providerSpecificData?.projectId ||
327
+ generateProjectId();
322
328
 
323
329
  const envelope = {
324
330
  project: projectId,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zevairouter",
3
- "version": "1.0.73",
3
+ "version": "1.0.74",
4
4
  "description": "Self-hosted AI router: many providers, one OpenAI-compatible /v1 endpoint and dashboard",
5
5
  "bin": {
6
6
  "zevai": "./cli/cli.js"
@@ -437,17 +437,6 @@ const PROVIDERS = {
437
437
  return await response.json();
438
438
  },
439
439
  postExchange: async (tokens) => {
440
- // Numeric enums matching Antigravity binary ClientMetadata
441
- const loadHeaders = {
442
- "Authorization": `Bearer ${tokens.access_token}`,
443
- "Content-Type": "application/json",
444
- "User-Agent": ANTIGRAVITY_CONFIG.loadCodeAssistUserAgent,
445
- "X-Goog-Api-Client": ANTIGRAVITY_CONFIG.loadCodeAssistApiClient,
446
- "Client-Metadata": ANTIGRAVITY_CONFIG.loadCodeAssistClientMetadata,
447
- "x-request-source": "local",
448
- };
449
- const metadata = getOAuthClientMetadata();
450
-
451
440
  // Fetch user info
452
441
  const userInfoRes = await fetch(`${ANTIGRAVITY_CONFIG.userInfoUrl}?alt=json`, {
453
442
  headers: {
@@ -457,52 +446,28 @@ const PROVIDERS = {
457
446
  });
458
447
  const userInfo = userInfoRes.ok ? await userInfoRes.json() : {};
459
448
 
460
- // Load Code Assist to get project ID and tier
449
+ // Resolve real Cloud Code project (loadCodeAssist + onboardUser).
450
+ // Prefer env override for GSuite/DASHER accounts that require a user-defined GCP project.
451
+ const preferredProjectId =
452
+ process.env.ANTIGRAVITY_GCP_PROJECT ||
453
+ process.env.ZEVAI_ANTIGRAVITY_GCP_PROJECT ||
454
+ "";
461
455
  let projectId = "";
462
- let tierId = "legacy-tier";
463
456
  try {
464
- const loadRes = await fetch(ANTIGRAVITY_CONFIG.loadCodeAssistEndpoint, {
465
- method: "POST",
466
- headers: loadHeaders,
467
- body: JSON.stringify({ metadata }),
457
+ const { resolveCloudCodeProject } = await import(
458
+ "../../../open-sse/services/projectId.js"
459
+ );
460
+ const resolved = await resolveCloudCodeProject(tokens.access_token, {
461
+ preferredProjectId: preferredProjectId || null,
468
462
  });
469
- if (loadRes.ok) {
470
- const data = await loadRes.json();
471
- projectId = data.cloudaicompanionProject?.id || data.cloudaicompanionProject || "";
472
- if (Array.isArray(data.allowedTiers)) {
473
- for (const tier of data.allowedTiers) {
474
- if (tier.isDefault && tier.id) {
475
- tierId = tier.id.trim();
476
- break;
477
- }
478
- }
479
- }
463
+ projectId = resolved.projectId || preferredProjectId || "";
464
+ // GSuite/DASHER often has no free-tier project here; bulk save / chat
465
+ // will reuse a peer managed projectId. Not a hard failure.
466
+ if (!projectId && resolved.error) {
467
+ console.warn("[Antigravity OAuth] project resolve:", resolved.error);
480
468
  }
481
469
  } catch (e) {
482
- console.log("Failed to load code assist:", e);
483
- }
484
-
485
- // Fire-and-forget onboarding — does not block DB save
486
- if (projectId) {
487
- const doOnboard = async () => {
488
- for (let i = 0; i < 10; i++) {
489
- try {
490
- const onboardRes = await fetch(ANTIGRAVITY_CONFIG.onboardUserEndpoint, {
491
- method: "POST",
492
- headers: loadHeaders,
493
- body: JSON.stringify({ tierId, metadata }),
494
- });
495
- if (onboardRes.ok) {
496
- const result = await onboardRes.json();
497
- if (result.done === true) break;
498
- }
499
- } catch (e) {
500
- break;
501
- }
502
- await new Promise(resolve => setTimeout(resolve, 5000));
503
- }
504
- };
505
- doOnboard().catch(() => {});
470
+ console.log("Failed to resolve Antigravity project ID:", e);
506
471
  }
507
472
 
508
473
  return { userInfo, projectId };
@@ -26,11 +26,60 @@ function getRedirectUri() {
26
26
  return `http://localhost:${port}/callback`;
27
27
  }
28
28
 
29
+ /**
30
+ * Bootstrap managed Cloud Code project string.
31
+ * Gmail free-tier usually gets its own from loadCodeAssist/onboard.
32
+ * GSuite/DASHER does not — but chat accepts existing managed project strings
33
+ * (no GCP console, no prior Gmail connection required).
34
+ * Prefer env → peers → token resolve → sticky bootstrap id.
35
+ */
36
+ const ANTIGRAVITY_BOOTSTRAP_PROJECT =
37
+ process.env.ANTIGRAVITY_GCP_PROJECT ||
38
+ process.env.ZEVAI_ANTIGRAVITY_GCP_PROJECT ||
39
+ // Known-working Cloud Code managed project style id (not a user GCP project).
40
+ // Used only when Google returns no free-tier project (typical GSuite/DASHER).
41
+ "woven-tributary-j9tls";
42
+
43
+ async function resolveProjectIdForSave(tokens) {
44
+ let projectId = (tokens.projectId || "").trim();
45
+ if (projectId) return projectId;
46
+
47
+ // 1) Peer connections already on this machine
48
+ try {
49
+ const { getProviderConnections } = await import("../../../models/index.js");
50
+ const peers = await getProviderConnections({ provider: ANTIGRAVITY_PROVIDER_ID, isActive: true });
51
+ for (const peer of peers || []) {
52
+ const peerPid = (peer.projectId || peer.providerSpecificData?.projectId || "").trim();
53
+ if (peerPid) return peerPid;
54
+ }
55
+ } catch {
56
+ // ignore peer lookup failures
57
+ }
58
+
59
+ // 2) Token resolve (free-tier Gmail path if postExchange missed it)
60
+ if (tokens.accessToken) {
61
+ try {
62
+ const { resolveCloudCodeProject } = await import(
63
+ "../../../../open-sse/services/projectId.js"
64
+ );
65
+ const resolved = await resolveCloudCodeProject(tokens.accessToken);
66
+ if (resolved.projectId) return resolved.projectId;
67
+ } catch {
68
+ // ignore
69
+ }
70
+ }
71
+
72
+ // 3) Bootstrap — GSuite bulk on empty machine still gets a usable projectId
73
+ return ANTIGRAVITY_BOOTSTRAP_PROJECT;
74
+ }
75
+
29
76
  async function defaultSaveAntigravityConnection({ tokens, email }) {
30
77
  const { createProviderConnection } = await import("../../../models/index.js");
78
+ // Top-level projectId is what chat/auth read; also mirror into providerSpecificData.
79
+ const projectId = await resolveProjectIdForSave(tokens);
31
80
  const providerSpecificData = {
32
81
  authMethod: "oauth",
33
- projectId: tokens.projectId || "",
82
+ projectId,
34
83
  loginEmail: email,
35
84
  automation: "gsuite-bulk",
36
85
  };
@@ -42,6 +91,7 @@ async function defaultSaveAntigravityConnection({ tokens, email }) {
42
91
  refreshToken: tokens.refreshToken || "",
43
92
  email,
44
93
  displayName: tokens.displayName || email.split("@")[0],
94
+ projectId,
45
95
  providerSpecificData,
46
96
  expiresAt: tokens.expiresIn
47
97
  ? new Date(Date.now() + tokens.expiresIn * 1000).toISOString()
@@ -202,13 +202,48 @@ async function handleSingleModelChat(body, modelStr, clientRawRequest = null, re
202
202
 
203
203
  const refreshedCredentials = await checkAndRefreshToken(provider, credentials);
204
204
 
205
- // Ensure real project ID is available for providers that need it (P0 fix: cold miss)
206
- if ((provider === "antigravity" || provider === "gemini-cli") && !refreshedCredentials.projectId) {
207
- const pid = await getProjectIdForConnection(credentials.connectionId, refreshedCredentials.accessToken);
208
- if (pid) {
209
- refreshedCredentials.projectId = pid;
210
- // Persist to DB in background so subsequent requests have it immediately
211
- updateProviderCredentials(credentials.connectionId, { projectId: pid }).catch(() => { });
205
+ // Ensure Cloud Code project ID is available (P0 fix: cold miss).
206
+ // Gmail free-tier: loadCodeAssist/onboard returns a managed project.
207
+ // GSuite/DASHER: free-tier blocked, but chat still works with an existing
208
+ // managed project string (peer free-tier project or previously stored id).
209
+ // Brand-new random project names usually 403 — avoid inventing when we can reuse.
210
+ if (provider === "antigravity" || provider === "gemini-cli") {
211
+ const preferredProjectId =
212
+ refreshedCredentials.projectId ||
213
+ credentials.projectId ||
214
+ credentials.providerSpecificData?.projectId ||
215
+ null;
216
+ if (preferredProjectId) {
217
+ refreshedCredentials.projectId = preferredProjectId;
218
+ }
219
+ if (!refreshedCredentials.projectId) {
220
+ let pid = await getProjectIdForConnection(
221
+ credentials.connectionId,
222
+ refreshedCredentials.accessToken,
223
+ { preferredProjectId },
224
+ );
225
+ // Peer fallback: reuse another antigravity connection's managed project id
226
+ // (same behavior users saw historically — no GCP console required for GSuite).
227
+ if (!pid && provider === "antigravity") {
228
+ try {
229
+ const { getProviderConnections } = await import("@/models/index.js");
230
+ const peers = await getProviderConnections({ provider: "antigravity", isActive: true });
231
+ for (const peer of peers || []) {
232
+ if (peer.id === credentials.connectionId) continue;
233
+ const peerPid = peer.projectId || peer.providerSpecificData?.projectId;
234
+ if (peerPid) {
235
+ pid = peerPid;
236
+ break;
237
+ }
238
+ }
239
+ } catch {
240
+ // ignore peer lookup failures
241
+ }
242
+ }
243
+ if (pid) {
244
+ refreshedCredentials.projectId = pid;
245
+ updateProviderCredentials(credentials.connectionId, { projectId: pid }).catch(() => { });
246
+ }
212
247
  }
213
248
  }
214
249
 
@@ -248,7 +248,7 @@ export async function getProviderCredentials(provider, excludeConnectionIds = nu
248
248
  expiresAt: connection.expiresAt,
249
249
  expiresIn: connection.expiresIn,
250
250
  lastRefreshAt: connection.lastRefreshAt,
251
- projectId: connection.projectId,
251
+ projectId: connection.projectId || connection.providerSpecificData?.projectId || null,
252
252
  connectionName: connection.displayName || connection.name || connection.email || connection.id,
253
253
  copilotToken: connection.providerSpecificData?.copilotToken,
254
254
  providerSpecificData: {