zevairouter 1.0.134 → 1.0.136

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 (596) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/cli/app/.next-cli-build/BUILD_ID +1 -1
  3. package/cli/app/.next-cli-build/app-path-routes-manifest.json +5 -5
  4. package/cli/app/.next-cli-build/build-manifest.json +2 -2
  5. package/cli/app/.next-cli-build/required-server-files.json +4 -2
  6. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/automation/page.js +1 -1
  7. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/automation/page.js.nft.json +1 -1
  8. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/automation/page_client-reference-manifest.js +1 -1
  9. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -1
  10. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  11. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
  12. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  13. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  14. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  15. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
  16. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  17. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
  18. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  19. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/context/page.js.nft.json +1 -1
  20. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/context/page_client-reference-manifest.js +1 -1
  21. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  22. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  23. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js.nft.json +1 -1
  24. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  25. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js.nft.json +1 -1
  26. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  27. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js.nft.json +1 -1
  28. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  29. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js.nft.json +1 -1
  30. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  31. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -1
  32. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  33. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  34. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  35. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/playground/page.js.nft.json +1 -1
  36. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/playground/page_client-reference-manifest.js +1 -1
  37. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
  38. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  39. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
  40. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  41. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
  42. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  43. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
  44. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  45. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
  46. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  47. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page.js.nft.json +1 -1
  48. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
  49. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
  50. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  51. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/terminal/page.js.nft.json +1 -1
  52. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/terminal/page_client-reference-manifest.js +1 -1
  53. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page.js.nft.json +1 -1
  54. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  55. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
  56. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  57. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
  58. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  59. package/cli/app/.next-cli-build/server/app/_global-error/page.js.nft.json +1 -1
  60. package/cli/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  61. package/cli/app/.next-cli-build/server/app/_global-error.html +1 -1
  62. package/cli/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  63. package/cli/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  64. package/cli/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  65. package/cli/app/.next-cli-build/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  66. package/cli/app/.next-cli-build/server/app/_global-error.segments/_head.segment.rsc +1 -1
  67. package/cli/app/.next-cli-build/server/app/_global-error.segments/_index.segment.rsc +1 -1
  68. package/cli/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  69. package/cli/app/.next-cli-build/server/app/_not-found/page.js.nft.json +1 -1
  70. package/cli/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  71. package/cli/app/.next-cli-build/server/app/_not-found.html +1 -1
  72. package/cli/app/.next-cli-build/server/app/_not-found.rsc +3 -3
  73. package/cli/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +3 -3
  74. package/cli/app/.next-cli-build/server/app/_not-found.segments/_head.segment.rsc +1 -1
  75. package/cli/app/.next-cli-build/server/app/_not-found.segments/_index.segment.rsc +3 -3
  76. package/cli/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  77. package/cli/app/.next-cli-build/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  78. package/cli/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  79. package/cli/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
  80. package/cli/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
  81. package/cli/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
  82. package/cli/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
  83. package/cli/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
  84. package/cli/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
  85. package/cli/app/.next-cli-build/server/app/api/cache/stats/route.js.nft.json +1 -1
  86. package/cli/app/.next-cli-build/server/app/api/changelog/route.js.nft.json +1 -1
  87. package/cli/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
  88. package/cli/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  89. package/cli/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
  90. package/cli/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
  91. package/cli/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js.nft.json +1 -1
  92. package/cli/app/.next-cli-build/server/app/api/cli-tools/codex-gateway/accounts/route.js.nft.json +1 -1
  93. package/cli/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
  94. package/cli/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
  95. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js.nft.json +1 -1
  96. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js.nft.json +1 -1
  97. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
  98. package/cli/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js.nft.json +1 -1
  99. package/cli/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
  100. package/cli/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js.nft.json +1 -1
  101. package/cli/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js.nft.json +1 -1
  102. package/cli/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js.nft.json +1 -1
  103. package/cli/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
  104. package/cli/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js.nft.json +1 -1
  105. package/cli/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
  106. package/cli/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
  107. package/cli/app/.next-cli-build/server/app/api/context/[id]/route.js.nft.json +1 -1
  108. package/cli/app/.next-cli-build/server/app/api/context/bulk/route.js.nft.json +1 -1
  109. package/cli/app/.next-cli-build/server/app/api/context/route.js.nft.json +1 -1
  110. package/cli/app/.next-cli-build/server/app/api/dashboard/chat/completions/route.js.nft.json +1 -1
  111. package/cli/app/.next-cli-build/server/app/api/headroom/extras/route.js.nft.json +1 -1
  112. package/cli/app/.next-cli-build/server/app/api/headroom/proxy/[...path]/route.js.nft.json +1 -1
  113. package/cli/app/.next-cli-build/server/app/api/headroom/restart/route.js.nft.json +1 -1
  114. package/cli/app/.next-cli-build/server/app/api/headroom/start/route.js.nft.json +1 -1
  115. package/cli/app/.next-cli-build/server/app/api/headroom/status/route.js.nft.json +1 -1
  116. package/cli/app/.next-cli-build/server/app/api/headroom/stop/route.js.nft.json +1 -1
  117. package/cli/app/.next-cli-build/server/app/api/health/ready/route.js.nft.json +1 -1
  118. package/cli/app/.next-cli-build/server/app/api/health/route.js.nft.json +1 -1
  119. package/cli/app/.next-cli-build/server/app/api/init/route.js.nft.json +1 -1
  120. package/cli/app/.next-cli-build/server/app/api/keys/[id]/rotate/route.js.nft.json +1 -1
  121. package/cli/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
  122. package/cli/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
  123. package/cli/app/.next-cli-build/server/app/api/locale/route.js.nft.json +1 -1
  124. package/cli/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
  125. package/cli/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
  126. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
  127. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
  128. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
  129. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
  130. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -1
  131. package/cli/app/.next-cli-build/server/app/api/metrics/route.js.nft.json +1 -1
  132. package/cli/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
  133. package/cli/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
  134. package/cli/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
  135. package/cli/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
  136. package/cli/app/.next-cli-build/server/app/api/models/route.js +1 -1
  137. package/cli/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
  138. package/cli/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
  139. package/cli/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  140. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/cancel/route.js +1 -1
  141. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  142. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/manual/[workerId]/route.js +1 -1
  143. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  144. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/route.js +1 -1
  145. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/route.js.nft.json +1 -1
  146. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/latest/route.js +1 -1
  147. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/latest/route.js.nft.json +1 -1
  148. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/route.js +1 -1
  149. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/route.js.nft.json +1 -1
  150. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/cancel/route.js +1 -1
  151. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  152. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/manual/[workerId]/route.js +1 -1
  153. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  154. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/route.js +1 -1
  155. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/route.js.nft.json +1 -1
  156. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/latest/route.js +1 -1
  157. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/latest/route.js.nft.json +1 -1
  158. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/route.js +1 -1
  159. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/route.js.nft.json +1 -1
  160. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/cancel/route.js +1 -1
  161. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  162. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/manual/[workerId]/route.js +1 -1
  163. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  164. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/route.js +1 -1
  165. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/route.js.nft.json +1 -1
  166. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/latest/route.js +1 -1
  167. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/latest/route.js.nft.json +1 -1
  168. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/route.js +1 -1
  169. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/route.js.nft.json +1 -1
  170. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-token/route.js.nft.json +1 -1
  171. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/quota-cookie/route.js.nft.json +1 -1
  172. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/cancel/route.js +1 -1
  173. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  174. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/manual/[workerId]/route.js +1 -1
  175. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  176. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/route.js +1 -1
  177. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/route.js.nft.json +1 -1
  178. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/latest/route.js +1 -1
  179. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/latest/route.js.nft.json +1 -1
  180. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/route.js +1 -1
  181. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/route.js.nft.json +1 -1
  182. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-token/route.js.nft.json +1 -1
  183. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/quota-cookie/route.js.nft.json +1 -1
  184. package/cli/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
  185. package/cli/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
  186. package/cli/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  187. package/cli/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
  188. package/cli/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
  189. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -1
  190. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/cancel/route.js +1 -1
  191. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  192. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/manual/[workerId]/route.js +1 -1
  193. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  194. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/route.js +1 -1
  195. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/route.js.nft.json +1 -1
  196. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/latest/route.js +1 -1
  197. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/latest/route.js.nft.json +1 -1
  198. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/route.js +1 -1
  199. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/route.js.nft.json +1 -1
  200. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js +1 -1
  201. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  202. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +1 -1
  203. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  204. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/cancel/route.js +1 -1
  205. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  206. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/manual/[workerId]/route.js +1 -1
  207. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  208. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/route.js +1 -1
  209. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/route.js.nft.json +1 -1
  210. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/latest/route.js +1 -1
  211. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/latest/route.js.nft.json +1 -1
  212. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/route.js +1 -1
  213. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/route.js.nft.json +1 -1
  214. package/cli/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
  215. package/cli/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  216. package/cli/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
  217. package/cli/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js.nft.json +1 -1
  218. package/cli/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  219. package/cli/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
  220. package/cli/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  221. package/cli/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  222. package/cli/app/.next-cli-build/server/app/api/providers/bulk-delete/route.js.nft.json +1 -1
  223. package/cli/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
  224. package/cli/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js.nft.json +1 -1
  225. package/cli/app/.next-cli-build/server/app/api/providers/route.js +1 -1
  226. package/cli/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
  227. package/cli/app/.next-cli-build/server/app/api/providers/suggested-models/route.js.nft.json +1 -1
  228. package/cli/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  229. package/cli/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
  230. package/cli/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
  231. package/cli/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
  232. package/cli/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
  233. package/cli/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
  234. package/cli/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
  235. package/cli/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
  236. package/cli/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
  237. package/cli/app/.next-cli-build/server/app/api/pxpipe/health/route.js.nft.json +1 -1
  238. package/cli/app/.next-cli-build/server/app/api/pxpipe/install/route.js.nft.json +1 -1
  239. package/cli/app/.next-cli-build/server/app/api/pxpipe/restart/route.js.nft.json +1 -1
  240. package/cli/app/.next-cli-build/server/app/api/pxpipe/start/route.js.nft.json +1 -1
  241. package/cli/app/.next-cli-build/server/app/api/pxpipe/stats/route.js.nft.json +1 -1
  242. package/cli/app/.next-cli-build/server/app/api/pxpipe/status/route.js.nft.json +1 -1
  243. package/cli/app/.next-cli-build/server/app/api/pxpipe/stop/route.js.nft.json +1 -1
  244. package/cli/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
  245. package/cli/app/.next-cli-build/server/app/api/settings/proxy-test/route.js.nft.json +1 -1
  246. package/cli/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
  247. package/cli/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
  248. package/cli/app/.next-cli-build/server/app/api/shutdown/route.js.nft.json +1 -1
  249. package/cli/app/.next-cli-build/server/app/api/tags/route.js.nft.json +1 -1
  250. package/cli/app/.next-cli-build/server/app/api/terminal/auth/setup/route.js.nft.json +1 -1
  251. package/cli/app/.next-cli-build/server/app/api/terminal/auth/status/route.js.nft.json +1 -1
  252. package/cli/app/.next-cli-build/server/app/api/terminal/auth/unlock/route.js.nft.json +1 -1
  253. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/input/route.js.nft.json +1 -1
  254. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/resize/route.js.nft.json +1 -1
  255. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/route.js.nft.json +1 -1
  256. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/stream/route.js.nft.json +1 -1
  257. package/cli/app/.next-cli-build/server/app/api/terminal/session/route.js.nft.json +1 -1
  258. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
  259. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/route.js.nft.json +1 -1
  260. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
  261. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -1
  262. package/cli/app/.next-cli-build/server/app/api/translator/load/route.js.nft.json +1 -1
  263. package/cli/app/.next-cli-build/server/app/api/translator/save/route.js.nft.json +1 -1
  264. package/cli/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
  265. package/cli/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
  266. package/cli/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  267. package/cli/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  268. package/cli/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
  269. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
  270. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
  271. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
  272. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
  273. package/cli/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  274. package/cli/app/.next-cli-build/server/app/api/usage/aggregate/route.js.nft.json +1 -1
  275. package/cli/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
  276. package/cli/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
  277. package/cli/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
  278. package/cli/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
  279. package/cli/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  280. package/cli/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
  281. package/cli/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
  282. package/cli/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  283. package/cli/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  284. package/cli/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  285. package/cli/app/.next-cli-build/server/app/api/v1/audio/voices/route.js.nft.json +1 -1
  286. package/cli/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  287. package/cli/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  288. package/cli/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  289. package/cli/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -1
  290. package/cli/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
  291. package/cli/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
  292. package/cli/app/.next-cli-build/server/app/api/v1/models/info/route.js.nft.json +1 -1
  293. package/cli/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
  294. package/cli/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
  295. package/cli/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
  296. package/cli/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
  297. package/cli/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
  298. package/cli/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
  299. package/cli/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  300. package/cli/app/.next-cli-build/server/app/api/v1beta/models/route.js.nft.json +1 -1
  301. package/cli/app/.next-cli-build/server/app/api/version/route.js +1 -1
  302. package/cli/app/.next-cli-build/server/app/api/version/route.js.nft.json +1 -1
  303. package/cli/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
  304. package/cli/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
  305. package/cli/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
  306. package/cli/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +1 -1
  307. package/cli/app/.next-cli-build/server/app/callback/page.js.nft.json +1 -1
  308. package/cli/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  309. package/cli/app/.next-cli-build/server/app/callback.html +1 -1
  310. package/cli/app/.next-cli-build/server/app/callback.rsc +3 -3
  311. package/cli/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +3 -3
  312. package/cli/app/.next-cli-build/server/app/callback.segments/_head.segment.rsc +1 -1
  313. package/cli/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +3 -3
  314. package/cli/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +1 -1
  315. package/cli/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  316. package/cli/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
  317. package/cli/app/.next-cli-build/server/app/dashboard/automation.html +1 -1
  318. package/cli/app/.next-cli-build/server/app/dashboard/automation.rsc +5 -5
  319. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation/__PAGE__.segment.rsc +2 -2
  320. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation.segment.rsc +1 -1
  321. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  322. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  323. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_full.segment.rsc +5 -5
  324. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_head.segment.rsc +1 -1
  325. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_index.segment.rsc +3 -3
  326. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_tree.segment.rsc +1 -1
  327. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
  328. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +5 -5
  329. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
  330. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
  331. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  332. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  333. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +5 -5
  334. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
  335. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_index.segment.rsc +3 -3
  336. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
  337. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
  338. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +5 -5
  339. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
  340. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
  341. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  342. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  343. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +5 -5
  344. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
  345. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_index.segment.rsc +3 -3
  346. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
  347. package/cli/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
  348. package/cli/app/.next-cli-build/server/app/dashboard/combos.rsc +5 -5
  349. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
  350. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
  351. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  352. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  353. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +5 -5
  354. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
  355. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_index.segment.rsc +3 -3
  356. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
  357. package/cli/app/.next-cli-build/server/app/dashboard/context.html +1 -1
  358. package/cli/app/.next-cli-build/server/app/dashboard/context.rsc +5 -5
  359. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard/context/__PAGE__.segment.rsc +2 -2
  360. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard/context.segment.rsc +1 -1
  361. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  362. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  363. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_full.segment.rsc +5 -5
  364. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_head.segment.rsc +1 -1
  365. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_index.segment.rsc +3 -3
  366. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_tree.segment.rsc +1 -1
  367. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
  368. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.rsc +5 -5
  369. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
  370. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
  371. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  372. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  373. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +5 -5
  374. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
  375. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_index.segment.rsc +3 -3
  376. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
  377. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
  378. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +5 -5
  379. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
  380. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
  381. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
  382. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  383. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  384. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +5 -5
  385. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
  386. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +3 -3
  387. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +1 -1
  388. package/cli/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
  389. package/cli/app/.next-cli-build/server/app/dashboard/mitm.rsc +5 -5
  390. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
  391. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
  392. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  393. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  394. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +5 -5
  395. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
  396. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_index.segment.rsc +3 -3
  397. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
  398. package/cli/app/.next-cli-build/server/app/dashboard/playground.html +1 -1
  399. package/cli/app/.next-cli-build/server/app/dashboard/playground.rsc +5 -5
  400. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard/playground/__PAGE__.segment.rsc +2 -2
  401. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard/playground.segment.rsc +1 -1
  402. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  403. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  404. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_full.segment.rsc +5 -5
  405. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_head.segment.rsc +1 -1
  406. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_index.segment.rsc +3 -3
  407. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_tree.segment.rsc +1 -1
  408. package/cli/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
  409. package/cli/app/.next-cli-build/server/app/dashboard/profile.rsc +5 -5
  410. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
  411. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
  412. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  413. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  414. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +5 -5
  415. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
  416. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_index.segment.rsc +3 -3
  417. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
  418. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
  419. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.rsc +5 -5
  420. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
  421. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
  422. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  423. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  424. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  425. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +5 -5
  426. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
  427. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_index.segment.rsc +3 -3
  428. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
  429. package/cli/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
  430. package/cli/app/.next-cli-build/server/app/dashboard/providers.rsc +5 -5
  431. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
  432. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  433. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  434. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  435. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +5 -5
  436. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
  437. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_index.segment.rsc +3 -3
  438. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
  439. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
  440. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +5 -5
  441. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
  442. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
  443. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  444. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  445. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +5 -5
  446. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
  447. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +3 -3
  448. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
  449. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.html +1 -1
  450. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.rsc +5 -5
  451. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +2 -2
  452. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe.segment.rsc +1 -1
  453. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  454. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  455. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_full.segment.rsc +5 -5
  456. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_head.segment.rsc +1 -1
  457. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_index.segment.rsc +3 -3
  458. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +1 -1
  459. package/cli/app/.next-cli-build/server/app/dashboard/quota.html +2 -2
  460. package/cli/app/.next-cli-build/server/app/dashboard/quota.rsc +6 -6
  461. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
  462. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
  463. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  464. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  465. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +6 -6
  466. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
  467. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_index.segment.rsc +3 -3
  468. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
  469. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js.nft.json +1 -1
  470. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  471. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  472. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +3 -3
  473. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +3 -3
  474. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  475. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +3 -3
  476. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
  477. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  478. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  479. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  480. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  481. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
  482. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.rsc +5 -5
  483. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +2 -2
  484. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver.segment.rsc +1 -1
  485. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  486. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  487. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +5 -5
  488. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_head.segment.rsc +1 -1
  489. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_index.segment.rsc +3 -3
  490. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +1 -1
  491. package/cli/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
  492. package/cli/app/.next-cli-build/server/app/dashboard/translator.rsc +5 -5
  493. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
  494. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
  495. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  496. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  497. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +5 -5
  498. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
  499. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_index.segment.rsc +3 -3
  500. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
  501. package/cli/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
  502. package/cli/app/.next-cli-build/server/app/dashboard/usage.rsc +5 -5
  503. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
  504. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
  505. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  506. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  507. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +5 -5
  508. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
  509. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_index.segment.rsc +3 -3
  510. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
  511. package/cli/app/.next-cli-build/server/app/dashboard.html +1 -1
  512. package/cli/app/.next-cli-build/server/app/dashboard.rsc +5 -5
  513. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
  514. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  515. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  516. package/cli/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +5 -5
  517. package/cli/app/.next-cli-build/server/app/dashboard.segments/_head.segment.rsc +1 -1
  518. package/cli/app/.next-cli-build/server/app/dashboard.segments/_index.segment.rsc +3 -3
  519. package/cli/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +1 -1
  520. package/cli/app/.next-cli-build/server/app/index.html +1 -1
  521. package/cli/app/.next-cli-build/server/app/index.rsc +3 -3
  522. package/cli/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  523. package/cli/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +3 -3
  524. package/cli/app/.next-cli-build/server/app/index.segments/_head.segment.rsc +1 -1
  525. package/cli/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +3 -3
  526. package/cli/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +1 -1
  527. package/cli/app/.next-cli-build/server/app/landing/page.js.nft.json +1 -1
  528. package/cli/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  529. package/cli/app/.next-cli-build/server/app/landing.html +1 -1
  530. package/cli/app/.next-cli-build/server/app/landing.rsc +3 -3
  531. package/cli/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +3 -3
  532. package/cli/app/.next-cli-build/server/app/landing.segments/_head.segment.rsc +1 -1
  533. package/cli/app/.next-cli-build/server/app/landing.segments/_index.segment.rsc +3 -3
  534. package/cli/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +1 -1
  535. package/cli/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
  536. package/cli/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
  537. package/cli/app/.next-cli-build/server/app/login/page.js.nft.json +1 -1
  538. package/cli/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  539. package/cli/app/.next-cli-build/server/app/login.html +1 -1
  540. package/cli/app/.next-cli-build/server/app/login.rsc +4 -4
  541. package/cli/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +4 -4
  542. package/cli/app/.next-cli-build/server/app/login.segments/_head.segment.rsc +1 -1
  543. package/cli/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +3 -3
  544. package/cli/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +1 -1
  545. package/cli/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  546. package/cli/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
  547. package/cli/app/.next-cli-build/server/app/manifest.webmanifest/route.js.nft.json +1 -1
  548. package/cli/app/.next-cli-build/server/app/page.js.nft.json +1 -1
  549. package/cli/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  550. package/cli/app/.next-cli-build/server/app-paths-manifest.json +5 -5
  551. package/cli/app/.next-cli-build/server/chunks/1019.js +1 -1
  552. package/cli/app/.next-cli-build/server/chunks/3155.js +1 -1
  553. package/cli/app/.next-cli-build/server/chunks/412.js +1 -1
  554. package/cli/app/.next-cli-build/server/chunks/4566.js +1 -0
  555. package/cli/app/.next-cli-build/server/chunks/4746.js +1 -1
  556. package/cli/app/.next-cli-build/server/chunks/5000.js +1 -1
  557. package/cli/app/.next-cli-build/server/chunks/5307.js +1 -1
  558. package/cli/app/.next-cli-build/server/chunks/5949.js +9 -50
  559. package/cli/app/.next-cli-build/server/chunks/6269.js +1 -1
  560. package/cli/app/.next-cli-build/server/chunks/8306.js +1 -1
  561. package/cli/app/.next-cli-build/server/chunks/8371.js +1 -1
  562. package/cli/app/.next-cli-build/server/chunks/891.js +1 -1
  563. package/cli/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  564. package/cli/app/.next-cli-build/server/pages/404.html +1 -1
  565. package/cli/app/.next-cli-build/server/pages/500.html +1 -1
  566. package/cli/app/.next-cli-build/static/chunks/{5497-deeefbd0aa73d896.js → 5497-471618863a988f25.js} +1 -1
  567. package/cli/app/.next-cli-build/static/chunks/{85-112ea5e56e88ceda.js → 85-b04d094e538fab0d.js} +1 -1
  568. package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/automation/{page-8b7dfe7877ed43a1.js → page-d55c4e337a98302a.js} +1 -1
  569. package/cli/app/CHANGELOG.md +10 -0
  570. package/cli/app/cli/hooks/cloakbrowserRuntime.js +15 -7
  571. package/cli/app/cli/hooks/postinstall.js +12 -11
  572. package/cli/app/package.json +1 -1
  573. package/cli/app/server.js +1 -1
  574. package/cli/hooks/cloakbrowserRuntime.js +15 -7
  575. package/cli/hooks/postinstall.js +12 -11
  576. package/cli/package.json +1 -1
  577. package/next.config.mjs +6 -7
  578. package/package.json +1 -1
  579. package/scripts/start-standalone.mjs +3 -6
  580. package/src/app/(dashboard)/dashboard/automation/page.js +1 -1
  581. package/src/app/api/oauth/cloudflare-ai/bulk-import/route.js +1 -2
  582. package/src/lib/oauth/services/antigravityBulkImportManager.js +2 -0
  583. package/src/lib/oauth/services/bulkImportBrowserEngine.js +88 -343
  584. package/src/lib/oauth/services/cloudflareAiBulkImportManager.js +4 -13
  585. package/src/lib/oauth/services/codebuddyCnBulkImportManager.js +7 -9
  586. package/src/lib/oauth/services/codebuddyCnPhoneAutomation.js +1 -1
  587. package/src/lib/oauth/services/kiroBulkImportManager.js +18 -9
  588. package/src/lib/oauth/services/kiroGoogleAutomation.js +5 -5
  589. package/src/lib/oauth/services/qoderBulkImportManager.js +7 -1
  590. package/src/shared/components/BulkAccountAutomationModal.js +3 -4
  591. package/src/shared/components/CodeBuddyCnPhoneRegisterModal.js +1 -1
  592. package/cli/app/.next-cli-build/server/chunks/8157.js +0 -1
  593. package/cli/app/cli/hooks/playwrightRuntime.js +0 -235
  594. package/cli/hooks/playwrightRuntime.js +0 -235
  595. /package/cli/app/.next-cli-build/static/{G9tIzsfVyPOqAvoGFJp7p → umVx1oTsstlbAeyUcBGhm}/_buildManifest.js +0 -0
  596. /package/cli/app/.next-cli-build/static/{G9tIzsfVyPOqAvoGFJp7p → umVx1oTsstlbAeyUcBGhm}/_ssgManifest.js +0 -0
