zevairouter 1.0.35 → 1.0.37

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 (1058) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/cli/app/.next-cli-build/BUILD_ID +1 -1
  3. package/cli/app/.next-cli-build/app-path-routes-manifest.json +8 -1
  4. package/cli/app/.next-cli-build/build-manifest.json +2 -2
  5. package/cli/app/.next-cli-build/prerender-manifest.json +3 -3
  6. package/cli/app/.next-cli-build/routes-manifest.json +49 -0
  7. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/automation/page.js +2 -2
  8. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/automation/page.js.nft.json +1 -1
  9. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/automation/page_client-reference-manifest.js +1 -1
  10. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js +2 -2
  11. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -1
  12. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  13. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +2 -2
  14. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
  15. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  16. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js +2 -2
  17. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  18. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  19. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js +2 -2
  20. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
  21. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  22. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js +2 -2
  23. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
  24. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  25. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/context/page.js +2 -2
  26. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/context/page.js.nft.json +1 -1
  27. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/context/page_client-reference-manifest.js +1 -1
  28. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js +2 -2
  29. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  30. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  31. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js +2 -2
  32. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js.nft.json +1 -1
  33. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  34. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js +2 -2
  35. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js.nft.json +1 -1
  36. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  37. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js +2 -2
  38. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js.nft.json +1 -1
  39. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  40. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js +2 -2
  41. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js.nft.json +1 -1
  42. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  43. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js +2 -2
  44. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -1
  45. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  46. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js +2 -2
  47. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  48. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  49. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js +2 -2
  50. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
  51. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  52. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js +3 -3
  53. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
  54. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  55. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js +2 -2
  56. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
  57. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  58. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js +2 -2
  59. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
  60. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  61. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js +3 -3
  62. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
  63. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  64. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js +2 -2
  65. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
  66. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  67. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js +2 -2
  68. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
  69. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  70. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js +2 -2
  71. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
  72. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  73. package/cli/app/.next-cli-build/server/app/_global-error/page.js +3 -3
  74. package/cli/app/.next-cli-build/server/app/_global-error/page.js.nft.json +1 -1
  75. package/cli/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  76. package/cli/app/.next-cli-build/server/app/_global-error.html +1 -1
  77. package/cli/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  78. package/cli/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  79. package/cli/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  80. package/cli/app/.next-cli-build/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  81. package/cli/app/.next-cli-build/server/app/_global-error.segments/_head.segment.rsc +1 -1
  82. package/cli/app/.next-cli-build/server/app/_global-error.segments/_index.segment.rsc +1 -1
  83. package/cli/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  84. package/cli/app/.next-cli-build/server/app/_not-found/page.js +2 -2
  85. package/cli/app/.next-cli-build/server/app/_not-found/page.js.nft.json +1 -1
  86. package/cli/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  87. package/cli/app/.next-cli-build/server/app/_not-found.html +1 -1
  88. package/cli/app/.next-cli-build/server/app/_not-found.rsc +4 -4
  89. package/cli/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +4 -4
  90. package/cli/app/.next-cli-build/server/app/_not-found.segments/_head.segment.rsc +1 -1
  91. package/cli/app/.next-cli-build/server/app/_not-found.segments/_index.segment.rsc +4 -4
  92. package/cli/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  93. package/cli/app/.next-cli-build/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  94. package/cli/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  95. package/cli/app/.next-cli-build/server/app/api/auth/login/route.js +1 -1
  96. package/cli/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
  97. package/cli/app/.next-cli-build/server/app/api/auth/logout/route.js +1 -1
  98. package/cli/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
  99. package/cli/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js +1 -1
  100. package/cli/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
  101. package/cli/app/.next-cli-build/server/app/api/auth/oidc/start/route.js +1 -1
  102. package/cli/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
  103. package/cli/app/.next-cli-build/server/app/api/auth/oidc/test/route.js +1 -1
  104. package/cli/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
  105. package/cli/app/.next-cli-build/server/app/api/auth/status/route.js +1 -1
  106. package/cli/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
  107. package/cli/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js +4 -4
  108. package/cli/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
  109. package/cli/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
  110. package/cli/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  111. package/cli/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js +1 -1
  112. package/cli/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
  113. package/cli/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js +2 -2
  114. package/cli/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
  115. package/cli/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js +1 -1
  116. package/cli/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js.nft.json +1 -1
  117. package/cli/app/.next-cli-build/server/app/api/cli-tools/codex-gateway/accounts/route.js +1 -1
  118. package/cli/app/.next-cli-build/server/app/api/cli-tools/codex-gateway/accounts/route.js.nft.json +1 -1
  119. package/cli/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js +1 -1
  120. package/cli/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
  121. package/cli/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js +2 -2
  122. package/cli/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
  123. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js +2 -2
  124. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js.nft.json +1 -1
  125. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js +2 -2
  126. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js.nft.json +1 -1
  127. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js +1 -1
  128. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
  129. package/cli/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js +2 -2
  130. package/cli/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js.nft.json +1 -1
  131. package/cli/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js +2 -2
  132. package/cli/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
  133. package/cli/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js +3 -3
  134. package/cli/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js.nft.json +1 -1
  135. package/cli/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js +2 -2
  136. package/cli/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js.nft.json +1 -1
  137. package/cli/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js +2 -2
  138. package/cli/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js.nft.json +1 -1
  139. package/cli/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
  140. package/cli/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
  141. package/cli/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js +2 -2
  142. package/cli/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js.nft.json +1 -1
  143. package/cli/app/.next-cli-build/server/app/api/combos/[id]/route.js +1 -1
  144. package/cli/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
  145. package/cli/app/.next-cli-build/server/app/api/combos/route.js +1 -1
  146. package/cli/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
  147. package/cli/app/.next-cli-build/server/app/api/context/[id]/route.js +1 -1
  148. package/cli/app/.next-cli-build/server/app/api/context/[id]/route.js.nft.json +1 -1
  149. package/cli/app/.next-cli-build/server/app/api/context/bulk/route.js +1 -1
  150. package/cli/app/.next-cli-build/server/app/api/context/bulk/route.js.nft.json +1 -1
  151. package/cli/app/.next-cli-build/server/app/api/context/route.js +1 -1
  152. package/cli/app/.next-cli-build/server/app/api/context/route.js.nft.json +1 -1
  153. package/cli/app/.next-cli-build/server/app/api/health/route.js +1 -1
  154. package/cli/app/.next-cli-build/server/app/api/health/route.js.nft.json +1 -1
  155. package/cli/app/.next-cli-build/server/app/api/init/route.js +1 -1
  156. package/cli/app/.next-cli-build/server/app/api/init/route.js.nft.json +1 -1
  157. package/cli/app/.next-cli-build/server/app/api/keys/[id]/route.js +1 -1
  158. package/cli/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
  159. package/cli/app/.next-cli-build/server/app/api/keys/route.js +1 -1
  160. package/cli/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
  161. package/cli/app/.next-cli-build/server/app/api/locale/route.js +1 -1
  162. package/cli/app/.next-cli-build/server/app/api/locale/route.js.nft.json +1 -1
  163. package/cli/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js +2 -2
  164. package/cli/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
  165. package/cli/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js +2 -2
  166. package/cli/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
  167. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js +1 -1
  168. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
  169. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js +1 -1
  170. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
  171. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js +1 -1
  172. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
  173. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js +1 -1
  174. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
  175. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js +1 -1
  176. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -1
  177. package/cli/app/.next-cli-build/server/app/api/models/alias/route.js +1 -1
  178. package/cli/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
  179. package/cli/app/.next-cli-build/server/app/api/models/availability/route.js +1 -1
  180. package/cli/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
  181. package/cli/app/.next-cli-build/server/app/api/models/custom/route.js +1 -1
  182. package/cli/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
  183. package/cli/app/.next-cli-build/server/app/api/models/disabled/route.js +1 -1
  184. package/cli/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
  185. package/cli/app/.next-cli-build/server/app/api/models/route.js +1 -1
  186. package/cli/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
  187. package/cli/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
  188. package/cli/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
  189. package/cli/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js +1 -1
  190. package/cli/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  191. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/cancel/route.js +1 -1
  192. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  193. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/manual/[workerId]/route.js +1 -1
  194. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  195. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/route.js +1 -1
  196. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/route.js.nft.json +1 -1
  197. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/latest/route.js +1 -1
  198. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/latest/route.js.nft.json +1 -1
  199. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/route.js +1 -1
  200. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/route.js.nft.json +1 -1
  201. package/cli/app/.next-cli-build/server/app/api/oauth/autoclaw/bulk-import/[jobId]/cancel/route.js +1 -1
  202. package/cli/app/.next-cli-build/server/app/api/oauth/autoclaw/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  203. package/cli/app/.next-cli-build/server/app/api/oauth/autoclaw/bulk-import/[jobId]/manual/[workerId]/route.js +1 -1
  204. package/cli/app/.next-cli-build/server/app/api/oauth/autoclaw/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  205. package/cli/app/.next-cli-build/server/app/api/oauth/autoclaw/bulk-import/[jobId]/route.js +1 -1
  206. package/cli/app/.next-cli-build/server/app/api/oauth/autoclaw/bulk-import/[jobId]/route.js.nft.json +1 -1
  207. package/cli/app/.next-cli-build/server/app/api/oauth/autoclaw/bulk-import/latest/route.js +1 -1
  208. package/cli/app/.next-cli-build/server/app/api/oauth/autoclaw/bulk-import/latest/route.js.nft.json +1 -1
  209. package/cli/app/.next-cli-build/server/app/api/oauth/autoclaw/bulk-import/route.js +1 -1
  210. package/cli/app/.next-cli-build/server/app/api/oauth/autoclaw/bulk-import/route.js.nft.json +1 -1
  211. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/cancel/route.js +1 -1
  212. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  213. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/manual/[workerId]/route.js +1 -1
  214. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  215. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/route.js +1 -1
  216. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/route.js.nft.json +1 -1
  217. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/latest/route.js +1 -1
  218. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/latest/route.js.nft.json +1 -1
  219. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/route.js +1 -1
  220. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/route.js.nft.json +1 -1
  221. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-token/route.js +1 -1
  222. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-token/route.js.nft.json +1 -1
  223. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/quota-cookie/route.js +1 -1
  224. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/quota-cookie/route.js.nft.json +1 -1
  225. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/cancel/route.js +1 -0
  226. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/cancel/route.js.nft.json +1 -0
  227. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/cancel/route_client-reference-manifest.js +1 -0
  228. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/manual/[workerId]/route.js +1 -0
  229. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -0
  230. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/manual/[workerId]/route_client-reference-manifest.js +1 -0
  231. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/route.js +1 -0
  232. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/route.js.nft.json +1 -0
  233. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/route_client-reference-manifest.js +1 -0
  234. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/latest/route.js +1 -0
  235. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/latest/route.js.nft.json +1 -0
  236. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/latest/route_client-reference-manifest.js +1 -0
  237. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/route.js +1 -0
  238. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/route.js.nft.json +1 -0
  239. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/route_client-reference-manifest.js +1 -0
  240. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-token/route.js +1 -0
  241. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-token/route.js.nft.json +1 -0
  242. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-token/route_client-reference-manifest.js +1 -0
  243. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/quota-cookie/route.js +1 -0
  244. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/quota-cookie/route.js.nft.json +1 -0
  245. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/quota-cookie/route_client-reference-manifest.js +1 -0
  246. package/cli/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js +1 -1
  247. package/cli/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
  248. package/cli/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js +2 -2
  249. package/cli/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
  250. package/cli/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js +1 -1
  251. package/cli/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  252. package/cli/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js +1 -1
  253. package/cli/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
  254. package/cli/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js +1 -1
  255. package/cli/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
  256. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route.js +1 -1
  257. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -1
  258. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/cancel/route.js +1 -1
  259. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  260. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/manual/[workerId]/route.js +1 -1
  261. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  262. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/route.js +1 -1
  263. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/route.js.nft.json +1 -1
  264. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/latest/route.js +1 -1
  265. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/latest/route.js.nft.json +1 -1
  266. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/route.js +1 -1
  267. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/route.js.nft.json +1 -1
  268. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js +1 -1
  269. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  270. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js +1 -1
  271. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +1 -1
  272. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js +1 -1
  273. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  274. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/cancel/route.js +1 -1
  275. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  276. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/manual/[workerId]/route.js +1 -1
  277. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  278. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/route.js +1 -1
  279. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/route.js.nft.json +1 -1
  280. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/latest/route.js +1 -1
  281. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/latest/route.js.nft.json +1 -1
  282. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/route.js +1 -1
  283. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/route.js.nft.json +1 -1
  284. package/cli/app/.next-cli-build/server/app/api/pricing/route.js +1 -1
  285. package/cli/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
  286. package/cli/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js +1 -1
  287. package/cli/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  288. package/cli/app/.next-cli-build/server/app/api/provider-nodes/route.js +1 -1
  289. package/cli/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
  290. package/cli/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js +1 -1
  291. package/cli/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js.nft.json +1 -1
  292. package/cli/app/.next-cli-build/server/app/api/providers/[id]/models/route.js +1 -1
  293. package/cli/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  294. package/cli/app/.next-cli-build/server/app/api/providers/[id]/route.js +1 -1
  295. package/cli/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
  296. package/cli/app/.next-cli-build/server/app/api/providers/[id]/test/route.js +1 -1
  297. package/cli/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  298. package/cli/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
  299. package/cli/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  300. package/cli/app/.next-cli-build/server/app/api/providers/bulk-delete/route.js +1 -1
  301. package/cli/app/.next-cli-build/server/app/api/providers/bulk-delete/route.js.nft.json +1 -1
  302. package/cli/app/.next-cli-build/server/app/api/providers/client/route.js +1 -1
  303. package/cli/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
  304. package/cli/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js +1 -1
  305. package/cli/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js.nft.json +1 -1
  306. package/cli/app/.next-cli-build/server/app/api/providers/route.js +1 -1
  307. package/cli/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
  308. package/cli/app/.next-cli-build/server/app/api/providers/suggested-models/route.js +1 -1
  309. package/cli/app/.next-cli-build/server/app/api/providers/suggested-models/route.js.nft.json +1 -1
  310. package/cli/app/.next-cli-build/server/app/api/providers/test-batch/route.js +1 -1
  311. package/cli/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  312. package/cli/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
  313. package/cli/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
  314. package/cli/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js +1 -1
  315. package/cli/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
  316. package/cli/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js +1 -1
  317. package/cli/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
  318. package/cli/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js +2 -2
  319. package/cli/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
  320. package/cli/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js +2 -2
  321. package/cli/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
  322. package/cli/app/.next-cli-build/server/app/api/proxy-pools/route.js +1 -1
  323. package/cli/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
  324. package/cli/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js +2 -2
  325. package/cli/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
  326. package/cli/app/.next-cli-build/server/app/api/settings/database/route.js +1 -1
  327. package/cli/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
  328. package/cli/app/.next-cli-build/server/app/api/settings/proxy-test/route.js +1 -1
  329. package/cli/app/.next-cli-build/server/app/api/settings/proxy-test/route.js.nft.json +1 -1
  330. package/cli/app/.next-cli-build/server/app/api/settings/require-login/route.js +1 -1
  331. package/cli/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
  332. package/cli/app/.next-cli-build/server/app/api/settings/route.js +1 -1
  333. package/cli/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
  334. package/cli/app/.next-cli-build/server/app/api/shutdown/route.js +1 -1
  335. package/cli/app/.next-cli-build/server/app/api/shutdown/route.js.nft.json +1 -1
  336. package/cli/app/.next-cli-build/server/app/api/tags/route.js +1 -1
  337. package/cli/app/.next-cli-build/server/app/api/tags/route.js.nft.json +1 -1
  338. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
  339. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/route.js.nft.json +1 -1
  340. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +2 -2
  341. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -1
  342. package/cli/app/.next-cli-build/server/app/api/translator/load/route.js +1 -1
  343. package/cli/app/.next-cli-build/server/app/api/translator/load/route.js.nft.json +1 -1
  344. package/cli/app/.next-cli-build/server/app/api/translator/save/route.js +1 -1
  345. package/cli/app/.next-cli-build/server/app/api/translator/save/route.js.nft.json +1 -1
  346. package/cli/app/.next-cli-build/server/app/api/translator/send/route.js +1 -1
  347. package/cli/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
  348. package/cli/app/.next-cli-build/server/app/api/translator/translate/route.js +1 -1
  349. package/cli/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
  350. package/cli/app/.next-cli-build/server/app/api/tunnel/disable/route.js +1 -1
  351. package/cli/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  352. package/cli/app/.next-cli-build/server/app/api/tunnel/enable/route.js +1 -1
  353. package/cli/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  354. package/cli/app/.next-cli-build/server/app/api/tunnel/status/route.js +1 -1
  355. package/cli/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
  356. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js +1 -1
  357. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
  358. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js +1 -1
  359. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
  360. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js +1 -1
  361. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
  362. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js +2 -2
  363. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
  364. package/cli/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js +1 -1
  365. package/cli/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  366. package/cli/app/.next-cli-build/server/app/api/usage/aggregate/route.js +1 -1
  367. package/cli/app/.next-cli-build/server/app/api/usage/aggregate/route.js.nft.json +1 -1
  368. package/cli/app/.next-cli-build/server/app/api/usage/chart/route.js +1 -1
  369. package/cli/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
  370. package/cli/app/.next-cli-build/server/app/api/usage/history/route.js +1 -1
  371. package/cli/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
  372. package/cli/app/.next-cli-build/server/app/api/usage/providers/route.js +1 -1
  373. package/cli/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
  374. package/cli/app/.next-cli-build/server/app/api/usage/request-details/route.js +1 -1
  375. package/cli/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
  376. package/cli/app/.next-cli-build/server/app/api/usage/request-logs/route.js +1 -1
  377. package/cli/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  378. package/cli/app/.next-cli-build/server/app/api/usage/stats/route.js +1 -1
  379. package/cli/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
  380. package/cli/app/.next-cli-build/server/app/api/usage/stream/route.js +2 -2
  381. package/cli/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
  382. package/cli/app/.next-cli-build/server/app/api/v1/api/chat/route.js +1 -1
  383. package/cli/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  384. package/cli/app/.next-cli-build/server/app/api/v1/audio/speech/route.js +1 -1
  385. package/cli/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  386. package/cli/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js +1 -1
  387. package/cli/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  388. package/cli/app/.next-cli-build/server/app/api/v1/audio/voices/route.js +1 -1
  389. package/cli/app/.next-cli-build/server/app/api/v1/audio/voices/route.js.nft.json +1 -1
  390. package/cli/app/.next-cli-build/server/app/api/v1/chat/completions/route.js +1 -1
  391. package/cli/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  392. package/cli/app/.next-cli-build/server/app/api/v1/embeddings/route.js +1 -1
  393. package/cli/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  394. package/cli/app/.next-cli-build/server/app/api/v1/images/generations/route.js +1 -1
  395. package/cli/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  396. package/cli/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js +1 -1
  397. package/cli/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -1
  398. package/cli/app/.next-cli-build/server/app/api/v1/messages/route.js +1 -1
  399. package/cli/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
  400. package/cli/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js +1 -1
  401. package/cli/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
  402. package/cli/app/.next-cli-build/server/app/api/v1/models/info/route.js +1 -1
  403. package/cli/app/.next-cli-build/server/app/api/v1/models/info/route.js.nft.json +1 -1
  404. package/cli/app/.next-cli-build/server/app/api/v1/models/route.js +1 -1
  405. package/cli/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
  406. package/cli/app/.next-cli-build/server/app/api/v1/responses/compact/route.js +1 -1
  407. package/cli/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
  408. package/cli/app/.next-cli-build/server/app/api/v1/responses/route.js +1 -1
  409. package/cli/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
  410. package/cli/app/.next-cli-build/server/app/api/v1/route.js +1 -1
  411. package/cli/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
  412. package/cli/app/.next-cli-build/server/app/api/v1/search/route.js +1 -1
  413. package/cli/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
  414. package/cli/app/.next-cli-build/server/app/api/v1/web/fetch/route.js +1 -1
  415. package/cli/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
  416. package/cli/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js +1 -1
  417. package/cli/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  418. package/cli/app/.next-cli-build/server/app/api/v1beta/models/route.js +1 -1
  419. package/cli/app/.next-cli-build/server/app/api/v1beta/models/route.js.nft.json +1 -1
  420. package/cli/app/.next-cli-build/server/app/api/version/route.js +1 -1
  421. package/cli/app/.next-cli-build/server/app/api/version/route.js.nft.json +1 -1
  422. package/cli/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
  423. package/cli/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
  424. package/cli/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
  425. package/cli/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +1 -1
  426. package/cli/app/.next-cli-build/server/app/callback/page.js +2 -2
  427. package/cli/app/.next-cli-build/server/app/callback/page.js.nft.json +1 -1
  428. package/cli/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  429. package/cli/app/.next-cli-build/server/app/callback.html +1 -1
  430. package/cli/app/.next-cli-build/server/app/callback.rsc +4 -4
  431. package/cli/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +4 -4
  432. package/cli/app/.next-cli-build/server/app/callback.segments/_head.segment.rsc +1 -1
  433. package/cli/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +4 -4
  434. package/cli/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +2 -2
  435. package/cli/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  436. package/cli/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
  437. package/cli/app/.next-cli-build/server/app/dashboard/automation.html +1 -1
  438. package/cli/app/.next-cli-build/server/app/dashboard/automation.rsc +6 -6
  439. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation/__PAGE__.segment.rsc +2 -2
  440. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation.segment.rsc +1 -1
  441. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  442. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  443. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_full.segment.rsc +6 -6
  444. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_head.segment.rsc +1 -1
  445. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_index.segment.rsc +4 -4
  446. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_tree.segment.rsc +2 -2
  447. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
  448. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +6 -6
  449. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
  450. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
  451. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  452. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  453. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +6 -6
  454. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
  455. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_index.segment.rsc +4 -4
  456. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +2 -2
  457. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
  458. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +6 -6
  459. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
  460. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
  461. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  462. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  463. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +6 -6
  464. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
  465. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_index.segment.rsc +4 -4
  466. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +2 -2
  467. package/cli/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
  468. package/cli/app/.next-cli-build/server/app/dashboard/combos.rsc +6 -6
  469. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
  470. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
  471. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  472. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  473. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +6 -6
  474. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
  475. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_index.segment.rsc +4 -4
  476. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +2 -2
  477. package/cli/app/.next-cli-build/server/app/dashboard/context.html +1 -1
  478. package/cli/app/.next-cli-build/server/app/dashboard/context.rsc +6 -6
  479. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard/context/__PAGE__.segment.rsc +2 -2
  480. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard/context.segment.rsc +1 -1
  481. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  482. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  483. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_full.segment.rsc +6 -6
  484. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_head.segment.rsc +1 -1
  485. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_index.segment.rsc +4 -4
  486. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_tree.segment.rsc +2 -2
  487. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
  488. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.rsc +6 -6
  489. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
  490. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
  491. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  492. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  493. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +6 -6
  494. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
  495. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_index.segment.rsc +4 -4
  496. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +2 -2
  497. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
  498. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +6 -6
  499. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
  500. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
  501. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
  502. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  503. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  504. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +6 -6
  505. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
  506. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +4 -4
  507. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +2 -2
  508. package/cli/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
  509. package/cli/app/.next-cli-build/server/app/dashboard/mitm.rsc +6 -6
  510. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
  511. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
  512. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  513. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  514. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +6 -6
  515. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
  516. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_index.segment.rsc +4 -4
  517. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +2 -2
  518. package/cli/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
  519. package/cli/app/.next-cli-build/server/app/dashboard/profile.rsc +6 -6
  520. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
  521. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
  522. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  523. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  524. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +6 -6
  525. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
  526. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_index.segment.rsc +4 -4
  527. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +2 -2
  528. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
  529. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.rsc +6 -6
  530. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
  531. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
  532. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  533. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  534. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  535. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +6 -6
  536. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
  537. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_index.segment.rsc +4 -4
  538. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +2 -2
  539. package/cli/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
  540. package/cli/app/.next-cli-build/server/app/dashboard/providers.rsc +6 -6
  541. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
  542. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  543. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  544. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  545. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +6 -6
  546. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
  547. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_index.segment.rsc +4 -4
  548. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +2 -2
  549. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
  550. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +6 -6
  551. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
  552. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
  553. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  554. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  555. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +6 -6
  556. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
  557. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +4 -4
  558. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +2 -2
  559. package/cli/app/.next-cli-build/server/app/dashboard/quota.html +2 -2
  560. package/cli/app/.next-cli-build/server/app/dashboard/quota.rsc +7 -7
  561. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
  562. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
  563. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  564. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  565. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +7 -7
  566. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
  567. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_index.segment.rsc +4 -4
  568. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +2 -2
  569. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js +2 -2
  570. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js.nft.json +1 -1
  571. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  572. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  573. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +4 -4
  574. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +4 -4
  575. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  576. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +4 -4
  577. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
  578. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  579. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  580. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  581. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  582. package/cli/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
  583. package/cli/app/.next-cli-build/server/app/dashboard/translator.rsc +6 -6
  584. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
  585. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
  586. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  587. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  588. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +6 -6
  589. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
  590. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_index.segment.rsc +4 -4
  591. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +2 -2
  592. package/cli/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
  593. package/cli/app/.next-cli-build/server/app/dashboard/usage.rsc +6 -6
  594. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
  595. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
  596. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  597. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  598. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +6 -6
  599. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
  600. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_index.segment.rsc +4 -4
  601. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +2 -2
  602. package/cli/app/.next-cli-build/server/app/dashboard.html +1 -1
  603. package/cli/app/.next-cli-build/server/app/dashboard.rsc +6 -6
  604. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
  605. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  606. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  607. package/cli/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +6 -6
  608. package/cli/app/.next-cli-build/server/app/dashboard.segments/_head.segment.rsc +1 -1
  609. package/cli/app/.next-cli-build/server/app/dashboard.segments/_index.segment.rsc +4 -4
  610. package/cli/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +2 -2
  611. package/cli/app/.next-cli-build/server/app/index.html +1 -1
  612. package/cli/app/.next-cli-build/server/app/index.rsc +4 -4
  613. package/cli/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  614. package/cli/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +4 -4
  615. package/cli/app/.next-cli-build/server/app/index.segments/_head.segment.rsc +1 -1
  616. package/cli/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +4 -4
  617. package/cli/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +2 -2
  618. package/cli/app/.next-cli-build/server/app/landing/page.js +2 -2
  619. package/cli/app/.next-cli-build/server/app/landing/page.js.nft.json +1 -1
  620. package/cli/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  621. package/cli/app/.next-cli-build/server/app/landing.html +1 -1
  622. package/cli/app/.next-cli-build/server/app/landing.rsc +4 -4
  623. package/cli/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +4 -4
  624. package/cli/app/.next-cli-build/server/app/landing.segments/_head.segment.rsc +1 -1
  625. package/cli/app/.next-cli-build/server/app/landing.segments/_index.segment.rsc +4 -4
  626. package/cli/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +2 -2
  627. package/cli/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
  628. package/cli/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
  629. package/cli/app/.next-cli-build/server/app/login/page.js +2 -2
  630. package/cli/app/.next-cli-build/server/app/login/page.js.nft.json +1 -1
  631. package/cli/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  632. package/cli/app/.next-cli-build/server/app/login.html +1 -1
  633. package/cli/app/.next-cli-build/server/app/login.rsc +5 -5
  634. package/cli/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +5 -5
  635. package/cli/app/.next-cli-build/server/app/login.segments/_head.segment.rsc +1 -1
  636. package/cli/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +4 -4
  637. package/cli/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +2 -2
  638. package/cli/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  639. package/cli/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
  640. package/cli/app/.next-cli-build/server/app/manifest.webmanifest/route.js +2 -2
  641. package/cli/app/.next-cli-build/server/app/manifest.webmanifest/route.js.nft.json +1 -1
  642. package/cli/app/.next-cli-build/server/app/page.js +2 -2
  643. package/cli/app/.next-cli-build/server/app/page.js.nft.json +1 -1
  644. package/cli/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  645. package/cli/app/.next-cli-build/server/app-paths-manifest.json +8 -1
  646. package/cli/app/.next-cli-build/server/chunks/1396.js +1 -1
  647. package/cli/app/.next-cli-build/server/chunks/1939.js +1 -1
  648. package/cli/app/.next-cli-build/server/chunks/2777.js +1 -1
  649. package/cli/app/.next-cli-build/server/chunks/3110.js +2 -2
  650. package/cli/app/.next-cli-build/server/chunks/318.js +2 -2
  651. package/cli/app/.next-cli-build/server/chunks/412.js +1 -1
  652. package/cli/app/.next-cli-build/server/chunks/4404.js +1 -1
  653. package/cli/app/.next-cli-build/server/chunks/4746.js +1 -1
  654. package/cli/app/.next-cli-build/server/chunks/5000.js +1 -1
  655. package/cli/app/.next-cli-build/server/chunks/5024.js +1 -1
  656. package/cli/app/.next-cli-build/server/chunks/5681.js +1 -1
  657. package/cli/app/.next-cli-build/server/chunks/5827.js +1 -0
  658. package/cli/app/.next-cli-build/server/chunks/5949.js +1 -1
  659. package/cli/app/.next-cli-build/server/chunks/6652.js +1 -0
  660. package/cli/app/.next-cli-build/server/chunks/6896.js +1 -1
  661. package/cli/app/.next-cli-build/server/chunks/7153.js +1 -1
  662. package/cli/app/.next-cli-build/server/chunks/7774.js +27 -27
  663. package/cli/app/.next-cli-build/server/chunks/8371.js +1 -0
  664. package/cli/app/.next-cli-build/server/chunks/8895.js +3 -3
  665. package/cli/app/.next-cli-build/server/chunks/891.js +1 -1
  666. package/cli/app/.next-cli-build/server/chunks/9372.js +1 -0
  667. package/cli/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  668. package/cli/app/.next-cli-build/server/middleware.js +4 -4
  669. package/cli/app/.next-cli-build/server/pages/404.html +1 -1
  670. package/cli/app/.next-cli-build/server/pages/500.html +1 -1
  671. package/cli/app/.next-cli-build/server/server-reference-manifest.js +1 -1
  672. package/cli/app/.next-cli-build/server/server-reference-manifest.json +1 -1
  673. package/cli/app/.next-cli-build/static/Jh26f1tVQgrKUbeB6pi5A/_buildManifest.js +1 -0
  674. package/cli/app/.next-cli-build/static/chunks/1321-1c8d1bf3bb5f6953.js +1 -0
  675. package/cli/app/.next-cli-build/static/chunks/{5497-15b3dc050a875ba5.js → 5497-f496fb3861cb944d.js} +3 -3
  676. package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/automation/page-36dfe0b23bf48d41.js +1 -0
  677. package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-41ea0d0c8e98a115.js +3 -0
  678. package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/layout-d9a30786a04fb360.js +1 -0
  679. package/cli/app/.next-cli-build/static/chunks/app/_global-error/page-47cd0604103a80c1.js +1 -0
  680. package/cli/app/.next-cli-build/static/chunks/app/api/auth/login/route-47cd0604103a80c1.js +1 -0
  681. package/cli/app/.next-cli-build/static/chunks/app/api/auth/logout/route-47cd0604103a80c1.js +1 -0
  682. package/cli/app/.next-cli-build/static/chunks/app/api/auth/oidc/callback/route-47cd0604103a80c1.js +1 -0
  683. package/cli/app/.next-cli-build/static/chunks/app/api/auth/oidc/start/route-47cd0604103a80c1.js +1 -0
  684. package/cli/app/.next-cli-build/static/chunks/app/api/auth/oidc/test/route-47cd0604103a80c1.js +1 -0
  685. package/cli/app/.next-cli-build/static/chunks/app/api/auth/status/route-47cd0604103a80c1.js +1 -0
  686. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/all-statuses/route-47cd0604103a80c1.js +1 -0
  687. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-47cd0604103a80c1.js +1 -0
  688. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/route-47cd0604103a80c1.js +1 -0
  689. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/claude-settings/route-47cd0604103a80c1.js +1 -0
  690. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/cline-settings/route-47cd0604103a80c1.js +1 -0
  691. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/codex-gateway/accounts/route-47cd0604103a80c1.js +1 -0
  692. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/codex-settings/route-47cd0604103a80c1.js +1 -0
  693. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/copilot-settings/route-47cd0604103a80c1.js +1 -0
  694. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-47cd0604103a80c1.js +1 -0
  695. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-47cd0604103a80c1.js +1 -0
  696. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-settings/route-47cd0604103a80c1.js +1 -0
  697. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/deepseek-tui-settings/route-47cd0604103a80c1.js +1 -0
  698. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/droid-settings/route-47cd0604103a80c1.js +1 -0
  699. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/hermes-settings/route-47cd0604103a80c1.js +1 -0
  700. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/jcode-settings/route-47cd0604103a80c1.js +1 -0
  701. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/kilo-settings/route-47cd0604103a80c1.js +1 -0
  702. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/openclaw-settings/route-47cd0604103a80c1.js +1 -0
  703. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/opencode-settings/route-47cd0604103a80c1.js +1 -0
  704. package/cli/app/.next-cli-build/static/chunks/app/api/combos/[id]/route-47cd0604103a80c1.js +1 -0
  705. package/cli/app/.next-cli-build/static/chunks/app/api/combos/route-47cd0604103a80c1.js +1 -0
  706. package/cli/app/.next-cli-build/static/chunks/app/api/context/[id]/route-47cd0604103a80c1.js +1 -0
  707. package/cli/app/.next-cli-build/static/chunks/app/api/context/bulk/route-47cd0604103a80c1.js +1 -0
  708. package/cli/app/.next-cli-build/static/chunks/app/api/context/route-47cd0604103a80c1.js +1 -0
  709. package/cli/app/.next-cli-build/static/chunks/app/api/health/route-47cd0604103a80c1.js +1 -0
  710. package/cli/app/.next-cli-build/static/chunks/app/api/init/route-47cd0604103a80c1.js +1 -0
  711. package/cli/app/.next-cli-build/static/chunks/app/api/keys/[id]/route-47cd0604103a80c1.js +1 -0
  712. package/cli/app/.next-cli-build/static/chunks/app/api/keys/route-47cd0604103a80c1.js +1 -0
  713. package/cli/app/.next-cli-build/static/chunks/app/api/locale/route-47cd0604103a80c1.js +1 -0
  714. package/cli/app/.next-cli-build/static/chunks/app/api/mcp/[plugin]/message/route-47cd0604103a80c1.js +1 -0
  715. package/cli/app/.next-cli-build/static/chunks/app/api/mcp/[plugin]/sse/route-47cd0604103a80c1.js +1 -0
  716. package/cli/app/.next-cli-build/static/chunks/app/api/media-providers/tts/deepgram/voices/route-47cd0604103a80c1.js +1 -0
  717. package/cli/app/.next-cli-build/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-47cd0604103a80c1.js +1 -0
  718. package/cli/app/.next-cli-build/static/chunks/app/api/media-providers/tts/inworld/voices/route-47cd0604103a80c1.js +1 -0
  719. package/cli/app/.next-cli-build/static/chunks/app/api/media-providers/tts/minimax/voices/route-47cd0604103a80c1.js +1 -0
  720. package/cli/app/.next-cli-build/static/chunks/app/api/media-providers/tts/voices/route-47cd0604103a80c1.js +1 -0
  721. package/cli/app/.next-cli-build/static/chunks/app/api/models/alias/route-47cd0604103a80c1.js +1 -0
  722. package/cli/app/.next-cli-build/static/chunks/app/api/models/availability/route-47cd0604103a80c1.js +1 -0
  723. package/cli/app/.next-cli-build/static/chunks/app/api/models/custom/route-47cd0604103a80c1.js +1 -0
  724. package/cli/app/.next-cli-build/static/chunks/app/api/models/disabled/route-47cd0604103a80c1.js +1 -0
  725. package/cli/app/.next-cli-build/static/chunks/app/api/models/route-47cd0604103a80c1.js +1 -0
  726. package/cli/app/.next-cli-build/static/chunks/app/api/models/test/route-47cd0604103a80c1.js +1 -0
  727. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/[provider]/[action]/route-47cd0604103a80c1.js +1 -0
  728. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/antigravity/bulk-import/[jobId]/cancel/route-47cd0604103a80c1.js +1 -0
  729. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/antigravity/bulk-import/[jobId]/manual/[workerId]/route-47cd0604103a80c1.js +1 -0
  730. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/antigravity/bulk-import/[jobId]/route-47cd0604103a80c1.js +1 -0
  731. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/antigravity/bulk-import/latest/route-47cd0604103a80c1.js +1 -0
  732. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/antigravity/bulk-import/route-47cd0604103a80c1.js +1 -0
  733. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/autoclaw/bulk-import/[jobId]/cancel/route-47cd0604103a80c1.js +1 -0
  734. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/autoclaw/bulk-import/[jobId]/manual/[workerId]/route-47cd0604103a80c1.js +1 -0
  735. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/autoclaw/bulk-import/[jobId]/route-47cd0604103a80c1.js +1 -0
  736. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/autoclaw/bulk-import/latest/route-47cd0604103a80c1.js +1 -0
  737. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/autoclaw/bulk-import/route-47cd0604103a80c1.js +1 -0
  738. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy/bulk-import/[jobId]/cancel/route-47cd0604103a80c1.js +1 -0
  739. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy/bulk-import/[jobId]/manual/[workerId]/route-47cd0604103a80c1.js +1 -0
  740. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy/bulk-import/[jobId]/route-47cd0604103a80c1.js +1 -0
  741. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy/bulk-import/latest/route-47cd0604103a80c1.js +1 -0
  742. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy/bulk-import/route-47cd0604103a80c1.js +1 -0
  743. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy/bulk-token/route-47cd0604103a80c1.js +1 -0
  744. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy/quota-cookie/route-47cd0604103a80c1.js +1 -0
  745. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/cancel/route-47cd0604103a80c1.js +1 -0
  746. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/manual/[workerId]/route-47cd0604103a80c1.js +1 -0
  747. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/route-47cd0604103a80c1.js +1 -0
  748. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy-cn/bulk-import/latest/route-47cd0604103a80c1.js +1 -0
  749. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy-cn/bulk-import/route-47cd0604103a80c1.js +1 -0
  750. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy-cn/bulk-token/route-47cd0604103a80c1.js +1 -0
  751. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy-cn/quota-cookie/route-47cd0604103a80c1.js +1 -0
  752. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codex/import-token/route-47cd0604103a80c1.js +1 -0
  753. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/cursor/auto-import/route-47cd0604103a80c1.js +1 -0
  754. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/cursor/import/route-47cd0604103a80c1.js +1 -0
  755. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/gitlab/pat/route-47cd0604103a80c1.js +1 -0
  756. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/iflow/cookie/route-47cd0604103a80c1.js +1 -0
  757. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/kiro/auto-import/route-47cd0604103a80c1.js +1 -0
  758. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/kiro/bulk-import/[jobId]/cancel/route-47cd0604103a80c1.js +1 -0
  759. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/kiro/bulk-import/[jobId]/manual/[workerId]/route-47cd0604103a80c1.js +1 -0
  760. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/kiro/bulk-import/[jobId]/route-47cd0604103a80c1.js +1 -0
  761. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/kiro/bulk-import/latest/route-47cd0604103a80c1.js +1 -0
  762. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/kiro/bulk-import/route-47cd0604103a80c1.js +1 -0
  763. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/kiro/import/route-47cd0604103a80c1.js +1 -0
  764. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/kiro/social-authorize/route-47cd0604103a80c1.js +1 -0
  765. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/kiro/social-exchange/route-47cd0604103a80c1.js +1 -0
  766. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/qoder/bulk-import/[jobId]/cancel/route-47cd0604103a80c1.js +1 -0
  767. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/qoder/bulk-import/[jobId]/manual/[workerId]/route-47cd0604103a80c1.js +1 -0
  768. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/qoder/bulk-import/[jobId]/route-47cd0604103a80c1.js +1 -0
  769. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/qoder/bulk-import/latest/route-47cd0604103a80c1.js +1 -0
  770. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/qoder/bulk-import/route-47cd0604103a80c1.js +1 -0
  771. package/cli/app/.next-cli-build/static/chunks/app/api/pricing/route-47cd0604103a80c1.js +1 -0
  772. package/cli/app/.next-cli-build/static/chunks/app/api/provider-nodes/[id]/route-47cd0604103a80c1.js +1 -0
  773. package/cli/app/.next-cli-build/static/chunks/app/api/provider-nodes/route-47cd0604103a80c1.js +1 -0
  774. package/cli/app/.next-cli-build/static/chunks/app/api/provider-nodes/validate/route-47cd0604103a80c1.js +1 -0
  775. package/cli/app/.next-cli-build/static/chunks/app/api/providers/[id]/models/route-47cd0604103a80c1.js +1 -0
  776. package/cli/app/.next-cli-build/static/chunks/app/api/providers/[id]/route-47cd0604103a80c1.js +1 -0
  777. package/cli/app/.next-cli-build/static/chunks/app/api/providers/[id]/test/route-47cd0604103a80c1.js +1 -0
  778. package/cli/app/.next-cli-build/static/chunks/app/api/providers/[id]/test-models/route-47cd0604103a80c1.js +1 -0
  779. package/cli/app/.next-cli-build/static/chunks/app/api/providers/bulk-delete/route-47cd0604103a80c1.js +1 -0
  780. package/cli/app/.next-cli-build/static/chunks/app/api/providers/client/route-47cd0604103a80c1.js +1 -0
  781. package/cli/app/.next-cli-build/static/chunks/app/api/providers/kilo/free-models/route-47cd0604103a80c1.js +1 -0
  782. package/cli/app/.next-cli-build/static/chunks/app/api/providers/route-47cd0604103a80c1.js +1 -0
  783. package/cli/app/.next-cli-build/static/chunks/app/api/providers/suggested-models/route-47cd0604103a80c1.js +1 -0
  784. package/cli/app/.next-cli-build/static/chunks/app/api/providers/test-batch/route-47cd0604103a80c1.js +1 -0
  785. package/cli/app/.next-cli-build/static/chunks/app/api/providers/validate/route-47cd0604103a80c1.js +1 -0
  786. package/cli/app/.next-cli-build/static/chunks/app/api/proxy-pools/[id]/route-47cd0604103a80c1.js +1 -0
  787. package/cli/app/.next-cli-build/static/chunks/app/api/proxy-pools/[id]/test/route-47cd0604103a80c1.js +1 -0
  788. package/cli/app/.next-cli-build/static/chunks/app/api/proxy-pools/cloudflare-deploy/route-47cd0604103a80c1.js +1 -0
  789. package/cli/app/.next-cli-build/static/chunks/app/api/proxy-pools/deno-deploy/route-47cd0604103a80c1.js +1 -0
  790. package/cli/app/.next-cli-build/static/chunks/app/api/proxy-pools/route-47cd0604103a80c1.js +1 -0
  791. package/cli/app/.next-cli-build/static/chunks/app/api/proxy-pools/vercel-deploy/route-47cd0604103a80c1.js +1 -0
  792. package/cli/app/.next-cli-build/static/chunks/app/api/settings/database/route-47cd0604103a80c1.js +1 -0
  793. package/cli/app/.next-cli-build/static/chunks/app/api/settings/proxy-test/route-47cd0604103a80c1.js +1 -0
  794. package/cli/app/.next-cli-build/static/chunks/app/api/settings/require-login/route-47cd0604103a80c1.js +1 -0
  795. package/cli/app/.next-cli-build/static/chunks/app/api/settings/route-47cd0604103a80c1.js +1 -0
  796. package/cli/app/.next-cli-build/static/chunks/app/api/shutdown/route-47cd0604103a80c1.js +1 -0
  797. package/cli/app/.next-cli-build/static/chunks/app/api/tags/route-47cd0604103a80c1.js +1 -0
  798. package/cli/app/.next-cli-build/static/chunks/app/api/translator/console-logs/route-47cd0604103a80c1.js +1 -0
  799. package/cli/app/.next-cli-build/static/chunks/app/api/translator/console-logs/stream/route-47cd0604103a80c1.js +1 -0
  800. package/cli/app/.next-cli-build/static/chunks/app/api/translator/load/route-47cd0604103a80c1.js +1 -0
  801. package/cli/app/.next-cli-build/static/chunks/app/api/translator/save/route-47cd0604103a80c1.js +1 -0
  802. package/cli/app/.next-cli-build/static/chunks/app/api/translator/send/route-47cd0604103a80c1.js +1 -0
  803. package/cli/app/.next-cli-build/static/chunks/app/api/translator/translate/route-47cd0604103a80c1.js +1 -0
  804. package/cli/app/.next-cli-build/static/chunks/app/api/tunnel/disable/route-47cd0604103a80c1.js +1 -0
  805. package/cli/app/.next-cli-build/static/chunks/app/api/tunnel/enable/route-47cd0604103a80c1.js +1 -0
  806. package/cli/app/.next-cli-build/static/chunks/app/api/tunnel/status/route-47cd0604103a80c1.js +1 -0
  807. package/cli/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-check/route-47cd0604103a80c1.js +1 -0
  808. package/cli/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-disable/route-47cd0604103a80c1.js +1 -0
  809. package/cli/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-enable/route-47cd0604103a80c1.js +1 -0
  810. package/cli/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-install/route-47cd0604103a80c1.js +1 -0
  811. package/cli/app/.next-cli-build/static/chunks/app/api/usage/[connectionId]/route-47cd0604103a80c1.js +1 -0
  812. package/cli/app/.next-cli-build/static/chunks/app/api/usage/aggregate/route-47cd0604103a80c1.js +1 -0
  813. package/cli/app/.next-cli-build/static/chunks/app/api/usage/chart/route-47cd0604103a80c1.js +1 -0
  814. package/cli/app/.next-cli-build/static/chunks/app/api/usage/history/route-47cd0604103a80c1.js +1 -0
  815. package/cli/app/.next-cli-build/static/chunks/app/api/usage/providers/route-47cd0604103a80c1.js +1 -0
  816. package/cli/app/.next-cli-build/static/chunks/app/api/usage/request-details/route-47cd0604103a80c1.js +1 -0
  817. package/cli/app/.next-cli-build/static/chunks/app/api/usage/request-logs/route-47cd0604103a80c1.js +1 -0
  818. package/cli/app/.next-cli-build/static/chunks/app/api/usage/stats/route-47cd0604103a80c1.js +1 -0
  819. package/cli/app/.next-cli-build/static/chunks/app/api/usage/stream/route-47cd0604103a80c1.js +1 -0
  820. package/cli/app/.next-cli-build/static/chunks/app/api/v1/api/chat/route-47cd0604103a80c1.js +1 -0
  821. package/cli/app/.next-cli-build/static/chunks/app/api/v1/audio/speech/route-47cd0604103a80c1.js +1 -0
  822. package/cli/app/.next-cli-build/static/chunks/app/api/v1/audio/transcriptions/route-47cd0604103a80c1.js +1 -0
  823. package/cli/app/.next-cli-build/static/chunks/app/api/v1/audio/voices/route-47cd0604103a80c1.js +1 -0
  824. package/cli/app/.next-cli-build/static/chunks/app/api/v1/chat/completions/route-47cd0604103a80c1.js +1 -0
  825. package/cli/app/.next-cli-build/static/chunks/app/api/v1/embeddings/route-47cd0604103a80c1.js +1 -0
  826. package/cli/app/.next-cli-build/static/chunks/app/api/v1/images/generations/route-47cd0604103a80c1.js +1 -0
  827. package/cli/app/.next-cli-build/static/chunks/app/api/v1/messages/count_tokens/route-47cd0604103a80c1.js +1 -0
  828. package/cli/app/.next-cli-build/static/chunks/app/api/v1/messages/route-47cd0604103a80c1.js +1 -0
  829. package/cli/app/.next-cli-build/static/chunks/app/api/v1/models/[kind]/route-47cd0604103a80c1.js +1 -0
  830. package/cli/app/.next-cli-build/static/chunks/app/api/v1/models/info/route-47cd0604103a80c1.js +1 -0
  831. package/cli/app/.next-cli-build/static/chunks/app/api/v1/models/route-47cd0604103a80c1.js +1 -0
  832. package/cli/app/.next-cli-build/static/chunks/app/api/v1/responses/compact/route-47cd0604103a80c1.js +1 -0
  833. package/cli/app/.next-cli-build/static/chunks/app/api/v1/responses/route-47cd0604103a80c1.js +1 -0
  834. package/cli/app/.next-cli-build/static/chunks/app/api/v1/route-47cd0604103a80c1.js +1 -0
  835. package/cli/app/.next-cli-build/static/chunks/app/api/v1/search/route-47cd0604103a80c1.js +1 -0
  836. package/cli/app/.next-cli-build/static/chunks/app/api/v1/web/fetch/route-47cd0604103a80c1.js +1 -0
  837. package/cli/app/.next-cli-build/static/chunks/app/api/v1beta/models/[...path]/route-47cd0604103a80c1.js +1 -0
  838. package/cli/app/.next-cli-build/static/chunks/app/api/v1beta/models/route-47cd0604103a80c1.js +1 -0
  839. package/cli/app/.next-cli-build/static/chunks/app/api/version/route-47cd0604103a80c1.js +1 -0
  840. package/cli/app/.next-cli-build/static/chunks/app/api/version/shutdown/route-47cd0604103a80c1.js +1 -0
  841. package/cli/app/.next-cli-build/static/chunks/app/api/version/update/route-47cd0604103a80c1.js +1 -0
  842. package/cli/app/.next-cli-build/static/chunks/app/manifest.webmanifest/route-47cd0604103a80c1.js +1 -0
  843. package/cli/app/.next-cli-build/static/chunks/app/page-47cd0604103a80c1.js +1 -0
  844. package/cli/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/app-error-47cd0604103a80c1.js +1 -0
  845. package/cli/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/forbidden-47cd0604103a80c1.js +1 -0
  846. package/cli/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/not-found-47cd0604103a80c1.js +1 -0
  847. package/cli/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/unauthorized-47cd0604103a80c1.js +1 -0
  848. package/cli/app/.next-cli-build/static/css/66603789c5d0bb89.css +1 -0
  849. package/cli/app/package.json +3 -3
  850. package/cli/app/src/lib/oauth/services/bulkImportBrowserEngine.js +40 -13
  851. package/cli/app/src/lib/oauth/services/socksHttpBridge.js +157 -0
  852. package/cli/package.json +1 -1
  853. package/open-sse/config/providerModels.js +32 -1
  854. package/open-sse/config/providers.js +14 -0
  855. package/open-sse/executors/codebuddy-cn.js +31 -0
  856. package/open-sse/executors/index.js +7 -0
  857. package/open-sse/executors/mimo-free.js +156 -0
  858. package/open-sse/handlers/chatCore.js +12 -21
  859. package/open-sse/services/model.js +5 -0
  860. package/open-sse/services/usage.js +76 -24
  861. package/open-sse/utils/stream.js +14 -0
  862. package/open-sse/utils/thinkingSuffix.js +64 -0
  863. package/package.json +3 -3
  864. package/src/app/(dashboard)/dashboard/automation/page.js +153 -1
  865. package/src/app/(dashboard)/dashboard/providers/[id]/ModelRow.js +7 -3
  866. package/src/app/(dashboard)/dashboard/providers/[id]/page.js +17 -16
  867. package/src/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/cancel/route.js +19 -0
  868. package/src/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/manual/[workerId]/route.js +30 -0
  869. package/src/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/route.js +26 -0
  870. package/src/app/api/oauth/codebuddy-cn/bulk-import/latest/route.js +27 -0
  871. package/src/app/api/oauth/codebuddy-cn/bulk-import/route.js +61 -0
  872. package/src/app/api/oauth/codebuddy-cn/bulk-token/route.js +119 -0
  873. package/src/app/api/oauth/codebuddy-cn/quota-cookie/route.js +28 -0
  874. package/src/app/api/settings/route.js +11 -2
  875. package/src/lib/db/repos/settingsRepo.js +2 -0
  876. package/src/lib/oauth/services/bulkImportBrowserEngine.js +40 -13
  877. package/src/lib/oauth/services/codebuddyBulkImportManager.js +9 -7
  878. package/src/lib/oauth/services/codebuddyCnBulkImportManager.js +1004 -0
  879. package/src/lib/oauth/services/codebuddyCnPhoneAutomation.js +1029 -0
  880. package/src/lib/oauth/services/fiveSimClient.js +370 -0
  881. package/src/lib/oauth/services/kiroBulkImportManager.js +69 -7
  882. package/src/lib/oauth/services/proxyUtils.js +26 -0
  883. package/src/lib/oauth/services/socksHttpBridge.js +157 -0
  884. package/src/lib/usage/quotaService.js +10 -2
  885. package/src/shared/components/CodeBuddyCnPhoneRegisterModal.js +564 -0
  886. package/src/shared/components/index.js +1 -0
  887. package/src/shared/constants/providers.js +59 -1
  888. package/cli/app/.next-cli-build/server/chunks/7340.js +0 -1
  889. package/cli/app/.next-cli-build/server/chunks/9326.js +0 -1
  890. package/cli/app/.next-cli-build/static/FGw-I-CGGpfd2854oBF1w/_buildManifest.js +0 -1
  891. package/cli/app/.next-cli-build/static/chunks/1321-003c18d34f8bf26a.js +0 -1
  892. package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/automation/page-cf7cc045f80cb4b0.js +0 -1
  893. package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-00b727c93ebc0e37.js +0 -3
  894. package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/layout-54ebc81f294cf670.js +0 -1
  895. package/cli/app/.next-cli-build/static/chunks/app/_global-error/page-576986aaa25d6ad2.js +0 -1
  896. package/cli/app/.next-cli-build/static/chunks/app/api/auth/login/route-576986aaa25d6ad2.js +0 -1
  897. package/cli/app/.next-cli-build/static/chunks/app/api/auth/logout/route-576986aaa25d6ad2.js +0 -1
  898. package/cli/app/.next-cli-build/static/chunks/app/api/auth/oidc/callback/route-576986aaa25d6ad2.js +0 -1
  899. package/cli/app/.next-cli-build/static/chunks/app/api/auth/oidc/start/route-576986aaa25d6ad2.js +0 -1
  900. package/cli/app/.next-cli-build/static/chunks/app/api/auth/oidc/test/route-576986aaa25d6ad2.js +0 -1
  901. package/cli/app/.next-cli-build/static/chunks/app/api/auth/status/route-576986aaa25d6ad2.js +0 -1
  902. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/all-statuses/route-576986aaa25d6ad2.js +0 -1
  903. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-576986aaa25d6ad2.js +0 -1
  904. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/route-576986aaa25d6ad2.js +0 -1
  905. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/claude-settings/route-576986aaa25d6ad2.js +0 -1
  906. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/cline-settings/route-576986aaa25d6ad2.js +0 -1
  907. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/codex-gateway/accounts/route-576986aaa25d6ad2.js +0 -1
  908. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/codex-settings/route-576986aaa25d6ad2.js +0 -1
  909. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/copilot-settings/route-576986aaa25d6ad2.js +0 -1
  910. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-576986aaa25d6ad2.js +0 -1
  911. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-576986aaa25d6ad2.js +0 -1
  912. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-settings/route-576986aaa25d6ad2.js +0 -1
  913. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/deepseek-tui-settings/route-576986aaa25d6ad2.js +0 -1
  914. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/droid-settings/route-576986aaa25d6ad2.js +0 -1
  915. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/hermes-settings/route-576986aaa25d6ad2.js +0 -1
  916. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/jcode-settings/route-576986aaa25d6ad2.js +0 -1
  917. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/kilo-settings/route-576986aaa25d6ad2.js +0 -1
  918. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/openclaw-settings/route-576986aaa25d6ad2.js +0 -1
  919. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/opencode-settings/route-576986aaa25d6ad2.js +0 -1
  920. package/cli/app/.next-cli-build/static/chunks/app/api/combos/[id]/route-576986aaa25d6ad2.js +0 -1
  921. package/cli/app/.next-cli-build/static/chunks/app/api/combos/route-576986aaa25d6ad2.js +0 -1
  922. package/cli/app/.next-cli-build/static/chunks/app/api/context/[id]/route-576986aaa25d6ad2.js +0 -1
  923. package/cli/app/.next-cli-build/static/chunks/app/api/context/bulk/route-576986aaa25d6ad2.js +0 -1
  924. package/cli/app/.next-cli-build/static/chunks/app/api/context/route-576986aaa25d6ad2.js +0 -1
  925. package/cli/app/.next-cli-build/static/chunks/app/api/health/route-576986aaa25d6ad2.js +0 -1
  926. package/cli/app/.next-cli-build/static/chunks/app/api/init/route-576986aaa25d6ad2.js +0 -1
  927. package/cli/app/.next-cli-build/static/chunks/app/api/keys/[id]/route-576986aaa25d6ad2.js +0 -1
  928. package/cli/app/.next-cli-build/static/chunks/app/api/keys/route-576986aaa25d6ad2.js +0 -1
  929. package/cli/app/.next-cli-build/static/chunks/app/api/locale/route-576986aaa25d6ad2.js +0 -1
  930. package/cli/app/.next-cli-build/static/chunks/app/api/mcp/[plugin]/message/route-576986aaa25d6ad2.js +0 -1
  931. package/cli/app/.next-cli-build/static/chunks/app/api/mcp/[plugin]/sse/route-576986aaa25d6ad2.js +0 -1
  932. package/cli/app/.next-cli-build/static/chunks/app/api/media-providers/tts/deepgram/voices/route-576986aaa25d6ad2.js +0 -1
  933. package/cli/app/.next-cli-build/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-576986aaa25d6ad2.js +0 -1
  934. package/cli/app/.next-cli-build/static/chunks/app/api/media-providers/tts/inworld/voices/route-576986aaa25d6ad2.js +0 -1
  935. package/cli/app/.next-cli-build/static/chunks/app/api/media-providers/tts/minimax/voices/route-576986aaa25d6ad2.js +0 -1
  936. package/cli/app/.next-cli-build/static/chunks/app/api/media-providers/tts/voices/route-576986aaa25d6ad2.js +0 -1
  937. package/cli/app/.next-cli-build/static/chunks/app/api/models/alias/route-576986aaa25d6ad2.js +0 -1
  938. package/cli/app/.next-cli-build/static/chunks/app/api/models/availability/route-576986aaa25d6ad2.js +0 -1
  939. package/cli/app/.next-cli-build/static/chunks/app/api/models/custom/route-576986aaa25d6ad2.js +0 -1
  940. package/cli/app/.next-cli-build/static/chunks/app/api/models/disabled/route-576986aaa25d6ad2.js +0 -1
  941. package/cli/app/.next-cli-build/static/chunks/app/api/models/route-576986aaa25d6ad2.js +0 -1
  942. package/cli/app/.next-cli-build/static/chunks/app/api/models/test/route-576986aaa25d6ad2.js +0 -1
  943. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/[provider]/[action]/route-576986aaa25d6ad2.js +0 -1
  944. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/antigravity/bulk-import/[jobId]/cancel/route-576986aaa25d6ad2.js +0 -1
  945. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/antigravity/bulk-import/[jobId]/manual/[workerId]/route-576986aaa25d6ad2.js +0 -1
  946. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/antigravity/bulk-import/[jobId]/route-576986aaa25d6ad2.js +0 -1
  947. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/antigravity/bulk-import/latest/route-576986aaa25d6ad2.js +0 -1
  948. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/antigravity/bulk-import/route-576986aaa25d6ad2.js +0 -1
  949. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/autoclaw/bulk-import/[jobId]/cancel/route-576986aaa25d6ad2.js +0 -1
  950. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/autoclaw/bulk-import/[jobId]/manual/[workerId]/route-576986aaa25d6ad2.js +0 -1
  951. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/autoclaw/bulk-import/[jobId]/route-576986aaa25d6ad2.js +0 -1
  952. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/autoclaw/bulk-import/latest/route-576986aaa25d6ad2.js +0 -1
  953. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/autoclaw/bulk-import/route-576986aaa25d6ad2.js +0 -1
  954. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy/bulk-import/[jobId]/cancel/route-576986aaa25d6ad2.js +0 -1
  955. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy/bulk-import/[jobId]/manual/[workerId]/route-576986aaa25d6ad2.js +0 -1
  956. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy/bulk-import/[jobId]/route-576986aaa25d6ad2.js +0 -1
  957. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy/bulk-import/latest/route-576986aaa25d6ad2.js +0 -1
  958. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy/bulk-import/route-576986aaa25d6ad2.js +0 -1
  959. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy/bulk-token/route-576986aaa25d6ad2.js +0 -1
  960. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy/quota-cookie/route-576986aaa25d6ad2.js +0 -1
  961. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codex/import-token/route-576986aaa25d6ad2.js +0 -1
  962. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/cursor/auto-import/route-576986aaa25d6ad2.js +0 -1
  963. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/cursor/import/route-576986aaa25d6ad2.js +0 -1
  964. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/gitlab/pat/route-576986aaa25d6ad2.js +0 -1
  965. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/iflow/cookie/route-576986aaa25d6ad2.js +0 -1
  966. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/kiro/auto-import/route-576986aaa25d6ad2.js +0 -1
  967. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/kiro/bulk-import/[jobId]/cancel/route-576986aaa25d6ad2.js +0 -1
  968. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/kiro/bulk-import/[jobId]/manual/[workerId]/route-576986aaa25d6ad2.js +0 -1
  969. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/kiro/bulk-import/[jobId]/route-576986aaa25d6ad2.js +0 -1
  970. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/kiro/bulk-import/latest/route-576986aaa25d6ad2.js +0 -1
  971. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/kiro/bulk-import/route-576986aaa25d6ad2.js +0 -1
  972. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/kiro/import/route-576986aaa25d6ad2.js +0 -1
  973. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/kiro/social-authorize/route-576986aaa25d6ad2.js +0 -1
  974. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/kiro/social-exchange/route-576986aaa25d6ad2.js +0 -1
  975. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/qoder/bulk-import/[jobId]/cancel/route-576986aaa25d6ad2.js +0 -1
  976. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/qoder/bulk-import/[jobId]/manual/[workerId]/route-576986aaa25d6ad2.js +0 -1
  977. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/qoder/bulk-import/[jobId]/route-576986aaa25d6ad2.js +0 -1
  978. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/qoder/bulk-import/latest/route-576986aaa25d6ad2.js +0 -1
  979. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/qoder/bulk-import/route-576986aaa25d6ad2.js +0 -1
  980. package/cli/app/.next-cli-build/static/chunks/app/api/pricing/route-576986aaa25d6ad2.js +0 -1
  981. package/cli/app/.next-cli-build/static/chunks/app/api/provider-nodes/[id]/route-576986aaa25d6ad2.js +0 -1
  982. package/cli/app/.next-cli-build/static/chunks/app/api/provider-nodes/route-576986aaa25d6ad2.js +0 -1
  983. package/cli/app/.next-cli-build/static/chunks/app/api/provider-nodes/validate/route-576986aaa25d6ad2.js +0 -1
  984. package/cli/app/.next-cli-build/static/chunks/app/api/providers/[id]/models/route-576986aaa25d6ad2.js +0 -1
  985. package/cli/app/.next-cli-build/static/chunks/app/api/providers/[id]/route-576986aaa25d6ad2.js +0 -1
  986. package/cli/app/.next-cli-build/static/chunks/app/api/providers/[id]/test/route-576986aaa25d6ad2.js +0 -1
  987. package/cli/app/.next-cli-build/static/chunks/app/api/providers/[id]/test-models/route-576986aaa25d6ad2.js +0 -1
  988. package/cli/app/.next-cli-build/static/chunks/app/api/providers/bulk-delete/route-576986aaa25d6ad2.js +0 -1
  989. package/cli/app/.next-cli-build/static/chunks/app/api/providers/client/route-576986aaa25d6ad2.js +0 -1
  990. package/cli/app/.next-cli-build/static/chunks/app/api/providers/kilo/free-models/route-576986aaa25d6ad2.js +0 -1
  991. package/cli/app/.next-cli-build/static/chunks/app/api/providers/route-576986aaa25d6ad2.js +0 -1
  992. package/cli/app/.next-cli-build/static/chunks/app/api/providers/suggested-models/route-576986aaa25d6ad2.js +0 -1
  993. package/cli/app/.next-cli-build/static/chunks/app/api/providers/test-batch/route-576986aaa25d6ad2.js +0 -1
  994. package/cli/app/.next-cli-build/static/chunks/app/api/providers/validate/route-576986aaa25d6ad2.js +0 -1
  995. package/cli/app/.next-cli-build/static/chunks/app/api/proxy-pools/[id]/route-576986aaa25d6ad2.js +0 -1
  996. package/cli/app/.next-cli-build/static/chunks/app/api/proxy-pools/[id]/test/route-576986aaa25d6ad2.js +0 -1
  997. package/cli/app/.next-cli-build/static/chunks/app/api/proxy-pools/cloudflare-deploy/route-576986aaa25d6ad2.js +0 -1
  998. package/cli/app/.next-cli-build/static/chunks/app/api/proxy-pools/deno-deploy/route-576986aaa25d6ad2.js +0 -1
  999. package/cli/app/.next-cli-build/static/chunks/app/api/proxy-pools/route-576986aaa25d6ad2.js +0 -1
  1000. package/cli/app/.next-cli-build/static/chunks/app/api/proxy-pools/vercel-deploy/route-576986aaa25d6ad2.js +0 -1
  1001. package/cli/app/.next-cli-build/static/chunks/app/api/settings/database/route-576986aaa25d6ad2.js +0 -1
  1002. package/cli/app/.next-cli-build/static/chunks/app/api/settings/proxy-test/route-576986aaa25d6ad2.js +0 -1
  1003. package/cli/app/.next-cli-build/static/chunks/app/api/settings/require-login/route-576986aaa25d6ad2.js +0 -1
  1004. package/cli/app/.next-cli-build/static/chunks/app/api/settings/route-576986aaa25d6ad2.js +0 -1
  1005. package/cli/app/.next-cli-build/static/chunks/app/api/shutdown/route-576986aaa25d6ad2.js +0 -1
  1006. package/cli/app/.next-cli-build/static/chunks/app/api/tags/route-576986aaa25d6ad2.js +0 -1
  1007. package/cli/app/.next-cli-build/static/chunks/app/api/translator/console-logs/route-576986aaa25d6ad2.js +0 -1
  1008. package/cli/app/.next-cli-build/static/chunks/app/api/translator/console-logs/stream/route-576986aaa25d6ad2.js +0 -1
  1009. package/cli/app/.next-cli-build/static/chunks/app/api/translator/load/route-576986aaa25d6ad2.js +0 -1
  1010. package/cli/app/.next-cli-build/static/chunks/app/api/translator/save/route-576986aaa25d6ad2.js +0 -1
  1011. package/cli/app/.next-cli-build/static/chunks/app/api/translator/send/route-576986aaa25d6ad2.js +0 -1
  1012. package/cli/app/.next-cli-build/static/chunks/app/api/translator/translate/route-576986aaa25d6ad2.js +0 -1
  1013. package/cli/app/.next-cli-build/static/chunks/app/api/tunnel/disable/route-576986aaa25d6ad2.js +0 -1
  1014. package/cli/app/.next-cli-build/static/chunks/app/api/tunnel/enable/route-576986aaa25d6ad2.js +0 -1
  1015. package/cli/app/.next-cli-build/static/chunks/app/api/tunnel/status/route-576986aaa25d6ad2.js +0 -1
  1016. package/cli/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-check/route-576986aaa25d6ad2.js +0 -1
  1017. package/cli/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-disable/route-576986aaa25d6ad2.js +0 -1
  1018. package/cli/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-enable/route-576986aaa25d6ad2.js +0 -1
  1019. package/cli/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-install/route-576986aaa25d6ad2.js +0 -1
  1020. package/cli/app/.next-cli-build/static/chunks/app/api/usage/[connectionId]/route-576986aaa25d6ad2.js +0 -1
  1021. package/cli/app/.next-cli-build/static/chunks/app/api/usage/aggregate/route-576986aaa25d6ad2.js +0 -1
  1022. package/cli/app/.next-cli-build/static/chunks/app/api/usage/chart/route-576986aaa25d6ad2.js +0 -1
  1023. package/cli/app/.next-cli-build/static/chunks/app/api/usage/history/route-576986aaa25d6ad2.js +0 -1
  1024. package/cli/app/.next-cli-build/static/chunks/app/api/usage/providers/route-576986aaa25d6ad2.js +0 -1
  1025. package/cli/app/.next-cli-build/static/chunks/app/api/usage/request-details/route-576986aaa25d6ad2.js +0 -1
  1026. package/cli/app/.next-cli-build/static/chunks/app/api/usage/request-logs/route-576986aaa25d6ad2.js +0 -1
  1027. package/cli/app/.next-cli-build/static/chunks/app/api/usage/stats/route-576986aaa25d6ad2.js +0 -1
  1028. package/cli/app/.next-cli-build/static/chunks/app/api/usage/stream/route-576986aaa25d6ad2.js +0 -1
  1029. package/cli/app/.next-cli-build/static/chunks/app/api/v1/api/chat/route-576986aaa25d6ad2.js +0 -1
  1030. package/cli/app/.next-cli-build/static/chunks/app/api/v1/audio/speech/route-576986aaa25d6ad2.js +0 -1
  1031. package/cli/app/.next-cli-build/static/chunks/app/api/v1/audio/transcriptions/route-576986aaa25d6ad2.js +0 -1
  1032. package/cli/app/.next-cli-build/static/chunks/app/api/v1/audio/voices/route-576986aaa25d6ad2.js +0 -1
  1033. package/cli/app/.next-cli-build/static/chunks/app/api/v1/chat/completions/route-576986aaa25d6ad2.js +0 -1
  1034. package/cli/app/.next-cli-build/static/chunks/app/api/v1/embeddings/route-576986aaa25d6ad2.js +0 -1
  1035. package/cli/app/.next-cli-build/static/chunks/app/api/v1/images/generations/route-576986aaa25d6ad2.js +0 -1
  1036. package/cli/app/.next-cli-build/static/chunks/app/api/v1/messages/count_tokens/route-576986aaa25d6ad2.js +0 -1
  1037. package/cli/app/.next-cli-build/static/chunks/app/api/v1/messages/route-576986aaa25d6ad2.js +0 -1
  1038. package/cli/app/.next-cli-build/static/chunks/app/api/v1/models/[kind]/route-576986aaa25d6ad2.js +0 -1
  1039. package/cli/app/.next-cli-build/static/chunks/app/api/v1/models/info/route-576986aaa25d6ad2.js +0 -1
  1040. package/cli/app/.next-cli-build/static/chunks/app/api/v1/models/route-576986aaa25d6ad2.js +0 -1
  1041. package/cli/app/.next-cli-build/static/chunks/app/api/v1/responses/compact/route-576986aaa25d6ad2.js +0 -1
  1042. package/cli/app/.next-cli-build/static/chunks/app/api/v1/responses/route-576986aaa25d6ad2.js +0 -1
  1043. package/cli/app/.next-cli-build/static/chunks/app/api/v1/route-576986aaa25d6ad2.js +0 -1
  1044. package/cli/app/.next-cli-build/static/chunks/app/api/v1/search/route-576986aaa25d6ad2.js +0 -1
  1045. package/cli/app/.next-cli-build/static/chunks/app/api/v1/web/fetch/route-576986aaa25d6ad2.js +0 -1
  1046. package/cli/app/.next-cli-build/static/chunks/app/api/v1beta/models/[...path]/route-576986aaa25d6ad2.js +0 -1
  1047. package/cli/app/.next-cli-build/static/chunks/app/api/v1beta/models/route-576986aaa25d6ad2.js +0 -1
  1048. package/cli/app/.next-cli-build/static/chunks/app/api/version/route-576986aaa25d6ad2.js +0 -1
  1049. package/cli/app/.next-cli-build/static/chunks/app/api/version/shutdown/route-576986aaa25d6ad2.js +0 -1
  1050. package/cli/app/.next-cli-build/static/chunks/app/api/version/update/route-576986aaa25d6ad2.js +0 -1
  1051. package/cli/app/.next-cli-build/static/chunks/app/manifest.webmanifest/route-576986aaa25d6ad2.js +0 -1
  1052. package/cli/app/.next-cli-build/static/chunks/app/page-576986aaa25d6ad2.js +0 -1
  1053. package/cli/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/app-error-576986aaa25d6ad2.js +0 -1
  1054. package/cli/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/forbidden-576986aaa25d6ad2.js +0 -1
  1055. package/cli/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/not-found-576986aaa25d6ad2.js +0 -1
  1056. package/cli/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/unauthorized-576986aaa25d6ad2.js +0 -1
  1057. package/cli/app/.next-cli-build/static/css/6615840a16042b10.css +0 -1
  1058. /package/cli/app/.next-cli-build/static/{FGw-I-CGGpfd2854oBF1w → Jh26f1tVQgrKUbeB6pi5A}/_ssgManifest.js +0 -0
