zevairouter 1.0.133 → 1.0.134

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 (549) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/cli/app/.next-cli-build/BUILD_ID +1 -1
  3. package/cli/app/.next-cli-build/app-path-routes-manifest.json +7 -7
  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.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/cache/stats/route.js.nft.json +1 -1
  85. package/cli/app/.next-cli-build/server/app/api/changelog/route.js.nft.json +1 -1
  86. package/cli/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
  87. package/cli/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  88. package/cli/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
  89. package/cli/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
  90. package/cli/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js.nft.json +1 -1
  91. package/cli/app/.next-cli-build/server/app/api/cli-tools/codex-gateway/accounts/route.js.nft.json +1 -1
  92. package/cli/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
  93. package/cli/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
  94. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js.nft.json +1 -1
  95. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js.nft.json +1 -1
  96. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
  97. package/cli/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js.nft.json +1 -1
  98. package/cli/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
  99. package/cli/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js.nft.json +1 -1
  100. package/cli/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js.nft.json +1 -1
  101. package/cli/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js.nft.json +1 -1
  102. package/cli/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
  103. package/cli/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js.nft.json +1 -1
  104. package/cli/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
  105. package/cli/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
  106. package/cli/app/.next-cli-build/server/app/api/context/[id]/route.js.nft.json +1 -1
  107. package/cli/app/.next-cli-build/server/app/api/context/bulk/route.js.nft.json +1 -1
  108. package/cli/app/.next-cli-build/server/app/api/context/route.js.nft.json +1 -1
  109. package/cli/app/.next-cli-build/server/app/api/dashboard/chat/completions/route.js.nft.json +1 -1
  110. package/cli/app/.next-cli-build/server/app/api/headroom/extras/route.js.nft.json +1 -1
  111. package/cli/app/.next-cli-build/server/app/api/headroom/proxy/[...path]/route.js.nft.json +1 -1
  112. package/cli/app/.next-cli-build/server/app/api/headroom/restart/route.js.nft.json +1 -1
  113. package/cli/app/.next-cli-build/server/app/api/headroom/start/route.js.nft.json +1 -1
  114. package/cli/app/.next-cli-build/server/app/api/headroom/status/route.js.nft.json +1 -1
  115. package/cli/app/.next-cli-build/server/app/api/headroom/stop/route.js.nft.json +1 -1
  116. package/cli/app/.next-cli-build/server/app/api/health/ready/route.js.nft.json +1 -1
  117. package/cli/app/.next-cli-build/server/app/api/health/route.js.nft.json +1 -1
  118. package/cli/app/.next-cli-build/server/app/api/init/route.js.nft.json +1 -1
  119. package/cli/app/.next-cli-build/server/app/api/keys/[id]/rotate/route.js.nft.json +1 -1
  120. package/cli/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
  121. package/cli/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
  122. package/cli/app/.next-cli-build/server/app/api/locale/route.js.nft.json +1 -1
  123. package/cli/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
  124. package/cli/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
  125. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
  126. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
  127. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
  128. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
  129. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -1
  130. package/cli/app/.next-cli-build/server/app/api/metrics/route.js.nft.json +1 -1
  131. package/cli/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
  132. package/cli/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
  133. package/cli/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
  134. package/cli/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
  135. package/cli/app/.next-cli-build/server/app/api/models/route.js +1 -1
  136. package/cli/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
  137. package/cli/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
  138. package/cli/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  139. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  140. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  141. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/route.js.nft.json +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.nft.json +1 -1
  144. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  145. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  146. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/route.js.nft.json +1 -1
  147. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/latest/route.js.nft.json +1 -1
  148. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/route.js +1 -1
  149. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/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/iflow/cookie/route.js.nft.json +1 -1
  169. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -1
  170. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  171. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  172. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/route.js.nft.json +1 -1
  173. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/latest/route.js.nft.json +1 -1
  174. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/route.js.nft.json +1 -1
  175. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  176. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +1 -1
  177. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  178. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  179. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  180. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/route.js.nft.json +1 -1
  181. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/latest/route.js.nft.json +1 -1
  182. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/route.js.nft.json +1 -1
  183. package/cli/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
  184. package/cli/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  185. package/cli/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
  186. package/cli/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js.nft.json +1 -1
  187. package/cli/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  188. package/cli/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
  189. package/cli/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  190. package/cli/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  191. package/cli/app/.next-cli-build/server/app/api/providers/bulk-delete/route.js.nft.json +1 -1
  192. package/cli/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
  193. package/cli/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js.nft.json +1 -1
  194. package/cli/app/.next-cli-build/server/app/api/providers/route.js +1 -1
  195. package/cli/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
  196. package/cli/app/.next-cli-build/server/app/api/providers/suggested-models/route.js.nft.json +1 -1
  197. package/cli/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  198. package/cli/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
  199. package/cli/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
  200. package/cli/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
  201. package/cli/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
  202. package/cli/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
  203. package/cli/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
  204. package/cli/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
  205. package/cli/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
  206. package/cli/app/.next-cli-build/server/app/api/pxpipe/health/route.js.nft.json +1 -1
  207. package/cli/app/.next-cli-build/server/app/api/pxpipe/install/route.js.nft.json +1 -1
  208. package/cli/app/.next-cli-build/server/app/api/pxpipe/restart/route.js.nft.json +1 -1
  209. package/cli/app/.next-cli-build/server/app/api/pxpipe/start/route.js.nft.json +1 -1
  210. package/cli/app/.next-cli-build/server/app/api/pxpipe/stats/route.js.nft.json +1 -1
  211. package/cli/app/.next-cli-build/server/app/api/pxpipe/status/route.js.nft.json +1 -1
  212. package/cli/app/.next-cli-build/server/app/api/pxpipe/stop/route.js.nft.json +1 -1
  213. package/cli/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
  214. package/cli/app/.next-cli-build/server/app/api/settings/proxy-test/route.js.nft.json +1 -1
  215. package/cli/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
  216. package/cli/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
  217. package/cli/app/.next-cli-build/server/app/api/shutdown/route.js.nft.json +1 -1
  218. package/cli/app/.next-cli-build/server/app/api/tags/route.js.nft.json +1 -1
  219. package/cli/app/.next-cli-build/server/app/api/terminal/auth/setup/route.js.nft.json +1 -1
  220. package/cli/app/.next-cli-build/server/app/api/terminal/auth/status/route.js.nft.json +1 -1
  221. package/cli/app/.next-cli-build/server/app/api/terminal/auth/unlock/route.js.nft.json +1 -1
  222. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/input/route.js.nft.json +1 -1
  223. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/resize/route.js.nft.json +1 -1
  224. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/route.js.nft.json +1 -1
  225. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/stream/route.js.nft.json +1 -1
  226. package/cli/app/.next-cli-build/server/app/api/terminal/session/route.js.nft.json +1 -1
  227. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
  228. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/route.js.nft.json +1 -1
  229. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
  230. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -1
  231. package/cli/app/.next-cli-build/server/app/api/translator/load/route.js.nft.json +1 -1
  232. package/cli/app/.next-cli-build/server/app/api/translator/save/route.js.nft.json +1 -1
  233. package/cli/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
  234. package/cli/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
  235. package/cli/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  236. package/cli/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  237. package/cli/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
  238. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
  239. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
  240. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
  241. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
  242. package/cli/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  243. package/cli/app/.next-cli-build/server/app/api/usage/aggregate/route.js.nft.json +1 -1
  244. package/cli/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
  245. package/cli/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
  246. package/cli/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
  247. package/cli/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
  248. package/cli/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  249. package/cli/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
  250. package/cli/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
  251. package/cli/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  252. package/cli/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  253. package/cli/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  254. package/cli/app/.next-cli-build/server/app/api/v1/audio/voices/route.js.nft.json +1 -1
  255. package/cli/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  256. package/cli/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  257. package/cli/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  258. package/cli/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -1
  259. package/cli/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
  260. package/cli/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
  261. package/cli/app/.next-cli-build/server/app/api/v1/models/info/route.js.nft.json +1 -1
  262. package/cli/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
  263. package/cli/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
  264. package/cli/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
  265. package/cli/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
  266. package/cli/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
  267. package/cli/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
  268. package/cli/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  269. package/cli/app/.next-cli-build/server/app/api/v1beta/models/route.js.nft.json +1 -1
  270. package/cli/app/.next-cli-build/server/app/api/version/route.js +1 -1
  271. package/cli/app/.next-cli-build/server/app/api/version/route.js.nft.json +1 -1
  272. package/cli/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
  273. package/cli/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
  274. package/cli/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
  275. package/cli/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +1 -1
  276. package/cli/app/.next-cli-build/server/app/callback/page.js.nft.json +1 -1
  277. package/cli/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  278. package/cli/app/.next-cli-build/server/app/callback.html +1 -1
  279. package/cli/app/.next-cli-build/server/app/callback.rsc +3 -3
  280. package/cli/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +3 -3
  281. package/cli/app/.next-cli-build/server/app/callback.segments/_head.segment.rsc +1 -1
  282. package/cli/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +3 -3
  283. package/cli/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +1 -1
  284. package/cli/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  285. package/cli/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
  286. package/cli/app/.next-cli-build/server/app/dashboard/automation.html +1 -1
  287. package/cli/app/.next-cli-build/server/app/dashboard/automation.rsc +5 -5
  288. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation/__PAGE__.segment.rsc +2 -2
  289. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation.segment.rsc +1 -1
  290. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  291. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  292. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_full.segment.rsc +5 -5
  293. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_head.segment.rsc +1 -1
  294. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_index.segment.rsc +3 -3
  295. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_tree.segment.rsc +1 -1
  296. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
  297. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +5 -5
  298. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
  299. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
  300. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  301. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  302. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +5 -5
  303. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
  304. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_index.segment.rsc +3 -3
  305. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
  306. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
  307. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +5 -5
  308. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
  309. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
  310. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  311. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  312. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +5 -5
  313. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
  314. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_index.segment.rsc +3 -3
  315. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
  316. package/cli/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
  317. package/cli/app/.next-cli-build/server/app/dashboard/combos.rsc +5 -5
  318. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
  319. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
  320. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  321. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  322. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +5 -5
  323. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
  324. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_index.segment.rsc +3 -3
  325. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
  326. package/cli/app/.next-cli-build/server/app/dashboard/context.html +1 -1
  327. package/cli/app/.next-cli-build/server/app/dashboard/context.rsc +5 -5
  328. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard/context/__PAGE__.segment.rsc +2 -2
  329. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard/context.segment.rsc +1 -1
  330. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  331. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  332. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_full.segment.rsc +5 -5
  333. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_head.segment.rsc +1 -1
  334. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_index.segment.rsc +3 -3
  335. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_tree.segment.rsc +1 -1
  336. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
  337. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.rsc +5 -5
  338. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
  339. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
  340. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  341. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  342. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +5 -5
  343. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
  344. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_index.segment.rsc +3 -3
  345. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
  346. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
  347. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +5 -5
  348. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
  349. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
  350. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
  351. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  352. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  353. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +5 -5
  354. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
  355. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +3 -3
  356. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +1 -1
  357. package/cli/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
  358. package/cli/app/.next-cli-build/server/app/dashboard/mitm.rsc +5 -5
  359. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
  360. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
  361. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  362. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  363. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +5 -5
  364. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
  365. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_index.segment.rsc +3 -3
  366. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
  367. package/cli/app/.next-cli-build/server/app/dashboard/playground.html +1 -1
  368. package/cli/app/.next-cli-build/server/app/dashboard/playground.rsc +5 -5
  369. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard/playground/__PAGE__.segment.rsc +2 -2
  370. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard/playground.segment.rsc +1 -1
  371. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  372. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  373. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_full.segment.rsc +5 -5
  374. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_head.segment.rsc +1 -1
  375. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_index.segment.rsc +3 -3
  376. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_tree.segment.rsc +1 -1
  377. package/cli/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
  378. package/cli/app/.next-cli-build/server/app/dashboard/profile.rsc +5 -5
  379. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
  380. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
  381. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  382. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  383. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +5 -5
  384. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
  385. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_index.segment.rsc +3 -3
  386. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
  387. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
  388. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.rsc +5 -5
  389. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
  390. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
  391. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  392. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  393. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  394. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +5 -5
  395. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
  396. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_index.segment.rsc +3 -3
  397. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
  398. package/cli/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
  399. package/cli/app/.next-cli-build/server/app/dashboard/providers.rsc +5 -5
  400. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
  401. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  402. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  403. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  404. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +5 -5
  405. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
  406. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_index.segment.rsc +3 -3
  407. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
  408. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
  409. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +5 -5
  410. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
  411. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
  412. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  413. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  414. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +5 -5
  415. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
  416. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +3 -3
  417. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
  418. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.html +1 -1
  419. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.rsc +5 -5
  420. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +2 -2
  421. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe.segment.rsc +1 -1
  422. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  423. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  424. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_full.segment.rsc +5 -5
  425. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_head.segment.rsc +1 -1
  426. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_index.segment.rsc +3 -3
  427. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +1 -1
  428. package/cli/app/.next-cli-build/server/app/dashboard/quota.html +2 -2
  429. package/cli/app/.next-cli-build/server/app/dashboard/quota.rsc +6 -6
  430. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
  431. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
  432. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  433. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  434. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +6 -6
  435. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
  436. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_index.segment.rsc +3 -3
  437. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
  438. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js.nft.json +1 -1
  439. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  440. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  441. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +3 -3
  442. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +3 -3
  443. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  444. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +3 -3
  445. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
  446. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  447. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  448. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  449. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  450. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
  451. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.rsc +5 -5
  452. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +2 -2
  453. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver.segment.rsc +1 -1
  454. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  455. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  456. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +5 -5
  457. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_head.segment.rsc +1 -1
  458. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_index.segment.rsc +3 -3
  459. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +1 -1
  460. package/cli/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
  461. package/cli/app/.next-cli-build/server/app/dashboard/translator.rsc +5 -5
  462. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
  463. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
  464. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  465. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  466. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +5 -5
  467. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
  468. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_index.segment.rsc +3 -3
  469. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
  470. package/cli/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
  471. package/cli/app/.next-cli-build/server/app/dashboard/usage.rsc +5 -5
  472. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
  473. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
  474. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  475. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  476. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +5 -5
  477. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
  478. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_index.segment.rsc +3 -3
  479. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
  480. package/cli/app/.next-cli-build/server/app/dashboard.html +1 -1
  481. package/cli/app/.next-cli-build/server/app/dashboard.rsc +5 -5
  482. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
  483. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  484. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  485. package/cli/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +5 -5
  486. package/cli/app/.next-cli-build/server/app/dashboard.segments/_head.segment.rsc +1 -1
  487. package/cli/app/.next-cli-build/server/app/dashboard.segments/_index.segment.rsc +3 -3
  488. package/cli/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +1 -1
  489. package/cli/app/.next-cli-build/server/app/index.html +1 -1
  490. package/cli/app/.next-cli-build/server/app/index.rsc +3 -3
  491. package/cli/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  492. package/cli/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +3 -3
  493. package/cli/app/.next-cli-build/server/app/index.segments/_head.segment.rsc +1 -1
  494. package/cli/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +3 -3
  495. package/cli/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +1 -1
  496. package/cli/app/.next-cli-build/server/app/landing/page.js.nft.json +1 -1
  497. package/cli/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  498. package/cli/app/.next-cli-build/server/app/landing.html +1 -1
  499. package/cli/app/.next-cli-build/server/app/landing.rsc +3 -3
  500. package/cli/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +3 -3
  501. package/cli/app/.next-cli-build/server/app/landing.segments/_head.segment.rsc +1 -1
  502. package/cli/app/.next-cli-build/server/app/landing.segments/_index.segment.rsc +3 -3
  503. package/cli/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +1 -1
  504. package/cli/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
  505. package/cli/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
  506. package/cli/app/.next-cli-build/server/app/login/page.js.nft.json +1 -1
  507. package/cli/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  508. package/cli/app/.next-cli-build/server/app/login.html +1 -1
  509. package/cli/app/.next-cli-build/server/app/login.rsc +4 -4
  510. package/cli/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +4 -4
  511. package/cli/app/.next-cli-build/server/app/login.segments/_head.segment.rsc +1 -1
  512. package/cli/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +3 -3
  513. package/cli/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +1 -1
  514. package/cli/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  515. package/cli/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
  516. package/cli/app/.next-cli-build/server/app/manifest.webmanifest/route.js.nft.json +1 -1
  517. package/cli/app/.next-cli-build/server/app/page.js.nft.json +1 -1
  518. package/cli/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  519. package/cli/app/.next-cli-build/server/app-paths-manifest.json +7 -7
  520. package/cli/app/.next-cli-build/server/chunks/1019.js +1 -1
  521. package/cli/app/.next-cli-build/server/chunks/3155.js +1 -1
  522. package/cli/app/.next-cli-build/server/chunks/412.js +1 -1
  523. package/cli/app/.next-cli-build/server/chunks/4746.js +1 -1
  524. package/cli/app/.next-cli-build/server/chunks/5307.js +1 -1
  525. package/cli/app/.next-cli-build/server/chunks/5949.js +27 -2
  526. package/cli/app/.next-cli-build/server/chunks/6269.js +1 -1
  527. package/cli/app/.next-cli-build/server/chunks/8157.js +1 -1
  528. package/cli/app/.next-cli-build/server/chunks/8306.js +1 -1
  529. package/cli/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  530. package/cli/app/.next-cli-build/server/pages/404.html +1 -1
  531. package/cli/app/.next-cli-build/server/pages/500.html +1 -1
  532. package/cli/app/.next-cli-build/server/webpack-runtime.js +1 -1
  533. package/cli/app/.next-cli-build/static/chunks/{5497-7b4d971e0417ed34.js → 5497-deeefbd0aa73d896.js} +1 -1
  534. package/cli/app/.next-cli-build/static/chunks/{85-b496e2f905629179.js → 85-112ea5e56e88ceda.js} +1 -1
  535. package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/automation/{page-99493594af55d26a.js → page-8b7dfe7877ed43a1.js} +1 -1
  536. package/cli/app/CHANGELOG.md +5 -0
  537. package/cli/app/cli/hooks/cloakbrowserRuntime.js +160 -0
  538. package/cli/app/package.json +1 -1
  539. package/cli/hooks/cloakbrowserRuntime.js +160 -0
  540. package/cli/package.json +1 -1
  541. package/package.json +1 -1
  542. package/src/app/(dashboard)/dashboard/automation/page.js +1 -1
  543. package/src/app/api/oauth/cloudflare-ai/bulk-import/route.js +2 -0
  544. package/src/lib/oauth/services/bulkImportBrowserEngine.js +119 -2
  545. package/src/lib/oauth/services/cloudflareAiBulkImportManager.js +13 -2
  546. package/src/lib/oauth/services/kiroBulkImportManager.js +10 -1
  547. package/src/shared/components/BulkAccountAutomationModal.js +3 -1
  548. /package/cli/app/.next-cli-build/static/{UnNGaGzVlBj-k5XHKskcV → G9tIzsfVyPOqAvoGFJp7p}/_buildManifest.js +0 -0
  549. /package/cli/app/.next-cli-build/static/{UnNGaGzVlBj-k5XHKskcV → G9tIzsfVyPOqAvoGFJp7p}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8593],{20975:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>p});var o=s(95155),r=s(12115),n=s(35497),i=s(52679);function a({id:e,icon:t,size:s=22}){let[n,i]=(0,r.useState)(!1);return n?(0,o.jsx)("span",{className:"material-symbols-outlined text-primary",style:{fontSize:s},children:t}):(0,o.jsx)("img",{src:`/providers/${e}.png`,alt:"",width:s,height:s,className:"rounded object-contain",style:{width:s,height:s},onError:()=>i(!0)})}function l(e){return`${e} connection${1===e?"":"s"}`}function d({isOpen:e,onClose:t,onSuccess:s}){let[n,i]=(0,r.useState)(""),[a,l]=(0,r.useState)(!1),[c,x]=(0,r.useState)(null),m=async()=>{if(n.trim()){l(!0),x(null);try{let e=await fetch("/api/oauth/codebuddy/bulk-token",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({tokens:n})}),t=await e.json();x(t),t.success&&s?.()}catch(e){x({error:e.message})}finally{l(!1)}}};if(!e)return null;let p=null;if(c?.success){let e=[`Imported ${c.imported}/${c.total} tokens.`];if(c.failed&&e.push(`${c.failed} failed.`),c.formatCounts){let{"access-only":t,"with-refresh":s,"with-api-key":o}=c.formatCounts,r=[];o&&r.push(`${o} with API key`),s&&r.push(`${s} with refresh token`),t&&r.push(`${t} access-only`),r.length&&e.push(`(${r.join(", ")})`)}p=e.join(" ")}return(0,o.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50",onClick:t,children:(0,o.jsxs)("div",{className:"w-full max-w-lg rounded-xl border border-border bg-surface p-6 shadow-xl",onClick:e=>e.stopPropagation(),children:[(0,o.jsx)("h3",{className:"mb-4 text-lg font-semibold text-text-main",children:"CodeBuddy OAuth Token Import"}),(0,o.jsx)("p",{className:"mb-2 text-xs text-text-muted",children:"Paste CodeBuddy OAuth tokens, one per line. Supports three formats:"}),(0,o.jsxs)("div",{className:"mb-3 space-y-2 rounded-lg bg-background/50 p-3 text-xs text-text-muted",children:[(0,o.jsxs)("div",{className:"flex items-center gap-2",children:[(0,o.jsx)("span",{className:"material-symbols-outlined text-[16px] text-primary leading-none",children:"check_circle"}),(0,o.jsxs)("span",{className:"flex items-center gap-1.5",children:[(0,o.jsx)("code",{className:"text-[10px] bg-border/50 px-1.5 py-0.5 rounded leading-none",children:"accessToken"}),(0,o.jsx)("span",{children:"— access token only (24h expiry)"})]})]}),(0,o.jsxs)("div",{className:"flex items-center gap-2",children:[(0,o.jsx)("span",{className:"material-symbols-outlined text-[16px] text-primary leading-none",children:"check_circle"}),(0,o.jsxs)("span",{className:"flex items-center gap-1.5",children:[(0,o.jsx)("code",{className:"text-[10px] bg-border/50 px-1.5 py-0.5 rounded leading-none",children:"accessToken:refreshToken"}),(0,o.jsx)("span",{children:"— enables auto-refresh"})]})]}),(0,o.jsxs)("div",{className:"flex items-center gap-2",children:[(0,o.jsx)("span",{className:"material-symbols-outlined text-[16px] text-primary leading-none",children:"check_circle"}),(0,o.jsxs)("span",{className:"flex items-center gap-1.5",children:[(0,o.jsx)("code",{className:"text-[10px] bg-border/50 px-1.5 py-0.5 rounded leading-none",children:"accessToken:refreshToken:apiKey"}),(0,o.jsx)("span",{children:"— 365-day access"})]})]})]}),(0,o.jsx)("textarea",{className:"mb-3 w-full rounded-lg border border-border bg-background p-3 font-mono text-xs text-text-main placeholder:text-text-muted focus:border-primary focus:outline-none",rows:8,placeholder:"eyJhbGciOiJSUzI1NiIs...\neyJhbGciOiJSUzI1NiIs...:eyJhbGciOiJSUzI1NiIs...\neyJhbGciOiJSUzI1NiIs...:eyJhbGciOiJSUzI1NiIs...:ak_abc123...",value:n,onChange:e=>i(e.target.value),disabled:a}),c&&(0,o.jsx)("div",{className:"mb-3 rounded-lg p-3 text-xs "+(c.success?"bg-green-500/10 text-green-400":"bg-red-500/10 text-red-400"),children:p||c.error||"Import failed"}),(0,o.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,o.jsx)("button",{type:"button",onClick:t,className:"rounded-lg px-4 py-2 text-sm text-text-muted hover:bg-border/50",children:"Close"}),(0,o.jsx)("button",{type:"button",onClick:m,disabled:a||!n.trim(),className:"rounded-lg bg-primary px-4 py-2 text-sm font-medium text-white hover:bg-primary/90 disabled:opacity-50",children:a?"Importing...":"Import Tokens"})]})]})})}function c({isOpen:e,onClose:t,onSuccess:s}){let[n,i]=(0,r.useState)(""),[a,l]=(0,r.useState)(!1),[d,x]=(0,r.useState)(null),m=async()=>{if(n.trim()){l(!0),x(null);try{let e=await fetch("/api/oauth/codebuddy-cn/bulk-token",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({tokens:n})}),t=await e.json();x(t),t.success&&s?.()}catch(e){x({error:e.message})}finally{l(!1)}}};if(!e)return null;let p=null;if(d?.success){let e=[`Imported ${d.imported}/${d.total} tokens.`];d.failed&&e.push(`${d.failed} failed.`),p=e.join(" ")}return(0,o.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50",onClick:t,children:(0,o.jsxs)("div",{className:"w-full max-w-lg rounded-xl border border-border bg-surface p-6 shadow-xl",onClick:e=>e.stopPropagation(),children:[(0,o.jsx)("h3",{className:"mb-4 text-lg font-semibold text-text-main",children:"CodeBuddy CN OAuth Token Import"}),(0,o.jsx)("p",{className:"mb-2 text-xs text-text-muted",children:"Paste CodeBuddy CN OAuth tokens, one per line. Supports:"}),(0,o.jsxs)("div",{className:"mb-3 space-y-1 rounded-lg bg-background/50 p-3 text-xs text-text-muted",children:[(0,o.jsxs)("div",{children:[(0,o.jsx)("code",{className:"text-[10px] bg-border/50 px-1.5 py-0.5 rounded",children:"accessToken"})," — access token only"]}),(0,o.jsxs)("div",{children:[(0,o.jsx)("code",{className:"text-[10px] bg-border/50 px-1.5 py-0.5 rounded",children:"accessToken:refreshToken"})," — enables auto-refresh"]})]}),(0,o.jsx)("textarea",{className:"mb-3 w-full rounded-lg border border-border bg-background p-3 font-mono text-xs text-text-main placeholder:text-text-muted focus:border-primary focus:outline-none",rows:8,placeholder:"eyJhbGciOiJSUzI1NiIs...\neyJhbGciOiJSUzI1NiIs...:eyJhbGciOiJSUzI1NiIs...",value:n,onChange:e=>i(e.target.value),disabled:a}),d&&(0,o.jsx)("div",{className:"mb-3 rounded-lg p-3 text-xs "+(d.success?"bg-green-500/10 text-green-400":"bg-red-500/10 text-red-400"),children:p||d.error||"Import failed"}),(0,o.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,o.jsx)("button",{type:"button",onClick:t,className:"rounded-lg px-4 py-2 text-sm text-text-muted hover:bg-border/50",children:"Close"}),(0,o.jsx)("button",{type:"button",onClick:m,disabled:a||!n.trim(),className:"rounded-lg bg-primary px-4 py-2 text-sm font-medium text-white hover:bg-primary/90 disabled:opacity-50",children:a?"Importing...":"Import Tokens"})]})]})})}let x={"single-token":"Token import","bulk-token":"Bulk token import","bulk-account":"Bulk accounts","device-oauth":"Device login",social:"Social login",oauth:"OAuth login"},m=[{id:"kiro",label:"Kiro AI",icon:"psychology_alt",description:"Token import, bulk import, and social login automation.",supportedModes:["single-token","bulk-token","bulk-account","social"],component:function({providerInfo:e,onRefresh:t}){let[s,i]=(0,r.useState)(!1),[a,l]=(0,r.useState)(null),[d,c]=(0,r.useState)(null),x=e=>{c({...e,key:Date.now()}),i(!0)};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("div",{className:"grid gap-3 sm:grid-cols-2 xl:grid-cols-3",children:[{id:"bulk-account",title:"Auto Login Bulk",icon:"group_add",description:"Run bulk gmail|password automation with worker progress and manual assist.",action:()=>x({method:"import",importMode:"bulk-account"})},{id:"bulk-token",title:"Bulk Token",icon:"playlist_add",description:"Import many Kiro refresh tokens, one token per line.",action:()=>x({method:"import",importMode:"bulk-token"})},{id:"single-token",title:"Single Token",icon:"vpn_key",description:"Auto-detect or paste one Kiro refresh token.",action:()=>x({method:"import",importMode:"single-token"})},{id:"builder-id",title:"AWS Builder ID",icon:"shield",description:"Open the standard AWS Builder ID device login.",action:()=>x({method:"builder-id"})},{id:"idc",title:"AWS IDC",icon:"business",description:"Enter an IAM Identity Center start URL and region.",action:()=>x({method:"idc"})},{id:"google",title:"Google Login",icon:"account_circle",description:"Open Kiro social Google login with callback capture.",action:()=>x({method:"social",provider:"google"})}].map(e=>(0,o.jsxs)("button",{type:"button",onClick:e.action,className:"flex min-h-[112px] min-w-0 flex-col gap-2 rounded-lg border border-border bg-surface px-4 py-3 text-left transition-colors hover:border-primary/40 hover:bg-primary/5",children:[(0,o.jsxs)("span",{className:"flex items-center gap-2 text-sm font-semibold text-text-main",children:[(0,o.jsx)("span",{className:"material-symbols-outlined text-[20px] text-primary",children:e.icon}),e.title]}),(0,o.jsx)("span",{className:"text-xs leading-relaxed text-text-muted",children:e.description})]},e.id))}),(0,o.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[a?.jobId&&(0,o.jsxs)(n.Ex,{variant:"default",children:["Bulk job: ",a.status]}),a?.jobId&&(0,o.jsx)(n.$n,{size:"sm",variant:"secondary",icon:"monitoring",onClick:()=>x({method:"import",importMode:"bulk-account"}),children:"Resume Bulk Progress"})]}),(0,o.jsx)(n.Mh,{isOpen:s,providerInfo:e,onSuccess:t,onRefresh:t,initialBulkJobId:a?.jobId||null,initialFlow:d,onBulkJobChange:l,onClose:()=>i(!1)})]})}},{id:"codebuddy",label:"CodeBuddy",icon:"smart_toy",description:"Bulk GSuite automation and browser OAuth polling login.",supportedModes:["bulk-account","device-oauth"],component:function({providerInfo:e,onRefresh:t}){let[s,i]=(0,r.useState)(!1),[a,l]=(0,r.useState)(!1),[c,x]=(0,r.useState)(!1);return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)("div",{className:"grid gap-3 sm:grid-cols-2 xl:grid-cols-3",children:[(0,o.jsxs)("button",{type:"button",onClick:()=>l(!0),className:"flex min-h-[112px] min-w-0 flex-col gap-2 rounded-lg border border-border bg-surface px-4 py-3 text-left transition-colors hover:border-primary/40 hover:bg-primary/5",children:[(0,o.jsxs)("span",{className:"flex items-center gap-2 text-sm font-semibold text-text-main",children:[(0,o.jsx)("span",{className:"material-symbols-outlined text-[20px] text-primary",children:"group_add"}),"Auto Login + Generate Key"]}),(0,o.jsx)("span",{className:"text-xs leading-relaxed text-text-muted",children:"Run bulk GSuite gmail|password login, create a CodeBuddy Access Key, and save it for model calls."})]}),(0,o.jsxs)("button",{type:"button",onClick:()=>x(!0),className:"flex min-h-[112px] min-w-0 flex-col gap-2 rounded-lg border border-border bg-surface px-4 py-3 text-left transition-colors hover:border-primary/40 hover:bg-primary/5",children:[(0,o.jsxs)("span",{className:"flex items-center gap-2 text-sm font-semibold text-text-main",children:[(0,o.jsx)("span",{className:"material-symbols-outlined text-[20px] text-primary",children:"playlist_add"}),"OAuth Token Import"]}),(0,o.jsx)("span",{className:"text-xs leading-relaxed text-text-muted",children:"Paste OAuth tokens with optional refresh tokens and API keys for extended access."})]}),(0,o.jsxs)("button",{type:"button",onClick:()=>i(!0),className:"flex min-h-[112px] min-w-0 flex-col gap-2 rounded-lg border border-border bg-surface px-4 py-3 text-left transition-colors hover:border-primary/40 hover:bg-primary/5",children:[(0,o.jsxs)("span",{className:"flex items-center gap-2 text-sm font-semibold text-text-main",children:[(0,o.jsx)("span",{className:"material-symbols-outlined text-[20px] text-primary",children:"login"}),"Device OAuth Login"]}),(0,o.jsx)("span",{className:"text-xs leading-relaxed text-text-muted",children:"Open CodeBuddy browser login and poll until the OAuth token is saved."})]})]}),(0,o.jsx)(d,{isOpen:c,onClose:()=>x(!1),onSuccess:t}),(0,o.jsx)(n.Go,{isOpen:a,provider:"codebuddy",title:"CodeBuddy Bulk GSuite Login + Access Key",serviceName:"CodeBuddy",onSuccess:t,onClose:()=>l(!1)}),(0,o.jsx)(n.LF,{isOpen:s,provider:"codebuddy",providerInfo:e,onSuccess:()=>{t?.(),i(!1)},onClose:()=>i(!1)})]})}},{id:"codebuddy-cn",label:"CodeBuddy CN",icon:"smart_toy",description:"Phone-number auto-registration via 5sim SMS, token import, and device OAuth.",supportedModes:["bulk-account","device-oauth"],component:function({providerInfo:e,onRefresh:t}){let[s,i]=(0,r.useState)(!1),[a,l]=(0,r.useState)(!1),[d,x]=(0,r.useState)(!1);return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)("div",{className:"grid gap-3 sm:grid-cols-2 xl:grid-cols-3",children:[(0,o.jsxs)("button",{type:"button",onClick:()=>i(!0),className:"flex min-h-[112px] min-w-0 flex-col gap-2 rounded-lg border border-border bg-surface px-4 py-3 text-left transition-colors hover:border-primary/40 hover:bg-primary/5",children:[(0,o.jsxs)("span",{className:"flex items-center gap-2 text-sm font-semibold text-text-main",children:[(0,o.jsx)("span",{className:"material-symbols-outlined text-[20px] text-primary",children:"smartphone"}),"Auto Register (Phone)"]}),(0,o.jsx)("span",{className:"text-xs leading-relaxed text-text-muted",children:"Bulk auto-register CodeBuddy CN accounts using 5sim virtual phone numbers (HK/China). Includes device-code token capture."})]}),(0,o.jsxs)("button",{type:"button",onClick:()=>l(!0),className:"flex min-h-[112px] min-w-0 flex-col gap-2 rounded-lg border border-border bg-surface px-4 py-3 text-left transition-colors hover:border-primary/40 hover:bg-primary/5",children:[(0,o.jsxs)("span",{className:"flex items-center gap-2 text-sm font-semibold text-text-main",children:[(0,o.jsx)("span",{className:"material-symbols-outlined text-[20px] text-primary",children:"playlist_add"}),"OAuth Token Import"]}),(0,o.jsx)("span",{className:"text-xs leading-relaxed text-text-muted",children:"Paste pre-obtained CodeBuddy CN OAuth tokens with optional refresh tokens."})]}),(0,o.jsxs)("button",{type:"button",onClick:()=>x(!0),className:"flex min-h-[112px] min-w-0 flex-col gap-2 rounded-lg border border-border bg-surface px-4 py-3 text-left transition-colors hover:border-primary/40 hover:bg-primary/5",children:[(0,o.jsxs)("span",{className:"flex items-center gap-2 text-sm font-semibold text-text-main",children:[(0,o.jsx)("span",{className:"material-symbols-outlined text-[20px] text-primary",children:"login"}),"Device OAuth Login"]}),(0,o.jsx)("span",{className:"text-xs leading-relaxed text-text-muted",children:"Open CodeBuddy CN browser login and poll until the OAuth token is saved."})]})]}),(0,o.jsx)(n.zE,{isOpen:s,onClose:()=>i(!1),onSuccess:t}),(0,o.jsx)(c,{isOpen:a,onClose:()=>l(!1),onSuccess:t}),(0,o.jsx)(n.LF,{isOpen:d,provider:"codebuddy-cn",providerInfo:e,onSuccess:()=>{t?.(),x(!1)},onClose:()=>x(!1)})]})}},{id:"qoder",label:"Qoder",icon:"code",description:"Bulk GSuite auto login via Google SSO and device flow.",supportedModes:["bulk-account","device-oauth"],component:function({providerInfo:e,onRefresh:t}){let[s,i]=(0,r.useState)(!1),[a,l]=(0,r.useState)(!1);return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)("div",{className:"grid gap-3 sm:grid-cols-2 xl:grid-cols-3",children:[(0,o.jsxs)("button",{type:"button",onClick:()=>i(!0),className:"flex min-h-[112px] min-w-0 flex-col gap-2 rounded-lg border border-border bg-surface px-4 py-3 text-left transition-colors hover:border-primary/40 hover:bg-primary/5",children:[(0,o.jsxs)("span",{className:"flex items-center gap-2 text-sm font-semibold text-text-main",children:[(0,o.jsx)("span",{className:"material-symbols-outlined text-[20px] text-primary",children:"group_add"}),"Auto Login Bulk"]}),(0,o.jsx)("span",{className:"text-xs leading-relaxed text-text-muted",children:"Run bulk gmail:password or gmail|password automation via Google SSO with Qoder device flow."})]}),(0,o.jsxs)("button",{type:"button",onClick:()=>l(!0),className:"flex min-h-[112px] min-w-0 flex-col gap-2 rounded-lg border border-border bg-surface px-4 py-3 text-left transition-colors hover:border-primary/40 hover:bg-primary/5",children:[(0,o.jsxs)("span",{className:"flex items-center gap-2 text-sm font-semibold text-text-main",children:[(0,o.jsx)("span",{className:"material-symbols-outlined text-[20px] text-primary",children:"login"}),"Device OAuth Login"]}),(0,o.jsx)("span",{className:"text-xs leading-relaxed text-text-muted",children:"Open Qoder device login in browser and poll until the token is saved."})]})]}),(0,o.jsx)(n.Go,{isOpen:s,provider:"qoder",title:"Qoder Bulk GSuite Auto Login",serviceName:"Qoder",onSuccess:t,onClose:()=>i(!1)}),(0,o.jsx)(n.LF,{isOpen:a,provider:"qoder",providerInfo:e,onSuccess:()=>{t?.(),l(!1)},onClose:()=>l(!1)})]})}},{id:"antigravity",label:"Antigravity",icon:"rocket_launch",description:"Bulk GSuite auto login via Google OAuth (authorization code).",supportedModes:["bulk-account","oauth"],component:function({providerInfo:e,onRefresh:t}){let[s,i]=(0,r.useState)(!1),[a,l]=(0,r.useState)(!1);return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)("div",{className:"grid gap-3 sm:grid-cols-2 xl:grid-cols-3",children:[(0,o.jsxs)("button",{type:"button",onClick:()=>i(!0),className:"flex min-h-[112px] min-w-0 flex-col gap-2 rounded-lg border border-border bg-surface px-4 py-3 text-left transition-colors hover:border-primary/40 hover:bg-primary/5",children:[(0,o.jsxs)("span",{className:"flex items-center gap-2 text-sm font-semibold text-text-main",children:[(0,o.jsx)("span",{className:"material-symbols-outlined text-[20px] text-primary",children:"group_add"}),"Auto Login Bulk"]}),(0,o.jsx)("span",{className:"text-xs leading-relaxed text-text-muted",children:"Run bulk gmail:password or gmail|password automation via Google OAuth (authorization code) for Antigravity."})]}),(0,o.jsxs)("button",{type:"button",onClick:()=>l(!0),className:"flex min-h-[112px] min-w-0 flex-col gap-2 rounded-lg border border-border bg-surface px-4 py-3 text-left transition-colors hover:border-primary/40 hover:bg-primary/5",children:[(0,o.jsxs)("span",{className:"flex items-center gap-2 text-sm font-semibold text-text-main",children:[(0,o.jsx)("span",{className:"material-symbols-outlined text-[20px] text-primary",children:"login"}),"OAuth Login"]}),(0,o.jsx)("span",{className:"text-xs leading-relaxed text-text-muted",children:"Open Antigravity Google OAuth in browser and finish the consent manually."})]})]}),(0,o.jsx)(n.Go,{isOpen:s,provider:"antigravity",title:"Antigravity Bulk GSuite Auto Login",serviceName:"Antigravity",onSuccess:t,onClose:()=>i(!1)}),(0,o.jsx)(n.LF,{isOpen:a,provider:"antigravity",providerInfo:e,onSuccess:()=>{t?.(),l(!1)},onClose:()=>l(!1)})]})}},{id:"cloudflare-ai",label:"Cloudflare Workers AI",icon:"cloud",description:"Bulk Google login → Workers AI API token harvest for free-tier CF AI.",supportedModes:["bulk-account"],component:function({onRefresh:e}){let[t,s]=(0,r.useState)(!1);return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("div",{className:"grid gap-3 sm:grid-cols-2 xl:grid-cols-3",children:(0,o.jsxs)("button",{type:"button",onClick:()=>s(!0),className:"flex min-h-[112px] min-w-0 flex-col gap-2 rounded-lg border border-border bg-surface px-4 py-3 text-left transition-colors hover:border-primary/40 hover:bg-primary/5",children:[(0,o.jsxs)("span",{className:"flex items-center gap-2 text-sm font-semibold text-text-main",children:[(0,o.jsx)("span",{className:"material-symbols-outlined text-[20px] text-primary",children:"cloud"}),"Bulk Workers AI Tokens"]}),(0,o.jsxs)("span",{className:"text-xs leading-relaxed text-text-muted",children:["Google login to Cloudflare dashboard → create Workers AI API token → save as"," ",(0,o.jsx)("code",{className:"text-[11px]",children:"cloudflare-ai"})," (accountId + token). Paste"," ",(0,o.jsx)("code",{className:"text-[11px]",children:"email:password"})," or ",(0,o.jsx)("code",{className:"text-[11px]",children:"email|password"}),". Residential proxy recommended."]})]})}),(0,o.jsx)(n.Go,{isOpen:t,provider:"cloudflare-ai",title:"Cloudflare Workers AI Bulk Token Harvest",serviceName:"Cloudflare Workers AI",accountsPlaceholder:"user@gmail.com:password\nuser2@gmail.com|password",onSuccess:e,onClose:()=>s(!1)})]})}}];function p(){let[e,t]=(0,r.useState)([]),[s,d]=(0,r.useState)(!0),[c,p]=(0,r.useState)(m[0].id),u=(0,r.useCallback)(async()=>{try{let e=await fetch("/api/providers",{cache:"no-store"}),s=await e.json();e.ok&&t(s.connections||[])}catch(e){console.log("Error fetching automation connections:",e)}finally{d(!1)}},[]);(0,r.useEffect)(()=>{u()},[u]),(0,r.useEffect)(()=>{let e=new URLSearchParams(window.location.search).get("provider");m.some(t=>t.id===e)&&p(e)},[]);let h=m.find(e=>e.id===c)||m[0],b=i.IS[h.id]||{id:h.id,name:h.label},g=h.component,f=(0,r.useMemo)(()=>{let t={};for(let s of m)t[s.id]=e.filter(e=>e.provider===s.id).length;return t},[e]);return s?(0,o.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,o.jsx)(n.Qv,{}),(0,o.jsx)(n.Qv,{})]}):(0,o.jsxs)("div",{className:"flex min-w-0 flex-col gap-6 px-1 sm:px-0",children:[(0,o.jsx)("div",{className:"flex flex-col gap-1",children:(0,o.jsx)("h1",{className:"text-2xl font-semibold",children:"Automation"})}),(0,o.jsx)("div",{className:"grid gap-3 sm:grid-cols-2",children:m.map(e=>{let t=e.id===c;return(0,o.jsxs)("button",{type:"button",onClick:()=>p(e.id),className:`flex min-w-0 items-center gap-3 rounded-lg border px-4 py-3 text-left transition-colors ${t?"border-primary/50 bg-primary/10 text-primary":"border-border bg-surface text-text-main hover:border-primary/30 hover:bg-primary/5"}`,children:[(0,o.jsx)(a,{id:e.id,icon:e.icon,size:22}),(0,o.jsxs)("span",{className:"min-w-0 flex-1",children:[(0,o.jsx)("span",{className:"block truncate text-sm font-semibold",children:e.label}),(0,o.jsx)("span",{className:"mt-0.5 block text-xs text-text-muted",children:l(f[e.id]||0)})]})]},e.id)})}),(0,o.jsx)(n.Zp,{children:(0,o.jsxs)("div",{className:"flex min-w-0 flex-col gap-4",children:[(0,o.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between",children:[(0,o.jsxs)("div",{className:"min-w-0",children:[(0,o.jsxs)("div",{className:"flex items-center gap-2",children:[(0,o.jsx)(a,{id:h.id,icon:h.icon,size:22}),(0,o.jsx)("h2",{className:"text-lg font-semibold",children:h.label})]}),(0,o.jsx)("span",{className:"mt-1 block text-xs leading-relaxed text-text-muted",children:h.description}),(0,o.jsx)("div",{className:"mt-2 flex flex-wrap gap-1.5",children:h.supportedModes.map(e=>(0,o.jsx)(n.Ex,{variant:"default",size:"sm",children:x[e]},e))})]}),(0,o.jsx)(n.Ex,{variant:"success",children:l(f[h.id]||0)})]}),(0,o.jsx)(g,{providerInfo:b,onRefresh:u})]})})]})}},98944:(e,t,s)=>{Promise.resolve().then(s.bind(s,20975))}},e=>{e.O(0,[2574,3862,4343,85,5497,8441,3794,7358],()=>e(e.s=98944)),_N_E=e.O()}]);
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8593],{20975:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>p});var o=s(95155),r=s(12115),n=s(35497),i=s(52679);function a({id:e,icon:t,size:s=22}){let[n,i]=(0,r.useState)(!1);return n?(0,o.jsx)("span",{className:"material-symbols-outlined text-primary",style:{fontSize:s},children:t}):(0,o.jsx)("img",{src:`/providers/${e}.png`,alt:"",width:s,height:s,className:"rounded object-contain",style:{width:s,height:s},onError:()=>i(!0)})}function l(e){return`${e} connection${1===e?"":"s"}`}function d({isOpen:e,onClose:t,onSuccess:s}){let[n,i]=(0,r.useState)(""),[a,l]=(0,r.useState)(!1),[c,x]=(0,r.useState)(null),m=async()=>{if(n.trim()){l(!0),x(null);try{let e=await fetch("/api/oauth/codebuddy/bulk-token",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({tokens:n})}),t=await e.json();x(t),t.success&&s?.()}catch(e){x({error:e.message})}finally{l(!1)}}};if(!e)return null;let p=null;if(c?.success){let e=[`Imported ${c.imported}/${c.total} tokens.`];if(c.failed&&e.push(`${c.failed} failed.`),c.formatCounts){let{"access-only":t,"with-refresh":s,"with-api-key":o}=c.formatCounts,r=[];o&&r.push(`${o} with API key`),s&&r.push(`${s} with refresh token`),t&&r.push(`${t} access-only`),r.length&&e.push(`(${r.join(", ")})`)}p=e.join(" ")}return(0,o.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50",onClick:t,children:(0,o.jsxs)("div",{className:"w-full max-w-lg rounded-xl border border-border bg-surface p-6 shadow-xl",onClick:e=>e.stopPropagation(),children:[(0,o.jsx)("h3",{className:"mb-4 text-lg font-semibold text-text-main",children:"CodeBuddy OAuth Token Import"}),(0,o.jsx)("p",{className:"mb-2 text-xs text-text-muted",children:"Paste CodeBuddy OAuth tokens, one per line. Supports three formats:"}),(0,o.jsxs)("div",{className:"mb-3 space-y-2 rounded-lg bg-background/50 p-3 text-xs text-text-muted",children:[(0,o.jsxs)("div",{className:"flex items-center gap-2",children:[(0,o.jsx)("span",{className:"material-symbols-outlined text-[16px] text-primary leading-none",children:"check_circle"}),(0,o.jsxs)("span",{className:"flex items-center gap-1.5",children:[(0,o.jsx)("code",{className:"text-[10px] bg-border/50 px-1.5 py-0.5 rounded leading-none",children:"accessToken"}),(0,o.jsx)("span",{children:"— access token only (24h expiry)"})]})]}),(0,o.jsxs)("div",{className:"flex items-center gap-2",children:[(0,o.jsx)("span",{className:"material-symbols-outlined text-[16px] text-primary leading-none",children:"check_circle"}),(0,o.jsxs)("span",{className:"flex items-center gap-1.5",children:[(0,o.jsx)("code",{className:"text-[10px] bg-border/50 px-1.5 py-0.5 rounded leading-none",children:"accessToken:refreshToken"}),(0,o.jsx)("span",{children:"— enables auto-refresh"})]})]}),(0,o.jsxs)("div",{className:"flex items-center gap-2",children:[(0,o.jsx)("span",{className:"material-symbols-outlined text-[16px] text-primary leading-none",children:"check_circle"}),(0,o.jsxs)("span",{className:"flex items-center gap-1.5",children:[(0,o.jsx)("code",{className:"text-[10px] bg-border/50 px-1.5 py-0.5 rounded leading-none",children:"accessToken:refreshToken:apiKey"}),(0,o.jsx)("span",{children:"— 365-day access"})]})]})]}),(0,o.jsx)("textarea",{className:"mb-3 w-full rounded-lg border border-border bg-background p-3 font-mono text-xs text-text-main placeholder:text-text-muted focus:border-primary focus:outline-none",rows:8,placeholder:"eyJhbGciOiJSUzI1NiIs...\neyJhbGciOiJSUzI1NiIs...:eyJhbGciOiJSUzI1NiIs...\neyJhbGciOiJSUzI1NiIs...:eyJhbGciOiJSUzI1NiIs...:ak_abc123...",value:n,onChange:e=>i(e.target.value),disabled:a}),c&&(0,o.jsx)("div",{className:"mb-3 rounded-lg p-3 text-xs "+(c.success?"bg-green-500/10 text-green-400":"bg-red-500/10 text-red-400"),children:p||c.error||"Import failed"}),(0,o.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,o.jsx)("button",{type:"button",onClick:t,className:"rounded-lg px-4 py-2 text-sm text-text-muted hover:bg-border/50",children:"Close"}),(0,o.jsx)("button",{type:"button",onClick:m,disabled:a||!n.trim(),className:"rounded-lg bg-primary px-4 py-2 text-sm font-medium text-white hover:bg-primary/90 disabled:opacity-50",children:a?"Importing...":"Import Tokens"})]})]})})}function c({isOpen:e,onClose:t,onSuccess:s}){let[n,i]=(0,r.useState)(""),[a,l]=(0,r.useState)(!1),[d,x]=(0,r.useState)(null),m=async()=>{if(n.trim()){l(!0),x(null);try{let e=await fetch("/api/oauth/codebuddy-cn/bulk-token",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({tokens:n})}),t=await e.json();x(t),t.success&&s?.()}catch(e){x({error:e.message})}finally{l(!1)}}};if(!e)return null;let p=null;if(d?.success){let e=[`Imported ${d.imported}/${d.total} tokens.`];d.failed&&e.push(`${d.failed} failed.`),p=e.join(" ")}return(0,o.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50",onClick:t,children:(0,o.jsxs)("div",{className:"w-full max-w-lg rounded-xl border border-border bg-surface p-6 shadow-xl",onClick:e=>e.stopPropagation(),children:[(0,o.jsx)("h3",{className:"mb-4 text-lg font-semibold text-text-main",children:"CodeBuddy CN OAuth Token Import"}),(0,o.jsx)("p",{className:"mb-2 text-xs text-text-muted",children:"Paste CodeBuddy CN OAuth tokens, one per line. Supports:"}),(0,o.jsxs)("div",{className:"mb-3 space-y-1 rounded-lg bg-background/50 p-3 text-xs text-text-muted",children:[(0,o.jsxs)("div",{children:[(0,o.jsx)("code",{className:"text-[10px] bg-border/50 px-1.5 py-0.5 rounded",children:"accessToken"})," — access token only"]}),(0,o.jsxs)("div",{children:[(0,o.jsx)("code",{className:"text-[10px] bg-border/50 px-1.5 py-0.5 rounded",children:"accessToken:refreshToken"})," — enables auto-refresh"]})]}),(0,o.jsx)("textarea",{className:"mb-3 w-full rounded-lg border border-border bg-background p-3 font-mono text-xs text-text-main placeholder:text-text-muted focus:border-primary focus:outline-none",rows:8,placeholder:"eyJhbGciOiJSUzI1NiIs...\neyJhbGciOiJSUzI1NiIs...:eyJhbGciOiJSUzI1NiIs...",value:n,onChange:e=>i(e.target.value),disabled:a}),d&&(0,o.jsx)("div",{className:"mb-3 rounded-lg p-3 text-xs "+(d.success?"bg-green-500/10 text-green-400":"bg-red-500/10 text-red-400"),children:p||d.error||"Import failed"}),(0,o.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,o.jsx)("button",{type:"button",onClick:t,className:"rounded-lg px-4 py-2 text-sm text-text-muted hover:bg-border/50",children:"Close"}),(0,o.jsx)("button",{type:"button",onClick:m,disabled:a||!n.trim(),className:"rounded-lg bg-primary px-4 py-2 text-sm font-medium text-white hover:bg-primary/90 disabled:opacity-50",children:a?"Importing...":"Import Tokens"})]})]})})}let x={"single-token":"Token import","bulk-token":"Bulk token import","bulk-account":"Bulk accounts","device-oauth":"Device login",social:"Social login",oauth:"OAuth login"},m=[{id:"kiro",label:"Kiro AI",icon:"psychology_alt",description:"Token import, bulk import, and social login automation.",supportedModes:["single-token","bulk-token","bulk-account","social"],component:function({providerInfo:e,onRefresh:t}){let[s,i]=(0,r.useState)(!1),[a,l]=(0,r.useState)(null),[d,c]=(0,r.useState)(null),x=e=>{c({...e,key:Date.now()}),i(!0)};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("div",{className:"grid gap-3 sm:grid-cols-2 xl:grid-cols-3",children:[{id:"bulk-account",title:"Auto Login Bulk",icon:"group_add",description:"Run bulk gmail|password automation with worker progress and manual assist.",action:()=>x({method:"import",importMode:"bulk-account"})},{id:"bulk-token",title:"Bulk Token",icon:"playlist_add",description:"Import many Kiro refresh tokens, one token per line.",action:()=>x({method:"import",importMode:"bulk-token"})},{id:"single-token",title:"Single Token",icon:"vpn_key",description:"Auto-detect or paste one Kiro refresh token.",action:()=>x({method:"import",importMode:"single-token"})},{id:"builder-id",title:"AWS Builder ID",icon:"shield",description:"Open the standard AWS Builder ID device login.",action:()=>x({method:"builder-id"})},{id:"idc",title:"AWS IDC",icon:"business",description:"Enter an IAM Identity Center start URL and region.",action:()=>x({method:"idc"})},{id:"google",title:"Google Login",icon:"account_circle",description:"Open Kiro social Google login with callback capture.",action:()=>x({method:"social",provider:"google"})}].map(e=>(0,o.jsxs)("button",{type:"button",onClick:e.action,className:"flex min-h-[112px] min-w-0 flex-col gap-2 rounded-lg border border-border bg-surface px-4 py-3 text-left transition-colors hover:border-primary/40 hover:bg-primary/5",children:[(0,o.jsxs)("span",{className:"flex items-center gap-2 text-sm font-semibold text-text-main",children:[(0,o.jsx)("span",{className:"material-symbols-outlined text-[20px] text-primary",children:e.icon}),e.title]}),(0,o.jsx)("span",{className:"text-xs leading-relaxed text-text-muted",children:e.description})]},e.id))}),(0,o.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[a?.jobId&&(0,o.jsxs)(n.Ex,{variant:"default",children:["Bulk job: ",a.status]}),a?.jobId&&(0,o.jsx)(n.$n,{size:"sm",variant:"secondary",icon:"monitoring",onClick:()=>x({method:"import",importMode:"bulk-account"}),children:"Resume Bulk Progress"})]}),(0,o.jsx)(n.Mh,{isOpen:s,providerInfo:e,onSuccess:t,onRefresh:t,initialBulkJobId:a?.jobId||null,initialFlow:d,onBulkJobChange:l,onClose:()=>i(!1)})]})}},{id:"codebuddy",label:"CodeBuddy",icon:"smart_toy",description:"Bulk GSuite automation and browser OAuth polling login.",supportedModes:["bulk-account","device-oauth"],component:function({providerInfo:e,onRefresh:t}){let[s,i]=(0,r.useState)(!1),[a,l]=(0,r.useState)(!1),[c,x]=(0,r.useState)(!1);return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)("div",{className:"grid gap-3 sm:grid-cols-2 xl:grid-cols-3",children:[(0,o.jsxs)("button",{type:"button",onClick:()=>l(!0),className:"flex min-h-[112px] min-w-0 flex-col gap-2 rounded-lg border border-border bg-surface px-4 py-3 text-left transition-colors hover:border-primary/40 hover:bg-primary/5",children:[(0,o.jsxs)("span",{className:"flex items-center gap-2 text-sm font-semibold text-text-main",children:[(0,o.jsx)("span",{className:"material-symbols-outlined text-[20px] text-primary",children:"group_add"}),"Auto Login + Generate Key"]}),(0,o.jsx)("span",{className:"text-xs leading-relaxed text-text-muted",children:"Run bulk GSuite gmail|password login, create a CodeBuddy Access Key, and save it for model calls."})]}),(0,o.jsxs)("button",{type:"button",onClick:()=>x(!0),className:"flex min-h-[112px] min-w-0 flex-col gap-2 rounded-lg border border-border bg-surface px-4 py-3 text-left transition-colors hover:border-primary/40 hover:bg-primary/5",children:[(0,o.jsxs)("span",{className:"flex items-center gap-2 text-sm font-semibold text-text-main",children:[(0,o.jsx)("span",{className:"material-symbols-outlined text-[20px] text-primary",children:"playlist_add"}),"OAuth Token Import"]}),(0,o.jsx)("span",{className:"text-xs leading-relaxed text-text-muted",children:"Paste OAuth tokens with optional refresh tokens and API keys for extended access."})]}),(0,o.jsxs)("button",{type:"button",onClick:()=>i(!0),className:"flex min-h-[112px] min-w-0 flex-col gap-2 rounded-lg border border-border bg-surface px-4 py-3 text-left transition-colors hover:border-primary/40 hover:bg-primary/5",children:[(0,o.jsxs)("span",{className:"flex items-center gap-2 text-sm font-semibold text-text-main",children:[(0,o.jsx)("span",{className:"material-symbols-outlined text-[20px] text-primary",children:"login"}),"Device OAuth Login"]}),(0,o.jsx)("span",{className:"text-xs leading-relaxed text-text-muted",children:"Open CodeBuddy browser login and poll until the OAuth token is saved."})]})]}),(0,o.jsx)(d,{isOpen:c,onClose:()=>x(!1),onSuccess:t}),(0,o.jsx)(n.Go,{isOpen:a,provider:"codebuddy",title:"CodeBuddy Bulk GSuite Login + Access Key",serviceName:"CodeBuddy",onSuccess:t,onClose:()=>l(!1)}),(0,o.jsx)(n.LF,{isOpen:s,provider:"codebuddy",providerInfo:e,onSuccess:()=>{t?.(),i(!1)},onClose:()=>i(!1)})]})}},{id:"codebuddy-cn",label:"CodeBuddy CN",icon:"smart_toy",description:"Phone-number auto-registration via 5sim SMS, token import, and device OAuth.",supportedModes:["bulk-account","device-oauth"],component:function({providerInfo:e,onRefresh:t}){let[s,i]=(0,r.useState)(!1),[a,l]=(0,r.useState)(!1),[d,x]=(0,r.useState)(!1);return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)("div",{className:"grid gap-3 sm:grid-cols-2 xl:grid-cols-3",children:[(0,o.jsxs)("button",{type:"button",onClick:()=>i(!0),className:"flex min-h-[112px] min-w-0 flex-col gap-2 rounded-lg border border-border bg-surface px-4 py-3 text-left transition-colors hover:border-primary/40 hover:bg-primary/5",children:[(0,o.jsxs)("span",{className:"flex items-center gap-2 text-sm font-semibold text-text-main",children:[(0,o.jsx)("span",{className:"material-symbols-outlined text-[20px] text-primary",children:"smartphone"}),"Auto Register (Phone)"]}),(0,o.jsx)("span",{className:"text-xs leading-relaxed text-text-muted",children:"Bulk auto-register CodeBuddy CN accounts using 5sim virtual phone numbers (HK/China). Includes device-code token capture."})]}),(0,o.jsxs)("button",{type:"button",onClick:()=>l(!0),className:"flex min-h-[112px] min-w-0 flex-col gap-2 rounded-lg border border-border bg-surface px-4 py-3 text-left transition-colors hover:border-primary/40 hover:bg-primary/5",children:[(0,o.jsxs)("span",{className:"flex items-center gap-2 text-sm font-semibold text-text-main",children:[(0,o.jsx)("span",{className:"material-symbols-outlined text-[20px] text-primary",children:"playlist_add"}),"OAuth Token Import"]}),(0,o.jsx)("span",{className:"text-xs leading-relaxed text-text-muted",children:"Paste pre-obtained CodeBuddy CN OAuth tokens with optional refresh tokens."})]}),(0,o.jsxs)("button",{type:"button",onClick:()=>x(!0),className:"flex min-h-[112px] min-w-0 flex-col gap-2 rounded-lg border border-border bg-surface px-4 py-3 text-left transition-colors hover:border-primary/40 hover:bg-primary/5",children:[(0,o.jsxs)("span",{className:"flex items-center gap-2 text-sm font-semibold text-text-main",children:[(0,o.jsx)("span",{className:"material-symbols-outlined text-[20px] text-primary",children:"login"}),"Device OAuth Login"]}),(0,o.jsx)("span",{className:"text-xs leading-relaxed text-text-muted",children:"Open CodeBuddy CN browser login and poll until the OAuth token is saved."})]})]}),(0,o.jsx)(n.zE,{isOpen:s,onClose:()=>i(!1),onSuccess:t}),(0,o.jsx)(c,{isOpen:a,onClose:()=>l(!1),onSuccess:t}),(0,o.jsx)(n.LF,{isOpen:d,provider:"codebuddy-cn",providerInfo:e,onSuccess:()=>{t?.(),x(!1)},onClose:()=>x(!1)})]})}},{id:"qoder",label:"Qoder",icon:"code",description:"Bulk GSuite auto login via Google SSO and device flow.",supportedModes:["bulk-account","device-oauth"],component:function({providerInfo:e,onRefresh:t}){let[s,i]=(0,r.useState)(!1),[a,l]=(0,r.useState)(!1);return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)("div",{className:"grid gap-3 sm:grid-cols-2 xl:grid-cols-3",children:[(0,o.jsxs)("button",{type:"button",onClick:()=>i(!0),className:"flex min-h-[112px] min-w-0 flex-col gap-2 rounded-lg border border-border bg-surface px-4 py-3 text-left transition-colors hover:border-primary/40 hover:bg-primary/5",children:[(0,o.jsxs)("span",{className:"flex items-center gap-2 text-sm font-semibold text-text-main",children:[(0,o.jsx)("span",{className:"material-symbols-outlined text-[20px] text-primary",children:"group_add"}),"Auto Login Bulk"]}),(0,o.jsx)("span",{className:"text-xs leading-relaxed text-text-muted",children:"Run bulk gmail:password or gmail|password automation via Google SSO with Qoder device flow."})]}),(0,o.jsxs)("button",{type:"button",onClick:()=>l(!0),className:"flex min-h-[112px] min-w-0 flex-col gap-2 rounded-lg border border-border bg-surface px-4 py-3 text-left transition-colors hover:border-primary/40 hover:bg-primary/5",children:[(0,o.jsxs)("span",{className:"flex items-center gap-2 text-sm font-semibold text-text-main",children:[(0,o.jsx)("span",{className:"material-symbols-outlined text-[20px] text-primary",children:"login"}),"Device OAuth Login"]}),(0,o.jsx)("span",{className:"text-xs leading-relaxed text-text-muted",children:"Open Qoder device login in browser and poll until the token is saved."})]})]}),(0,o.jsx)(n.Go,{isOpen:s,provider:"qoder",title:"Qoder Bulk GSuite Auto Login",serviceName:"Qoder",onSuccess:t,onClose:()=>i(!1)}),(0,o.jsx)(n.LF,{isOpen:a,provider:"qoder",providerInfo:e,onSuccess:()=>{t?.(),l(!1)},onClose:()=>l(!1)})]})}},{id:"antigravity",label:"Antigravity",icon:"rocket_launch",description:"Bulk GSuite auto login via Google OAuth (authorization code).",supportedModes:["bulk-account","oauth"],component:function({providerInfo:e,onRefresh:t}){let[s,i]=(0,r.useState)(!1),[a,l]=(0,r.useState)(!1);return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)("div",{className:"grid gap-3 sm:grid-cols-2 xl:grid-cols-3",children:[(0,o.jsxs)("button",{type:"button",onClick:()=>i(!0),className:"flex min-h-[112px] min-w-0 flex-col gap-2 rounded-lg border border-border bg-surface px-4 py-3 text-left transition-colors hover:border-primary/40 hover:bg-primary/5",children:[(0,o.jsxs)("span",{className:"flex items-center gap-2 text-sm font-semibold text-text-main",children:[(0,o.jsx)("span",{className:"material-symbols-outlined text-[20px] text-primary",children:"group_add"}),"Auto Login Bulk"]}),(0,o.jsx)("span",{className:"text-xs leading-relaxed text-text-muted",children:"Run bulk gmail:password or gmail|password automation via Google OAuth (authorization code) for Antigravity."})]}),(0,o.jsxs)("button",{type:"button",onClick:()=>l(!0),className:"flex min-h-[112px] min-w-0 flex-col gap-2 rounded-lg border border-border bg-surface px-4 py-3 text-left transition-colors hover:border-primary/40 hover:bg-primary/5",children:[(0,o.jsxs)("span",{className:"flex items-center gap-2 text-sm font-semibold text-text-main",children:[(0,o.jsx)("span",{className:"material-symbols-outlined text-[20px] text-primary",children:"login"}),"OAuth Login"]}),(0,o.jsx)("span",{className:"text-xs leading-relaxed text-text-muted",children:"Open Antigravity Google OAuth in browser and finish the consent manually."})]})]}),(0,o.jsx)(n.Go,{isOpen:s,provider:"antigravity",title:"Antigravity Bulk GSuite Auto Login",serviceName:"Antigravity",onSuccess:t,onClose:()=>i(!1)}),(0,o.jsx)(n.LF,{isOpen:a,provider:"antigravity",providerInfo:e,onSuccess:()=>{t?.(),l(!1)},onClose:()=>l(!1)})]})}},{id:"cloudflare-ai",label:"Cloudflare Workers AI",icon:"cloud",description:"Bulk Google login → Workers AI API token harvest for free-tier CF AI.",supportedModes:["bulk-account"],component:function({onRefresh:e}){let[t,s]=(0,r.useState)(!1);return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("div",{className:"grid gap-3 sm:grid-cols-2 xl:grid-cols-3",children:(0,o.jsxs)("button",{type:"button",onClick:()=>s(!0),className:"flex min-h-[112px] min-w-0 flex-col gap-2 rounded-lg border border-border bg-surface px-4 py-3 text-left transition-colors hover:border-primary/40 hover:bg-primary/5",children:[(0,o.jsxs)("span",{className:"flex items-center gap-2 text-sm font-semibold text-text-main",children:[(0,o.jsx)("span",{className:"material-symbols-outlined text-[20px] text-primary",children:"cloud"}),"Bulk Workers AI Tokens"]}),(0,o.jsxs)("span",{className:"text-xs leading-relaxed text-text-muted",children:["Google login to Cloudflare dashboard → create Workers AI API token → save as"," ",(0,o.jsx)("code",{className:"text-[11px]",children:"cloudflare-ai"})," (accountId + token). Paste"," ",(0,o.jsx)("code",{className:"text-[11px]",children:"email:password"})," or ",(0,o.jsx)("code",{className:"text-[11px]",children:"email|password"}),". Uses headed ",(0,o.jsx)("strong",{children:"CloakBrowser"})," (Turnstile) + residential proxy recommended."]})]})}),(0,o.jsx)(n.Go,{isOpen:t,provider:"cloudflare-ai",title:"Cloudflare Workers AI Bulk Token Harvest",serviceName:"Cloudflare Workers AI",accountsPlaceholder:"user@gmail.com:password\nuser2@gmail.com|password",onSuccess:e,onClose:()=>s(!1)})]})}}];function p(){let[e,t]=(0,r.useState)([]),[s,d]=(0,r.useState)(!0),[c,p]=(0,r.useState)(m[0].id),u=(0,r.useCallback)(async()=>{try{let e=await fetch("/api/providers",{cache:"no-store"}),s=await e.json();e.ok&&t(s.connections||[])}catch(e){console.log("Error fetching automation connections:",e)}finally{d(!1)}},[]);(0,r.useEffect)(()=>{u()},[u]),(0,r.useEffect)(()=>{let e=new URLSearchParams(window.location.search).get("provider");m.some(t=>t.id===e)&&p(e)},[]);let h=m.find(e=>e.id===c)||m[0],b=i.IS[h.id]||{id:h.id,name:h.label},g=h.component,f=(0,r.useMemo)(()=>{let t={};for(let s of m)t[s.id]=e.filter(e=>e.provider===s.id).length;return t},[e]);return s?(0,o.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,o.jsx)(n.Qv,{}),(0,o.jsx)(n.Qv,{})]}):(0,o.jsxs)("div",{className:"flex min-w-0 flex-col gap-6 px-1 sm:px-0",children:[(0,o.jsx)("div",{className:"flex flex-col gap-1",children:(0,o.jsx)("h1",{className:"text-2xl font-semibold",children:"Automation"})}),(0,o.jsx)("div",{className:"grid gap-3 sm:grid-cols-2",children:m.map(e=>{let t=e.id===c;return(0,o.jsxs)("button",{type:"button",onClick:()=>p(e.id),className:`flex min-w-0 items-center gap-3 rounded-lg border px-4 py-3 text-left transition-colors ${t?"border-primary/50 bg-primary/10 text-primary":"border-border bg-surface text-text-main hover:border-primary/30 hover:bg-primary/5"}`,children:[(0,o.jsx)(a,{id:e.id,icon:e.icon,size:22}),(0,o.jsxs)("span",{className:"min-w-0 flex-1",children:[(0,o.jsx)("span",{className:"block truncate text-sm font-semibold",children:e.label}),(0,o.jsx)("span",{className:"mt-0.5 block text-xs text-text-muted",children:l(f[e.id]||0)})]})]},e.id)})}),(0,o.jsx)(n.Zp,{children:(0,o.jsxs)("div",{className:"flex min-w-0 flex-col gap-4",children:[(0,o.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between",children:[(0,o.jsxs)("div",{className:"min-w-0",children:[(0,o.jsxs)("div",{className:"flex items-center gap-2",children:[(0,o.jsx)(a,{id:h.id,icon:h.icon,size:22}),(0,o.jsx)("h2",{className:"text-lg font-semibold",children:h.label})]}),(0,o.jsx)("span",{className:"mt-1 block text-xs leading-relaxed text-text-muted",children:h.description}),(0,o.jsx)("div",{className:"mt-2 flex flex-wrap gap-1.5",children:h.supportedModes.map(e=>(0,o.jsx)(n.Ex,{variant:"default",size:"sm",children:x[e]},e))})]}),(0,o.jsx)(n.Ex,{variant:"success",children:l(f[h.id]||0)})]}),(0,o.jsx)(g,{providerInfo:b,onRefresh:u})]})})]})}},98944:(e,t,s)=>{Promise.resolve().then(s.bind(s,20975))}},e=>{e.O(0,[2574,3862,4343,85,5497,8441,3794,7358],()=>e(e.s=98944)),_N_E=e.O()}]);
@@ -1,3 +1,8 @@
1
+ # v1.0.134 (2026-07-26)
2
+
3
+ ## Improvements
4
+ - **Cloudflare AI Turnstile via CloakBrowser**: Cloudflare Workers AI bulk import defaults to headed CloakBrowser again (auto-install into `~/.zevai/runtime`) so Cloudflare Turnstile / bot checks that block plain Playwright Chromium can pass. Other Automation providers stay on Chromium.
5
+
1
6
  # v1.0.133 (2026-07-26)
2
7
 
3
8
  ## Improvements
@@ -0,0 +1,160 @@
1
+ // Lazy-install helper for cloakbrowser (stealth Chromium that can pass Turnstile).
2
+ // Same shape as camoufoxRuntime / playwrightRuntime — optional package, install on demand.
3
+ // Also installs mmdb-lib (required by cloakbrowser when geoip: true for proxy timezone match).
4
+ const { createRequire } = require("module");
5
+ const fs = require("fs");
6
+ const path = require("path");
7
+
8
+ const {
9
+ runNpmInstall,
10
+ getRuntimeDir,
11
+ getRuntimeNodeModules,
12
+ summarizeNpmError,
13
+ buildEnvWithRuntime,
14
+ } = require("./sqliteRuntime");
15
+
16
+ const CLOAKBROWSER_PACKAGE = "cloakbrowser";
17
+ const CLOAKBROWSER_VERSION = "^0.5.2";
18
+ const MMDB_PACKAGE = "mmdb-lib";
19
+ const MMDB_VERSION = "^3.0.2";
20
+
21
+ const nodeRequire =
22
+ typeof __non_webpack_require__ === "function" ? __non_webpack_require__ : require;
23
+
24
+ function getRuntimeRequire() {
25
+ try {
26
+ const anchor = path.join(getRuntimeDir(), "noop.js");
27
+ return createRequire(anchor);
28
+ } catch {
29
+ return null;
30
+ }
31
+ }
32
+
33
+ let cachedReady = null;
34
+
35
+ function hasPackage(name) {
36
+ return fs.existsSync(path.join(getRuntimeNodeModules(), name, "package.json"));
37
+ }
38
+
39
+ function tryRequireCloakbrowser() {
40
+ try {
41
+ const rreq = getRuntimeRequire();
42
+ const candidate = path.join(getRuntimeNodeModules(), CLOAKBROWSER_PACKAGE);
43
+ if (rreq && fs.existsSync(path.join(candidate, "package.json"))) {
44
+ return rreq(candidate);
45
+ }
46
+ } catch {}
47
+ try {
48
+ return nodeRequire(CLOAKBROWSER_PACKAGE);
49
+ } catch {}
50
+ try {
51
+ const candidate = path.join(getRuntimeNodeModules(), CLOAKBROWSER_PACKAGE);
52
+ if (fs.existsSync(path.join(candidate, "package.json"))) {
53
+ return nodeRequire(candidate);
54
+ }
55
+ } catch {}
56
+ return null;
57
+ }
58
+
59
+ function tryRequireMmdb() {
60
+ try {
61
+ const rreq = getRuntimeRequire();
62
+ const candidate = path.join(getRuntimeNodeModules(), MMDB_PACKAGE);
63
+ if (rreq && fs.existsSync(path.join(candidate, "package.json"))) {
64
+ return rreq(candidate);
65
+ }
66
+ } catch {}
67
+ try {
68
+ return nodeRequire(MMDB_PACKAGE);
69
+ } catch {}
70
+ return null;
71
+ }
72
+
73
+ function loadCloakbrowserModule() {
74
+ return tryRequireCloakbrowser();
75
+ }
76
+
77
+ /**
78
+ * Ensure cloakbrowser + mmdb-lib are available under ~/.zevai/runtime.
79
+ * mmdb-lib is required when launching with geoip: true (proxy timezone/locale).
80
+ */
81
+ function ensureCloakbrowserRuntime({ silent = false } = {}) {
82
+ if (cachedReady?.ok && cachedReady.module && tryRequireMmdb()) {
83
+ return cachedReady;
84
+ }
85
+
86
+ // Inject runtime node_modules into resolution for cloakbrowser's require("mmdb-lib")
87
+ try {
88
+ const env = buildEnvWithRuntime(process.env);
89
+ if (env.NODE_PATH && !process.env.NODE_PATH?.includes(getRuntimeNodeModules())) {
90
+ process.env.NODE_PATH = env.NODE_PATH;
91
+ // Re-init module paths for already-running process
92
+ try {
93
+ // eslint-disable-next-line no-underscore-dangle
94
+ require("module").Module._initPaths();
95
+ } catch {
96
+ /* ignore */
97
+ }
98
+ }
99
+ } catch {
100
+ /* ignore */
101
+ }
102
+
103
+ let mod = tryRequireCloakbrowser();
104
+ const needCloak = !mod?.launch;
105
+ const needMmdb = !tryRequireMmdb() && !hasPackage(MMDB_PACKAGE);
106
+
107
+ if (needCloak || needMmdb) {
108
+ const pkgs = [];
109
+ if (needCloak) pkgs.push(`${CLOAKBROWSER_PACKAGE}@${CLOAKBROWSER_VERSION}`);
110
+ if (needMmdb) pkgs.push(`${MMDB_PACKAGE}@${MMDB_VERSION}`);
111
+
112
+ if (!silent) {
113
+ console.log(`[cloakbrowser] Installing ${pkgs.join(", ")} into runtime…`);
114
+ }
115
+
116
+ const installRes = runNpmInstall({
117
+ cwd: getRuntimeDir(),
118
+ pkgs,
119
+ timeout: 300_000,
120
+ });
121
+
122
+ if (!installRes.ok) {
123
+ const reason = summarizeNpmError(installRes.stderr || installRes.stdout || "");
124
+ const err = new Error(
125
+ `Failed to install ${pkgs.join(", ")}. On the host run: cd "${getRuntimeDir()}" && npm install ${pkgs.join(" ")} — ${reason}`
126
+ );
127
+ err.code = "CLOAKBROWSER_INSTALL_FAILED";
128
+ return { ok: false, error: err };
129
+ }
130
+ }
131
+
132
+ mod = tryRequireCloakbrowser();
133
+ if (!mod?.launch) {
134
+ const err = new Error(
135
+ `cloakbrowser installed but launch() is missing. Reinstall: cd "${getRuntimeDir()}" && npm install ${CLOAKBROWSER_PACKAGE}@${CLOAKBROWSER_VERSION} ${MMDB_PACKAGE}@${MMDB_VERSION}`
136
+ );
137
+ err.code = "CLOAKBROWSER_API_MISMATCH";
138
+ return { ok: false, error: err };
139
+ }
140
+
141
+ if (!tryRequireMmdb() && !hasPackage(MMDB_PACKAGE)) {
142
+ const err = new Error(
143
+ `mmdb-lib is required for geoip: true. Install: cd "${getRuntimeDir()}" && npm install ${MMDB_PACKAGE}@${MMDB_VERSION}`
144
+ );
145
+ err.code = "MMDB_MISSING";
146
+ return { ok: false, error: err };
147
+ }
148
+
149
+ cachedReady = { ok: true, module: mod };
150
+ return cachedReady;
151
+ }
152
+
153
+ module.exports = {
154
+ ensureCloakbrowserRuntime,
155
+ loadCloakbrowserModule,
156
+ CLOAKBROWSER_PACKAGE,
157
+ CLOAKBROWSER_VERSION,
158
+ MMDB_PACKAGE,
159
+ MMDB_VERSION,
160
+ };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zevairouter",
3
- "version": "1.0.133",
3
+ "version": "1.0.134",
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"
@@ -0,0 +1,160 @@
1
+ // Lazy-install helper for cloakbrowser (stealth Chromium that can pass Turnstile).
2
+ // Same shape as camoufoxRuntime / playwrightRuntime — optional package, install on demand.
3
+ // Also installs mmdb-lib (required by cloakbrowser when geoip: true for proxy timezone match).
4
+ const { createRequire } = require("module");
5
+ const fs = require("fs");
6
+ const path = require("path");
7
+
8
+ const {
9
+ runNpmInstall,
10
+ getRuntimeDir,
11
+ getRuntimeNodeModules,
12
+ summarizeNpmError,
13
+ buildEnvWithRuntime,
14
+ } = require("./sqliteRuntime");
15
+
16
+ const CLOAKBROWSER_PACKAGE = "cloakbrowser";
17
+ const CLOAKBROWSER_VERSION = "^0.5.2";
18
+ const MMDB_PACKAGE = "mmdb-lib";
19
+ const MMDB_VERSION = "^3.0.2";
20
+
21
+ const nodeRequire =
22
+ typeof __non_webpack_require__ === "function" ? __non_webpack_require__ : require;
23
+
24
+ function getRuntimeRequire() {
25
+ try {
26
+ const anchor = path.join(getRuntimeDir(), "noop.js");
27
+ return createRequire(anchor);
28
+ } catch {
29
+ return null;
30
+ }
31
+ }
32
+
33
+ let cachedReady = null;
34
+
35
+ function hasPackage(name) {
36
+ return fs.existsSync(path.join(getRuntimeNodeModules(), name, "package.json"));
37
+ }
38
+
39
+ function tryRequireCloakbrowser() {
40
+ try {
41
+ const rreq = getRuntimeRequire();
42
+ const candidate = path.join(getRuntimeNodeModules(), CLOAKBROWSER_PACKAGE);
43
+ if (rreq && fs.existsSync(path.join(candidate, "package.json"))) {
44
+ return rreq(candidate);
45
+ }
46
+ } catch {}
47
+ try {
48
+ return nodeRequire(CLOAKBROWSER_PACKAGE);
49
+ } catch {}
50
+ try {
51
+ const candidate = path.join(getRuntimeNodeModules(), CLOAKBROWSER_PACKAGE);
52
+ if (fs.existsSync(path.join(candidate, "package.json"))) {
53
+ return nodeRequire(candidate);
54
+ }
55
+ } catch {}
56
+ return null;
57
+ }
58
+
59
+ function tryRequireMmdb() {
60
+ try {
61
+ const rreq = getRuntimeRequire();
62
+ const candidate = path.join(getRuntimeNodeModules(), MMDB_PACKAGE);
63
+ if (rreq && fs.existsSync(path.join(candidate, "package.json"))) {
64
+ return rreq(candidate);
65
+ }
66
+ } catch {}
67
+ try {
68
+ return nodeRequire(MMDB_PACKAGE);
69
+ } catch {}
70
+ return null;
71
+ }
72
+
73
+ function loadCloakbrowserModule() {
74
+ return tryRequireCloakbrowser();
75
+ }
76
+
77
+ /**
78
+ * Ensure cloakbrowser + mmdb-lib are available under ~/.zevai/runtime.
79
+ * mmdb-lib is required when launching with geoip: true (proxy timezone/locale).
80
+ */
81
+ function ensureCloakbrowserRuntime({ silent = false } = {}) {
82
+ if (cachedReady?.ok && cachedReady.module && tryRequireMmdb()) {
83
+ return cachedReady;
84
+ }
85
+
86
+ // Inject runtime node_modules into resolution for cloakbrowser's require("mmdb-lib")
87
+ try {
88
+ const env = buildEnvWithRuntime(process.env);
89
+ if (env.NODE_PATH && !process.env.NODE_PATH?.includes(getRuntimeNodeModules())) {
90
+ process.env.NODE_PATH = env.NODE_PATH;
91
+ // Re-init module paths for already-running process
92
+ try {
93
+ // eslint-disable-next-line no-underscore-dangle
94
+ require("module").Module._initPaths();
95
+ } catch {
96
+ /* ignore */
97
+ }
98
+ }
99
+ } catch {
100
+ /* ignore */
101
+ }
102
+
103
+ let mod = tryRequireCloakbrowser();
104
+ const needCloak = !mod?.launch;
105
+ const needMmdb = !tryRequireMmdb() && !hasPackage(MMDB_PACKAGE);
106
+
107
+ if (needCloak || needMmdb) {
108
+ const pkgs = [];
109
+ if (needCloak) pkgs.push(`${CLOAKBROWSER_PACKAGE}@${CLOAKBROWSER_VERSION}`);
110
+ if (needMmdb) pkgs.push(`${MMDB_PACKAGE}@${MMDB_VERSION}`);
111
+
112
+ if (!silent) {
113
+ console.log(`[cloakbrowser] Installing ${pkgs.join(", ")} into runtime…`);
114
+ }
115
+
116
+ const installRes = runNpmInstall({
117
+ cwd: getRuntimeDir(),
118
+ pkgs,
119
+ timeout: 300_000,
120
+ });
121
+
122
+ if (!installRes.ok) {
123
+ const reason = summarizeNpmError(installRes.stderr || installRes.stdout || "");
124
+ const err = new Error(
125
+ `Failed to install ${pkgs.join(", ")}. On the host run: cd "${getRuntimeDir()}" && npm install ${pkgs.join(" ")} — ${reason}`
126
+ );
127
+ err.code = "CLOAKBROWSER_INSTALL_FAILED";
128
+ return { ok: false, error: err };
129
+ }
130
+ }
131
+
132
+ mod = tryRequireCloakbrowser();
133
+ if (!mod?.launch) {
134
+ const err = new Error(
135
+ `cloakbrowser installed but launch() is missing. Reinstall: cd "${getRuntimeDir()}" && npm install ${CLOAKBROWSER_PACKAGE}@${CLOAKBROWSER_VERSION} ${MMDB_PACKAGE}@${MMDB_VERSION}`
136
+ );
137
+ err.code = "CLOAKBROWSER_API_MISMATCH";
138
+ return { ok: false, error: err };
139
+ }
140
+
141
+ if (!tryRequireMmdb() && !hasPackage(MMDB_PACKAGE)) {
142
+ const err = new Error(
143
+ `mmdb-lib is required for geoip: true. Install: cd "${getRuntimeDir()}" && npm install ${MMDB_PACKAGE}@${MMDB_VERSION}`
144
+ );
145
+ err.code = "MMDB_MISSING";
146
+ return { ok: false, error: err };
147
+ }
148
+
149
+ cachedReady = { ok: true, module: mod };
150
+ return cachedReady;
151
+ }
152
+
153
+ module.exports = {
154
+ ensureCloakbrowserRuntime,
155
+ loadCloakbrowserModule,
156
+ CLOAKBROWSER_PACKAGE,
157
+ CLOAKBROWSER_VERSION,
158
+ MMDB_PACKAGE,
159
+ MMDB_VERSION,
160
+ };
package/cli/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zevairouter-cli",
3
- "version": "1.0.133",
3
+ "version": "1.0.134",
4
4
  "description": "ZevaiRouter CLI - Start and manage ZevaiRouter server",
5
5
  "bin": {
6
6
  "zevai": "./cli.js"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zevairouter",
3
- "version": "1.0.133",
3
+ "version": "1.0.134",
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"
@@ -584,7 +584,7 @@ function CloudflareAiAutomationPanel({ onRefresh }) {
584
584
  Google login to Cloudflare dashboard → create Workers AI API token → save as{" "}
585
585
  <code className="text-[11px]">cloudflare-ai</code> (accountId + token). Paste{" "}
586
586
  <code className="text-[11px]">email:password</code> or <code className="text-[11px]">email|password</code>.
587
- Residential proxy recommended.
587
+ Uses headed <strong>CloakBrowser</strong> (Turnstile) + residential proxy recommended.
588
588
  </span>
589
589
  </button>
590
590
  </div>
@@ -34,6 +34,8 @@ export async function POST(request) {
34
34
  const job = await manager.startJob({
35
35
  accounts,
36
36
  concurrency: body?.concurrency,
37
+ // Cloudflare Turnstile needs CloakBrowser by default (plain Chromium fails).
38
+ engine: body?.engine || process.env.ZEVAI_CLOUDFLARE_ENGINE || "cloakbrowser",
37
39
  proxyPoolMode: body?.proxyPoolMode,
38
40
  proxyPoolId: body?.proxyPoolId,
39
41
  });
@@ -3,14 +3,32 @@ import { createRequire } from "node:module";
3
3
 
4
4
  const requireFromHere = createRequire(import.meta.url);
5
5
 
6
- function loadPlaywrightRuntime() {
6
+ /** Engines: chromium (default) + cloakbrowser (Turnstile / CF / xAI). Camoufox stays retired. */
7
+ const SUPPORTED_ENGINES = new Set(["chromium", "cloakbrowser"]);
8
+ export const DEFAULT_BULK_IMPORT_ENGINE = "chromium";
9
+
10
+ export function normalizeBulkImportEngine(value) {
11
+ if (typeof value !== "string") return DEFAULT_BULK_IMPORT_ENGINE;
12
+ const lower = value.trim().toLowerCase();
13
+ // aliases + common typos
14
+ if (lower === "cloak" || lower === "cloackbrowser" || lower === "cloack" || lower === "cloak-browser") {
15
+ return "cloakbrowser";
16
+ }
17
+ return SUPPORTED_ENGINES.has(lower) ? lower : DEFAULT_BULK_IMPORT_ENGINE;
18
+ }
19
+
20
+ function loadRuntimeHelper(name) {
7
21
  try {
8
- return requireFromHere("../../../../cli/hooks/playwrightRuntime");
22
+ return requireFromHere(`../../../../cli/hooks/${name}`);
9
23
  } catch {
10
24
  return null;
11
25
  }
12
26
  }
13
27
 
28
+ function loadPlaywrightRuntime() {
29
+ return loadRuntimeHelper("playwrightRuntime");
30
+ }
31
+
14
32
  async function importPlaywright() {
15
33
  const playwright = await import("playwright");
16
34
  return playwright.chromium ?? playwright.default?.chromium ?? null;
@@ -403,14 +421,113 @@ async function launchChromium({ proxyUrl, headless = true, windowSize = null } =
403
421
  }
404
422
  }
405
423
 
424
+ /**
425
+ * CloakBrowser — patched stealth Chromium. Needed for Cloudflare Turnstile
426
+ * (dash.cloudflare.com / Workers AI harvest) and similar bot checks.
427
+ * Prefer headed (headless=false); Turnstile usually fails headless.
428
+ * Auto-installs into ~/.zevai/runtime via cloakbrowserRuntime.
429
+ */
430
+ async function launchCloakbrowser({ proxyUrl, headless = false, windowSize = null } = {}) {
431
+ const { ensureDisplayForHeadedBrowser } = await import("./displayEnv.js");
432
+
433
+ const runtime = loadRuntimeHelper("cloakbrowserRuntime");
434
+ let cloak = null;
435
+ if (runtime?.ensureCloakbrowserRuntime) {
436
+ // Also installs mmdb-lib (required when geoip: true for proxy timezone match)
437
+ const ready = runtime.ensureCloakbrowserRuntime({ silent: false });
438
+ if (!ready.ok && ready.error) throw ready.error;
439
+ cloak = ready.module || runtime.loadCloakbrowserModule?.();
440
+ }
441
+ if (!cloak?.launch) {
442
+ try {
443
+ const mod = await import("cloakbrowser");
444
+ cloak = mod?.default || mod;
445
+ } catch (err) {
446
+ const friendly = new Error(
447
+ `cloakbrowser is not installed. Cloudflare AI bulk will auto-install on next run, or run: cd ~/.zevai/runtime && npm install cloakbrowser mmdb-lib`,
448
+ );
449
+ friendly.code = "CLOAKBROWSER_PACKAGE_MISSING";
450
+ friendly.cause = err;
451
+ throw friendly;
452
+ }
453
+ }
454
+ if (!cloak?.launch) {
455
+ const err = new Error("cloakbrowser loaded but launch() is missing");
456
+ err.code = "CLOAKBROWSER_API_MISMATCH";
457
+ throw err;
458
+ }
459
+
460
+ let useHeadless = headless === true; // default headed for Turnstile
461
+ if (!useHeadless) {
462
+ const display = ensureDisplayForHeadedBrowser();
463
+ if (!display.ok) {
464
+ // Prefer failing with install steps over silent headless Turnstile failure
465
+ throw display.error;
466
+ }
467
+ }
468
+
469
+ const launchOpts = {
470
+ headless: useHeadless,
471
+ humanize: true,
472
+ };
473
+ if (proxyUrl) {
474
+ // CloakBrowser docs: string or { server, username, password }; geoip aligns
475
+ // timezone/locale to proxy IP (critical for Turnstile / abusive-pattern checks).
476
+ launchOpts.proxy = proxyUrl;
477
+ launchOpts.geoip = true;
478
+ }
479
+ if (windowSize?.width && windowSize?.height) {
480
+ launchOpts.viewport = { width: windowSize.width, height: windowSize.height };
481
+ }
482
+
483
+ try {
484
+ const browser = await cloak.launch(launchOpts);
485
+ // Do not wrap with stealth init script — CloakBrowser patches at binary level;
486
+ // extra webdriver spoofing can conflict with its fingerprint.
487
+ return browser;
488
+ } catch (error) {
489
+ const msg = String(error?.message || error || "");
490
+ if (!useHeadless && /XServer|DISPLAY|Missing X server|headed browser|no DISPLAY/i.test(msg)) {
491
+ const display = ensureDisplayForHeadedBrowser();
492
+ if (display.ok) {
493
+ return cloak.launch(launchOpts);
494
+ }
495
+ const friendly = new Error(
496
+ `${msg}\n\nVPS has no display. Install a virtual screen then retry:\n` +
497
+ ` sudo apt-get update && sudo apt-get install -y xvfb\n` +
498
+ ` sudo systemctl restart zevairouter # or restart zevai\n` +
499
+ `ZevaiRouter auto-starts Xvfb when installed.`,
500
+ );
501
+ friendly.code = "NO_DISPLAY";
502
+ friendly.cause = error;
503
+ throw friendly;
504
+ }
505
+ throw error;
506
+ }
507
+ }
508
+
406
509
  export async function launchBulkImportBrowser({
510
+ engine = DEFAULT_BULK_IMPORT_ENGINE,
407
511
  proxyUrl,
408
512
  headless = true,
409
513
  windowSize = null,
410
514
  } = {}) {
515
+ const normalized = normalizeBulkImportEngine(engine);
516
+ if (normalized === "cloakbrowser") {
517
+ // Turnstile needs a real window unless caller forces headless
518
+ return launchCloakbrowser({
519
+ proxyUrl,
520
+ headless: headless === true,
521
+ windowSize,
522
+ });
523
+ }
411
524
  return launchChromium({ proxyUrl, headless, windowSize });
412
525
  }
413
526
 
527
+ export function makeBrowserLauncher({ engine, proxyUrl, headless = true, windowSize = null } = {}) {
528
+ return () => launchBulkImportBrowser({ engine, proxyUrl, headless, windowSize });
529
+ }
530
+
414
531
  /**
415
532
  * Force-close a Playwright Chromium browser. Graceful close can hang forever when
416
533
  * the browser is stuck on a blackholed proxy / spinning renderer — on a 2GB VPS