@@ -3,15 +3,30 @@ import { createRequire } from "node:module";
3
3
 
4
4
  const requireFromHere = createRequire(import.meta.url);
5
5
 
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";
6
+ /**
7
+ * Automation browser engine: CloakBrowser only.
8
+ * Stock Playwright Chromium is retired for bulk import — CloakBrowser is a
9
+ * patched Chromium that passes Turnstile / bot checks (CF, Google, etc.).
10
+ * playwright-core remains a peer of cloakbrowser (drive API only; no stock browser).
11
+ */
12
+ export const DEFAULT_BULK_IMPORT_ENGINE = "cloakbrowser";
13
+
14
+ const SUPPORTED_ENGINES = new Set(["cloakbrowser"]);
9
15
 
10
16
  export function normalizeBulkImportEngine(value) {
11
- if (typeof value !== "string") return DEFAULT_BULK_IMPORT_ENGINE;
17
+ if (typeof value !== "string" || !value.trim()) return DEFAULT_BULK_IMPORT_ENGINE;
12
18
  const lower = value.trim().toLowerCase();
13
- // aliases + common typos
14
- if (lower === "cloak" || lower === "cloackbrowser" || lower === "cloack" || lower === "cloak-browser") {
19
+ // Legacy aliases: everything maps to cloakbrowser (chromium/camoufox retired).
20
+ if (
21
+ lower === "cloak" ||
22
+ lower === "cloackbrowser" ||
23
+ lower === "cloack" ||
24
+ lower === "cloak-browser" ||
25
+ lower === "chromium" ||
26
+ lower === "chrome" ||
27
+ lower === "camoufox" ||
28
+ lower === "playwright"
29
+ ) {
15
30
  return "cloakbrowser";
16
31
  }
17
32
  return SUPPORTED_ENGINES.has(lower) ? lower : DEFAULT_BULK_IMPORT_ENGINE;
@@ -25,68 +40,14 @@ function loadRuntimeHelper(name) {
25
40
  }
26
41
  }
27
42
 
28
- function loadPlaywrightRuntime() {
29
- return loadRuntimeHelper("playwrightRuntime");
30
- }
31
-
32
- async function importPlaywright() {
33
- const playwright = await import("playwright");
34
- return playwright.chromium ?? playwright.default?.chromium ?? null;
35
- }
36
-
37
- /**
38
- * WebGL / UA / platform must match. Spoofing Intel Iris on a Linux VPS UA is a
39
- * classic bot signal and triggers Google CAPTCHA even at high concurrency.
40
- * (Used to work when fingerprint was consistent or less checked.)
41
- */
42
- function getStealthPlatformProfile() {
43
- const platform = typeof process !== "undefined" ? process.platform : "linux";
44
- if (platform === "darwin") {
45
- return {
46
- platform,
47
- languages: ["en-US", "en"],
48
- webglVendor: "Google Inc. (Apple)",
49
- webglRenderer: "ANGLE (Apple, ANGLE Metal Renderer: Apple M1, Unspecified Version)",
50
- uaPlatform: "Macintosh; Intel Mac OS X 10_15_7",
51
- };
52
- }
53
- if (platform === "win32") {
54
- return {
55
- platform,
56
- languages: ["en-US", "en"],
57
- webglVendor: "Google Inc. (NVIDIA)",
58
- webglRenderer: "ANGLE (NVIDIA, NVIDIA GeForce GTX 1660 Direct3D11 vs_5_0 ps_5_0, D3D11)",
59
- uaPlatform: "Windows NT 10.0; Win64; x64",
60
- };
61
- }
62
- // Linux VPS / Xvfb — Mesa/SwiftShader style, NOT Mac Iris
63
- return {
64
- platform: "linux",
65
- languages: ["en-US", "en"],
66
- webglVendor: "Google Inc. (Google)",
67
- webglRenderer: "ANGLE (Google, Vulkan 1.3.0 (SwiftShader Device (Subzero) (0x0000C0DE)), SwiftShader driver)",
68
- uaPlatform: "X11; Linux x86_64",
69
- };
70
- }
71
-
72
43
  /**
73
44
  * Seeded fingerprint so each account/session looks like a different real desktop
74
45
  * instead of the same 900x700 + identical navigator.* cluster (Tencent risk signal).
75
- * WebGL stays OS-native (spoofing Mac GPU on Linux UA is worse).
46
+ * Do NOT spoof WebGL (CloakBrowser already patches at binary level).
76
47
  *
77
48
  * @param {string|number} [seed]
78
- * @returns {{
79
- * viewport: { width: number, height: number },
80
- * deviceScaleFactor: number,
81
- * hardwareConcurrency: number,
82
- * deviceMemory: number,
83
- * maxTouchPoints: number,
84
- * screen: { width: number, height: number, availWidth: number, availHeight: number, colorDepth: number, pixelDepth: number },
85
- * seed: string,
86
- * }}
87
49
  */
88
50
  export function buildAccountFingerprint(seed) {
89
- // Deterministic byte stream from seed (stable retry of same account = same fingerprint).
90
51
  let buf = createHash("sha256").update(String(seed ?? `${Date.now()}-${Math.random()}`)).digest();
91
52
  let i = 0;
92
53
  const nextByte = () => {
@@ -99,7 +60,6 @@ export function buildAccountFingerprint(seed) {
99
60
  const next = () => nextByte() / 256;
100
61
  const pick = (arr) => arr[Math.floor(next() * arr.length) % arr.length];
101
62
 
102
- // Common real desktop resolutions (avoid Playwright default 900x700 bot shape).
103
63
  const base = pick([
104
64
  { width: 1366, height: 768 },
105
65
  { width: 1440, height: 900 },
@@ -111,21 +71,17 @@ export function buildAccountFingerprint(seed) {
111
71
  { width: 1680, height: 1050 },
112
72
  { width: 2560, height: 1440 },
113
73
  ]);
114
- // Tiny noise so two accounts with same base size still differ slightly.
115
74
  const width = base.width - (nextByte() % 17);
116
75
  const height = base.height - (nextByte() % 13);
117
76
  const taskbar = pick([0, 30, 40, 48]);
118
77
  const colorDepth = pick([24, 30, 32]);
119
- const hardwareConcurrency = pick([4, 6, 8, 8, 12, 16]);
120
- const deviceMemory = pick([4, 8, 8, 16]);
121
- const deviceScaleFactor = pick([1, 1, 1.25, 1.5, 2]);
122
78
 
123
79
  return {
124
80
  seed: String(seed ?? ""),
125
81
  viewport: { width, height },
126
- deviceScaleFactor,
127
- hardwareConcurrency,
128
- deviceMemory,
82
+ deviceScaleFactor: pick([1, 1, 1.25, 1.5, 2]),
83
+ hardwareConcurrency: pick([4, 6, 8, 8, 12, 16]),
84
+ deviceMemory: pick([4, 8, 8, 16]),
129
85
  maxTouchPoints: 0,
130
86
  screen: {
131
87
  width,
@@ -138,31 +94,24 @@ export function buildAccountFingerprint(seed) {
138
94
  };
139
95
  }
140
96
 
141
- function buildStealthInitScript(overrides = {}) {
142
- const p = getStealthPlatformProfile();
143
- const languages = Array.isArray(overrides.languages) && overrides.languages.length
144
- ? overrides.languages
145
- : p.languages;
146
- const fp = overrides.fingerprint && typeof overrides.fingerprint === "object"
147
- ? overrides.fingerprint
148
- : null;
149
- // Inject as JSON so quotes in renderer strings stay safe.
97
+ /**
98
+ * Light init script for per-account HW/screen noise.
99
+ * Avoids webdriver/WebGL patches that conflict with CloakBrowser binary stealth.
100
+ */
101
+ export function buildFingerprintInitScript({ languages, fingerprint } = {}) {
150
102
  return `
151
103
  (() => {
152
104
  const profile = ${JSON.stringify({
153
- languages,
154
- webglVendor: p.webglVendor,
155
- webglRenderer: p.webglRenderer,
156
- hardwareConcurrency: fp?.hardwareConcurrency ?? null,
157
- deviceMemory: fp?.deviceMemory ?? null,
158
- maxTouchPoints: fp?.maxTouchPoints ?? null,
159
- screen: fp?.screen ?? null,
105
+ languages: Array.isArray(languages) ? languages : null,
106
+ hardwareConcurrency: fingerprint?.hardwareConcurrency ?? null,
107
+ deviceMemory: fingerprint?.deviceMemory ?? null,
108
+ maxTouchPoints: fingerprint?.maxTouchPoints ?? null,
109
+ screen: fingerprint?.screen ?? null,
160
110
  })};
161
111
  try {
162
- Object.defineProperty(navigator, 'webdriver', { get: () => undefined });
163
- } catch {}
164
- try {
165
- Object.defineProperty(navigator, 'languages', { get: () => profile.languages.slice() });
112
+ if (Array.isArray(profile.languages) && profile.languages.length) {
113
+ Object.defineProperty(navigator, 'languages', { get: () => profile.languages.slice() });
114
+ }
166
115
  } catch {}
167
116
  try {
168
117
  if (typeof profile.hardwareConcurrency === 'number') {
@@ -189,242 +138,42 @@ function buildStealthInitScript(overrides = {}) {
189
138
  }
190
139
  }
191
140
  } catch {}
192
- try {
193
- Object.defineProperty(navigator, 'plugins', {
194
- get: () => {
195
- const plugins = [
196
- { name: 'Chrome PDF Plugin', filename: 'internal-pdf-viewer', description: 'Portable Document Format' },
197
- { name: 'Chrome PDF Viewer', filename: 'mhjfbmdgcfjbbpaeojofohoefgiehjai', description: '' },
198
- { name: 'Native Client', filename: 'internal-nacl-plugin', description: '' },
199
- ];
200
- plugins.length = 3;
201
- return plugins;
202
- }
203
- });
204
- } catch {}
205
- try {
206
- const _origQuery = window.navigator.permissions.query.bind(window.navigator.permissions);
207
- window.navigator.permissions.query = (parameters) =>
208
- parameters && parameters.name === 'notifications'
209
- ? Promise.resolve({ state: Notification.permission })
210
- : _origQuery(parameters);
211
- } catch {}
212
- try {
213
- if (!window.chrome) window.chrome = {};
214
- if (!window.chrome.runtime) window.chrome.runtime = {};
215
- window.chrome.runtime.connect = window.chrome.runtime.connect || function() {};
216
- window.chrome.runtime.sendMessage = window.chrome.runtime.sendMessage || function() {};
217
- } catch {}
218
- try {
219
- const patch = (Proto) => {
220
- if (!Proto || !Proto.prototype || !Proto.prototype.getParameter) return;
221
- const orig = Proto.prototype.getParameter;
222
- Proto.prototype.getParameter = function(parameter) {
223
- // UNMASKED_VENDOR_WEBGL / UNMASKED_RENDERER_WEBGL
224
- if (parameter === 37445) return profile.webglVendor;
225
- if (parameter === 37446) return profile.webglRenderer;
226
- return orig.call(this, parameter);
227
- };
228
- };
229
- patch(WebGLRenderingContext);
230
- if (typeof WebGL2RenderingContext !== 'undefined') patch(WebGL2RenderingContext);
231
- } catch {}
232
141
  })();
233
142
  `;
234
143
  }
235
144
 
236
- function normalizeChromeVersion(browserVersion) {
237
- const raw = String(browserVersion || "131.0.0.0");
238
- // Playwright returns "131.0.6778.33" or sometimes "Chrome/131.0.6778.33"
239
- const m = raw.match(/(\d+\.\d+\.\d+\.\d+|\d+\.\d+\.\d+)/);
240
- return m ? m[1] : "131.0.0.0";
241
- }
242
-
243
- function getStealthUserAgent(browserVersion) {
244
- const ver = normalizeChromeVersion(browserVersion);
245
- const { uaPlatform } = getStealthPlatformProfile();
246
- return `Mozilla/5.0 (${uaPlatform}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/${ver} Safari/537.36`;
247
- }
248
-
249
- function wrapBrowserWithStealth(browser) {
250
- const origNewContext = browser.newContext.bind(browser);
251
- browser.newContext = async function (options = {}) {
252
- // Fix HeadlessChrome in User-Agent — Google detects this server-side
253
- if (!options.userAgent) {
254
- let ver = "131.0.0.0";
255
- try {
256
- ver = typeof browser.version === "function" ? browser.version() : ver;
257
- } catch {
258
- /* ignore */
259
- }
260
- options.userAgent = getStealthUserAgent(ver);
261
- }
262
- // Default en-US; CodeBuddy CN / other regional flows pass locale+languages explicitly.
263
- if (!options.locale) options.locale = "en-US";
264
- // Keep navigator.languages aligned with context locale (mismatch is a common bot signal).
265
- let languages = options.languages;
266
- if (!Array.isArray(languages) || !languages.length) {
267
- if (String(options.locale).toLowerCase().startsWith("zh")) {
268
- languages = ["zh-CN", "zh", "en-US", "en"];
269
- } else {
270
- languages = ["en-US", "en"];
271
- }
272
- }
273
- // `fingerprint` / `languages` are ours — strip before Playwright newContext.
274
- const { languages: _drop, fingerprint, ...pwOptions } = { ...options, languages };
275
- const stealthScript = buildStealthInitScript({ languages, fingerprint });
276
- const ctx = await origNewContext(pwOptions);
277
- await ctx.addInitScript(stealthScript);
278
- return ctx;
279
- };
280
- return browser;
281
- }
282
-
283
145
  /**
284
- * Headed Chromium needs a display on Linux VPS.
285
- * Auto-start Xvfb via displayEnv when available.
146
+ * Strip non-Playwright keys from newContext options and attach fingerprint init.
147
+ * CloakBrowser is Playwright-compatible `languages` / `fingerprint` are ours only.
148
+ *
149
+ * @param {import('playwright-core').Browser} browser
150
+ * @param {object} options
286
151
  */
287
- async function ensureHeadedDisplayOrThrow() {
288
- const { ensureDisplayForHeadedBrowser } = await import("./displayEnv.js");
289
- const display = ensureDisplayForHeadedBrowser();
290
- if (!display.ok) {
291
- const err = display.error || new Error("No display for headed browser");
292
- err.code = err.code || "NO_DISPLAY";
293
- throw err;
294
- }
295
- return display;
296
- }
297
-
298
- async function launchChromium({ proxyUrl, headless = true, windowSize = null } = {}) {
299
- const wantHeadless = headless !== false;
300
- if (!wantHeadless) {
301
- await ensureHeadedDisplayOrThrow();
302
- }
303
-
304
- // Prefer runtime helper first — under Next/webpack, dynamic import("playwright")
305
- // often fails even when ~/.zevai/runtime has the package (Kiro mass-fail).
306
- let chromium = null;
307
- let importErr = null;
308
- const runtime = loadPlaywrightRuntime();
309
- if (runtime?.ensurePlaywrightRuntime) {
310
- const ready = runtime.ensurePlaywrightRuntime({ silent: false });
311
- if (ready.ok) {
312
- const mod = ready.module || runtime.loadPlaywrightModule?.() || runtime.tryRequirePlaywright?.();
313
- chromium = mod?.chromium ?? null;
314
- } else if (ready.error) {
315
- importErr = ready.error;
316
- }
317
- }
318
- if (!chromium) {
152
+ export async function newStealthContext(browser, options = {}) {
153
+ const {
154
+ languages,
155
+ fingerprint,
156
+ ...pwOptions
157
+ } = options || {};
158
+ const context = await browser.newContext(pwOptions);
159
+ if (
160
+ (Array.isArray(languages) && languages.length) ||
161
+ (fingerprint && typeof fingerprint === "object")
162
+ ) {
319
163
  try {
320
- chromium = await importPlaywright();
321
- } catch (err) {
322
- importErr = err;
323
- }
324
- }
325
-
326
- if (!chromium) {
327
- const friendly = new Error(
328
- `Playwright is not installed. Run "npm install -g playwright && npx playwright install chromium" or restart the bulk import to auto-install.`
329
- );
330
- friendly.code = "PLAYWRIGHT_PACKAGE_MISSING";
331
- friendly.cause = importErr;
332
- throw friendly;
333
- }
334
-
335
- const width = windowSize?.width || (wantHeadless ? 1920 : 900);
336
- const height = windowSize?.height || (wantHeadless ? 1080 : 700);
337
- // Force bundled Chromium — never Google Chrome channel (/opt/google/chrome),
338
- // which is missing on most VPS and caused "distribution 'chrome' is not found".
339
- const options = {
340
- headless: wantHeadless,
341
- channel: undefined,
342
- args: [
343
- "--disable-blink-features=AutomationControlled",
344
- "--disable-features=IsolateOrigins,site-per-process,AutomationControlled",
345
- "--disable-infobars",
346
- "--no-first-run",
347
- "--no-default-browser-check",
348
- "--disable-extensions",
349
- "--disable-popup-blocking",
350
- "--disable-backgrounding-occluded-windows",
351
- "--disable-renderer-backgrounding",
352
- "--disable-background-timer-throttling",
353
- "--disable-ipc-flooding-protection",
354
- "--password-store=basic",
355
- "--use-mock-keychain",
356
- `--window-size=${width},${height}`,
357
- ...(wantHeadless ? [] : ["--window-position=80,80"]),
358
- ],
359
- ignoreDefaultArgs: ["--enable-automation"],
360
- };
361
- // Explicit bundled Chromium path when it exists (avoids channel=chrome hijack)
362
- try {
363
- const { existsSync } = await import("node:fs");
364
- const exePath = typeof chromium.executablePath === "function" ? chromium.executablePath() : null;
365
- if (exePath && existsSync(exePath)) options.executablePath = exePath;
366
- } catch {
367
- // ignore
368
- }
369
- let effectiveProxy = proxyUrl;
370
- let socksBridge = null;
371
- if (proxyUrl) {
372
- const { ensureSocksHttpBridge, isSocksProxyUrl } = await import("./socksHttpBridge.js");
373
- if (isSocksProxyUrl(proxyUrl)) {
374
- socksBridge = await ensureSocksHttpBridge(proxyUrl);
375
- if (socksBridge?.httpProxyUrl) effectiveProxy = socksBridge.httpProxyUrl;
376
- }
377
- const { parsePlaywrightProxy } = await import("./proxyUtils.js");
378
- options.proxy = parsePlaywrightProxy(effectiveProxy) || { server: effectiveProxy };
379
- }
380
-
381
- let bridgeOwnedByBrowser = false;
382
- const wrapLaunchedBrowser = (browser) => {
383
- if (socksBridge) {
384
- bridgeOwnedByBrowser = true;
385
- const close = browser.close.bind(browser);
386
- browser.close = async () => {
387
- try {
388
- return await close();
389
- } finally {
390
- await socksBridge.release();
391
- }
392
- };
393
- }
394
- return wrapBrowserWithStealth(browser);
395
- };
396
-
397
- try {
398
- const browser = await chromium.launch(options);
399
- return wrapLaunchedBrowser(browser);
400
- } catch (error) {
401
- const msg = String(error?.message || error || "");
402
- if (!wantHeadless && /XServer|DISPLAY|Missing X server|headed browser|no DISPLAY/i.test(msg)) {
403
- await ensureHeadedDisplayOrThrow();
404
- const browser = await chromium.launch(options);
405
- return wrapLaunchedBrowser(browser);
406
- }
407
- // Retry without executablePath if channel/chrome confusion remains
408
- if (/distribution ['\"]chrome['\"]|Executable doesn't exist|chrome-headless-shell/i.test(msg)) {
409
- try {
410
- const retryOpts = { ...options };
411
- delete retryOpts.channel;
412
- delete retryOpts.executablePath;
413
- const browser = await chromium.launch(retryOpts);
414
- return wrapLaunchedBrowser(browser);
415
- } catch {
416
- // fall through
417
- }
164
+ await context.addInitScript(
165
+ buildFingerprintInitScript({ languages, fingerprint }),
166
+ );
167
+ } catch {
168
+ // older drivers may not support addInitScript
418
169
  }
419
- if (!bridgeOwnedByBrowser) await socksBridge?.release();
420
- throw error;
421
170
  }
171
+ return context;
422
172
  }
423
173
 
424
174
  /**
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.
175
+ * CloakBrowser — sole bulk-import engine (patched stealth Chromium).
176
+ * Prefer headed (headless=false); Turnstile / Google bot checks often fail headless.
428
177
  * Auto-installs into ~/.zevai/runtime via cloakbrowserRuntime.
429
178
  */
430
179
  async function launchCloakbrowser({ proxyUrl, headless = false, windowSize = null } = {}) {
@@ -433,7 +182,6 @@ async function launchCloakbrowser({ proxyUrl, headless = false, windowSize = nul
433
182
  const runtime = loadRuntimeHelper("cloakbrowserRuntime");
434
183
  let cloak = null;
435
184
  if (runtime?.ensureCloakbrowserRuntime) {
436
- // Also installs mmdb-lib (required when geoip: true for proxy timezone match)
437
185
  const ready = runtime.ensureCloakbrowserRuntime({ silent: false });
438
186
  if (!ready.ok && ready.error) throw ready.error;
439
187
  cloak = ready.module || runtime.loadCloakbrowserModule?.();
@@ -444,7 +192,7 @@ async function launchCloakbrowser({ proxyUrl, headless = false, windowSize = nul
444
192
  cloak = mod?.default || mod;
445
193
  } catch (err) {
446
194
  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`,
195
+ `cloakbrowser is not installed. Bulk import will auto-install on next run, or run: cd ~/.zevai/runtime && npm install cloakbrowser mmdb-lib playwright-core`,
448
196
  );
449
197
  friendly.code = "CLOAKBROWSER_PACKAGE_MISSING";
450
198
  friendly.cause = err;
@@ -457,11 +205,10 @@ async function launchCloakbrowser({ proxyUrl, headless = false, windowSize = nul
457
205
  throw err;
458
206
  }
459
207
 
460
- let useHeadless = headless === true; // default headed for Turnstile
208
+ let useHeadless = headless === true;
461
209
  if (!useHeadless) {
462
210
  const display = ensureDisplayForHeadedBrowser();
463
211
  if (!display.ok) {
464
- // Prefer failing with install steps over silent headless Turnstile failure
465
212
  throw display.error;
466
213
  }
467
214
  }
@@ -471,8 +218,7 @@ async function launchCloakbrowser({ proxyUrl, headless = false, windowSize = nul
471
218
  humanize: true,
472
219
  };
473
220
  if (proxyUrl) {
474
- // CloakBrowser docs: string or { server, username, password }; geoip aligns
475
- // timezone/locale to proxy IP (critical for Turnstile / abusive-pattern checks).
221
+ // geoip aligns timezone/locale to proxy IP (Turnstile / abusive-pattern checks).
476
222
  launchOpts.proxy = proxyUrl;
477
223
  launchOpts.geoip = true;
478
224
  }
@@ -481,10 +227,8 @@ async function launchCloakbrowser({ proxyUrl, headless = false, windowSize = nul
481
227
  }
482
228
 
483
229
  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;
230
+ // Do not wrap with stock stealth scripts — CloakBrowser patches at binary level.
231
+ return await cloak.launch(launchOpts);
488
232
  } catch (error) {
489
233
  const msg = String(error?.message || error || "");
490
234
  if (!useHeadless && /XServer|DISPLAY|Missing X server|headed browser|no DISPLAY/i.test(msg)) {
@@ -495,7 +239,7 @@ async function launchCloakbrowser({ proxyUrl, headless = false, windowSize = nul
495
239
  const friendly = new Error(
496
240
  `${msg}\n\nVPS has no display. Install a virtual screen then retry:\n` +
497
241
  ` sudo apt-get update && sudo apt-get install -y xvfb\n` +
498
- ` sudo systemctl restart zevairouter # or restart zevai\n` +
242
+ ` sudo systemctl restart zevairouter\n` +
499
243
  `ZevaiRouter auto-starts Xvfb when installed.`,
500
244
  );
501
245
  friendly.code = "NO_DISPLAY";
@@ -506,32 +250,35 @@ async function launchCloakbrowser({ proxyUrl, headless = false, windowSize = nul
506
250
  }
507
251
  }
508
252
 
253
+ /**
254
+ * Launch the automation browser (CloakBrowser only).
255
+ * @param {object} [opts]
256
+ * @param {string} [opts.engine] ignored (always cloakbrowser; kept for API compat)
257
+ * @param {string|null} [opts.proxyUrl]
258
+ * @param {boolean} [opts.headless] default false (headed — Turnstile/Google)
259
+ * @param {{width:number,height:number}|null} [opts.windowSize]
260
+ */
509
261
  export async function launchBulkImportBrowser({
510
262
  engine = DEFAULT_BULK_IMPORT_ENGINE,
511
263
  proxyUrl,
512
- headless = true,
264
+ headless = false,
513
265
  windowSize = null,
514
266
  } = {}) {
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
- }
524
- return launchChromium({ proxyUrl, headless, windowSize });
267
+ // engine arg kept for API compatibility; always cloakbrowser.
268
+ void normalizeBulkImportEngine(engine);
269
+ return launchCloakbrowser({
270
+ proxyUrl,
271
+ headless: headless === true,
272
+ windowSize,
273
+ });
525
274
  }
526
275
 
527
- export function makeBrowserLauncher({ engine, proxyUrl, headless = true, windowSize = null } = {}) {
276
+ export function makeBrowserLauncher({ engine, proxyUrl, headless = false, windowSize = null } = {}) {
528
277
  return () => launchBulkImportBrowser({ engine, proxyUrl, headless, windowSize });
529
278
  }
530
279
 
531
280
  /**
532
- * Force-close a Playwright Chromium browser. Graceful close can hang forever when
533
- * the browser is stuck on a blackholed proxy / spinning renderer — on a 2GB VPS
534
- * that pins CPU until reboot. Always race close() with a kill of the process tree.
281
+ * Force-close browser. Graceful close can hang on blackholed proxy / spinning renderer.
535
282
  */
536
283
  export async function forceCloseBrowser(browser, { timeoutMs = 4_000 } = {}) {
537
284
  if (!browser) return;
@@ -556,11 +303,9 @@ export async function forceCloseBrowser(browser, { timeoutMs = 4_000 } = {}) {
556
303
  }
557
304
 
558
305
  if (pid && Number.isFinite(pid) && pid > 1) {
559
- // Still alive? SIGTERM then SIGKILL. Also try process-group kill (negative pid)
560
- // so Chromium helper children die with the parent.
561
306
  for (const signal of ["SIGTERM", "SIGKILL"]) {
562
307
  try {
563
- process.kill(pid, 0); // throws ESRCH if gone
308
+ process.kill(pid, 0);
564
309
  } catch {
565
310
  break;
566
311
  }
@@ -572,7 +317,7 @@ export async function forceCloseBrowser(browser, { timeoutMs = 4_000 } = {}) {
572
317
  try {
573
318
  process.kill(-pid, signal);
574
319
  } catch {
575
- // ignore (no process group / permission)
320
+ // ignore
576
321
  }
577
322
  if (signal === "SIGTERM") {
578
323
  await new Promise((r) => setTimeout(r, 400));
@@ -255,21 +255,12 @@ async function defaultSaveCloudflareAiConnection({ apiKey, accountId, email, acc
255
255
  }
256
256
 
257
257
  async function defaultBrowserLauncher(job) {
258
- const { launchBulkImportBrowser, normalizeBulkImportEngine } = await import(
259
- "./bulkImportBrowserEngine.js"
260
- );
261
- // Cloudflare Turnstile on dash.cloudflare.com routinely blocks plain Playwright
262
- // Chromium. CloakBrowser (patched Chromium) is the engine that used to pass it.
263
- const engine = normalizeBulkImportEngine(
264
- job?.engine || process.env.ZEVAI_CLOUDFLARE_ENGINE || "cloakbrowser",
265
- );
258
+ const { launchBulkImportBrowser } = await import("./bulkImportBrowserEngine.js");
259
+ // All automation uses CloakBrowser (stock Chromium dropped). Headed by default.
266
260
  const envHeadless = process.env.ZEVAI_CLOUDFLARE_HEADLESS ?? process.env.ZEVAI_KIRO_HEADLESS;
267
- let headless;
268
- if (envHeadless === "1" || envHeadless === "true") headless = true;
269
- else if (envHeadless === "0" || envHeadless === "false") headless = false;
270
- else headless = false; // headed — Turnstile fails headless almost always
261
+ const headless = envHeadless === "1" || envHeadless === "true";
271
262
  return launchBulkImportBrowser({
272
- engine,
263
+ engine: job?.engine || "cloakbrowser",
273
264
  headless,
274
265
  windowSize: { width: 1280, height: 900 },
275
266
  });
@@ -162,9 +162,7 @@ export class CodeBuddyCnBulkImportManager extends KiroBulkImportManager {
162
162
  pollIntervalMs = CODEBUDDY_CN_CONFIG.pollInterval,
163
163
  storageName = "codebuddy-cn-bulk-import",
164
164
  } = {}) {
165
- // Chromium needs proxy on browser launch (not context-only).
166
- // Linux VPS: default headless to cut RAM/CPU (2GB boxes OOM on headed+Xvfb).
167
- // Desktop (macOS/Windows): headed so the operator can watch / solve captcha.
165
+ // CloakBrowser-only: proxy on launch + geoip. Headed by default (Turnstile/Tencent).
168
166
  // Override: ZEVAI_CN_HEADLESS=0|1
169
167
  const cnBrowserLauncher = browserLauncher || (async (job) => {
170
168
  const { launchBulkImportBrowser } = await import("./bulkImportBrowserEngine.js");
@@ -172,13 +170,14 @@ export class CodeBuddyCnBulkImportManager extends KiroBulkImportManager {
172
170
  ? job.proxyUrls[0]
173
171
  : null;
174
172
  const envHeadless = process.env.ZEVAI_CN_HEADLESS;
175
- let headless = process.platform === "linux";
173
+ let headless = false;
176
174
  if (envHeadless === "0" || envHeadless === "false") headless = false;
177
175
  if (envHeadless === "1" || envHeadless === "true") headless = true;
178
176
  return launchBulkImportBrowser({
177
+ engine: job?.engine || "cloakbrowser",
179
178
  proxyUrl,
180
179
  headless,
181
- windowSize: { width: 900, height: 700 },
180
+ windowSize: { width: 1280, height: 900 },
182
181
  });
183
182
  });
184
183
  super({ browserLauncher: cnBrowserLauncher, storageName });
@@ -354,11 +353,10 @@ export class CodeBuddyCnBulkImportManager extends KiroBulkImportManager {
354
353
  // Step 2: Create browser context FIRST — if proxy/browser fails, we never buy a number.
355
354
  this.setAccountStep(account, "creating_browser", "Creating browser context (before 5sim order)");
356
355
  await this.persistJobSnapshot(job, { forcePreview: true });
357
- // Chromium-only stack: use zh-CN locale + HK/CN timezone so Tencent risk
356
+ // CloakBrowser stack: zh-CN locale + HK/CN timezone so Tencent risk
358
357
  // scoring does not see EN-US browser on residential CN/HK egress (common
359
- // cause of 账号访问受限 right after OTP). Engine stays Playwright Chromium.
360
- // Also apply a unique per-account fingerprint seed sticky residential IP
361
- // alone still clusters if every session shares the same 900x700 + HW profile.
358
+ // cause of 账号访问受限 right after OTP). Per-account fingerprint seed
359
+ // sticky residential IP alone still clusters if every session shares HW.
362
360
  if (!account.fingerprintSeed) account.fingerprintSeed = randomUUID();
363
361
  const freshContext = await createFreshContext(job.browser, account.proxyUrl, {
364
362
  profile: "codebuddy-cn",
@@ -122,7 +122,7 @@ const IFRAME_ERROR_SELECTORS = [
122
122
  * Run the phone-number registration automation.
123
123
  *
124
124
  * @param {object} opts
125
- * @param {import('playwright').Page} opts.page Playwright page (from createFreshContext)
125
+ * @param {import('playwright-core').Page} opts.page Browser page (from createFreshContext)
126
126
  * @param {string} [opts.phone] Pre-ordered phone (legacy). Prefer resolvePhone.
127
127
  * @param {function} [opts.resolvePhone] async () => phone — called ONLY after login form
128
128
  * is ready so 5sim is not billed if proxy/nav fails.