@@ -0,0 +1,1029 @@
1
+ /**
2
+ * Playwright automation for CodeBuddy CN (Tencent Cloud Code Assistant) phone-number
3
+ * registration at www.codebuddy.cn.
4
+ *
5
+ * VERIFIED DOM STRUCTURE (live probe 2026-07-09):
6
+ * - Main page is a SPA that renders a "手机号" (phone) tab.
7
+ * - Clicking the phone tab reveals <div class="login-phone-box"> containing
8
+ * <iframe id="phone-iframe"> — a Keycloak login form.
9
+ * - The iframe src is https://www.codebuddy.cn/auth/realms/copilot/protocol/openid-connect/auth?...
10
+ * - Inside the iframe:
11
+ * Phone input: input#phoneNumber.kc-phone-number-input (placeholder "请输入你的手机号")
12
+ * Country selector: .kc-country-selector (default +86 China)
13
+ * Country options: .kc-country-option (text "中国香港" = +852 Hong Kong)
14
+ * Code input: input#code.pf-c-form-control (placeholder "请输入验证码")
15
+ * Send code btn: input.btn-lg.code-btn (value "获取验证码")
16
+ * Submit button: input#kc-login[type=submit] (value "登录")
17
+ * Form: form#kc-form-login
18
+ *
19
+ * This function is PURE page-interaction — it does not call 5sim or OAuth. The manager
20
+ * owns those concerns and passes the SMS code via `pollSmsPromise`.
21
+ *
22
+ * Flow:
23
+ * 1. Navigate to www.codebuddy.cn/login
24
+ * 2. Switch to phone-number tab (手机号)
25
+ * 3. Wait for iframe #phone-iframe to load
26
+ * 4. Select country (Hong Kong +852 if phone starts with +852, else leave default)
27
+ * 5. Enter the phone number (local portion, without country code)
28
+ * 6. Click "获取验证码" (send SMS code)
29
+ * 7. Await the SMS code from pollSmsPromise
30
+ * 8. Enter the code into #code input
31
+ * 9. Click #kc-login (submit)
32
+ * 10. Probe for captcha → if found, return needs_manual
33
+ * 11. Confirm registration success (URL change / logged-in indicator)
34
+ *
35
+ * Returns: { status: "success" | "needs_manual" | "failed", error?, captcha? }
36
+ */
37
+
38
+ // Trailing slash required — without it the CDN returns 301 and SPA may not boot
39
+ const CODEBUDDY_CN_LOGIN_URL = "https://www.codebuddy.cn/login/";
40
+ const CODEBUDDY_CN_LOGIN_URL_FALLBACKS = [
41
+ "https://www.codebuddy.cn/login/",
42
+ "https://www.codebuddy.cn/login",
43
+ "https://www.codebuddy.cn/register/",
44
+ "https://copilot.tencent.com/login/",
45
+ ];
46
+ const NAV_MAX_ATTEMPTS = 5;
47
+ const NAV_TIMEOUT_MS = 60_000;
48
+ const SPA_TIMEOUT_MS = 60_000;
49
+
50
+ // Main page selectors (outside iframe)
51
+ const PHONE_TAB_SELECTORS = [
52
+ "text=手机号",
53
+ "div:has-text('手机号')",
54
+ "span:has-text('手机号')",
55
+ "[class*='phone']:has-text('手机号')",
56
+ "div.kc-phone-tab:has-text('手机号')",
57
+ ];
58
+ // Any of these means the login SPA finished booting
59
+ const SPA_READY_SELECTORS = [
60
+ "text=手机号",
61
+ "text=其他登录方式",
62
+ "text=微信",
63
+ "#phone-iframe",
64
+ ".login-phone-box",
65
+ ];
66
+
67
+ // Iframe selector
68
+ const PHONE_IFRAME_SELECTOR = "#phone-iframe";
69
+
70
+ // ─── Iframe-internal selectors (Keycloak form) ──────────────────────────────
71
+ const IFRAME_PHONE_INPUT = "#phoneNumber";
72
+ const IFRAME_COUNTRY_SELECTOR = ".kc-country-selector";
73
+ const IFRAME_COUNTRY_OPTIONS = ".kc-country-option";
74
+ const IFRAME_COUNTRY_CODE_TEXT = ".kc-country-code-text";
75
+ const IFRAME_CODE_INPUT = "#code";
76
+ const IFRAME_SEND_CODE_BTN = "input.btn-lg.code-btn";
77
+ const IFRAME_SEND_CODE_BTN_ALT = ".code-btn";
78
+ const IFRAME_SUBMIT_BTN = "#kc-login";
79
+ const IFRAME_FORM = "#kc-form-login";
80
+
81
+ // Captcha detection indicators (Tencent TCaptcha + common widgets)
82
+ const CAPTCHA_SELECTORS = [
83
+ 'iframe[src*="captcha"]',
84
+ 'iframe[src*="tcaptcha"]',
85
+ "#tcaptcha",
86
+ "#tcaptcha_transform",
87
+ ".nc_iconfont",
88
+ ".nc_wrapper",
89
+ '[class*="captcha"]',
90
+ '[id*="captcha"]',
91
+ 'text=滑块',
92
+ 'text=拖动',
93
+ ];
94
+
95
+ // Logged-in success indicators (post-registration, check both main page and iframe)
96
+ const LOGGED_IN_SELECTORS = [
97
+ '[class*="avatar"]',
98
+ '[class*="user-info"]',
99
+ '[class*="logout"]',
100
+ 'text=退出登录',
101
+ 'text=Logout',
102
+ 'text=Sign out',
103
+ ];
104
+
105
+ // Error message selectors inside the iframe
106
+ const IFRAME_ERROR_SELECTORS = [
107
+ "#input-error",
108
+ ".pf-c-form__helper-text.pf-m-error",
109
+ ".kc-feedback-text",
110
+ ];
111
+
112
+ /**
113
+ * Run the phone-number registration automation.
114
+ *
115
+ * @param {object} opts
116
+ * @param {import('playwright').Page} opts.page Playwright page (from createFreshContext)
117
+ * @param {string} [opts.phone] Pre-ordered phone (legacy). Prefer resolvePhone.
118
+ * @param {function} [opts.resolvePhone] async () => phone — called ONLY after login form
119
+ * is ready so 5sim is not billed if proxy/nav fails.
120
+ * @param {Promise<string>} [opts.pollSmsPromise] Legacy: pre-started SMS poll (discouraged —
121
+ * timer races navigation). Prefer waitForSms.
122
+ * @param {function} [opts.waitForSms] async () => code — called ONLY after "send
123
+ * code" click so the 90s window is full for OTP delivery.
124
+ * @param {function} [opts.onStep] (step, message) => void — progress reporting
125
+ * @param {function} [opts.phoneFormatter] (phone) => formattedPhone — adapt format for the form
126
+ * @param {object} [opts.timeouts]
127
+ * @param {number} [opts.timeouts.nav=45000] Navigation timeout
128
+ * @param {number} [opts.timeouts.action=15000] Per-action (locator/click/fill) timeout
129
+ * @param {number} [opts.timeouts.codeWait=900000] Max wait for SMS code (overridden by 5sim 60s timeout)
130
+ * @param {number} [opts.timeouts.postSubmit=10000] Wait after submit before captcha/success probe
131
+ * @returns {Promise<{status:string, error?:string, captcha?:boolean}>}
132
+ */
133
+ export async function runCodeBuddyCnPhoneRegistration({
134
+ page,
135
+ phone: phoneOpt,
136
+ resolvePhone,
137
+ pollSmsPromise,
138
+ waitForSms,
139
+ onStep,
140
+ phoneFormatter = (p) => p,
141
+ timeouts = {},
142
+ }) {
143
+ const nav = timeouts.nav ?? 90_000;
144
+ const action = timeouts.action ?? 15_000;
145
+ const codeWait = timeouts.codeWait ?? 900_000;
146
+ const postSubmit = timeouts.postSubmit ?? 10_000;
147
+
148
+ const reportStep = (step, message) => onStep?.(step, message);
149
+
150
+ try {
151
+ // Step 1: Navigate — rotating proxy often fails first try; retry until SPA boots
152
+ reportStep("cn_opening_login_page", "Opening CodeBuddy CN login page");
153
+
154
+ // ponytail: China residential proxies hang on Google tracker CONNECT; abort them so SPA can boot
155
+ try {
156
+ await page.context().route("**/*", (route) => {
157
+ const u = route.request().url();
158
+ if (/googletagmanager|googleadservices|google-analytics|doubleclick|facebook|hotjar|clarity\.ms|hm\.baidu|google\.com\/rmkt/i.test(u)) {
159
+ return route.abort();
160
+ }
161
+ return route.continue();
162
+ });
163
+ } catch {
164
+ // route may already be set on retries
165
+ }
166
+
167
+ let phoneFrame = null;
168
+ for (let navAttempt = 1; navAttempt <= NAV_MAX_ATTEMPTS; navAttempt++) {
169
+ try {
170
+ const targetUrl = CODEBUDDY_CN_LOGIN_URL_FALLBACKS[(navAttempt - 1) % CODEBUDDY_CN_LOGIN_URL_FALLBACKS.length];
171
+ reportStep("cn_nav_attempt", `Navigation attempt ${navAttempt}/${NAV_MAX_ATTEMPTS} → ${targetUrl}`);
172
+
173
+ // Between retries, hard-reload by clearing cookies for codebuddy so CDN/session glitches reset
174
+ if (navAttempt > 1) {
175
+ await page.context().clearCookies().catch(() => {});
176
+ await page.waitForTimeout(1_500);
177
+ }
178
+
179
+ // commit only — domcontentloaded stalls when any subresource (ads/CDN) hangs via proxy
180
+ await page.goto(targetUrl, {
181
+ waitUntil: "commit",
182
+ timeout: NAV_TIMEOUT_MS,
183
+ });
184
+
185
+ // Give the SPA a short moment to mount React/Vue after document commit
186
+ await page.waitForTimeout(2_500);
187
+
188
+ // SPA shell loads first; wait for any login UI marker (not networkidle — long-lived sockets)
189
+ const spaReady = await waitForAnyVisible(page, SPA_READY_SELECTORS, SPA_TIMEOUT_MS);
190
+ if (!spaReady) {
191
+ const bodyText = await page.locator("body").innerText().catch(() => "");
192
+ const htmlLen = await page.evaluate(() => document.documentElement?.outerHTML?.length || 0).catch(() => 0);
193
+ reportStep(
194
+ "cn_spa_not_ready",
195
+ `SPA not ready after ${SPA_TIMEOUT_MS / 1000}s (url=${page.url()}, body=${String(bodyText).slice(0, 80)}, html=${htmlLen})`,
196
+ );
197
+ // If the page is completely empty, proxy likely blackholed the response
198
+ if (!bodyText && htmlLen < 200) {
199
+ reportStep("cn_proxy_empty_page", "Empty page body — proxy may be blocking codebuddy.cn");
200
+ }
201
+ continue;
202
+ }
203
+ reportStep("cn_spa_ready", "Login SPA ready");
204
+
205
+ // Step 2: Switch to phone-number tab
206
+ reportStep("cn_selecting_phone_tab", "Selecting phone-number tab");
207
+ const phoneTab = await waitForFirstVisibleLocator(page, PHONE_TAB_SELECTORS, { timeout: 15_000 });
208
+ if (phoneTab) {
209
+ await phoneTab.click().catch(() => {});
210
+ reportStep("cn_phone_tab_selected", "Phone tab selected");
211
+ await page.waitForTimeout(1_000);
212
+ } else {
213
+ reportStep("cn_phone_tab_not_found", "Phone tab not found — checking if iframe already present");
214
+ }
215
+
216
+ // Step 3: Wait for Keycloak phone iframe
217
+ reportStep("cn_waiting_for_iframe", "Waiting for phone iframe to load");
218
+ await page.locator(PHONE_IFRAME_SELECTOR).waitFor({ state: "attached", timeout: 25_000 }).catch(() => {});
219
+ phoneFrame = await getPhoneFrame(page);
220
+ if (phoneFrame) {
221
+ // Confirm phone input is actually inside the iframe
222
+ const phoneInputReady = await phoneFrame
223
+ .waitForSelector(IFRAME_PHONE_INPUT, { state: "visible", timeout: 20_000 })
224
+ .then(() => true)
225
+ .catch(() => false);
226
+ if (phoneInputReady) {
227
+ reportStep("cn_iframe_ready", "Phone iframe + #phoneNumber ready");
228
+ break;
229
+ }
230
+ reportStep("cn_iframe_empty", "Iframe found but #phoneNumber not visible yet");
231
+ phoneFrame = null;
232
+ } else {
233
+ reportStep("cn_iframe_missing", `No #phone-iframe (attempt ${navAttempt}/${NAV_MAX_ATTEMPTS})`);
234
+ }
235
+ } catch (navErr) {
236
+ reportStep(
237
+ "cn_nav_retry",
238
+ `Navigation attempt ${navAttempt}/${NAV_MAX_ATTEMPTS} failed: ${String(navErr.message || navErr).slice(0, 120)}`,
239
+ );
240
+ }
241
+ }
242
+
243
+ if (!phoneFrame) {
244
+ return {
245
+ status: "failed",
246
+ error: `Could not load CodeBuddy CN phone form after ${NAV_MAX_ATTEMPTS} attempts (proxy/SPA)`,
247
+ };
248
+ }
249
+
250
+ // Wait for the form to render inside the iframe
251
+ await phoneFrame.waitForSelector(iframeSelector(IFRAME_FORM), { timeout: action }).catch(() => {});
252
+ await phoneFrame.waitForSelector(iframeSelector(IFRAME_PHONE_INPUT), { state: "visible", timeout: action }).catch(() => {});
253
+
254
+ // Step 3b: Order phone ONLY after form is ready (saves balance if nav/proxy failed above).
255
+ let phone = phoneOpt;
256
+ if (typeof resolvePhone === "function") {
257
+ reportStep("cn_ordering_after_form", "Login form ready — ordering 5sim number now (not before nav)");
258
+ phone = await resolvePhone();
259
+ }
260
+ if (!phone) {
261
+ return {
262
+ status: "failed",
263
+ error: "No phone number available (resolvePhone/phone missing)",
264
+ };
265
+ }
266
+
267
+ // Step 4: Select country if needed (Hong Kong +852 for HK numbers)
268
+ const formattedPhone = phoneFormatter(phone);
269
+ const { countryCode, localNumber } = parsePhoneNumber(formattedPhone);
270
+ reportStep("cn_selecting_country", `Selecting country code ${countryCode} for phone ${formattedPhone}`);
271
+
272
+ await selectCountry(phoneFrame, countryCode, action, reportStep);
273
+
274
+ // Step 5: Enter the phone number (local portion without country code)
275
+ reportStep("cn_entering_phone", `Entering phone number: ${localNumber}`);
276
+ const phoneInput = phoneFrame.locator(iframeSelector(IFRAME_PHONE_INPUT)).first();
277
+ try {
278
+ await phoneInput.waitFor({ state: "visible", timeout: action });
279
+ } catch {
280
+ return {
281
+ status: "failed",
282
+ error: "Could not find the phone number input (#phoneNumber) inside the iframe",
283
+ };
284
+ }
285
+ await fillInputResilient(phoneInput, localNumber);
286
+ reportStep("cn_phone_entered", `Phone number entered: ${localNumber}`);
287
+
288
+ // Step 5b: Agreement checkbox is under "我已阅读并同意" — use last .t-checkbox
289
+ // (first one is often the WeChat tab state, not the phone-login consent).
290
+ try {
291
+ const agreementCheckbox = page.locator(".t-checkbox").last();
292
+ if (await agreementCheckbox.isVisible({ timeout: 3_000 }).catch(() => false)) {
293
+ await agreementCheckbox.click().catch(() => {});
294
+ reportStep("cn_agreement_checked", "Agreement checkbox checked");
295
+ }
296
+ } catch {
297
+ // Non-fatal — checkbox may not be present in all flows
298
+ }
299
+
300
+ // Step 6: Click "获取验证码" (send SMS code)
301
+ reportStep("cn_clicking_send_code", "Clicking send SMS code button");
302
+ const sendBtn = phoneFrame.locator(iframeSelector(IFRAME_SEND_CODE_BTN)).first();
303
+ let sendBtnVisible = false;
304
+ try {
305
+ await sendBtn.waitFor({ state: "visible", timeout: 5_000 });
306
+ sendBtnVisible = true;
307
+ } catch {
308
+ // Try alternate selector
309
+ const sendBtnAlt = phoneFrame.locator(iframeSelector(IFRAME_SEND_CODE_BTN_ALT)).first();
310
+ try {
311
+ await sendBtnAlt.waitFor({ state: "visible", timeout: 5_000 });
312
+ sendBtnVisible = true;
313
+ } catch {
314
+ sendBtnVisible = false;
315
+ }
316
+ }
317
+ if (!sendBtnVisible) {
318
+ return {
319
+ status: "failed",
320
+ error: "Could not find the send-SMS-code button (.code-btn) inside the iframe",
321
+ };
322
+ }
323
+ await sendBtn.click().catch(() => {});
324
+ reportStep("cn_send_code_clicked", "Send code button clicked");
325
+
326
+ // Check for immediate error (e.g. invalid phone, rate limit) — wait for error or code input to be ready
327
+ await phoneFrame.waitForSelector(IFRAME_CODE_INPUT, { state: "visible", timeout: 5_000 }).catch(() => {});
328
+ const iframeError = await checkIframeError(phoneFrame);
329
+ if (iframeError) {
330
+ return {
331
+ status: "failed",
332
+ error: `Form error after sending code: ${iframeError}`,
333
+ };
334
+ }
335
+
336
+ // Step 7: Wait for the SMS code from 5sim — start clock AFTER send-code click.
337
+ // Previously pollSmsPromise started at order time; slow China-proxy nav burned the
338
+ // whole 90s before OTP was even requested → false sms_timeout + banned numbers.
339
+ reportStep("cn_waiting_for_sms", "Waiting for SMS verification code from 5sim (timer starts now)");
340
+ let smsCode;
341
+ try {
342
+ let smsPromise;
343
+ if (typeof waitForSms === "function") {
344
+ smsPromise = Promise.resolve().then(() => waitForSms());
345
+ } else if (pollSmsPromise) {
346
+ smsPromise = pollSmsPromise;
347
+ } else {
348
+ throw new Error("No waitForSms/pollSmsPromise provided");
349
+ }
350
+ const codeTimeoutPromise = new Promise((_, reject) =>
351
+ setTimeout(() => reject(new Error("Timed out waiting for SMS code")), codeWait),
352
+ );
353
+ smsCode = await Promise.race([smsPromise, codeTimeoutPromise]);
354
+ } catch (err) {
355
+ // Re-throw FiveSimTimeoutError so processAccount can BAN the number
356
+ if (err && err.name === "FiveSimTimeoutError") throw err;
357
+ return {
358
+ status: "failed",
359
+ error: `Failed to receive SMS code: ${err.message}`,
360
+ };
361
+ }
362
+
363
+ if (!smsCode) {
364
+ return {
365
+ status: "failed",
366
+ error: "Received empty SMS code from 5sim",
367
+ };
368
+ }
369
+ reportStep("cn_sms_received", `SMS code received: ${smsCode}`);
370
+
371
+ // Step 8: Enter the OTP code into #code input
372
+ reportStep("cn_entering_code", "Entering SMS verification code");
373
+ const codeInput = phoneFrame.locator(iframeSelector(IFRAME_CODE_INPUT)).first();
374
+ try {
375
+ await codeInput.waitFor({ state: "visible", timeout: action });
376
+ } catch {
377
+ return {
378
+ status: "failed",
379
+ error: "Could not find the verification code input (#code) inside the iframe",
380
+ };
381
+ }
382
+ await fillInputResilient(codeInput, smsCode);
383
+ reportStep("cn_code_entered", "Verification code entered");
384
+
385
+ // Step 9: Click submit (#kc-login)
386
+ // Retry up to 3 times if "account restricted" (账号访问受限) is shown —
387
+ // refresh + re-enter phone + code each time (SMS code valid for 5 min).
388
+ // After a clean submit, poll up to SESSION_WAIT_MS for Keycloak cookies —
389
+ // China residential proxies often leave a blank SPA shell for 5–15s before
390
+ // the OIDC handoff sets KEYCLOAK_IDENTITY (previous 2s check was too short).
391
+ const MAX_SUBMIT_RETRIES = 3;
392
+ const SESSION_WAIT_MS = Math.max(postSubmit, 20_000);
393
+ let submitSuccess = false;
394
+ for (let retry = 0; retry < MAX_SUBMIT_RETRIES; retry++) {
395
+ reportStep("cn_submitting", `Clicking submit button (attempt ${retry + 1}/${MAX_SUBMIT_RETRIES})`);
396
+
397
+ // Re-get the phone frame (it may have changed after refresh)
398
+ let currentFrame = await getPhoneFrame(page);
399
+ if (!currentFrame) {
400
+ // Iframe may already be gone if submit on a previous attempt started redirect
401
+ const earlySession = await waitForKeycloakSession(page, { timeoutMs: 5_000, reportStep });
402
+ if (earlySession.ok) {
403
+ reportStep("cn_session_cookies", `Keycloak session after iframe detach (${earlySession.cookie})`);
404
+ return { status: "success" };
405
+ }
406
+ return { status: "failed", error: "Lost phone iframe after submit" };
407
+ }
408
+
409
+ // Check if form is still on the login page (needs re-input) or already submitted
410
+ const hasPhoneInput = await currentFrame.locator(iframeSelector(IFRAME_PHONE_INPUT)).first().isVisible({ timeout: 3_000 }).catch(() => false);
411
+
412
+ if (hasPhoneInput && retry > 0) {
413
+ // Re-enter phone number and code after refresh
414
+ reportStep("cn_re_entering_after_refresh", `Re-entering phone + code after refresh (retry ${retry})`);
415
+ await selectCountry(currentFrame, countryCode, action, reportStep);
416
+ const phoneInputRetry = currentFrame.locator(iframeSelector(IFRAME_PHONE_INPUT)).first();
417
+ await fillInputResilient(phoneInputRetry, localNumber);
418
+
419
+ // Re-check agreement checkbox
420
+ try {
421
+ const cb = page.locator(".t-checkbox").first();
422
+ if (await cb.isVisible({ timeout: 2_000 }).catch(() => false)) {
423
+ await cb.click().catch(() => {});
424
+ }
425
+ } catch {
426
+ // non-fatal
427
+ }
428
+
429
+ // Re-enter code
430
+ const codeInputRetry = currentFrame.locator(iframeSelector(IFRAME_CODE_INPUT)).first();
431
+ if (await codeInputRetry.isVisible({ timeout: 3_000 }).catch(() => false)) {
432
+ await fillInputResilient(codeInputRetry, smsCode);
433
+ }
434
+ }
435
+
436
+ // Prefer real form submit over a bare button click (Keycloak listens to form submit).
437
+ await submitLoginForm(currentFrame, action);
438
+ reportStep("cn_submitted", `Registration form submitted (attempt ${retry + 1})`);
439
+
440
+ // Brief settle then poll for session / errors / captcha / restriction
441
+ await page.waitForLoadState("domcontentloaded", { timeout: 5_000 }).catch(() => {});
442
+ await page.waitForTimeout(1_000);
443
+
444
+ // Live re-fetch frame — redirect may replace the iframe mid-flight
445
+ currentFrame = (await getPhoneFrame(page)) || currentFrame;
446
+
447
+ // Check for "account restricted" (账号访问受限)
448
+ const restrictionDetected = await checkAccountRestricted(currentFrame);
449
+ if (restrictionDetected) {
450
+ reportStep("cn_account_restricted", `Account restricted (attempt ${retry + 1}) — refreshing page and retrying`);
451
+ await page.reload({ waitUntil: "domcontentloaded", timeout: nav }).catch(() => {});
452
+ await waitForAnyVisible(page, SPA_READY_SELECTORS, 20_000);
453
+ const phoneTabRetry = await waitForFirstVisibleLocator(page, PHONE_TAB_SELECTORS, { timeout: action });
454
+ if (phoneTabRetry) {
455
+ await phoneTabRetry.click().catch(() => {});
456
+ await page.locator(PHONE_IFRAME_SELECTOR).waitFor({ state: "attached", timeout: 10_000 }).catch(() => {});
457
+ }
458
+ continue; // Retry submit
459
+ }
460
+
461
+ // Captcha
462
+ reportStep("cn_checking_captcha", "Checking for captcha");
463
+ const captchaDetected = await detectCaptcha(page, currentFrame, 3_000);
464
+ if (captchaDetected) {
465
+ reportStep("cn_captcha_detected", "Captcha appeared during registration — manual assist needed");
466
+ return {
467
+ status: "needs_manual",
468
+ error: "A captcha appeared during registration. Please complete it manually in the opened browser window.",
469
+ captcha: true,
470
+ };
471
+ }
472
+
473
+ // Form errors (wrong OTP, rate limit, etc.)
474
+ const postSubmitError = await checkIframeError(currentFrame);
475
+ if (postSubmitError) {
476
+ return {
477
+ status: "failed",
478
+ error: `Form error after submit: ${postSubmitError}`,
479
+ };
480
+ }
481
+
482
+ // Poll for Keycloak session cookies (slow China proxy / blank SPA shell)
483
+ reportStep("cn_waiting_session", `Waiting up to ${Math.round(SESSION_WAIT_MS / 1000)}s for Keycloak session cookies`);
484
+ const session = await waitForKeycloakSession(page, {
485
+ timeoutMs: SESSION_WAIT_MS,
486
+ reportStep,
487
+ alsoCheckFrame: () => getPhoneFrame(page),
488
+ });
489
+ if (session.ok) {
490
+ reportStep("cn_session_cookies", `Keycloak session cookies present (${session.cookie}) — registration success`);
491
+ return { status: "success" };
492
+ }
493
+
494
+ // Still on login form? Click may not have submitted — retry
495
+ const stillOnForm = await isLoginFormStillVisible(page);
496
+ if (stillOnForm && retry < MAX_SUBMIT_RETRIES - 1) {
497
+ reportStep("cn_submit_no_effect", "Login form still visible after submit — retrying");
498
+ continue;
499
+ }
500
+
501
+ // Blank SPA / mid-redirect: try landing on home to finish OIDC handoff
502
+ reportStep("cn_session_nudge", "No session yet — navigating to home to complete OIDC handoff");
503
+ await page.goto("https://www.codebuddy.cn/", { waitUntil: "domcontentloaded", timeout: nav }).catch(() => {});
504
+ await page.waitForTimeout(2_000);
505
+ const sessionAfterHome = await waitForKeycloakSession(page, { timeoutMs: 10_000, reportStep });
506
+ if (sessionAfterHome.ok) {
507
+ reportStep("cn_session_cookies", `Keycloak session after home nudge (${sessionAfterHome.cookie})`);
508
+ return { status: "success" };
509
+ }
510
+
511
+ submitSuccess = true;
512
+ break;
513
+ }
514
+
515
+ if (!submitSuccess) {
516
+ reportStep("cn_submit_retries_exhausted", `Account restricted after ${MAX_SUBMIT_RETRIES} retries — needs manual`);
517
+ return {
518
+ status: "needs_manual",
519
+ error: `Account restricted after ${MAX_SUBMIT_RETRIES} refresh retries. Please try with a different VPN/proxy or complete manually.`,
520
+ };
521
+ }
522
+
523
+ // Step 11: Final confirmation (UI markers OR session cookies)
524
+ reportStep("cn_confirming_success", "Confirming registration success");
525
+ const sessionFinal = await waitForKeycloakSession(page, { timeoutMs: 5_000 });
526
+ if (sessionFinal.ok) {
527
+ reportStep("cn_registration_success", `Phone registration completed (Keycloak session: ${sessionFinal.cookie})`);
528
+ return { status: "success" };
529
+ }
530
+
531
+ const success = await confirmRegistrationSuccess(page, phoneFrame, 10_000);
532
+ if (success) {
533
+ reportStep("cn_registration_success", "Phone registration completed successfully (UI markers)");
534
+ return { status: "success" };
535
+ }
536
+
537
+ // Ambiguous: submit happened, blank SPA, no cookies — keep headed browser for operator.
538
+ // Hard-failing here burned working numbers when the handoff was just slow / captcha-soft.
539
+ const diag = await collectPostLoginDiagnostics(page);
540
+ reportStep("cn_success_unconfirmed", `No Keycloak session after submit — ${diag.summary}`);
541
+ return {
542
+ status: "needs_manual",
543
+ error: `Login submit finished but no Keycloak session yet (${diag.summary}). Complete login in the headed browser or retry with a fresh China proxy.`,
544
+ };
545
+ } catch (err) {
546
+ // Re-throw FiveSimTimeoutError so processAccount can BAN the number
547
+ if (err && err.name === "FiveSimTimeoutError") throw err;
548
+ reportStep("cn_automation_error", `Phone registration automation error: ${err.message}`);
549
+ return {
550
+ status: "failed",
551
+ error: err.message || "Unexpected error during phone registration",
552
+ };
553
+ }
554
+ }
555
+
556
+ // ─── Helper functions ─────────────────────────────────────────────────────
557
+
558
+ /**
559
+ * Get the phone iframe's Frame object from the page.
560
+ * The iframe id is #phone-iframe, src contains /auth/realms/copilot/.
561
+ */
562
+ async function getPhoneFrame(page) {
563
+ // Prefer locator contentFrame (waits for attach) over scanning frames too early
564
+ try {
565
+ await page.locator(PHONE_IFRAME_SELECTOR).waitFor({ state: "attached", timeout: 5_000 });
566
+ const iframeElement = await page.locator(PHONE_IFRAME_SELECTOR).elementHandle({ timeout: 2_000 });
567
+ if (iframeElement) {
568
+ const frame = await iframeElement.contentFrame();
569
+ if (frame) return frame;
570
+ }
571
+ } catch {
572
+ // fall through
573
+ }
574
+
575
+ const frames = page.frames();
576
+ for (const frame of frames) {
577
+ const url = frame.url();
578
+ if (url.includes("codebuddy.cn/auth/realms/copilot") || url.includes("protocol/openid-connect")) {
579
+ return frame;
580
+ }
581
+ }
582
+
583
+ return null;
584
+ }
585
+
586
+ /**
587
+ * Prefix a selector for use inside a frame (frames don't need special prefixing,
588
+ * but this keeps the code explicit about which context we're querying).
589
+ */
590
+ function iframeSelector(sel) {
591
+ return sel;
592
+ }
593
+
594
+ /**
595
+ * Parse a phone number into country code and local number.
596
+ * Handles +852XXXXXXXX, +86XXXXXXXX, etc.
597
+ * @returns {{countryCode: string, localNumber: string}}
598
+ */
599
+ function parsePhoneNumber(phone) {
600
+ // Normalize: strip spaces/dashes/parens, ensure leading +
601
+ let cleaned = String(phone).replace(/[\s\-()]/g, "");
602
+ if (!cleaned.startsWith("+") && /^\d+$/.test(cleaned)) {
603
+ cleaned = "+" + cleaned;
604
+ }
605
+
606
+ // +852 (Hong Kong)
607
+ if (cleaned.startsWith("+852")) {
608
+ return { countryCode: "+852", localNumber: cleaned.slice(4) };
609
+ }
610
+ // +86 (China)
611
+ if (cleaned.startsWith("+86")) {
612
+ return { countryCode: "+86", localNumber: cleaned.slice(3) };
613
+ }
614
+ // +1 (US/Canada)
615
+ if (cleaned.startsWith("+1")) {
616
+ return { countryCode: "+1", localNumber: cleaned.slice(2) };
617
+ }
618
+ // No recognizable country code — assume the number is already local
619
+ return { countryCode: "", localNumber: cleaned.replace(/^\+/, "") };
620
+ }
621
+
622
+ /**
623
+ * Select the country code in the Keycloak form dropdown.
624
+ * If the current country code already matches, do nothing.
625
+ */
626
+ async function selectCountry(frame, targetCountryCode, actionTimeout, reportStep) {
627
+ if (!targetCountryCode) return; // No specific country to select
628
+
629
+ try {
630
+ // Check current country code
631
+ const currentCodeEl = frame.locator(iframeSelector(IFRAME_COUNTRY_CODE_TEXT)).first();
632
+ const currentCode = await currentCodeEl.textContent({ timeout: 5_000 }).catch(() => "");
633
+ const trimmedCode = String(currentCode).trim();
634
+
635
+ if (trimmedCode === targetCountryCode) {
636
+ reportStep?.("cn_country_already_selected", `Country code already ${targetCountryCode}`);
637
+ return;
638
+ }
639
+
640
+ // Click the country selector to open dropdown
641
+ reportStep?.("cn_opening_country_dropdown", `Opening country dropdown (current: ${trimmedCode}, target: ${targetCountryCode})`);
642
+ const selector = frame.locator(iframeSelector(IFRAME_COUNTRY_SELECTOR)).first();
643
+ await selector.waitFor({ state: "visible", timeout: actionTimeout });
644
+ await selector.click().catch(() => {});
645
+ // Wait for dropdown options to appear
646
+ await frame.locator(iframeSelector(IFRAME_COUNTRY_OPTIONS)).first()
647
+ .waitFor({ state: "visible", timeout: 5_000 }).catch(() => {});
648
+
649
+ // Find the option matching the target country code
650
+ const options = frame.locator(iframeSelector(IFRAME_COUNTRY_OPTIONS));
651
+ const count = await options.count();
652
+
653
+ for (let i = 0; i < count; i++) {
654
+ const option = options.nth(i);
655
+ const optionText = await option.textContent().catch(() => "");
656
+ if (String(optionText).includes(targetCountryCode)) {
657
+ await option.click().catch(() => {});
658
+ // Confirm selection applied
659
+ await frame.locator(iframeSelector(IFRAME_COUNTRY_CODE_TEXT))
660
+ .filter({ hasText: targetCountryCode })
661
+ .first()
662
+ .waitFor({ state: "visible", timeout: 3_000 })
663
+ .catch(() => {});
664
+ reportStep?.("cn_country_selected", `Country selected: ${String(optionText).trim()}`);
665
+ return;
666
+ }
667
+ }
668
+
669
+ // If no matching option found, close dropdown by clicking elsewhere
670
+ reportStep?.("cn_country_not_found", `Country code ${targetCountryCode} not found in dropdown; using default`);
671
+ await frame.locator("body").click().catch(() => {});
672
+ } catch (err) {
673
+ reportStep?.("cn_country_select_error", `Country selection error: ${err.message}`);
674
+ // Non-fatal — continue with default country
675
+ }
676
+ }
677
+
678
+ /**
679
+ * Try a list of selectors and return the first visible locator, or null.
680
+ */
681
+ async function waitForFirstVisibleLocator(page, selectors, { timeout = 10_000 } = {}) {
682
+ for (const sel of selectors) {
683
+ try {
684
+ const locator = page.locator(sel).first();
685
+ await locator.waitFor({ state: "visible", timeout: Math.min(timeout, 5_000) });
686
+ return locator;
687
+ } catch {
688
+ // Try next selector
689
+ }
690
+ }
691
+ return null;
692
+ }
693
+
694
+ /** Wait until ANY of the selectors becomes visible (parallel race). */
695
+ async function waitForAnyVisible(page, selectors, timeout = 15_000) {
696
+ const deadline = Date.now() + timeout;
697
+ while (Date.now() < deadline) {
698
+ for (const sel of selectors) {
699
+ try {
700
+ const locator = page.locator(sel).first();
701
+ if (await locator.isVisible().catch(() => false)) return true;
702
+ } catch {
703
+ // next
704
+ }
705
+ }
706
+ // tiny yield so we don't busy-spin; not a page-load wait
707
+ await new Promise((r) => setTimeout(r, 250));
708
+ }
709
+ return false;
710
+ }
711
+
712
+ /**
713
+ * Fill an input resiliently (some SPAs need focus + clear before fill).
714
+ */
715
+ async function fillInputResilient(locator, value) {
716
+ try {
717
+ await locator.click();
718
+ await locator.fill("");
719
+ await locator.fill(value);
720
+ return true;
721
+ } catch {
722
+ try {
723
+ // Fallback: type character by character
724
+ await locator.click();
725
+ await locator.press("Control+a");
726
+ await locator.type(value, { delay: 50 });
727
+ return true;
728
+ } catch {
729
+ return false;
730
+ }
731
+ }
732
+ }
733
+
734
+ /** Cookie names that prove a real Keycloak login session on codebuddy.cn */
735
+ const KEYCLOAK_SESSION_COOKIE_NAMES = [
736
+ "KEYCLOAK_IDENTITY",
737
+ "KEYCLOAK_SESSION",
738
+ "KEYCLOAK_IDENTITY_LEGACY",
739
+ "KEYCLOAK_SESSION_LEGACY",
740
+ ];
741
+
742
+ function findKeycloakSessionCookie(cookies = []) {
743
+ for (const name of KEYCLOAK_SESSION_COOKIE_NAMES) {
744
+ if (cookies.some((c) => c.name === name)) return name;
745
+ }
746
+ // Any KEYCLOAK_* identity-ish cookie (defensive against renames)
747
+ const loose = cookies.find(
748
+ (c) => c.name.startsWith("KEYCLOAK_") && !/locale|theme|restart/i.test(c.name),
749
+ );
750
+ return loose?.name || null;
751
+ }
752
+
753
+ /**
754
+ * Poll until Keycloak session cookies appear, or timeout.
755
+ * Also bails early if captcha / account-restricted / form error show up.
756
+ */
757
+ async function waitForKeycloakSession(page, { timeoutMs = 20_000, reportStep, alsoCheckFrame } = {}) {
758
+ const deadline = Date.now() + timeoutMs;
759
+ let lastReport = 0;
760
+ while (Date.now() < deadline) {
761
+ const cookies = await page.context().cookies().catch(() => []);
762
+ const hit = findKeycloakSessionCookie(cookies);
763
+ if (hit) return { ok: true, cookie: hit, cookies };
764
+
765
+ // Soft success only for strong app tokens — NOT bare "session" / AUTH_SESSION_ID
766
+ // (those appear mid-OIDC and caused false positives + wasted numbers).
767
+ try {
768
+ const url = page.url();
769
+ if (url && !url.includes("/login") && !url.includes("/auth/realms")) {
770
+ const appSession = cookies.find((c) =>
771
+ /^(access_token|cb_token|codebuddy)/i.test(c.name)
772
+ || (c.name === "token" && c.domain?.includes("codebuddy")),
773
+ );
774
+ if (appSession) return { ok: true, cookie: appSession.name, cookies };
775
+ }
776
+ } catch {
777
+ // ignore
778
+ }
779
+
780
+ if (alsoCheckFrame) {
781
+ const frame = await alsoCheckFrame().catch(() => null);
782
+ if (frame) {
783
+ if (await checkAccountRestricted(frame)) {
784
+ return { ok: false, cookies, reason: "restricted" };
785
+ }
786
+ const err = await checkIframeError(frame);
787
+ if (err) return { ok: false, cookies, reason: `form_error:${err}` };
788
+ }
789
+ }
790
+
791
+ if (reportStep && Date.now() - lastReport > 4_000) {
792
+ lastReport = Date.now();
793
+ const remaining = Math.max(0, Math.round((deadline - Date.now()) / 1000));
794
+ reportStep("cn_waiting_session", `Still waiting for Keycloak session… ${remaining}s left`);
795
+ }
796
+ await page.waitForTimeout(500);
797
+ }
798
+ const cookies = await page.context().cookies().catch(() => []);
799
+ return { ok: false, cookies };
800
+ }
801
+
802
+ /**
803
+ * Submit Keycloak login form robustly (click #kc-login + form.requestSubmit fallback).
804
+ */
805
+ async function submitLoginForm(frame, actionTimeout = 15_000) {
806
+ const submitBtn = frame.locator(iframeSelector(IFRAME_SUBMIT_BTN)).first();
807
+ try {
808
+ await submitBtn.waitFor({ state: "visible", timeout: actionTimeout });
809
+ await submitBtn.click({ timeout: 5_000 }).catch(() => {});
810
+ } catch {
811
+ // fall through to form submit
812
+ }
813
+
814
+ // Explicit form submit — more reliable than button click on some Keycloak themes
815
+ try {
816
+ await frame.evaluate(() => {
817
+ const form = document.querySelector("#kc-form-login") || document.querySelector("form");
818
+ if (!form) return;
819
+ if (typeof form.requestSubmit === "function") {
820
+ const btn = form.querySelector("#kc-login") || form.querySelector('[type="submit"]');
821
+ if (btn) form.requestSubmit(btn);
822
+ else form.requestSubmit();
823
+ } else {
824
+ form.submit();
825
+ }
826
+ });
827
+ } catch {
828
+ await frame.locator(iframeSelector(IFRAME_CODE_INPUT)).first().press("Enter").catch(() => {});
829
+ }
830
+ }
831
+
832
+ async function isLoginFormStillVisible(page) {
833
+ const frame = await getPhoneFrame(page);
834
+ if (!frame) return false;
835
+ return frame.locator(iframeSelector(IFRAME_PHONE_INPUT)).first().isVisible({ timeout: 1_500 }).catch(() => false);
836
+ }
837
+
838
+ async function collectPostLoginDiagnostics(page) {
839
+ let url = "";
840
+ try {
841
+ url = page.url();
842
+ } catch {
843
+ url = "(unknown)";
844
+ }
845
+ const cookies = await page.context().cookies().catch(() => []);
846
+ const cookieNames = cookies.map((c) => c.name).slice(0, 20).join(",") || "(none)";
847
+ let bodySnippet = "";
848
+ try {
849
+ bodySnippet = await page.evaluate(() => (document.body?.innerText || "").replace(/\s+/g, " ").trim().slice(0, 120));
850
+ } catch {
851
+ bodySnippet = "";
852
+ }
853
+ const frame = await getPhoneFrame(page);
854
+ let frameHint = "no-iframe";
855
+ if (frame) {
856
+ try {
857
+ frameHint = (await frame.url()).slice(0, 80);
858
+ } catch {
859
+ frameHint = "iframe-detached";
860
+ }
861
+ }
862
+ const summary = `url=${url.slice(0, 60)} cookies=[${cookieNames}] frame=${frameHint}${bodySnippet ? ` text="${bodySnippet}"` : ""}`;
863
+ return { summary, url, cookieNames, bodySnippet };
864
+ }
865
+
866
+ /**
867
+ * Check for "account restricted" message in the iframe (and main page).
868
+ * Tencent shows "账号访问受限" when a virtual number / risk policy blocks login.
869
+ */
870
+ async function checkAccountRestricted(frame) {
871
+ try {
872
+ const bodyText = await frame.evaluate(() => document.body?.innerText || "");
873
+ if (
874
+ bodyText.includes("账号访问受限")
875
+ || bodyText.includes("安全策略限制")
876
+ || bodyText.includes("访问受限")
877
+ ) {
878
+ return true;
879
+ }
880
+ } catch {
881
+ // Ignore
882
+ }
883
+ return false;
884
+ }
885
+
886
+ /**
887
+ * Check for error messages inside the iframe.
888
+ */
889
+ async function checkIframeError(frame) {
890
+ for (const sel of IFRAME_ERROR_SELECTORS) {
891
+ try {
892
+ const el = frame.locator(iframeSelector(sel)).first();
893
+ const isVisible = await el.isVisible({ timeout: 1_500 }).catch(() => false);
894
+ if (isVisible) {
895
+ const text = await el.textContent().catch(() => "");
896
+ const trimmed = String(text).trim();
897
+ if (trimmed && trimmed.length > 1) {
898
+ return trimmed;
899
+ }
900
+ }
901
+ } catch {
902
+ // Try next
903
+ }
904
+ }
905
+ // Keycloak often dumps errors into body text without a dedicated error node
906
+ try {
907
+ const bodyText = await frame.evaluate(() => (document.body?.innerText || "").replace(/\s+/g, " ").trim());
908
+ const markers = [
909
+ "验证码错误",
910
+ "验证码已过期",
911
+ "验证码无效",
912
+ "请输入正确的验证码",
913
+ "手机号格式",
914
+ "发送过于频繁",
915
+ "Invalid",
916
+ "incorrect",
917
+ ];
918
+ for (const m of markers) {
919
+ if (bodyText.includes(m)) {
920
+ // Don't treat full page chrome as error — keep snippet short
921
+ const idx = bodyText.indexOf(m);
922
+ return bodyText.slice(Math.max(0, idx - 10), idx + m.length + 40).trim();
923
+ }
924
+ }
925
+ } catch {
926
+ // ignore
927
+ }
928
+ return null;
929
+ }
930
+
931
+ /**
932
+ * Probe the page and iframe for captcha widgets.
933
+ */
934
+ async function detectCaptcha(page, frame, timeout = 5_000) {
935
+ // Check main page
936
+ for (const sel of CAPTCHA_SELECTORS) {
937
+ try {
938
+ const locator = page.locator(sel).first();
939
+ const isVisible = await locator.isVisible({ timeout: Math.min(timeout, 2_000) }).catch(() => false);
940
+ if (isVisible) return true;
941
+ } catch {
942
+ // Try next
943
+ }
944
+ }
945
+ // Check inside iframe
946
+ if (frame) {
947
+ for (const sel of CAPTCHA_SELECTORS) {
948
+ try {
949
+ const locator = frame.locator(sel).first();
950
+ const isVisible = await locator.isVisible({ timeout: Math.min(timeout, 2_000) }).catch(() => false);
951
+ if (isVisible) return true;
952
+ } catch {
953
+ // Try next
954
+ }
955
+ }
956
+ }
957
+ return false;
958
+ }
959
+
960
+ /**
961
+ * Confirm that registration succeeded by checking for strong logged-in signals.
962
+ * Do NOT accept bare `session` / AUTH_SESSION_ID alone — those appear mid-OIDC
963
+ * and previously caused false "UI markers" success → wasted 5sim numbers when
964
+ * API key capture then hard-failed on missing KEYCLOAK_IDENTITY.
965
+ */
966
+ async function confirmRegistrationSuccess(page, frame, timeout = 15_000) {
967
+ // Strong: real Keycloak identity cookies
968
+ try {
969
+ const cookies = await page.context().cookies().catch(() => []);
970
+ if (findKeycloakSessionCookie(cookies)) return true;
971
+ } catch {
972
+ // Ignore
973
+ }
974
+
975
+ // Strong: logged-in UI chrome (avatar / logout)
976
+ for (const sel of LOGGED_IN_SELECTORS) {
977
+ try {
978
+ const locator = page.locator(sel).first();
979
+ const isVisible = await locator.isVisible({ timeout: Math.min(timeout, 2_000) }).catch(() => false);
980
+ if (isVisible) return true;
981
+ } catch {
982
+ // Try next
983
+ }
984
+ }
985
+
986
+ // Soft-but-useful: left /login AND has qcloud_uid (Tencent account cookie)
987
+ try {
988
+ const url = page.url();
989
+ const cookies = await page.context().cookies().catch(() => []);
990
+ const names = new Set(cookies.map((c) => c.name));
991
+ if (
992
+ url
993
+ && !url.includes("/login")
994
+ && !url.includes("/auth/realms")
995
+ && (names.has("qcloud_uid") || names.has("qcmainCSRFToken"))
996
+ && !names.has("login_risk_state") // risk state alone often means blocked/incomplete
997
+ ) {
998
+ // Still require login form gone
999
+ const formVisible = await isLoginFormStillVisible(page).catch(() => false);
1000
+ if (!formVisible) return true;
1001
+ }
1002
+ } catch {
1003
+ // Ignore
1004
+ }
1005
+
1006
+ return false;
1007
+ }
1008
+
1009
+ export const __test__ = {
1010
+ waitForFirstVisibleLocator,
1011
+ fillInputResilient,
1012
+ detectCaptcha,
1013
+ confirmRegistrationSuccess,
1014
+ parsePhoneNumber,
1015
+ selectCountry,
1016
+ getPhoneFrame,
1017
+ findKeycloakSessionCookie,
1018
+ waitForKeycloakSession,
1019
+ submitLoginForm,
1020
+ PHONE_TAB_SELECTORS,
1021
+ PHONE_IFRAME_SELECTOR,
1022
+ IFRAME_PHONE_INPUT,
1023
+ IFRAME_CODE_INPUT,
1024
+ IFRAME_SEND_CODE_BTN,
1025
+ IFRAME_SUBMIT_BTN,
1026
+ CAPTCHA_SELECTORS,
1027
+ LOGGED_IN_SELECTORS,
1028
+ KEYCLOAK_SESSION_COOKIE_NAMES,
1029
+ };