zevairouter 1.0.154 → 1.0.155

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 (1857) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/DOCKER.md +403 -0
  3. package/README.md +49 -22
  4. package/README.zh-CN.md +18 -11
  5. package/cli/LICENSE +1 -22
  6. package/cli/app/.next-cli-build/BUILD_ID +1 -1
  7. package/cli/app/.next-cli-build/app-path-routes-manifest.json +9 -9
  8. package/cli/app/.next-cli-build/build-manifest.json +2 -2
  9. package/cli/app/.next-cli-build/required-server-files.json +4 -4
  10. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/automation/page.js +2 -2
  11. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/automation/page.js.nft.json +1 -1
  12. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/automation/page_client-reference-manifest.js +1 -1
  13. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js +1 -1
  14. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -1
  15. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  16. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +2 -2
  17. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
  18. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  19. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js +2 -2
  20. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  21. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  22. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js +1 -1
  23. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
  24. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  25. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js +2 -2
  26. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
  27. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  28. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/context/page.js +2 -2
  29. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/context/page.js.nft.json +1 -1
  30. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/context/page_client-reference-manifest.js +1 -1
  31. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js +1 -1
  32. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  33. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  34. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js +2 -2
  35. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js.nft.json +1 -1
  36. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  37. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js +1 -1
  38. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js.nft.json +1 -1
  39. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  40. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js +2 -2
  41. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js.nft.json +1 -1
  42. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  43. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js +2 -2
  44. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js.nft.json +1 -1
  45. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  46. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js +1 -1
  47. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -1
  48. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  49. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js +1 -1
  50. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  51. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  52. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/playground/page.js +1 -1
  53. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/playground/page.js.nft.json +1 -1
  54. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/playground/page_client-reference-manifest.js +1 -1
  55. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js +1 -1
  56. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
  57. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  58. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js +2 -2
  59. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
  60. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  61. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js +1 -1
  62. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
  63. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  64. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js +1 -1
  65. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
  66. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  67. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js +1 -1
  68. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
  69. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  70. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page.js +1 -1
  71. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page.js.nft.json +1 -1
  72. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
  73. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js +1 -1
  74. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
  75. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  76. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/terminal/page.js +2 -2
  77. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/terminal/page.js.nft.json +1 -1
  78. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/terminal/page_client-reference-manifest.js +1 -1
  79. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page.js +1 -1
  80. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page.js.nft.json +1 -1
  81. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  82. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js +1 -1
  83. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
  84. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  85. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js +2 -2
  86. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
  87. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  88. package/cli/app/.next-cli-build/server/app/_global-error/page.js.nft.json +1 -1
  89. package/cli/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  90. package/cli/app/.next-cli-build/server/app/_global-error.html +1 -1
  91. package/cli/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  92. package/cli/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  93. package/cli/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  94. package/cli/app/.next-cli-build/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  95. package/cli/app/.next-cli-build/server/app/_global-error.segments/_head.segment.rsc +1 -1
  96. package/cli/app/.next-cli-build/server/app/_global-error.segments/_index.segment.rsc +1 -1
  97. package/cli/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  98. package/cli/app/.next-cli-build/server/app/_not-found/page.js +1 -1
  99. package/cli/app/.next-cli-build/server/app/_not-found/page.js.nft.json +1 -1
  100. package/cli/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  101. package/cli/app/.next-cli-build/server/app/_not-found.html +1 -1
  102. package/cli/app/.next-cli-build/server/app/_not-found.rsc +3 -3
  103. package/cli/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +3 -3
  104. package/cli/app/.next-cli-build/server/app/_not-found.segments/_head.segment.rsc +1 -1
  105. package/cli/app/.next-cli-build/server/app/_not-found.segments/_index.segment.rsc +3 -3
  106. package/cli/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  107. package/cli/app/.next-cli-build/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  108. package/cli/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  109. package/cli/app/.next-cli-build/server/app/api/auth/login/route.js +1 -1
  110. package/cli/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
  111. package/cli/app/.next-cli-build/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  112. package/cli/app/.next-cli-build/server/app/api/auth/logout/route.js +1 -1
  113. package/cli/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
  114. package/cli/app/.next-cli-build/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  115. package/cli/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js +1 -1
  116. package/cli/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
  117. package/cli/app/.next-cli-build/server/app/api/auth/oidc/callback/route_client-reference-manifest.js +1 -1
  118. package/cli/app/.next-cli-build/server/app/api/auth/oidc/start/route.js +1 -1
  119. package/cli/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
  120. package/cli/app/.next-cli-build/server/app/api/auth/oidc/start/route_client-reference-manifest.js +1 -1
  121. package/cli/app/.next-cli-build/server/app/api/auth/oidc/test/route.js +1 -1
  122. package/cli/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
  123. package/cli/app/.next-cli-build/server/app/api/auth/oidc/test/route_client-reference-manifest.js +1 -1
  124. package/cli/app/.next-cli-build/server/app/api/auth/status/route.js +1 -1
  125. package/cli/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
  126. package/cli/app/.next-cli-build/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  127. package/cli/app/.next-cli-build/server/app/api/cache/stats/route.js +1 -1
  128. package/cli/app/.next-cli-build/server/app/api/cache/stats/route.js.nft.json +1 -1
  129. package/cli/app/.next-cli-build/server/app/api/cache/stats/route_client-reference-manifest.js +1 -1
  130. package/cli/app/.next-cli-build/server/app/api/changelog/route.js +1 -1
  131. package/cli/app/.next-cli-build/server/app/api/changelog/route.js.nft.json +1 -1
  132. package/cli/app/.next-cli-build/server/app/api/changelog/route_client-reference-manifest.js +1 -1
  133. package/cli/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js +1 -1
  134. package/cli/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
  135. package/cli/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route_client-reference-manifest.js +1 -1
  136. package/cli/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js +1 -1
  137. package/cli/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  138. package/cli/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route_client-reference-manifest.js +1 -1
  139. package/cli/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js +1 -1
  140. package/cli/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
  141. package/cli/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route_client-reference-manifest.js +1 -1
  142. package/cli/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js +1 -1
  143. package/cli/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
  144. package/cli/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route_client-reference-manifest.js +1 -1
  145. package/cli/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js +1 -1
  146. package/cli/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js.nft.json +1 -1
  147. package/cli/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route_client-reference-manifest.js +1 -1
  148. package/cli/app/.next-cli-build/server/app/api/cli-tools/codex-gateway/accounts/route.js +1 -1
  149. package/cli/app/.next-cli-build/server/app/api/cli-tools/codex-gateway/accounts/route.js.nft.json +1 -1
  150. package/cli/app/.next-cli-build/server/app/api/cli-tools/codex-gateway/accounts/route_client-reference-manifest.js +1 -1
  151. package/cli/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js +1 -1
  152. package/cli/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
  153. package/cli/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route_client-reference-manifest.js +1 -1
  154. package/cli/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js +1 -1
  155. package/cli/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
  156. package/cli/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route_client-reference-manifest.js +1 -1
  157. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js +1 -1
  158. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js.nft.json +1 -1
  159. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route_client-reference-manifest.js +1 -1
  160. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js +1 -1
  161. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js.nft.json +1 -1
  162. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route_client-reference-manifest.js +1 -1
  163. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js +1 -1
  164. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
  165. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route_client-reference-manifest.js +1 -1
  166. package/cli/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js +1 -1
  167. package/cli/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js.nft.json +1 -1
  168. package/cli/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route_client-reference-manifest.js +1 -1
  169. package/cli/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js +1 -1
  170. package/cli/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
  171. package/cli/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route_client-reference-manifest.js +1 -1
  172. package/cli/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js +1 -1
  173. package/cli/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js.nft.json +1 -1
  174. package/cli/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route_client-reference-manifest.js +1 -1
  175. package/cli/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js +1 -1
  176. package/cli/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js.nft.json +1 -1
  177. package/cli/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route_client-reference-manifest.js +1 -1
  178. package/cli/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js +1 -1
  179. package/cli/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js.nft.json +1 -1
  180. package/cli/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route_client-reference-manifest.js +1 -1
  181. package/cli/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js +1 -1
  182. package/cli/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
  183. package/cli/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route_client-reference-manifest.js +1 -1
  184. package/cli/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js +1 -1
  185. package/cli/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js.nft.json +1 -1
  186. package/cli/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route_client-reference-manifest.js +1 -1
  187. package/cli/app/.next-cli-build/server/app/api/combos/[id]/route.js +1 -1
  188. package/cli/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
  189. package/cli/app/.next-cli-build/server/app/api/combos/[id]/route_client-reference-manifest.js +1 -1
  190. package/cli/app/.next-cli-build/server/app/api/combos/route.js +1 -1
  191. package/cli/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
  192. package/cli/app/.next-cli-build/server/app/api/combos/route_client-reference-manifest.js +1 -1
  193. package/cli/app/.next-cli-build/server/app/api/context/[id]/route.js +1 -1
  194. package/cli/app/.next-cli-build/server/app/api/context/[id]/route.js.nft.json +1 -1
  195. package/cli/app/.next-cli-build/server/app/api/context/[id]/route_client-reference-manifest.js +1 -1
  196. package/cli/app/.next-cli-build/server/app/api/context/bulk/route.js +1 -1
  197. package/cli/app/.next-cli-build/server/app/api/context/bulk/route.js.nft.json +1 -1
  198. package/cli/app/.next-cli-build/server/app/api/context/bulk/route_client-reference-manifest.js +1 -1
  199. package/cli/app/.next-cli-build/server/app/api/context/route.js +1 -1
  200. package/cli/app/.next-cli-build/server/app/api/context/route.js.nft.json +1 -1
  201. package/cli/app/.next-cli-build/server/app/api/context/route_client-reference-manifest.js +1 -1
  202. package/cli/app/.next-cli-build/server/app/api/dashboard/chat/completions/route.js +1 -1
  203. package/cli/app/.next-cli-build/server/app/api/dashboard/chat/completions/route.js.nft.json +1 -1
  204. package/cli/app/.next-cli-build/server/app/api/dashboard/chat/completions/route_client-reference-manifest.js +1 -1
  205. package/cli/app/.next-cli-build/server/app/api/dashboard/cli-tools/keys/route.js +1 -1
  206. package/cli/app/.next-cli-build/server/app/api/dashboard/cli-tools/keys/route.js.nft.json +1 -1
  207. package/cli/app/.next-cli-build/server/app/api/dashboard/cli-tools/keys/route_client-reference-manifest.js +1 -1
  208. package/cli/app/.next-cli-build/server/app/api/dashboard/media/[operation]/route.js +1 -1
  209. package/cli/app/.next-cli-build/server/app/api/dashboard/media/[operation]/route.js.nft.json +1 -1
  210. package/cli/app/.next-cli-build/server/app/api/dashboard/media/[operation]/route_client-reference-manifest.js +1 -1
  211. package/cli/app/.next-cli-build/server/app/api/headroom/extras/route.js +1 -1
  212. package/cli/app/.next-cli-build/server/app/api/headroom/extras/route.js.nft.json +1 -1
  213. package/cli/app/.next-cli-build/server/app/api/headroom/extras/route_client-reference-manifest.js +1 -1
  214. package/cli/app/.next-cli-build/server/app/api/headroom/proxy/[...path]/route.js +1 -1
  215. package/cli/app/.next-cli-build/server/app/api/headroom/proxy/[...path]/route.js.nft.json +1 -1
  216. package/cli/app/.next-cli-build/server/app/api/headroom/proxy/[...path]/route_client-reference-manifest.js +1 -1
  217. package/cli/app/.next-cli-build/server/app/api/headroom/restart/route.js +1 -1
  218. package/cli/app/.next-cli-build/server/app/api/headroom/restart/route.js.nft.json +1 -1
  219. package/cli/app/.next-cli-build/server/app/api/headroom/restart/route_client-reference-manifest.js +1 -1
  220. package/cli/app/.next-cli-build/server/app/api/headroom/start/route.js +1 -1
  221. package/cli/app/.next-cli-build/server/app/api/headroom/start/route.js.nft.json +1 -1
  222. package/cli/app/.next-cli-build/server/app/api/headroom/start/route_client-reference-manifest.js +1 -1
  223. package/cli/app/.next-cli-build/server/app/api/headroom/status/route.js +1 -1
  224. package/cli/app/.next-cli-build/server/app/api/headroom/status/route.js.nft.json +1 -1
  225. package/cli/app/.next-cli-build/server/app/api/headroom/status/route_client-reference-manifest.js +1 -1
  226. package/cli/app/.next-cli-build/server/app/api/headroom/stop/route.js +1 -1
  227. package/cli/app/.next-cli-build/server/app/api/headroom/stop/route.js.nft.json +1 -1
  228. package/cli/app/.next-cli-build/server/app/api/headroom/stop/route_client-reference-manifest.js +1 -1
  229. package/cli/app/.next-cli-build/server/app/api/health/ready/route.js +1 -1
  230. package/cli/app/.next-cli-build/server/app/api/health/ready/route.js.nft.json +1 -1
  231. package/cli/app/.next-cli-build/server/app/api/health/ready/route_client-reference-manifest.js +1 -1
  232. package/cli/app/.next-cli-build/server/app/api/health/route.js +1 -1
  233. package/cli/app/.next-cli-build/server/app/api/health/route.js.nft.json +1 -1
  234. package/cli/app/.next-cli-build/server/app/api/health/route_client-reference-manifest.js +1 -1
  235. package/cli/app/.next-cli-build/server/app/api/init/route.js +1 -1
  236. package/cli/app/.next-cli-build/server/app/api/init/route.js.nft.json +1 -1
  237. package/cli/app/.next-cli-build/server/app/api/init/route_client-reference-manifest.js +1 -1
  238. package/cli/app/.next-cli-build/server/app/api/keys/[id]/rotate/route.js +1 -1
  239. package/cli/app/.next-cli-build/server/app/api/keys/[id]/rotate/route.js.nft.json +1 -1
  240. package/cli/app/.next-cli-build/server/app/api/keys/[id]/rotate/route_client-reference-manifest.js +1 -1
  241. package/cli/app/.next-cli-build/server/app/api/keys/[id]/route.js +1 -1
  242. package/cli/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
  243. package/cli/app/.next-cli-build/server/app/api/keys/[id]/route_client-reference-manifest.js +1 -1
  244. package/cli/app/.next-cli-build/server/app/api/keys/route.js +1 -1
  245. package/cli/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
  246. package/cli/app/.next-cli-build/server/app/api/keys/route_client-reference-manifest.js +1 -1
  247. package/cli/app/.next-cli-build/server/app/api/locale/route.js +1 -1
  248. package/cli/app/.next-cli-build/server/app/api/locale/route.js.nft.json +1 -1
  249. package/cli/app/.next-cli-build/server/app/api/locale/route_client-reference-manifest.js +1 -1
  250. package/cli/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js +1 -1
  251. package/cli/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
  252. package/cli/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route_client-reference-manifest.js +1 -1
  253. package/cli/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js +1 -1
  254. package/cli/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
  255. package/cli/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route_client-reference-manifest.js +1 -1
  256. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js +1 -1
  257. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
  258. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route_client-reference-manifest.js +1 -1
  259. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js +1 -1
  260. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
  261. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route_client-reference-manifest.js +1 -1
  262. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js +1 -1
  263. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
  264. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route_client-reference-manifest.js +1 -1
  265. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js +1 -1
  266. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
  267. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route_client-reference-manifest.js +1 -1
  268. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js +1 -1
  269. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -1
  270. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/voices/route_client-reference-manifest.js +1 -1
  271. package/cli/app/.next-cli-build/server/app/api/metrics/route.js +1 -1
  272. package/cli/app/.next-cli-build/server/app/api/metrics/route.js.nft.json +1 -1
  273. package/cli/app/.next-cli-build/server/app/api/metrics/route_client-reference-manifest.js +1 -1
  274. package/cli/app/.next-cli-build/server/app/api/models/alias/route.js +1 -1
  275. package/cli/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
  276. package/cli/app/.next-cli-build/server/app/api/models/alias/route_client-reference-manifest.js +1 -1
  277. package/cli/app/.next-cli-build/server/app/api/models/availability/route.js +1 -1
  278. package/cli/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
  279. package/cli/app/.next-cli-build/server/app/api/models/availability/route_client-reference-manifest.js +1 -1
  280. package/cli/app/.next-cli-build/server/app/api/models/custom/route.js +1 -1
  281. package/cli/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
  282. package/cli/app/.next-cli-build/server/app/api/models/custom/route_client-reference-manifest.js +1 -1
  283. package/cli/app/.next-cli-build/server/app/api/models/disabled/route.js +1 -1
  284. package/cli/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
  285. package/cli/app/.next-cli-build/server/app/api/models/disabled/route_client-reference-manifest.js +1 -1
  286. package/cli/app/.next-cli-build/server/app/api/models/route.js +1 -1
  287. package/cli/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
  288. package/cli/app/.next-cli-build/server/app/api/models/route_client-reference-manifest.js +1 -1
  289. package/cli/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
  290. package/cli/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
  291. package/cli/app/.next-cli-build/server/app/api/models/test/route_client-reference-manifest.js +1 -1
  292. package/cli/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js +1 -1
  293. package/cli/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  294. package/cli/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route_client-reference-manifest.js +1 -1
  295. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/cancel/route.js +1 -1
  296. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  297. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/cancel/route_client-reference-manifest.js +1 -1
  298. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/manual/[workerId]/route.js +1 -1
  299. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  300. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/manual/[workerId]/route_client-reference-manifest.js +1 -1
  301. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/route.js +1 -1
  302. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/route.js.nft.json +1 -1
  303. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/route_client-reference-manifest.js +1 -1
  304. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/latest/route.js +1 -1
  305. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/latest/route.js.nft.json +1 -1
  306. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/latest/route_client-reference-manifest.js +1 -1
  307. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/route.js +1 -1
  308. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/route.js.nft.json +1 -1
  309. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/route_client-reference-manifest.js +1 -1
  310. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/cancel/route.js +1 -1
  311. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  312. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/cancel/route_client-reference-manifest.js +1 -1
  313. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/manual/[workerId]/route.js +1 -1
  314. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  315. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/manual/[workerId]/route_client-reference-manifest.js +1 -1
  316. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/route.js +1 -1
  317. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/route.js.nft.json +1 -1
  318. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/route_client-reference-manifest.js +1 -1
  319. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/latest/route.js +1 -1
  320. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/latest/route.js.nft.json +1 -1
  321. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/latest/route_client-reference-manifest.js +1 -1
  322. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/route.js +1 -1
  323. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/route.js.nft.json +1 -1
  324. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/route_client-reference-manifest.js +1 -1
  325. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/cancel/route.js +1 -1
  326. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  327. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/cancel/route_client-reference-manifest.js +1 -1
  328. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/manual/[workerId]/route.js +1 -1
  329. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  330. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/manual/[workerId]/route_client-reference-manifest.js +1 -1
  331. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/route.js +1 -1
  332. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/route.js.nft.json +1 -1
  333. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/route_client-reference-manifest.js +1 -1
  334. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/latest/route.js +1 -1
  335. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/latest/route.js.nft.json +1 -1
  336. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/latest/route_client-reference-manifest.js +1 -1
  337. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/route.js +1 -1
  338. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/route.js.nft.json +1 -1
  339. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/route_client-reference-manifest.js +1 -1
  340. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-token/route.js +1 -1
  341. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-token/route.js.nft.json +1 -1
  342. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-token/route_client-reference-manifest.js +1 -1
  343. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/quota-cookie/route.js +1 -1
  344. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/quota-cookie/route.js.nft.json +1 -1
  345. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/quota-cookie/route_client-reference-manifest.js +1 -1
  346. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/cancel/route.js +1 -1
  347. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  348. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/cancel/route_client-reference-manifest.js +1 -1
  349. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/manual/[workerId]/route.js +1 -1
  350. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  351. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/manual/[workerId]/route_client-reference-manifest.js +1 -1
  352. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/route.js +1 -1
  353. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/route.js.nft.json +1 -1
  354. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/route_client-reference-manifest.js +1 -1
  355. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/latest/route.js +1 -1
  356. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/latest/route.js.nft.json +1 -1
  357. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/latest/route_client-reference-manifest.js +1 -1
  358. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/route.js +1 -1
  359. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/route.js.nft.json +1 -1
  360. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/route_client-reference-manifest.js +1 -1
  361. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-token/route.js +1 -1
  362. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-token/route.js.nft.json +1 -1
  363. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-token/route_client-reference-manifest.js +1 -1
  364. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/quota-cookie/route.js +1 -1
  365. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/quota-cookie/route.js.nft.json +1 -1
  366. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/quota-cookie/route_client-reference-manifest.js +1 -1
  367. package/cli/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js +1 -1
  368. package/cli/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
  369. package/cli/app/.next-cli-build/server/app/api/oauth/codex/import-token/route_client-reference-manifest.js +1 -1
  370. package/cli/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js +1 -1
  371. package/cli/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
  372. package/cli/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route_client-reference-manifest.js +1 -1
  373. package/cli/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js +1 -1
  374. package/cli/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  375. package/cli/app/.next-cli-build/server/app/api/oauth/cursor/import/route_client-reference-manifest.js +1 -1
  376. package/cli/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js +1 -1
  377. package/cli/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
  378. package/cli/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route_client-reference-manifest.js +1 -1
  379. package/cli/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js +1 -1
  380. package/cli/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
  381. package/cli/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route_client-reference-manifest.js +1 -1
  382. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route.js +1 -1
  383. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -1
  384. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route_client-reference-manifest.js +1 -1
  385. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/cancel/route.js +1 -1
  386. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  387. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/cancel/route_client-reference-manifest.js +1 -1
  388. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/manual/[workerId]/route.js +1 -1
  389. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  390. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/manual/[workerId]/route_client-reference-manifest.js +1 -1
  391. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/route.js +1 -1
  392. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/route.js.nft.json +1 -1
  393. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/route_client-reference-manifest.js +1 -1
  394. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/latest/route.js +1 -1
  395. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/latest/route.js.nft.json +1 -1
  396. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/latest/route_client-reference-manifest.js +1 -1
  397. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/route.js +1 -1
  398. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/route.js.nft.json +1 -1
  399. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/route_client-reference-manifest.js +1 -1
  400. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js +1 -1
  401. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  402. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/import/route_client-reference-manifest.js +1 -1
  403. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js +1 -1
  404. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +1 -1
  405. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route_client-reference-manifest.js +1 -1
  406. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js +1 -1
  407. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  408. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route_client-reference-manifest.js +1 -1
  409. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/cancel/route.js +1 -1
  410. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  411. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/cancel/route_client-reference-manifest.js +1 -1
  412. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/manual/[workerId]/route.js +1 -1
  413. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  414. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/manual/[workerId]/route_client-reference-manifest.js +1 -1
  415. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/route.js +1 -1
  416. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/route.js.nft.json +1 -1
  417. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/route_client-reference-manifest.js +1 -1
  418. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/latest/route.js +1 -1
  419. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/latest/route.js.nft.json +1 -1
  420. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/latest/route_client-reference-manifest.js +1 -1
  421. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/route.js +1 -1
  422. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/route.js.nft.json +1 -1
  423. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/route_client-reference-manifest.js +1 -1
  424. package/cli/app/.next-cli-build/server/app/api/pricing/route.js +1 -1
  425. package/cli/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
  426. package/cli/app/.next-cli-build/server/app/api/pricing/route_client-reference-manifest.js +1 -1
  427. package/cli/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js +1 -1
  428. package/cli/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  429. package/cli/app/.next-cli-build/server/app/api/provider-nodes/[id]/route_client-reference-manifest.js +1 -1
  430. package/cli/app/.next-cli-build/server/app/api/provider-nodes/route.js +1 -1
  431. package/cli/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
  432. package/cli/app/.next-cli-build/server/app/api/provider-nodes/route_client-reference-manifest.js +1 -1
  433. package/cli/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js +1 -1
  434. package/cli/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js.nft.json +1 -1
  435. package/cli/app/.next-cli-build/server/app/api/provider-nodes/validate/route_client-reference-manifest.js +1 -1
  436. package/cli/app/.next-cli-build/server/app/api/providers/[id]/models/route.js +1 -1
  437. package/cli/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  438. package/cli/app/.next-cli-build/server/app/api/providers/[id]/models/route_client-reference-manifest.js +1 -1
  439. package/cli/app/.next-cli-build/server/app/api/providers/[id]/route.js +1 -1
  440. package/cli/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
  441. package/cli/app/.next-cli-build/server/app/api/providers/[id]/route_client-reference-manifest.js +1 -1
  442. package/cli/app/.next-cli-build/server/app/api/providers/[id]/test/route.js +1 -1
  443. package/cli/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  444. package/cli/app/.next-cli-build/server/app/api/providers/[id]/test/route_client-reference-manifest.js +1 -1
  445. package/cli/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
  446. package/cli/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  447. package/cli/app/.next-cli-build/server/app/api/providers/[id]/test-models/route_client-reference-manifest.js +1 -1
  448. package/cli/app/.next-cli-build/server/app/api/providers/bulk-delete/route.js +1 -1
  449. package/cli/app/.next-cli-build/server/app/api/providers/bulk-delete/route.js.nft.json +1 -1
  450. package/cli/app/.next-cli-build/server/app/api/providers/bulk-delete/route_client-reference-manifest.js +1 -1
  451. package/cli/app/.next-cli-build/server/app/api/providers/client/route.js +1 -1
  452. package/cli/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
  453. package/cli/app/.next-cli-build/server/app/api/providers/client/route_client-reference-manifest.js +1 -1
  454. package/cli/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js +1 -1
  455. package/cli/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js.nft.json +1 -1
  456. package/cli/app/.next-cli-build/server/app/api/providers/kilo/free-models/route_client-reference-manifest.js +1 -1
  457. package/cli/app/.next-cli-build/server/app/api/providers/route.js +1 -1
  458. package/cli/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
  459. package/cli/app/.next-cli-build/server/app/api/providers/route_client-reference-manifest.js +1 -1
  460. package/cli/app/.next-cli-build/server/app/api/providers/suggested-models/route.js +1 -1
  461. package/cli/app/.next-cli-build/server/app/api/providers/suggested-models/route.js.nft.json +1 -1
  462. package/cli/app/.next-cli-build/server/app/api/providers/suggested-models/route_client-reference-manifest.js +1 -1
  463. package/cli/app/.next-cli-build/server/app/api/providers/test-batch/route.js +1 -1
  464. package/cli/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  465. package/cli/app/.next-cli-build/server/app/api/providers/test-batch/route_client-reference-manifest.js +1 -1
  466. package/cli/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
  467. package/cli/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
  468. package/cli/app/.next-cli-build/server/app/api/providers/validate/route_client-reference-manifest.js +1 -1
  469. package/cli/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js +1 -1
  470. package/cli/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
  471. package/cli/app/.next-cli-build/server/app/api/proxy-pools/[id]/route_client-reference-manifest.js +1 -1
  472. package/cli/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js +1 -1
  473. package/cli/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
  474. package/cli/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route_client-reference-manifest.js +1 -1
  475. package/cli/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js +1 -1
  476. package/cli/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
  477. package/cli/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route_client-reference-manifest.js +1 -1
  478. package/cli/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js +1 -1
  479. package/cli/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
  480. package/cli/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route_client-reference-manifest.js +1 -1
  481. package/cli/app/.next-cli-build/server/app/api/proxy-pools/route.js +1 -1
  482. package/cli/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
  483. package/cli/app/.next-cli-build/server/app/api/proxy-pools/route_client-reference-manifest.js +1 -1
  484. package/cli/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js +1 -1
  485. package/cli/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
  486. package/cli/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route_client-reference-manifest.js +1 -1
  487. package/cli/app/.next-cli-build/server/app/api/pxpipe/health/route.js +1 -1
  488. package/cli/app/.next-cli-build/server/app/api/pxpipe/health/route.js.nft.json +1 -1
  489. package/cli/app/.next-cli-build/server/app/api/pxpipe/health/route_client-reference-manifest.js +1 -1
  490. package/cli/app/.next-cli-build/server/app/api/pxpipe/install/route.js +1 -1
  491. package/cli/app/.next-cli-build/server/app/api/pxpipe/install/route.js.nft.json +1 -1
  492. package/cli/app/.next-cli-build/server/app/api/pxpipe/install/route_client-reference-manifest.js +1 -1
  493. package/cli/app/.next-cli-build/server/app/api/pxpipe/restart/route.js +1 -1
  494. package/cli/app/.next-cli-build/server/app/api/pxpipe/restart/route.js.nft.json +1 -1
  495. package/cli/app/.next-cli-build/server/app/api/pxpipe/restart/route_client-reference-manifest.js +1 -1
  496. package/cli/app/.next-cli-build/server/app/api/pxpipe/start/route.js +1 -1
  497. package/cli/app/.next-cli-build/server/app/api/pxpipe/start/route.js.nft.json +1 -1
  498. package/cli/app/.next-cli-build/server/app/api/pxpipe/start/route_client-reference-manifest.js +1 -1
  499. package/cli/app/.next-cli-build/server/app/api/pxpipe/stats/route.js +1 -1
  500. package/cli/app/.next-cli-build/server/app/api/pxpipe/stats/route.js.nft.json +1 -1
  501. package/cli/app/.next-cli-build/server/app/api/pxpipe/stats/route_client-reference-manifest.js +1 -1
  502. package/cli/app/.next-cli-build/server/app/api/pxpipe/status/route.js +1 -1
  503. package/cli/app/.next-cli-build/server/app/api/pxpipe/status/route.js.nft.json +1 -1
  504. package/cli/app/.next-cli-build/server/app/api/pxpipe/status/route_client-reference-manifest.js +1 -1
  505. package/cli/app/.next-cli-build/server/app/api/pxpipe/stop/route.js +1 -1
  506. package/cli/app/.next-cli-build/server/app/api/pxpipe/stop/route.js.nft.json +1 -1
  507. package/cli/app/.next-cli-build/server/app/api/pxpipe/stop/route_client-reference-manifest.js +1 -1
  508. package/cli/app/.next-cli-build/server/app/api/settings/database/route.js +1 -1
  509. package/cli/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
  510. package/cli/app/.next-cli-build/server/app/api/settings/database/route_client-reference-manifest.js +1 -1
  511. package/cli/app/.next-cli-build/server/app/api/settings/proxy-test/route.js +1 -1
  512. package/cli/app/.next-cli-build/server/app/api/settings/proxy-test/route.js.nft.json +1 -1
  513. package/cli/app/.next-cli-build/server/app/api/settings/proxy-test/route_client-reference-manifest.js +1 -1
  514. package/cli/app/.next-cli-build/server/app/api/settings/require-login/route.js +1 -1
  515. package/cli/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
  516. package/cli/app/.next-cli-build/server/app/api/settings/require-login/route_client-reference-manifest.js +1 -1
  517. package/cli/app/.next-cli-build/server/app/api/settings/route.js +1 -1
  518. package/cli/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
  519. package/cli/app/.next-cli-build/server/app/api/settings/route_client-reference-manifest.js +1 -1
  520. package/cli/app/.next-cli-build/server/app/api/shutdown/route.js +1 -1
  521. package/cli/app/.next-cli-build/server/app/api/shutdown/route.js.nft.json +1 -1
  522. package/cli/app/.next-cli-build/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  523. package/cli/app/.next-cli-build/server/app/api/tags/route.js +1 -1
  524. package/cli/app/.next-cli-build/server/app/api/tags/route.js.nft.json +1 -1
  525. package/cli/app/.next-cli-build/server/app/api/tags/route_client-reference-manifest.js +1 -1
  526. package/cli/app/.next-cli-build/server/app/api/terminal/auth/setup/route.js +1 -1
  527. package/cli/app/.next-cli-build/server/app/api/terminal/auth/setup/route.js.nft.json +1 -1
  528. package/cli/app/.next-cli-build/server/app/api/terminal/auth/setup/route_client-reference-manifest.js +1 -1
  529. package/cli/app/.next-cli-build/server/app/api/terminal/auth/status/route.js +1 -1
  530. package/cli/app/.next-cli-build/server/app/api/terminal/auth/status/route.js.nft.json +1 -1
  531. package/cli/app/.next-cli-build/server/app/api/terminal/auth/status/route_client-reference-manifest.js +1 -1
  532. package/cli/app/.next-cli-build/server/app/api/terminal/auth/unlock/route.js +1 -1
  533. package/cli/app/.next-cli-build/server/app/api/terminal/auth/unlock/route.js.nft.json +1 -1
  534. package/cli/app/.next-cli-build/server/app/api/terminal/auth/unlock/route_client-reference-manifest.js +1 -1
  535. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/input/route.js +1 -1
  536. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/input/route.js.nft.json +1 -1
  537. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/input/route_client-reference-manifest.js +1 -1
  538. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/resize/route.js +1 -1
  539. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/resize/route.js.nft.json +1 -1
  540. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/resize/route_client-reference-manifest.js +1 -1
  541. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/route.js +1 -1
  542. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/route.js.nft.json +1 -1
  543. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/route_client-reference-manifest.js +1 -1
  544. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/stream/route.js +1 -1
  545. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/stream/route.js.nft.json +1 -1
  546. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/stream/route_client-reference-manifest.js +1 -1
  547. package/cli/app/.next-cli-build/server/app/api/terminal/session/route.js +1 -1
  548. package/cli/app/.next-cli-build/server/app/api/terminal/session/route.js.nft.json +1 -1
  549. package/cli/app/.next-cli-build/server/app/api/terminal/session/route_client-reference-manifest.js +1 -1
  550. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
  551. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/route.js.nft.json +1 -1
  552. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/route_client-reference-manifest.js +1 -1
  553. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +2 -2
  554. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -1
  555. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/stream/route_client-reference-manifest.js +1 -1
  556. package/cli/app/.next-cli-build/server/app/api/translator/load/route.js +1 -1
  557. package/cli/app/.next-cli-build/server/app/api/translator/load/route.js.nft.json +1 -1
  558. package/cli/app/.next-cli-build/server/app/api/translator/load/route_client-reference-manifest.js +1 -1
  559. package/cli/app/.next-cli-build/server/app/api/translator/save/route.js +1 -1
  560. package/cli/app/.next-cli-build/server/app/api/translator/save/route.js.nft.json +1 -1
  561. package/cli/app/.next-cli-build/server/app/api/translator/save/route_client-reference-manifest.js +1 -1
  562. package/cli/app/.next-cli-build/server/app/api/translator/send/route.js +1 -1
  563. package/cli/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
  564. package/cli/app/.next-cli-build/server/app/api/translator/send/route_client-reference-manifest.js +1 -1
  565. package/cli/app/.next-cli-build/server/app/api/translator/translate/route.js +1 -1
  566. package/cli/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
  567. package/cli/app/.next-cli-build/server/app/api/translator/translate/route_client-reference-manifest.js +1 -1
  568. package/cli/app/.next-cli-build/server/app/api/tunnel/disable/route.js +1 -1
  569. package/cli/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  570. package/cli/app/.next-cli-build/server/app/api/tunnel/disable/route_client-reference-manifest.js +1 -1
  571. package/cli/app/.next-cli-build/server/app/api/tunnel/enable/route.js +1 -1
  572. package/cli/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  573. package/cli/app/.next-cli-build/server/app/api/tunnel/enable/route_client-reference-manifest.js +1 -1
  574. package/cli/app/.next-cli-build/server/app/api/tunnel/status/route.js +1 -1
  575. package/cli/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
  576. package/cli/app/.next-cli-build/server/app/api/tunnel/status/route_client-reference-manifest.js +1 -1
  577. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js +1 -1
  578. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
  579. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route_client-reference-manifest.js +1 -1
  580. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js +1 -1
  581. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
  582. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route_client-reference-manifest.js +1 -1
  583. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js +1 -1
  584. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
  585. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route_client-reference-manifest.js +1 -1
  586. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js +1 -1
  587. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
  588. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route_client-reference-manifest.js +1 -1
  589. package/cli/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js +1 -1
  590. package/cli/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  591. package/cli/app/.next-cli-build/server/app/api/usage/[connectionId]/route_client-reference-manifest.js +1 -1
  592. package/cli/app/.next-cli-build/server/app/api/usage/aggregate/route.js +1 -1
  593. package/cli/app/.next-cli-build/server/app/api/usage/aggregate/route.js.nft.json +1 -1
  594. package/cli/app/.next-cli-build/server/app/api/usage/aggregate/route_client-reference-manifest.js +1 -1
  595. package/cli/app/.next-cli-build/server/app/api/usage/chart/route.js +1 -1
  596. package/cli/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
  597. package/cli/app/.next-cli-build/server/app/api/usage/chart/route_client-reference-manifest.js +1 -1
  598. package/cli/app/.next-cli-build/server/app/api/usage/history/route.js +1 -1
  599. package/cli/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
  600. package/cli/app/.next-cli-build/server/app/api/usage/history/route_client-reference-manifest.js +1 -1
  601. package/cli/app/.next-cli-build/server/app/api/usage/providers/route.js +1 -1
  602. package/cli/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
  603. package/cli/app/.next-cli-build/server/app/api/usage/providers/route_client-reference-manifest.js +1 -1
  604. package/cli/app/.next-cli-build/server/app/api/usage/request-details/route.js +1 -1
  605. package/cli/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
  606. package/cli/app/.next-cli-build/server/app/api/usage/request-details/route_client-reference-manifest.js +1 -1
  607. package/cli/app/.next-cli-build/server/app/api/usage/request-logs/route.js +1 -1
  608. package/cli/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  609. package/cli/app/.next-cli-build/server/app/api/usage/request-logs/route_client-reference-manifest.js +1 -1
  610. package/cli/app/.next-cli-build/server/app/api/usage/stats/route.js +1 -1
  611. package/cli/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
  612. package/cli/app/.next-cli-build/server/app/api/usage/stats/route_client-reference-manifest.js +1 -1
  613. package/cli/app/.next-cli-build/server/app/api/usage/stream/route.js +1 -1
  614. package/cli/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
  615. package/cli/app/.next-cli-build/server/app/api/usage/stream/route_client-reference-manifest.js +1 -1
  616. package/cli/app/.next-cli-build/server/app/api/v1/api/chat/route.js +1 -1
  617. package/cli/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  618. package/cli/app/.next-cli-build/server/app/api/v1/api/chat/route_client-reference-manifest.js +1 -1
  619. package/cli/app/.next-cli-build/server/app/api/v1/audio/speech/route.js +1 -1
  620. package/cli/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  621. package/cli/app/.next-cli-build/server/app/api/v1/audio/speech/route_client-reference-manifest.js +1 -1
  622. package/cli/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js +1 -1
  623. package/cli/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  624. package/cli/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route_client-reference-manifest.js +1 -1
  625. package/cli/app/.next-cli-build/server/app/api/v1/audio/voices/route.js +1 -1
  626. package/cli/app/.next-cli-build/server/app/api/v1/audio/voices/route.js.nft.json +1 -1
  627. package/cli/app/.next-cli-build/server/app/api/v1/audio/voices/route_client-reference-manifest.js +1 -1
  628. package/cli/app/.next-cli-build/server/app/api/v1/chat/completions/route.js +1 -1
  629. package/cli/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  630. package/cli/app/.next-cli-build/server/app/api/v1/chat/completions/route_client-reference-manifest.js +1 -1
  631. package/cli/app/.next-cli-build/server/app/api/v1/embeddings/route.js +1 -1
  632. package/cli/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  633. package/cli/app/.next-cli-build/server/app/api/v1/embeddings/route_client-reference-manifest.js +1 -1
  634. package/cli/app/.next-cli-build/server/app/api/v1/images/generations/route.js +1 -1
  635. package/cli/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  636. package/cli/app/.next-cli-build/server/app/api/v1/images/generations/route_client-reference-manifest.js +1 -1
  637. package/cli/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js +1 -1
  638. package/cli/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -1
  639. package/cli/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route_client-reference-manifest.js +1 -1
  640. package/cli/app/.next-cli-build/server/app/api/v1/messages/route.js +1 -1
  641. package/cli/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
  642. package/cli/app/.next-cli-build/server/app/api/v1/messages/route_client-reference-manifest.js +1 -1
  643. package/cli/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js +1 -1
  644. package/cli/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
  645. package/cli/app/.next-cli-build/server/app/api/v1/models/[kind]/route_client-reference-manifest.js +1 -1
  646. package/cli/app/.next-cli-build/server/app/api/v1/models/info/route.js +1 -1
  647. package/cli/app/.next-cli-build/server/app/api/v1/models/info/route.js.nft.json +1 -1
  648. package/cli/app/.next-cli-build/server/app/api/v1/models/info/route_client-reference-manifest.js +1 -1
  649. package/cli/app/.next-cli-build/server/app/api/v1/models/route.js +1 -1
  650. package/cli/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
  651. package/cli/app/.next-cli-build/server/app/api/v1/models/route_client-reference-manifest.js +1 -1
  652. package/cli/app/.next-cli-build/server/app/api/v1/responses/compact/route.js +1 -1
  653. package/cli/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
  654. package/cli/app/.next-cli-build/server/app/api/v1/responses/compact/route_client-reference-manifest.js +1 -1
  655. package/cli/app/.next-cli-build/server/app/api/v1/responses/route.js +1 -1
  656. package/cli/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
  657. package/cli/app/.next-cli-build/server/app/api/v1/responses/route_client-reference-manifest.js +1 -1
  658. package/cli/app/.next-cli-build/server/app/api/v1/route.js +1 -1
  659. package/cli/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
  660. package/cli/app/.next-cli-build/server/app/api/v1/route_client-reference-manifest.js +1 -1
  661. package/cli/app/.next-cli-build/server/app/api/v1/search/route.js +1 -1
  662. package/cli/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
  663. package/cli/app/.next-cli-build/server/app/api/v1/search/route_client-reference-manifest.js +1 -1
  664. package/cli/app/.next-cli-build/server/app/api/v1/web/fetch/route.js +1 -1
  665. package/cli/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
  666. package/cli/app/.next-cli-build/server/app/api/v1/web/fetch/route_client-reference-manifest.js +1 -1
  667. package/cli/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js +1 -1
  668. package/cli/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  669. package/cli/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route_client-reference-manifest.js +1 -1
  670. package/cli/app/.next-cli-build/server/app/api/v1beta/models/route.js +1 -1
  671. package/cli/app/.next-cli-build/server/app/api/v1beta/models/route.js.nft.json +1 -1
  672. package/cli/app/.next-cli-build/server/app/api/v1beta/models/route_client-reference-manifest.js +1 -1
  673. package/cli/app/.next-cli-build/server/app/api/version/route.js +1 -1
  674. package/cli/app/.next-cli-build/server/app/api/version/route.js.nft.json +1 -1
  675. package/cli/app/.next-cli-build/server/app/api/version/route_client-reference-manifest.js +1 -1
  676. package/cli/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
  677. package/cli/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
  678. package/cli/app/.next-cli-build/server/app/api/version/shutdown/route_client-reference-manifest.js +1 -1
  679. package/cli/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
  680. package/cli/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +1 -1
  681. package/cli/app/.next-cli-build/server/app/api/version/update/route_client-reference-manifest.js +1 -1
  682. package/cli/app/.next-cli-build/server/app/callback/page.js +1 -1
  683. package/cli/app/.next-cli-build/server/app/callback/page.js.nft.json +1 -1
  684. package/cli/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  685. package/cli/app/.next-cli-build/server/app/callback.html +1 -1
  686. package/cli/app/.next-cli-build/server/app/callback.rsc +3 -3
  687. package/cli/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +3 -3
  688. package/cli/app/.next-cli-build/server/app/callback.segments/_head.segment.rsc +1 -1
  689. package/cli/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +3 -3
  690. package/cli/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +1 -1
  691. package/cli/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  692. package/cli/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
  693. package/cli/app/.next-cli-build/server/app/dashboard/automation.html +1 -1
  694. package/cli/app/.next-cli-build/server/app/dashboard/automation.rsc +5 -5
  695. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation/__PAGE__.segment.rsc +2 -2
  696. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation.segment.rsc +1 -1
  697. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  698. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  699. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_full.segment.rsc +5 -5
  700. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_head.segment.rsc +1 -1
  701. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_index.segment.rsc +3 -3
  702. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_tree.segment.rsc +1 -1
  703. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
  704. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +5 -5
  705. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
  706. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
  707. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  708. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  709. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +5 -5
  710. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
  711. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_index.segment.rsc +3 -3
  712. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
  713. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
  714. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +5 -5
  715. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
  716. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
  717. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  718. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  719. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +5 -5
  720. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
  721. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_index.segment.rsc +3 -3
  722. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
  723. package/cli/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
  724. package/cli/app/.next-cli-build/server/app/dashboard/combos.rsc +5 -5
  725. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
  726. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
  727. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  728. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  729. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +5 -5
  730. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
  731. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_index.segment.rsc +3 -3
  732. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
  733. package/cli/app/.next-cli-build/server/app/dashboard/context.html +1 -1
  734. package/cli/app/.next-cli-build/server/app/dashboard/context.rsc +5 -5
  735. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard/context/__PAGE__.segment.rsc +2 -2
  736. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard/context.segment.rsc +1 -1
  737. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  738. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  739. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_full.segment.rsc +5 -5
  740. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_head.segment.rsc +1 -1
  741. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_index.segment.rsc +3 -3
  742. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_tree.segment.rsc +1 -1
  743. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
  744. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.rsc +5 -5
  745. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
  746. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
  747. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  748. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  749. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +5 -5
  750. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
  751. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_index.segment.rsc +3 -3
  752. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
  753. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
  754. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +5 -5
  755. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
  756. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
  757. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
  758. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  759. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  760. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +5 -5
  761. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
  762. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +3 -3
  763. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +1 -1
  764. package/cli/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
  765. package/cli/app/.next-cli-build/server/app/dashboard/mitm.rsc +5 -5
  766. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
  767. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
  768. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  769. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  770. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +5 -5
  771. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
  772. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_index.segment.rsc +3 -3
  773. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
  774. package/cli/app/.next-cli-build/server/app/dashboard/playground.html +1 -1
  775. package/cli/app/.next-cli-build/server/app/dashboard/playground.rsc +5 -5
  776. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard/playground/__PAGE__.segment.rsc +2 -2
  777. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard/playground.segment.rsc +1 -1
  778. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  779. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  780. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_full.segment.rsc +5 -5
  781. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_head.segment.rsc +1 -1
  782. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_index.segment.rsc +3 -3
  783. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_tree.segment.rsc +1 -1
  784. package/cli/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
  785. package/cli/app/.next-cli-build/server/app/dashboard/profile.rsc +5 -5
  786. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
  787. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
  788. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  789. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  790. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +5 -5
  791. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
  792. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_index.segment.rsc +3 -3
  793. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
  794. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
  795. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.rsc +5 -5
  796. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
  797. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
  798. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  799. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  800. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  801. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +5 -5
  802. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
  803. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_index.segment.rsc +3 -3
  804. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
  805. package/cli/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
  806. package/cli/app/.next-cli-build/server/app/dashboard/providers.rsc +5 -5
  807. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
  808. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  809. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  810. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  811. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +5 -5
  812. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
  813. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_index.segment.rsc +3 -3
  814. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
  815. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
  816. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +5 -5
  817. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
  818. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
  819. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  820. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  821. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +5 -5
  822. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
  823. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +3 -3
  824. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
  825. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.html +1 -1
  826. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.rsc +5 -5
  827. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +2 -2
  828. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe.segment.rsc +1 -1
  829. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  830. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  831. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_full.segment.rsc +5 -5
  832. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_head.segment.rsc +1 -1
  833. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_index.segment.rsc +3 -3
  834. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +1 -1
  835. package/cli/app/.next-cli-build/server/app/dashboard/quota.html +2 -2
  836. package/cli/app/.next-cli-build/server/app/dashboard/quota.rsc +6 -6
  837. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
  838. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
  839. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  840. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  841. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +6 -6
  842. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
  843. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_index.segment.rsc +3 -3
  844. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
  845. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js +2 -2
  846. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js.nft.json +1 -1
  847. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  848. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  849. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +3 -3
  850. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +3 -3
  851. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  852. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +3 -3
  853. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
  854. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  855. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  856. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  857. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  858. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
  859. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.rsc +5 -5
  860. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +2 -2
  861. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver.segment.rsc +1 -1
  862. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  863. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  864. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +5 -5
  865. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_head.segment.rsc +1 -1
  866. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_index.segment.rsc +3 -3
  867. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +1 -1
  868. package/cli/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
  869. package/cli/app/.next-cli-build/server/app/dashboard/translator.rsc +5 -5
  870. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
  871. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
  872. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  873. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  874. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +5 -5
  875. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
  876. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_index.segment.rsc +3 -3
  877. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
  878. package/cli/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
  879. package/cli/app/.next-cli-build/server/app/dashboard/usage.rsc +5 -5
  880. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
  881. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
  882. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  883. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  884. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +5 -5
  885. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
  886. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_index.segment.rsc +3 -3
  887. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
  888. package/cli/app/.next-cli-build/server/app/dashboard.html +1 -1
  889. package/cli/app/.next-cli-build/server/app/dashboard.rsc +5 -5
  890. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
  891. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  892. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  893. package/cli/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +5 -5
  894. package/cli/app/.next-cli-build/server/app/dashboard.segments/_head.segment.rsc +1 -1
  895. package/cli/app/.next-cli-build/server/app/dashboard.segments/_index.segment.rsc +3 -3
  896. package/cli/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +1 -1
  897. package/cli/app/.next-cli-build/server/app/index.html +1 -1
  898. package/cli/app/.next-cli-build/server/app/index.rsc +3 -3
  899. package/cli/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  900. package/cli/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +3 -3
  901. package/cli/app/.next-cli-build/server/app/index.segments/_head.segment.rsc +1 -1
  902. package/cli/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +3 -3
  903. package/cli/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +1 -1
  904. package/cli/app/.next-cli-build/server/app/landing/page.js +1 -1
  905. package/cli/app/.next-cli-build/server/app/landing/page.js.nft.json +1 -1
  906. package/cli/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  907. package/cli/app/.next-cli-build/server/app/landing.html +1 -1
  908. package/cli/app/.next-cli-build/server/app/landing.rsc +4 -4
  909. package/cli/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +4 -4
  910. package/cli/app/.next-cli-build/server/app/landing.segments/_head.segment.rsc +1 -1
  911. package/cli/app/.next-cli-build/server/app/landing.segments/_index.segment.rsc +3 -3
  912. package/cli/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +1 -1
  913. package/cli/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +2 -2
  914. package/cli/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
  915. package/cli/app/.next-cli-build/server/app/login/page.js +2 -2
  916. package/cli/app/.next-cli-build/server/app/login/page.js.nft.json +1 -1
  917. package/cli/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  918. package/cli/app/.next-cli-build/server/app/login.html +1 -1
  919. package/cli/app/.next-cli-build/server/app/login.rsc +4 -4
  920. package/cli/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +4 -4
  921. package/cli/app/.next-cli-build/server/app/login.segments/_head.segment.rsc +1 -1
  922. package/cli/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +3 -3
  923. package/cli/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +1 -1
  924. package/cli/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  925. package/cli/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
  926. package/cli/app/.next-cli-build/server/app/manifest.webmanifest/route.js.nft.json +1 -1
  927. package/cli/app/.next-cli-build/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  928. package/cli/app/.next-cli-build/server/app/page.js +1 -1
  929. package/cli/app/.next-cli-build/server/app/page.js.nft.json +1 -1
  930. package/cli/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  931. package/cli/app/.next-cli-build/server/app-paths-manifest.json +9 -9
  932. package/cli/app/.next-cli-build/server/chunks/2030.js +1 -1
  933. package/cli/app/.next-cli-build/server/chunks/3155.js +1 -1
  934. package/cli/app/.next-cli-build/server/chunks/319.js +3 -3
  935. package/cli/app/.next-cli-build/server/chunks/4650.js +1 -1
  936. package/cli/app/.next-cli-build/server/chunks/4746.js +1 -1
  937. package/cli/app/.next-cli-build/server/chunks/5307.js +1 -1
  938. package/cli/app/.next-cli-build/server/chunks/5469.js +1 -1
  939. package/cli/app/.next-cli-build/server/chunks/5949.js +12 -11
  940. package/cli/app/.next-cli-build/server/chunks/8242.js +1 -1
  941. package/cli/app/.next-cli-build/server/chunks/8306.js +1 -1
  942. package/cli/app/.next-cli-build/server/chunks/9372.js +1 -1
  943. package/cli/app/.next-cli-build/server/chunks/9621.js +1 -1
  944. package/cli/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  945. package/cli/app/.next-cli-build/server/next-font-manifest.js +1 -1
  946. package/cli/app/.next-cli-build/server/next-font-manifest.json +1 -1
  947. package/cli/app/.next-cli-build/server/pages/404.html +1 -1
  948. package/cli/app/.next-cli-build/server/pages/500.html +1 -1
  949. package/cli/app/.next-cli-build/static/chunks/{620-a13f0f7b318585ab.js → 620-90911eeb765ca4bd.js} +1 -1
  950. package/cli/app/.next-cli-build/static/chunks/app/login/page-f7df7d9a053d65b7.js +1 -0
  951. package/cli/app/CHANGELOG.md +29 -0
  952. package/cli/app/cli/hooks/postinstall.js +82 -50
  953. package/cli/app/cli/hooks/safeGlobalInstall.js +178 -10
  954. package/cli/app/cli/hooks/startupRuntime.js +31 -0
  955. package/cli/app/cli/hooks/streamCommand.js +63 -0
  956. package/cli/app/package.json +46 -39
  957. package/cli/app/server.js +1 -1
  958. package/cli/cli.js +708 -248
  959. package/cli/hooks/postinstall.js +82 -50
  960. package/cli/hooks/safeGlobalInstall.js +178 -10
  961. package/cli/hooks/startupRuntime.js +31 -0
  962. package/cli/hooks/streamCommand.js +63 -0
  963. package/cli/package.json +6 -5
  964. package/cli/src/cli/systemdEnv.js +93 -0
  965. package/cli/src/cli/tray/autostart.js +55 -21
  966. package/cli/src/cli/tray/tray.js +1 -1
  967. package/cli/src/cli/updateRuntimeState.js +976 -0
  968. package/package.json +46 -39
  969. package/scripts/start-standalone.mjs +24 -15
  970. package/cli/app/.next-cli-build/static/chunks/app/login/page-9ea3f794879db097.js +0 -1
  971. package/i18n/README.ja-JP.md +0 -34
  972. package/i18n/README.ru.md +0 -34
  973. package/i18n/README.vi.md +0 -34
  974. package/i18n/README.zh-CN.md +0 -34
  975. package/images/screenshots/automation.png +0 -0
  976. package/images/screenshots/endpoint.png +0 -0
  977. package/images/screenshots/playground.png +0 -0
  978. package/images/screenshots/providers.png +0 -0
  979. package/images/screenshots/usage.png +0 -0
  980. package/images/zevairouter.png +0 -0
  981. package/jsconfig.json +0 -12
  982. package/next.config.mjs +0 -96
  983. package/open-sse/config/appConstants.js +0 -230
  984. package/open-sse/config/codexInstructions.js +0 -119
  985. package/open-sse/config/constants.js +0 -4
  986. package/open-sse/config/defaultThinkingSignature.js +0 -12
  987. package/open-sse/config/errorConfig.js +0 -92
  988. package/open-sse/config/googleTtsLanguages.js +0 -62
  989. package/open-sse/config/kiroConstants.js +0 -360
  990. package/open-sse/config/models.js +0 -13
  991. package/open-sse/config/ollamaModels.js +0 -19
  992. package/open-sse/config/providerModels.js +0 -1058
  993. package/open-sse/config/providers.js +0 -543
  994. package/open-sse/config/runtimeConfig.js +0 -72
  995. package/open-sse/config/ttsModels.js +0 -129
  996. package/open-sse/context/injectContext.js +0 -82
  997. package/open-sse/executors/antigravity.js +0 -605
  998. package/open-sse/executors/autoclaw.js +0 -121
  999. package/open-sse/executors/azure.js +0 -57
  1000. package/open-sse/executors/base.js +0 -221
  1001. package/open-sse/executors/codebuddy-cn.js +0 -31
  1002. package/open-sse/executors/codex.js +0 -484
  1003. package/open-sse/executors/commandcode.js +0 -88
  1004. package/open-sse/executors/cursor.js +0 -795
  1005. package/open-sse/executors/default.js +0 -532
  1006. package/open-sse/executors/gemini-cli.js +0 -89
  1007. package/open-sse/executors/github.js +0 -383
  1008. package/open-sse/executors/grok-cli.js +0 -397
  1009. package/open-sse/executors/grok-web.js +0 -345
  1010. package/open-sse/executors/iflow.js +0 -108
  1011. package/open-sse/executors/index.js +0 -92
  1012. package/open-sse/executors/kimchi.js +0 -123
  1013. package/open-sse/executors/kiro.js +0 -537
  1014. package/open-sse/executors/mimo-free.js +0 -156
  1015. package/open-sse/executors/ollama-local.js +0 -14
  1016. package/open-sse/executors/opencode-go.js +0 -41
  1017. package/open-sse/executors/opencode.js +0 -32
  1018. package/open-sse/executors/perplexity-web.js +0 -507
  1019. package/open-sse/executors/qoder.js +0 -468
  1020. package/open-sse/executors/qwen.js +0 -129
  1021. package/open-sse/executors/vertex.js +0 -131
  1022. package/open-sse/executors/xiaomi-tokenplan.js +0 -19
  1023. package/open-sse/handlers/chatCore/nonStreamingHandler.js +0 -261
  1024. package/open-sse/handlers/chatCore/requestDetail.js +0 -112
  1025. package/open-sse/handlers/chatCore/sseToJsonHandler.js +0 -540
  1026. package/open-sse/handlers/chatCore/streamingHandler.js +0 -125
  1027. package/open-sse/handlers/chatCore.js +0 -398
  1028. package/open-sse/handlers/embeddingProviders/_base.js +0 -4
  1029. package/open-sse/handlers/embeddingProviders/gemini.js +0 -57
  1030. package/open-sse/handlers/embeddingProviders/index.js +0 -23
  1031. package/open-sse/handlers/embeddingProviders/openai.js +0 -39
  1032. package/open-sse/handlers/embeddingProviders/openaiCompatNode.js +0 -16
  1033. package/open-sse/handlers/embeddingsCore.js +0 -126
  1034. package/open-sse/handlers/fetch/index.js +0 -237
  1035. package/open-sse/handlers/imageGenerationCore.js +0 -189
  1036. package/open-sse/handlers/imageProviders/_base.js +0 -31
  1037. package/open-sse/handlers/imageProviders/blackForestLabs.js +0 -46
  1038. package/open-sse/handlers/imageProviders/cloudflareAi.js +0 -181
  1039. package/open-sse/handlers/imageProviders/codex.js +0 -201
  1040. package/open-sse/handlers/imageProviders/comfyui.js +0 -11
  1041. package/open-sse/handlers/imageProviders/falAi.js +0 -44
  1042. package/open-sse/handlers/imageProviders/gemini.js +0 -28
  1043. package/open-sse/handlers/imageProviders/huggingface.js +0 -25
  1044. package/open-sse/handlers/imageProviders/index.js +0 -40
  1045. package/open-sse/handlers/imageProviders/nanobanana.js +0 -61
  1046. package/open-sse/handlers/imageProviders/openai.js +0 -40
  1047. package/open-sse/handlers/imageProviders/runwayml.js +0 -50
  1048. package/open-sse/handlers/imageProviders/sdwebui.js +0 -20
  1049. package/open-sse/handlers/imageProviders/stabilityAi.js +0 -37
  1050. package/open-sse/handlers/responsesHandler.js +0 -46
  1051. package/open-sse/handlers/search/callers.js +0 -371
  1052. package/open-sse/handlers/search/chatSearch.js +0 -409
  1053. package/open-sse/handlers/search/index.js +0 -201
  1054. package/open-sse/handlers/search/normalizers.js +0 -223
  1055. package/open-sse/handlers/sttCore.js +0 -194
  1056. package/open-sse/handlers/ttsCore.js +0 -74
  1057. package/open-sse/handlers/ttsProviders/_base.js +0 -39
  1058. package/open-sse/handlers/ttsProviders/edgeTts.js +0 -92
  1059. package/open-sse/handlers/ttsProviders/elevenlabs.js +0 -51
  1060. package/open-sse/handlers/ttsProviders/gemini.js +0 -120
  1061. package/open-sse/handlers/ttsProviders/genericFormats.js +0 -169
  1062. package/open-sse/handlers/ttsProviders/googleTts.js +0 -57
  1063. package/open-sse/handlers/ttsProviders/index.js +0 -50
  1064. package/open-sse/handlers/ttsProviders/localDevice.js +0 -90
  1065. package/open-sse/handlers/ttsProviders/minimax.js +0 -59
  1066. package/open-sse/handlers/ttsProviders/openai.js +0 -33
  1067. package/open-sse/handlers/ttsProviders/openrouter.js +0 -73
  1068. package/open-sse/index.js +0 -82
  1069. package/open-sse/rtk/applyFilter.js +0 -15
  1070. package/open-sse/rtk/autodetect.js +0 -111
  1071. package/open-sse/rtk/caveman.js +0 -100
  1072. package/open-sse/rtk/cavemanPrompts.js +0 -78
  1073. package/open-sse/rtk/constants.js +0 -55
  1074. package/open-sse/rtk/filters/buildOutput.js +0 -127
  1075. package/open-sse/rtk/filters/dedupLog.js +0 -44
  1076. package/open-sse/rtk/filters/find.js +0 -49
  1077. package/open-sse/rtk/filters/gitDiff.js +0 -92
  1078. package/open-sse/rtk/filters/gitStatus.js +0 -117
  1079. package/open-sse/rtk/filters/grep.js +0 -48
  1080. package/open-sse/rtk/filters/ls.js +0 -79
  1081. package/open-sse/rtk/filters/readNumbered.js +0 -27
  1082. package/open-sse/rtk/filters/searchList.js +0 -52
  1083. package/open-sse/rtk/filters/smartTruncate.js +0 -15
  1084. package/open-sse/rtk/filters/tree.js +0 -32
  1085. package/open-sse/rtk/headroom.js +0 -348
  1086. package/open-sse/rtk/index.js +0 -155
  1087. package/open-sse/rtk/ponytail.js +0 -91
  1088. package/open-sse/rtk/ponytailPrompts.js +0 -44
  1089. package/open-sse/rtk/pxpipe.js +0 -104
  1090. package/open-sse/rtk/registry.js +0 -38
  1091. package/open-sse/services/accountFallback.js +0 -467
  1092. package/open-sse/services/antigravityHeaderScrub.js +0 -78
  1093. package/open-sse/services/antigravityIdentity.js +0 -115
  1094. package/open-sse/services/antigravityObfuscation.js +0 -92
  1095. package/open-sse/services/clinepassModels.js +0 -63
  1096. package/open-sse/services/combo.js +0 -189
  1097. package/open-sse/services/compact.js +0 -71
  1098. package/open-sse/services/copilotModels.js +0 -155
  1099. package/open-sse/services/kimchiModels.js +0 -176
  1100. package/open-sse/services/kiroModels.js +0 -320
  1101. package/open-sse/services/model.js +0 -281
  1102. package/open-sse/services/oauthCredentialManager.js +0 -151
  1103. package/open-sse/services/projectId.js +0 -463
  1104. package/open-sse/services/provider.js +0 -356
  1105. package/open-sse/services/qoderModels.js +0 -216
  1106. package/open-sse/services/tokenRefresh.js +0 -949
  1107. package/open-sse/services/usage.js +0 -2415
  1108. package/open-sse/transformer/responsesTransformer.js +0 -509
  1109. package/open-sse/transformer/streamToJsonConverter.js +0 -151
  1110. package/open-sse/translator/formats.js +0 -36
  1111. package/open-sse/translator/helpers/claudeHelper.js +0 -217
  1112. package/open-sse/translator/helpers/geminiHelper.js +0 -372
  1113. package/open-sse/translator/helpers/imageHelper.js +0 -98
  1114. package/open-sse/translator/helpers/maxTokensHelper.js +0 -27
  1115. package/open-sse/translator/helpers/openaiHelper.js +0 -130
  1116. package/open-sse/translator/helpers/responsesApiHelper.js +0 -214
  1117. package/open-sse/translator/helpers/toolCallHelper.js +0 -148
  1118. package/open-sse/translator/index.js +0 -254
  1119. package/open-sse/translator/request/antigravity-to-openai.js +0 -255
  1120. package/open-sse/translator/request/claude-to-openai.js +0 -278
  1121. package/open-sse/translator/request/gemini-to-openai.js +0 -147
  1122. package/open-sse/translator/request/openai-responses.js +0 -212
  1123. package/open-sse/translator/request/openai-to-claude.js +0 -427
  1124. package/open-sse/translator/request/openai-to-commandcode.js +0 -178
  1125. package/open-sse/translator/request/openai-to-cursor.js +0 -195
  1126. package/open-sse/translator/request/openai-to-gemini.js +0 -478
  1127. package/open-sse/translator/request/openai-to-kiro.js +0 -641
  1128. package/open-sse/translator/request/openai-to-kiro.old.js +0 -278
  1129. package/open-sse/translator/request/openai-to-ollama.js +0 -192
  1130. package/open-sse/translator/request/openai-to-vertex.js +0 -42
  1131. package/open-sse/translator/response/claude-to-openai.js +0 -206
  1132. package/open-sse/translator/response/commandcode-to-openai.js +0 -197
  1133. package/open-sse/translator/response/cursor-to-openai.js +0 -30
  1134. package/open-sse/translator/response/gemini-to-openai.js +0 -245
  1135. package/open-sse/translator/response/kiro-to-openai.js +0 -195
  1136. package/open-sse/translator/response/ollama-to-openai.js +0 -152
  1137. package/open-sse/translator/response/openai-responses.js +0 -624
  1138. package/open-sse/translator/response/openai-to-antigravity.js +0 -122
  1139. package/open-sse/translator/response/openai-to-claude.js +0 -266
  1140. package/open-sse/utils/bypassHandler.js +0 -298
  1141. package/open-sse/utils/claudeCloaking.js +0 -155
  1142. package/open-sse/utils/claudeHeaderCache.js +0 -70
  1143. package/open-sse/utils/clientDetector.js +0 -64
  1144. package/open-sse/utils/cursorChecksum.js +0 -152
  1145. package/open-sse/utils/cursorProtobuf.js +0 -907
  1146. package/open-sse/utils/debugLog.js +0 -14
  1147. package/open-sse/utils/error.js +0 -147
  1148. package/open-sse/utils/ollamaTransform.js +0 -85
  1149. package/open-sse/utils/proxyFetch.js +0 -369
  1150. package/open-sse/utils/reasoningContentInjector.js +0 -79
  1151. package/open-sse/utils/requestLogger.js +0 -251
  1152. package/open-sse/utils/responsesStreamHelpers.js +0 -106
  1153. package/open-sse/utils/sessionManager.js +0 -231
  1154. package/open-sse/utils/stream.js +0 -590
  1155. package/open-sse/utils/streamHandler.js +0 -274
  1156. package/open-sse/utils/streamHelpers.js +0 -122
  1157. package/open-sse/utils/thinkingSuffix.js +0 -64
  1158. package/open-sse/utils/toolDeduper.js +0 -49
  1159. package/open-sse/utils/usageTracking.js +0 -351
  1160. package/postcss.config.mjs +0 -14
  1161. package/public/favicon.svg +0 -16
  1162. package/public/file.svg +0 -1
  1163. package/public/globe.svg +0 -1
  1164. package/public/i18n/literals/ar.json +0 -195
  1165. package/public/i18n/literals/bn.json +0 -195
  1166. package/public/i18n/literals/cs.json +0 -195
  1167. package/public/i18n/literals/da.json +0 -195
  1168. package/public/i18n/literals/de.json +0 -195
  1169. package/public/i18n/literals/el.json +0 -195
  1170. package/public/i18n/literals/es.json +0 -195
  1171. package/public/i18n/literals/fi.json +0 -195
  1172. package/public/i18n/literals/fr.json +0 -195
  1173. package/public/i18n/literals/he.json +0 -195
  1174. package/public/i18n/literals/hi.json +0 -195
  1175. package/public/i18n/literals/hu.json +0 -195
  1176. package/public/i18n/literals/id.json +0 -195
  1177. package/public/i18n/literals/it.json +0 -195
  1178. package/public/i18n/literals/ja.json +0 -195
  1179. package/public/i18n/literals/ko.json +0 -195
  1180. package/public/i18n/literals/nl.json +0 -195
  1181. package/public/i18n/literals/no.json +0 -195
  1182. package/public/i18n/literals/pl.json +0 -195
  1183. package/public/i18n/literals/pt-BR.json +0 -195
  1184. package/public/i18n/literals/pt-PT.json +0 -195
  1185. package/public/i18n/literals/ro.json +0 -195
  1186. package/public/i18n/literals/ru.json +0 -195
  1187. package/public/i18n/literals/sv.json +0 -195
  1188. package/public/i18n/literals/th.json +0 -195
  1189. package/public/i18n/literals/tl.json +0 -195
  1190. package/public/i18n/literals/tr.json +0 -195
  1191. package/public/i18n/literals/uk.json +0 -195
  1192. package/public/i18n/literals/ur.json +0 -195
  1193. package/public/i18n/literals/vi.json +0 -195
  1194. package/public/i18n/literals/zh-CN.json +0 -772
  1195. package/public/i18n/literals/zh-TW.json +0 -195
  1196. package/public/icons/discord.svg +0 -4
  1197. package/public/icons/icon-192.svg +0 -16
  1198. package/public/icons/icon-512.svg +0 -16
  1199. package/public/next.svg +0 -1
  1200. package/public/providers/alicode-intl.png +0 -0
  1201. package/public/providers/alicode.png +0 -0
  1202. package/public/providers/amp.png +0 -0
  1203. package/public/providers/anthropic-m.png +0 -0
  1204. package/public/providers/anthropic.png +0 -0
  1205. package/public/providers/antigravity.png +0 -0
  1206. package/public/providers/assemblyai.png +0 -0
  1207. package/public/providers/autoclaw.png +0 -0
  1208. package/public/providers/aws-polly.png +0 -0
  1209. package/public/providers/azure.png +0 -0
  1210. package/public/providers/black-forest-labs.png +0 -0
  1211. package/public/providers/blackbox.png +0 -0
  1212. package/public/providers/brave-search.png +0 -0
  1213. package/public/providers/byteplus.png +0 -0
  1214. package/public/providers/cartesia.png +0 -0
  1215. package/public/providers/cerebras.png +0 -0
  1216. package/public/providers/chutes.png +0 -0
  1217. package/public/providers/claude.png +0 -0
  1218. package/public/providers/cline.png +0 -0
  1219. package/public/providers/clinepass.png +0 -0
  1220. package/public/providers/cloudflare-ai.png +0 -0
  1221. package/public/providers/codebuddy-cn.png +0 -0
  1222. package/public/providers/codebuddy.png +0 -0
  1223. package/public/providers/codebuddy.svg +0 -37
  1224. package/public/providers/codex.png +0 -0
  1225. package/public/providers/cohere.png +0 -0
  1226. package/public/providers/comfyui.png +0 -0
  1227. package/public/providers/commandcode.png +0 -0
  1228. package/public/providers/continue.png +0 -0
  1229. package/public/providers/copilot.png +0 -0
  1230. package/public/providers/coqui.png +0 -0
  1231. package/public/providers/cursor.png +0 -0
  1232. package/public/providers/deepgram.png +0 -0
  1233. package/public/providers/deepseek-tui.png +0 -0
  1234. package/public/providers/deepseek.png +0 -0
  1235. package/public/providers/droid.png +0 -0
  1236. package/public/providers/edge-tts.png +0 -0
  1237. package/public/providers/elevenlabs.png +0 -0
  1238. package/public/providers/exa.png +0 -0
  1239. package/public/providers/fal-ai.png +0 -0
  1240. package/public/providers/firecrawl.png +0 -0
  1241. package/public/providers/fireworks.png +0 -0
  1242. package/public/providers/gemini-cli.png +0 -0
  1243. package/public/providers/gemini.png +0 -0
  1244. package/public/providers/github.png +0 -0
  1245. package/public/providers/glm-cn.png +0 -0
  1246. package/public/providers/glm.png +0 -0
  1247. package/public/providers/google-pse.png +0 -0
  1248. package/public/providers/google-tts.png +0 -0
  1249. package/public/providers/grok-cli.png +0 -0
  1250. package/public/providers/grok-web.png +0 -0
  1251. package/public/providers/groq.png +0 -0
  1252. package/public/providers/hermes.png +0 -0
  1253. package/public/providers/huggingface.png +0 -0
  1254. package/public/providers/hyperbolic.png +0 -0
  1255. package/public/providers/iflow.png +0 -0
  1256. package/public/providers/inworld.png +0 -0
  1257. package/public/providers/jcode.png +0 -0
  1258. package/public/providers/jina-ai.png +0 -0
  1259. package/public/providers/jina-reader.png +0 -0
  1260. package/public/providers/kilocode.png +0 -0
  1261. package/public/providers/kimchi.png +0 -0
  1262. package/public/providers/kimchi.svg +0 -4
  1263. package/public/providers/kimi-coding.png +0 -0
  1264. package/public/providers/kimi.png +0 -0
  1265. package/public/providers/kiro.png +0 -0
  1266. package/public/providers/linkup.png +0 -0
  1267. package/public/providers/local-device.png +0 -0
  1268. package/public/providers/mimo-free.png +0 -0
  1269. package/public/providers/minimax-cn.png +0 -0
  1270. package/public/providers/minimax.png +0 -0
  1271. package/public/providers/mistral.png +0 -0
  1272. package/public/providers/nanobanana.png +0 -0
  1273. package/public/providers/nebius.png +0 -0
  1274. package/public/providers/nvidia.png +0 -0
  1275. package/public/providers/oai-cc.png +0 -0
  1276. package/public/providers/oai-r.png +0 -0
  1277. package/public/providers/ollama-local.png +0 -0
  1278. package/public/providers/ollama.png +0 -0
  1279. package/public/providers/openai.png +0 -0
  1280. package/public/providers/openclaw.png +0 -0
  1281. package/public/providers/opencode-go.png +0 -0
  1282. package/public/providers/opencode.png +0 -0
  1283. package/public/providers/openrouter.png +0 -0
  1284. package/public/providers/perplexity-agent.png +0 -0
  1285. package/public/providers/perplexity-web.png +0 -0
  1286. package/public/providers/perplexity.png +0 -0
  1287. package/public/providers/playht.png +0 -0
  1288. package/public/providers/qoder.png +0 -0
  1289. package/public/providers/qwen.png +0 -0
  1290. package/public/providers/recraft.png +0 -0
  1291. package/public/providers/roo.png +0 -0
  1292. package/public/providers/runwayml.png +0 -0
  1293. package/public/providers/sdwebui.png +0 -0
  1294. package/public/providers/searchapi.png +0 -0
  1295. package/public/providers/searxng.png +0 -0
  1296. package/public/providers/serper.png +0 -0
  1297. package/public/providers/siliconflow.png +0 -0
  1298. package/public/providers/stability-ai.png +0 -0
  1299. package/public/providers/tavily.png +0 -0
  1300. package/public/providers/together.png +0 -0
  1301. package/public/providers/topaz.png +0 -0
  1302. package/public/providers/tortoise.png +0 -0
  1303. package/public/providers/vertex-partner.png +0 -0
  1304. package/public/providers/vertex.png +0 -0
  1305. package/public/providers/volcengine-ark.png +0 -0
  1306. package/public/providers/voyage-ai.png +0 -0
  1307. package/public/providers/xai.png +0 -0
  1308. package/public/providers/xiaomi-mimo.png +0 -0
  1309. package/public/providers/xiaomi-tokenplan.png +0 -0
  1310. package/public/providers/youcom.png +0 -0
  1311. package/public/sw.js +0 -22
  1312. package/public/vercel.svg +0 -1
  1313. package/public/window.svg +0 -1
  1314. package/scripts/translate-readme.js +0 -201
  1315. package/src/app/(dashboard)/dashboard/automation/page.js +0 -774
  1316. package/src/app/(dashboard)/dashboard/basic-chat/BasicChatPageClient.js +0 -1592
  1317. package/src/app/(dashboard)/dashboard/basic-chat/page.js +0 -5
  1318. package/src/app/(dashboard)/dashboard/cli-tools/CLIToolsPageClient.js +0 -81
  1319. package/src/app/(dashboard)/dashboard/cli-tools/[toolId]/ToolDetailClient.js +0 -173
  1320. package/src/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +0 -11
  1321. package/src/app/(dashboard)/dashboard/cli-tools/components/AntigravityToolCard.js +0 -487
  1322. package/src/app/(dashboard)/dashboard/cli-tools/components/ApiKeySelect.js +0 -14
  1323. package/src/app/(dashboard)/dashboard/cli-tools/components/BaseUrlSelect.js +0 -176
  1324. package/src/app/(dashboard)/dashboard/cli-tools/components/ClaudeToolCard.js +0 -396
  1325. package/src/app/(dashboard)/dashboard/cli-tools/components/ClineToolCard.js +0 -307
  1326. package/src/app/(dashboard)/dashboard/cli-tools/components/CodexToolCard.js +0 -466
  1327. package/src/app/(dashboard)/dashboard/cli-tools/components/CopilotToolCard.js +0 -330
  1328. package/src/app/(dashboard)/dashboard/cli-tools/components/CoworkToolCard.js +0 -646
  1329. package/src/app/(dashboard)/dashboard/cli-tools/components/DeepSeekTuiToolCard.js +0 -344
  1330. package/src/app/(dashboard)/dashboard/cli-tools/components/DefaultToolCard.js +0 -271
  1331. package/src/app/(dashboard)/dashboard/cli-tools/components/DroidToolCard.js +0 -421
  1332. package/src/app/(dashboard)/dashboard/cli-tools/components/EndpointPresetControl.js +0 -129
  1333. package/src/app/(dashboard)/dashboard/cli-tools/components/HermesToolCard.js +0 -323
  1334. package/src/app/(dashboard)/dashboard/cli-tools/components/JcodeToolCard.js +0 -386
  1335. package/src/app/(dashboard)/dashboard/cli-tools/components/KiloToolCard.js +0 -280
  1336. package/src/app/(dashboard)/dashboard/cli-tools/components/MitmLinkCard.js +0 -40
  1337. package/src/app/(dashboard)/dashboard/cli-tools/components/MitmServerCard.js +0 -329
  1338. package/src/app/(dashboard)/dashboard/cli-tools/components/MitmToolCard.js +0 -320
  1339. package/src/app/(dashboard)/dashboard/cli-tools/components/OpenClawToolCard.js +0 -394
  1340. package/src/app/(dashboard)/dashboard/cli-tools/components/OpenCodeToolCard.js +0 -512
  1341. package/src/app/(dashboard)/dashboard/cli-tools/components/ToolSummaryCard.js +0 -40
  1342. package/src/app/(dashboard)/dashboard/cli-tools/components/cliEndpointMatch.js +0 -13
  1343. package/src/app/(dashboard)/dashboard/cli-tools/components/index.js +0 -19
  1344. package/src/app/(dashboard)/dashboard/cli-tools/page.js +0 -7
  1345. package/src/app/(dashboard)/dashboard/combos/page.js +0 -615
  1346. package/src/app/(dashboard)/dashboard/console-log/ConsoleLogClient.js +0 -118
  1347. package/src/app/(dashboard)/dashboard/console-log/page.js +0 -8
  1348. package/src/app/(dashboard)/dashboard/context/page.js +0 -276
  1349. package/src/app/(dashboard)/dashboard/endpoint/EndpointPageClient.js +0 -1594
  1350. package/src/app/(dashboard)/dashboard/endpoint/endpointConstants.js +0 -32
  1351. package/src/app/(dashboard)/dashboard/endpoint/page.js +0 -7
  1352. package/src/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js +0 -1907
  1353. package/src/app/(dashboard)/dashboard/media-providers/[kind]/page.js +0 -289
  1354. package/src/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js +0 -413
  1355. package/src/app/(dashboard)/dashboard/media-providers/web/page.js +0 -209
  1356. package/src/app/(dashboard)/dashboard/mitm/MitmPageClient.js +0 -121
  1357. package/src/app/(dashboard)/dashboard/mitm/page.js +0 -5
  1358. package/src/app/(dashboard)/dashboard/page.js +0 -7
  1359. package/src/app/(dashboard)/dashboard/playground/page.js +0 -5
  1360. package/src/app/(dashboard)/dashboard/profile/page.js +0 -1284
  1361. package/src/app/(dashboard)/dashboard/providers/[id]/AddApiKeyModal.js +0 -389
  1362. package/src/app/(dashboard)/dashboard/providers/[id]/AddCustomModelModal.js +0 -126
  1363. package/src/app/(dashboard)/dashboard/providers/[id]/CompatibleModelsSection.js +0 -250
  1364. package/src/app/(dashboard)/dashboard/providers/[id]/ConnectionRow.js +0 -295
  1365. package/src/app/(dashboard)/dashboard/providers/[id]/CooldownTimer.js +0 -42
  1366. package/src/app/(dashboard)/dashboard/providers/[id]/EditCompatibleNodeModal.js +0 -162
  1367. package/src/app/(dashboard)/dashboard/providers/[id]/ModelRow.js +0 -99
  1368. package/src/app/(dashboard)/dashboard/providers/[id]/PassthroughModelsSection.js +0 -183
  1369. package/src/app/(dashboard)/dashboard/providers/[id]/page.js +0 -2170
  1370. package/src/app/(dashboard)/dashboard/providers/[id]/page.new.js +0 -1726
  1371. package/src/app/(dashboard)/dashboard/providers/components/ConnectionsCard.js +0 -486
  1372. package/src/app/(dashboard)/dashboard/providers/components/ModelAvailabilityBadge.js +0 -186
  1373. package/src/app/(dashboard)/dashboard/providers/components/ModelsCard.js +0 -295
  1374. package/src/app/(dashboard)/dashboard/providers/new/page.js +0 -220
  1375. package/src/app/(dashboard)/dashboard/providers/page.js +0 -1518
  1376. package/src/app/(dashboard)/dashboard/proxy-pools/page.js +0 -1107
  1377. package/src/app/(dashboard)/dashboard/pxpipe/PxpipeClient.js +0 -284
  1378. package/src/app/(dashboard)/dashboard/pxpipe/page.js +0 -5
  1379. package/src/app/(dashboard)/dashboard/quota/page.js +0 -11
  1380. package/src/app/(dashboard)/dashboard/terminal/TerminalPageClient.js +0 -735
  1381. package/src/app/(dashboard)/dashboard/terminal/page.js +0 -7
  1382. package/src/app/(dashboard)/dashboard/token-saver/TokenSaverClient.js +0 -1018
  1383. package/src/app/(dashboard)/dashboard/token-saver/page.js +0 -5
  1384. package/src/app/(dashboard)/dashboard/translator/page.js +0 -303
  1385. package/src/app/(dashboard)/dashboard/usage/components/OverviewCards.js +0 -87
  1386. package/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/ProviderLimitCard.js +0 -183
  1387. package/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/QuotaProgressBar.js +0 -127
  1388. package/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/QuotaTable.js +0 -269
  1389. package/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/index.js +0 -1571
  1390. package/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/utils.js +0 -320
  1391. package/src/app/(dashboard)/dashboard/usage/components/ProviderTopology.js +0 -468
  1392. package/src/app/(dashboard)/dashboard/usage/components/RequestDetailsTab.js +0 -454
  1393. package/src/app/(dashboard)/dashboard/usage/components/UsageChart.js +0 -155
  1394. package/src/app/(dashboard)/dashboard/usage/components/UsageTable.js +0 -253
  1395. package/src/app/(dashboard)/dashboard/usage/page.js +0 -75
  1396. package/src/app/(dashboard)/layout.js +0 -6
  1397. package/src/app/api/auth/login/route.js +0 -76
  1398. package/src/app/api/auth/logout/route.js +0 -14
  1399. package/src/app/api/auth/oidc/callback/route.js +0 -87
  1400. package/src/app/api/auth/oidc/start/route.js +0 -52
  1401. package/src/app/api/auth/oidc/test/route.js +0 -86
  1402. package/src/app/api/auth/status/route.js +0 -45
  1403. package/src/app/api/cache/stats/route.js +0 -13
  1404. package/src/app/api/changelog/route.js +0 -48
  1405. package/src/app/api/cli-tools/all-statuses/route.js +0 -46
  1406. package/src/app/api/cli-tools/antigravity-mitm/alias/route.js +0 -53
  1407. package/src/app/api/cli-tools/antigravity-mitm/route.js +0 -202
  1408. package/src/app/api/cli-tools/claude-settings/route.js +0 -203
  1409. package/src/app/api/cli-tools/cline-settings/route.js +0 -133
  1410. package/src/app/api/cli-tools/codex-gateway/accounts/route.js +0 -16
  1411. package/src/app/api/cli-tools/codex-settings/route.js +0 -271
  1412. package/src/app/api/cli-tools/copilot-settings/route.js +0 -153
  1413. package/src/app/api/cli-tools/cowork-mcp-registry/route.js +0 -77
  1414. package/src/app/api/cli-tools/cowork-mcp-tools/route.js +0 -95
  1415. package/src/app/api/cli-tools/cowork-settings/route.js +0 -412
  1416. package/src/app/api/cli-tools/deepseek-tui-settings/route.js +0 -164
  1417. package/src/app/api/cli-tools/droid-settings/route.js +0 -213
  1418. package/src/app/api/cli-tools/hermes-settings/route.js +0 -175
  1419. package/src/app/api/cli-tools/jcode-settings/route.js +0 -216
  1420. package/src/app/api/cli-tools/kilo-settings/route.js +0 -131
  1421. package/src/app/api/cli-tools/openclaw-settings/route.js +0 -292
  1422. package/src/app/api/cli-tools/opencode-settings/route.js +0 -259
  1423. package/src/app/api/combos/[id]/route.js +0 -81
  1424. package/src/app/api/combos/route.js +0 -48
  1425. package/src/app/api/context/[id]/route.js +0 -35
  1426. package/src/app/api/context/bulk/route.js +0 -25
  1427. package/src/app/api/context/route.js +0 -33
  1428. package/src/app/api/dashboard/chat/completions/route.js +0 -74
  1429. package/src/app/api/dashboard/cli-tools/keys/route.js +0 -33
  1430. package/src/app/api/dashboard/media/[operation]/route.js +0 -60
  1431. package/src/app/api/headroom/extras/route.js +0 -46
  1432. package/src/app/api/headroom/proxy/[...path]/route.js +0 -104
  1433. package/src/app/api/headroom/restart/route.js +0 -35
  1434. package/src/app/api/headroom/start/route.js +0 -35
  1435. package/src/app/api/headroom/status/route.js +0 -18
  1436. package/src/app/api/headroom/stop/route.js +0 -14
  1437. package/src/app/api/health/ready/route.js +0 -21
  1438. package/src/app/api/health/route.js +0 -15
  1439. package/src/app/api/init/route.js +0 -12
  1440. package/src/app/api/keys/[id]/rotate/route.js +0 -14
  1441. package/src/app/api/keys/[id]/route.js +0 -119
  1442. package/src/app/api/keys/route.js +0 -56
  1443. package/src/app/api/locale/route.js +0 -30
  1444. package/src/app/api/mcp/[plugin]/message/route.js +0 -21
  1445. package/src/app/api/mcp/[plugin]/sse/route.js +0 -37
  1446. package/src/app/api/media-providers/tts/deepgram/voices/route.js +0 -65
  1447. package/src/app/api/media-providers/tts/elevenlabs/voices/route.js +0 -71
  1448. package/src/app/api/media-providers/tts/inworld/voices/route.js +0 -61
  1449. package/src/app/api/media-providers/tts/minimax/voices/route.js +0 -113
  1450. package/src/app/api/media-providers/tts/voices/route.js +0 -99
  1451. package/src/app/api/metrics/route.js +0 -33
  1452. package/src/app/api/models/alias/route.js +0 -53
  1453. package/src/app/api/models/availability/route.js +0 -103
  1454. package/src/app/api/models/custom/route.js +0 -48
  1455. package/src/app/api/models/disabled/route.js +0 -50
  1456. package/src/app/api/models/route.js +0 -68
  1457. package/src/app/api/models/test/ping.js +0 -191
  1458. package/src/app/api/models/test/route.js +0 -14
  1459. package/src/app/api/oauth/[provider]/[action]/route.js +0 -340
  1460. package/src/app/api/oauth/antigravity/bulk-import/[jobId]/cancel/route.js +0 -19
  1461. package/src/app/api/oauth/antigravity/bulk-import/[jobId]/manual/[workerId]/route.js +0 -30
  1462. package/src/app/api/oauth/antigravity/bulk-import/[jobId]/route.js +0 -23
  1463. package/src/app/api/oauth/antigravity/bulk-import/latest/route.js +0 -24
  1464. package/src/app/api/oauth/antigravity/bulk-import/route.js +0 -51
  1465. package/src/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/cancel/route.js +0 -19
  1466. package/src/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/manual/[workerId]/route.js +0 -30
  1467. package/src/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/route.js +0 -25
  1468. package/src/app/api/oauth/cloudflare-ai/bulk-import/latest/route.js +0 -27
  1469. package/src/app/api/oauth/cloudflare-ai/bulk-import/route.js +0 -56
  1470. package/src/app/api/oauth/codebuddy/bulk-import/[jobId]/cancel/route.js +0 -19
  1471. package/src/app/api/oauth/codebuddy/bulk-import/[jobId]/manual/[workerId]/route.js +0 -30
  1472. package/src/app/api/oauth/codebuddy/bulk-import/[jobId]/route.js +0 -23
  1473. package/src/app/api/oauth/codebuddy/bulk-import/latest/route.js +0 -25
  1474. package/src/app/api/oauth/codebuddy/bulk-import/route.js +0 -51
  1475. package/src/app/api/oauth/codebuddy/bulk-token/route.js +0 -118
  1476. package/src/app/api/oauth/codebuddy/quota-cookie/route.js +0 -133
  1477. package/src/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/cancel/route.js +0 -19
  1478. package/src/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/manual/[workerId]/route.js +0 -30
  1479. package/src/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/route.js +0 -26
  1480. package/src/app/api/oauth/codebuddy-cn/bulk-import/latest/route.js +0 -27
  1481. package/src/app/api/oauth/codebuddy-cn/bulk-import/route.js +0 -61
  1482. package/src/app/api/oauth/codebuddy-cn/bulk-token/route.js +0 -119
  1483. package/src/app/api/oauth/codebuddy-cn/quota-cookie/route.js +0 -28
  1484. package/src/app/api/oauth/codex/import-token/route.js +0 -96
  1485. package/src/app/api/oauth/cursor/auto-import/route.js +0 -257
  1486. package/src/app/api/oauth/cursor/import/route.js +0 -100
  1487. package/src/app/api/oauth/gitlab/pat/route.js +0 -62
  1488. package/src/app/api/oauth/iflow/cookie/route.js +0 -137
  1489. package/src/app/api/oauth/kiro/auto-import/route.js +0 -85
  1490. package/src/app/api/oauth/kiro/bulk-import/[jobId]/cancel/route.js +0 -19
  1491. package/src/app/api/oauth/kiro/bulk-import/[jobId]/manual/[workerId]/route.js +0 -30
  1492. package/src/app/api/oauth/kiro/bulk-import/[jobId]/route.js +0 -23
  1493. package/src/app/api/oauth/kiro/bulk-import/latest/route.js +0 -25
  1494. package/src/app/api/oauth/kiro/bulk-import/route.js +0 -51
  1495. package/src/app/api/oauth/kiro/import/route.js +0 -110
  1496. package/src/app/api/oauth/kiro/social-authorize/route.js +0 -27
  1497. package/src/app/api/oauth/kiro/social-exchange/route.js +0 -41
  1498. package/src/app/api/oauth/qoder/bulk-import/[jobId]/cancel/route.js +0 -19
  1499. package/src/app/api/oauth/qoder/bulk-import/[jobId]/manual/[workerId]/route.js +0 -30
  1500. package/src/app/api/oauth/qoder/bulk-import/[jobId]/route.js +0 -23
  1501. package/src/app/api/oauth/qoder/bulk-import/latest/route.js +0 -24
  1502. package/src/app/api/oauth/qoder/bulk-import/route.js +0 -49
  1503. package/src/app/api/pricing/route.js +0 -134
  1504. package/src/app/api/provider-nodes/[id]/route.js +0 -101
  1505. package/src/app/api/provider-nodes/route.js +0 -104
  1506. package/src/app/api/provider-nodes/validate/route.js +0 -201
  1507. package/src/app/api/providers/[id]/models/route.js +0 -605
  1508. package/src/app/api/providers/[id]/route.js +0 -251
  1509. package/src/app/api/providers/[id]/test/route.js +0 -23
  1510. package/src/app/api/providers/[id]/test/testUtils.js +0 -811
  1511. package/src/app/api/providers/[id]/test-models/route.js +0 -66
  1512. package/src/app/api/providers/bulk-delete/route.js +0 -60
  1513. package/src/app/api/providers/client/route.js +0 -136
  1514. package/src/app/api/providers/kilo/free-models/route.js +0 -55
  1515. package/src/app/api/providers/route.js +0 -278
  1516. package/src/app/api/providers/suggested-models/filters.js +0 -20
  1517. package/src/app/api/providers/suggested-models/route.js +0 -34
  1518. package/src/app/api/providers/test-batch/route.js +0 -131
  1519. package/src/app/api/providers/validate/route.js +0 -637
  1520. package/src/app/api/proxy-pools/[id]/route.js +0 -135
  1521. package/src/app/api/proxy-pools/[id]/test/route.js +0 -72
  1522. package/src/app/api/proxy-pools/cloudflare-deploy/route.js +0 -145
  1523. package/src/app/api/proxy-pools/deno-deploy/route.js +0 -175
  1524. package/src/app/api/proxy-pools/route.js +0 -112
  1525. package/src/app/api/proxy-pools/vercel-deploy/route.js +0 -142
  1526. package/src/app/api/pxpipe/health/route.js +0 -16
  1527. package/src/app/api/pxpipe/install/route.js +0 -20
  1528. package/src/app/api/pxpipe/logs/route.js +0 -21
  1529. package/src/app/api/pxpipe/restart/route.js +0 -16
  1530. package/src/app/api/pxpipe/start/route.js +0 -26
  1531. package/src/app/api/pxpipe/stats/route.js +0 -17
  1532. package/src/app/api/pxpipe/status/route.js +0 -21
  1533. package/src/app/api/pxpipe/stop/route.js +0 -16
  1534. package/src/app/api/settings/database/route.js +0 -36
  1535. package/src/app/api/settings/proxy-test/route.js +0 -23
  1536. package/src/app/api/settings/require-login/route.js +0 -15
  1537. package/src/app/api/settings/route.js +0 -115
  1538. package/src/app/api/shutdown/route.js +0 -24
  1539. package/src/app/api/tags/route.js +0 -18
  1540. package/src/app/api/terminal/auth/setup/route.js +0 -72
  1541. package/src/app/api/terminal/auth/status/route.js +0 -27
  1542. package/src/app/api/terminal/auth/unlock/route.js +0 -69
  1543. package/src/app/api/terminal/session/[id]/input/route.js +0 -32
  1544. package/src/app/api/terminal/session/[id]/resize/route.js +0 -18
  1545. package/src/app/api/terminal/session/[id]/route.js +0 -37
  1546. package/src/app/api/terminal/session/[id]/stream/route.js +0 -100
  1547. package/src/app/api/terminal/session/route.js +0 -30
  1548. package/src/app/api/translator/console-logs/route.js +0 -24
  1549. package/src/app/api/translator/console-logs/stream/route.js +0 -79
  1550. package/src/app/api/translator/load/route.js +0 -45
  1551. package/src/app/api/translator/save/route.js +0 -44
  1552. package/src/app/api/translator/send/route.js +0 -94
  1553. package/src/app/api/translator/translate/route.js +0 -90
  1554. package/src/app/api/tunnel/disable/route.js +0 -12
  1555. package/src/app/api/tunnel/enable/route.js +0 -16
  1556. package/src/app/api/tunnel/status/route.js +0 -13
  1557. package/src/app/api/tunnel/tailscale-check/route.js +0 -50
  1558. package/src/app/api/tunnel/tailscale-disable/route.js +0 -12
  1559. package/src/app/api/tunnel/tailscale-enable/route.js +0 -12
  1560. package/src/app/api/tunnel/tailscale-install/route.js +0 -72
  1561. package/src/app/api/usage/[connectionId]/route.js +0 -40
  1562. package/src/app/api/usage/aggregate/route.js +0 -126
  1563. package/src/app/api/usage/chart/route.js +0 -21
  1564. package/src/app/api/usage/history/route.js +0 -12
  1565. package/src/app/api/usage/logs/route.js +0 -12
  1566. package/src/app/api/usage/providers/route.js +0 -42
  1567. package/src/app/api/usage/request-details/route.js +0 -57
  1568. package/src/app/api/usage/request-logs/route.js +0 -13
  1569. package/src/app/api/usage/stats/route.js +0 -23
  1570. package/src/app/api/usage/stream/route.js +0 -142
  1571. package/src/app/api/v1/api/chat/route.js +0 -37
  1572. package/src/app/api/v1/audio/speech/route.js +0 -16
  1573. package/src/app/api/v1/audio/transcriptions/route.js +0 -19
  1574. package/src/app/api/v1/audio/voices/route.js +0 -68
  1575. package/src/app/api/v1/chat/completions/route.js +0 -35
  1576. package/src/app/api/v1/embeddings/route.js +0 -21
  1577. package/src/app/api/v1/images/generations/route.js +0 -16
  1578. package/src/app/api/v1/messages/count_tokens/route.js +0 -59
  1579. package/src/app/api/v1/messages/route.js +0 -36
  1580. package/src/app/api/v1/models/[kind]/route.js +0 -55
  1581. package/src/app/api/v1/models/info/route.js +0 -110
  1582. package/src/app/api/v1/models/route.js +0 -497
  1583. package/src/app/api/v1/responses/compact/route.js +0 -55
  1584. package/src/app/api/v1/responses/route.js +0 -30
  1585. package/src/app/api/v1/route.js +0 -1
  1586. package/src/app/api/v1/search/route.js +0 -21
  1587. package/src/app/api/v1/web/fetch/route.js +0 -21
  1588. package/src/app/api/v1beta/models/[...path]/route.js +0 -368
  1589. package/src/app/api/v1beta/models/route.js +0 -44
  1590. package/src/app/api/version/route.js +0 -198
  1591. package/src/app/api/version/shutdown/route.js +0 -15
  1592. package/src/app/api/version/update/route.js +0 -21
  1593. package/src/app/callback/page.js +0 -149
  1594. package/src/app/dashboard/settings/pricing/page.js +0 -174
  1595. package/src/app/globals.css +0 -659
  1596. package/src/app/landing/components/AnimatedBackground.js +0 -57
  1597. package/src/app/landing/components/Features.js +0 -133
  1598. package/src/app/landing/components/FlowAnimation.js +0 -175
  1599. package/src/app/landing/components/Footer.js +0 -61
  1600. package/src/app/landing/components/GetStarted.js +0 -97
  1601. package/src/app/landing/components/HeroSection.js +0 -72
  1602. package/src/app/landing/components/HowItWorks.js +0 -66
  1603. package/src/app/landing/components/Navigation.js +0 -77
  1604. package/src/app/landing/page.js +0 -106
  1605. package/src/app/layout.js +0 -48
  1606. package/src/app/login/page.js +0 -197
  1607. package/src/app/manifest.js +0 -30
  1608. package/src/app/page.js +0 -5
  1609. package/src/dashboardGuard.js +0 -288
  1610. package/src/i18n/RuntimeI18nProvider.js +0 -27
  1611. package/src/i18n/config.js +0 -146
  1612. package/src/i18n/runtime.js +0 -162
  1613. package/src/lib/alerter.js +0 -122
  1614. package/src/lib/appUpdater.js +0 -204
  1615. package/src/lib/auth/dashboardSession.js +0 -68
  1616. package/src/lib/auth/loginLimiter.js +0 -52
  1617. package/src/lib/auth/oidc.js +0 -303
  1618. package/src/lib/auth/terminalSession.js +0 -88
  1619. package/src/lib/autoclaw/constants.js +0 -63
  1620. package/src/lib/consoleLogBuffer.js +0 -79
  1621. package/src/lib/dataDir.js +0 -29
  1622. package/src/lib/db/adapters/betterSqliteAdapter.js +0 -58
  1623. package/src/lib/db/adapters/bunSqliteAdapter.js +0 -65
  1624. package/src/lib/db/adapters/nodeSqliteAdapter.js +0 -86
  1625. package/src/lib/db/adapters/sqljsAdapter.js +0 -207
  1626. package/src/lib/db/backup.js +0 -36
  1627. package/src/lib/db/dataDirMigration.js +0 -52
  1628. package/src/lib/db/driver.js +0 -131
  1629. package/src/lib/db/helpers/jsonCol.js +0 -9
  1630. package/src/lib/db/helpers/kvStore.js +0 -39
  1631. package/src/lib/db/helpers/metaStore.js +0 -22
  1632. package/src/lib/db/index.js +0 -218
  1633. package/src/lib/db/maintenance.js +0 -78
  1634. package/src/lib/db/migrate.js +0 -295
  1635. package/src/lib/db/migrations/001-initial.js +0 -17
  1636. package/src/lib/db/migrations/index.js +0 -10
  1637. package/src/lib/db/paths.js +0 -21
  1638. package/src/lib/db/repos/aliasRepo.js +0 -62
  1639. package/src/lib/db/repos/apiKeysRepo.js +0 -193
  1640. package/src/lib/db/repos/combosRepo.js +0 -73
  1641. package/src/lib/db/repos/connectionsRepo.js +0 -247
  1642. package/src/lib/db/repos/contextFilesRepo.js +0 -124
  1643. package/src/lib/db/repos/disabledModelsRepo.js +0 -56
  1644. package/src/lib/db/repos/nodesRepo.js +0 -95
  1645. package/src/lib/db/repos/pricingRepo.js +0 -108
  1646. package/src/lib/db/repos/proxyPoolsRepo.js +0 -103
  1647. package/src/lib/db/repos/quotaCacheRepo.js +0 -80
  1648. package/src/lib/db/repos/requestDetailsRepo.js +0 -275
  1649. package/src/lib/db/repos/settingsRepo.js +0 -120
  1650. package/src/lib/db/repos/usageRepo.js +0 -935
  1651. package/src/lib/db/schema.js +0 -193
  1652. package/src/lib/db/version.js +0 -21
  1653. package/src/lib/disabledModelsDb.js +0 -4
  1654. package/src/lib/headroom/detect.js +0 -192
  1655. package/src/lib/headroom/process.js +0 -327
  1656. package/src/lib/localDb.js +0 -26
  1657. package/src/lib/mcp/stdioSseBridge.js +0 -198
  1658. package/src/lib/mitmAliasCache.js +0 -46
  1659. package/src/lib/network/connectionProxy.js +0 -187
  1660. package/src/lib/network/initOutboundProxy.js +0 -25
  1661. package/src/lib/network/outboundProxy.js +0 -82
  1662. package/src/lib/network/proxyTest.js +0 -91
  1663. package/src/lib/oauth/constants/oauth.js +0 -337
  1664. package/src/lib/oauth/constants/xai.js +0 -61
  1665. package/src/lib/oauth/providers.js +0 -1821
  1666. package/src/lib/oauth/services/antigravity.js +0 -321
  1667. package/src/lib/oauth/services/antigravityBulkImportManager.js +0 -364
  1668. package/src/lib/oauth/services/autoclawTokenMonitor.js +0 -145
  1669. package/src/lib/oauth/services/bulkImportBrowserEngine.js +0 -756
  1670. package/src/lib/oauth/services/claude.js +0 -136
  1671. package/src/lib/oauth/services/cloudflareAiBulkImportManager.js +0 -503
  1672. package/src/lib/oauth/services/codebuddyAutomation.js +0 -6
  1673. package/src/lib/oauth/services/codebuddyBulkImportManager.js +0 -1033
  1674. package/src/lib/oauth/services/codebuddyCnBulkImportManager.js +0 -2088
  1675. package/src/lib/oauth/services/codebuddyCnPhoneAutomation.js +0 -1294
  1676. package/src/lib/oauth/services/codex.js +0 -144
  1677. package/src/lib/oauth/services/cursor.js +0 -179
  1678. package/src/lib/oauth/services/displayEnv.js +0 -134
  1679. package/src/lib/oauth/services/fiveSimClient.js +0 -567
  1680. package/src/lib/oauth/services/gemini.js +0 -240
  1681. package/src/lib/oauth/services/github.js +0 -225
  1682. package/src/lib/oauth/services/googleAutomation.js +0 -9
  1683. package/src/lib/oauth/services/iflow.js +0 -202
  1684. package/src/lib/oauth/services/index.js +0 -17
  1685. package/src/lib/oauth/services/kiro.js +0 -334
  1686. package/src/lib/oauth/services/kiroBulkImportManager.js +0 -1522
  1687. package/src/lib/oauth/services/kiroConnections.js +0 -93
  1688. package/src/lib/oauth/services/kiroGoogleAutomation.js +0 -2587
  1689. package/src/lib/oauth/services/oauth.js +0 -157
  1690. package/src/lib/oauth/services/openai.js +0 -123
  1691. package/src/lib/oauth/services/proxyUtils.js +0 -26
  1692. package/src/lib/oauth/services/qoder.js +0 -233
  1693. package/src/lib/oauth/services/qoderBulkImportManager.js +0 -340
  1694. package/src/lib/oauth/services/qwen.js +0 -170
  1695. package/src/lib/oauth/services/socksHttpBridge.js +0 -165
  1696. package/src/lib/oauth/services/tempmailClient.js +0 -288
  1697. package/src/lib/oauth/services/xai.js +0 -238
  1698. package/src/lib/oauth/utils/banner.js +0 -63
  1699. package/src/lib/oauth/utils/pkce.js +0 -39
  1700. package/src/lib/oauth/utils/server.js +0 -415
  1701. package/src/lib/oauth/utils/ui.js +0 -48
  1702. package/src/lib/providerConnectionSanitizer.js +0 -180
  1703. package/src/lib/providerNormalization.js +0 -45
  1704. package/src/lib/pxpipe/events.js +0 -125
  1705. package/src/lib/pxpipe/install.js +0 -123
  1706. package/src/lib/pxpipe/loader.js +0 -70
  1707. package/src/lib/pxpipe/service.js +0 -49
  1708. package/src/lib/qoder/constants.js +0 -64
  1709. package/src/lib/qoder/cosy.js +0 -175
  1710. package/src/lib/qoder/encoding.js +0 -55
  1711. package/src/lib/requestDetailsDb.js +0 -4
  1712. package/src/lib/responseCache.js +0 -169
  1713. package/src/lib/safeFetch.js +0 -167
  1714. package/src/lib/systemSpecs.js +0 -167
  1715. package/src/lib/terminal/ptyBridge.py +0 -163
  1716. package/src/lib/terminal/sessionManager.js +0 -434
  1717. package/src/lib/tunnel/cloudflare/cloudflared.js +0 -460
  1718. package/src/lib/tunnel/cloudflare/config.js +0 -9
  1719. package/src/lib/tunnel/cloudflare/healthCheck.js +0 -29
  1720. package/src/lib/tunnel/cloudflare/manager.js +0 -151
  1721. package/src/lib/tunnel/cloudflare/pid.js +0 -23
  1722. package/src/lib/tunnel/index.js +0 -48
  1723. package/src/lib/tunnel/shared/dnsResolver.js +0 -17
  1724. package/src/lib/tunnel/shared/internetCheck.js +0 -26
  1725. package/src/lib/tunnel/shared/state.js +0 -41
  1726. package/src/lib/tunnel/shared/watchdogConfig.js +0 -8
  1727. package/src/lib/tunnel/tailscale/config.js +0 -7
  1728. package/src/lib/tunnel/tailscale/healthCheck.js +0 -29
  1729. package/src/lib/tunnel/tailscale/manager.js +0 -129
  1730. package/src/lib/tunnel/tailscale/tailscale.js +0 -790
  1731. package/src/lib/updater/updater.js +0 -327
  1732. package/src/lib/usage/fetcher.js +0 -208
  1733. package/src/lib/usage/quotaRefresh.js +0 -100
  1734. package/src/lib/usage/quotaService.js +0 -206
  1735. package/src/lib/usageDb.js +0 -7
  1736. package/src/mitm/antigravityIdeVersion.js +0 -50
  1737. package/src/mitm/cert/generate.js +0 -32
  1738. package/src/mitm/cert/install.js +0 -274
  1739. package/src/mitm/cert/rootCA.js +0 -173
  1740. package/src/mitm/config.js +0 -87
  1741. package/src/mitm/dbReader.js +0 -22
  1742. package/src/mitm/dns/dnsConfig.js +0 -266
  1743. package/src/mitm/handlers/antigravity.js +0 -33
  1744. package/src/mitm/handlers/base.js +0 -226
  1745. package/src/mitm/handlers/copilot.js +0 -35
  1746. package/src/mitm/handlers/cursor.js +0 -15
  1747. package/src/mitm/handlers/kiro.js +0 -533
  1748. package/src/mitm/logger.js +0 -106
  1749. package/src/mitm/manager.js +0 -862
  1750. package/src/mitm/paths.js +0 -32
  1751. package/src/mitm/server.js +0 -447
  1752. package/src/mitm/winElevated.js +0 -81
  1753. package/src/models/index.js +0 -38
  1754. package/src/proxy.js +0 -5
  1755. package/src/shared/components/AddCustomEmbeddingModal.js +0 -184
  1756. package/src/shared/components/Avatar.js +0 -88
  1757. package/src/shared/components/Badge.js +0 -54
  1758. package/src/shared/components/BulkAccountAutomationModal.js +0 -640
  1759. package/src/shared/components/Button.js +0 -57
  1760. package/src/shared/components/Card.js +0 -116
  1761. package/src/shared/components/ChangelogModal.js +0 -108
  1762. package/src/shared/components/CodeBuddyCnPhoneRegisterModal.js +0 -563
  1763. package/src/shared/components/CodeBuddyQuotaCookieModal.js +0 -109
  1764. package/src/shared/components/ComboFormModal.js +0 -176
  1765. package/src/shared/components/CursorAuthModal.js +0 -213
  1766. package/src/shared/components/Drawer.js +0 -82
  1767. package/src/shared/components/EditConnectionModal.js +0 -287
  1768. package/src/shared/components/Footer.js +0 -132
  1769. package/src/shared/components/GitLabAuthModal.js +0 -194
  1770. package/src/shared/components/Header.js +0 -399
  1771. package/src/shared/components/HeaderLanguage.js +0 -48
  1772. package/src/shared/components/HeaderMenu.js +0 -127
  1773. package/src/shared/components/IFlowCookieModal.js +0 -132
  1774. package/src/shared/components/Input.js +0 -76
  1775. package/src/shared/components/KiroAuthModal.js +0 -1169
  1776. package/src/shared/components/KiroOAuthWrapper.js +0 -150
  1777. package/src/shared/components/KiroSocialOAuthModal.js +0 -205
  1778. package/src/shared/components/LanguageSwitcher.js +0 -192
  1779. package/src/shared/components/Loading.js +0 -75
  1780. package/src/shared/components/ManualConfigModal.js +0 -44
  1781. package/src/shared/components/McpMarketplaceModal.js +0 -255
  1782. package/src/shared/components/Modal.js +0 -196
  1783. package/src/shared/components/ModelSelectModal.js +0 -547
  1784. package/src/shared/components/NoAuthProxyCard.js +0 -134
  1785. package/src/shared/components/OAuthModal.js +0 -709
  1786. package/src/shared/components/Pagination.js +0 -150
  1787. package/src/shared/components/PricingModal.js +0 -209
  1788. package/src/shared/components/ProviderIcon.js +0 -68
  1789. package/src/shared/components/ProviderInfoCard.js +0 -82
  1790. package/src/shared/components/RequestLogger.js +0 -122
  1791. package/src/shared/components/SegmentedControl.js +0 -53
  1792. package/src/shared/components/Select.js +0 -67
  1793. package/src/shared/components/Sidebar.js +0 -486
  1794. package/src/shared/components/ThemeProvider.js +0 -15
  1795. package/src/shared/components/ThemeToggle.js +0 -42
  1796. package/src/shared/components/Toggle.js +0 -95
  1797. package/src/shared/components/Tooltip.js +0 -25
  1798. package/src/shared/components/UsageStats.js +0 -571
  1799. package/src/shared/components/index.js +0 -46
  1800. package/src/shared/components/layouts/AuthLayout.js +0 -29
  1801. package/src/shared/components/layouts/DashboardLayout.js +0 -121
  1802. package/src/shared/components/layouts/index.js +0 -4
  1803. package/src/shared/constants/automationProviders.js +0 -23
  1804. package/src/shared/constants/cliTools.js +0 -397
  1805. package/src/shared/constants/colors.js +0 -77
  1806. package/src/shared/constants/config.js +0 -98
  1807. package/src/shared/constants/coworkPlugins.js +0 -75
  1808. package/src/shared/constants/index.js +0 -4
  1809. package/src/shared/constants/locales.js +0 -36
  1810. package/src/shared/constants/mitmToolHosts.js +0 -12
  1811. package/src/shared/constants/models.js +0 -38
  1812. package/src/shared/constants/pricing.js +0 -311
  1813. package/src/shared/constants/providers.js +0 -450
  1814. package/src/shared/constants/ttsProviders.js +0 -138
  1815. package/src/shared/hooks/index.js +0 -2
  1816. package/src/shared/hooks/useCopyToClipboard.js +0 -43
  1817. package/src/shared/hooks/useModelLockUntil.js +0 -18
  1818. package/src/shared/hooks/useTheme.js +0 -60
  1819. package/src/shared/services/bootstrap.js +0 -12
  1820. package/src/shared/services/initializeApp.js +0 -294
  1821. package/src/shared/utils/api.js +0 -93
  1822. package/src/shared/utils/apiKey.js +0 -98
  1823. package/src/shared/utils/asyncPolling.js +0 -27
  1824. package/src/shared/utils/clineAuth.js +0 -37
  1825. package/src/shared/utils/cn.js +0 -11
  1826. package/src/shared/utils/codexCliConfig.js +0 -44
  1827. package/src/shared/utils/connectionStatus.js +0 -168
  1828. package/src/shared/utils/dashboardMedia.js +0 -19
  1829. package/src/shared/utils/index.js +0 -40
  1830. package/src/shared/utils/machine.js +0 -6
  1831. package/src/shared/utils/machineId.js +0 -66
  1832. package/src/shared/utils/modelLockTimer.js +0 -32
  1833. package/src/shared/utils/providerModelsFetcher.js +0 -30
  1834. package/src/shared/utils/usageStats.js +0 -10
  1835. package/src/sse/handlers/chat.js +0 -445
  1836. package/src/sse/handlers/embeddings.js +0 -141
  1837. package/src/sse/handlers/fetch.js +0 -213
  1838. package/src/sse/handlers/imageGeneration.js +0 -142
  1839. package/src/sse/handlers/search.js +0 -206
  1840. package/src/sse/handlers/streamFailure.js +0 -34
  1841. package/src/sse/handlers/stt.js +0 -88
  1842. package/src/sse/handlers/tts.js +0 -114
  1843. package/src/sse/services/auth.js +0 -576
  1844. package/src/sse/services/codexGateway.js +0 -215
  1845. package/src/sse/services/model.js +0 -99
  1846. package/src/sse/services/tokenRefresh.js +0 -319
  1847. package/src/sse/utils/logger.js +0 -75
  1848. package/src/store/headerSearchStore.js +0 -19
  1849. package/src/store/index.js +0 -6
  1850. package/src/store/notificationStore.js +0 -45
  1851. package/src/store/providerStore.js +0 -55
  1852. package/src/store/settingsStore.js +0 -51
  1853. package/src/store/themeStore.js +0 -54
  1854. package/src/store/userStore.js +0 -20
  1855. package/start.sh +0 -4
  1856. /package/cli/app/.next-cli-build/static/{SC3btW1lCuB9q-iyIwwWK → sRgS_5eNahHOIlOLEqVvI}/_buildManifest.js +0 -0
  1857. /package/cli/app/.next-cli-build/static/{SC3btW1lCuB9q-iyIwwWK → sRgS_5eNahHOIlOLEqVvI}/_ssgManifest.js +0 -0
@@ -1,2587 +0,0 @@
1
- const DEFAULT_SHORT_TIMEOUT_MS = 90_000;
2
- const DEFAULT_MANUAL_TIMEOUT_MS = 15 * 60_000;
3
-
4
- // Comma-separated CSS selector. Includes Google's stable ID, mobile/legacy form
5
- // names, and aria-label fallbacks for English + Indonesian. Multi-language
6
- // aria-label support matters because Google renders the form in the user's
7
- // browser locale (so "Email or phone" becomes "Email atau nomor telepon" for
8
- // id-ID accounts and similar for other locales).
9
- export const EMAIL_INPUT_SELECTOR = [
10
- 'input[type="email"]',
11
- 'input[autocomplete="username"]',
12
- 'input#identifierId',
13
- 'input[name="identifier"]',
14
- 'input[name="Email"]',
15
- 'input[type="text"][autofocus]',
16
- 'input[aria-label*="Email" i]',
17
- 'input[aria-label*="email" i]',
18
- 'input[aria-label*="phone" i]',
19
- 'input[aria-label*="telepon" i]',
20
- ].join(", ");
21
-
22
- export const PASSWORD_INPUT_SELECTOR = [
23
- 'input[type="password"]',
24
- 'input[name="Passwd"]',
25
- 'input[name="password"]',
26
- 'input[aria-label*="Password" i]',
27
- 'input[aria-label*="password" i]',
28
- 'input[aria-label*="Sandi" i]',
29
- 'input[aria-label*="kata sandi" i]',
30
- ].join(", ");
31
-
32
- const NEXT_BUTTON_SELECTORS = [
33
- 'button:has-text("Next")',
34
- 'button:has-text("Berikutnya")',
35
- 'button:has-text("Continue")',
36
- 'div[role="button"]:has-text("Next")',
37
- 'div[role="button"]:has-text("Berikutnya")',
38
- '#identifierNext button',
39
- '#passwordNext button',
40
- ];
41
-
42
- const APPROVE_BUTTON_SELECTORS = [
43
- '#submit_approve_access',
44
- '#submit_approve_access button',
45
- '#confirm',
46
- 'form#tos_form input[type="submit"]',
47
- 'button[jsname]:has-text("Allow")',
48
- 'button:has-text("Allow")',
49
- '[role="button"]:has-text("Allow")',
50
- 'input[type="submit"][value="Allow"]',
51
- 'input[type="button"][value="Allow"]',
52
- 'button[jsname]:has-text("Izinkan")',
53
- 'button:has-text("Izinkan")',
54
- '[role="button"]:has-text("Izinkan")',
55
- 'button:has-text("Continue")',
56
- 'button:has-text("Next")',
57
- 'button:has-text("Yes")',
58
- 'button:has-text("Accept")',
59
- 'button:has-text("Lanjutkan")',
60
- 'button:has-text("Berikutnya")',
61
- 'button:has-text("Setuju")',
62
- 'button:has-text("Saya mengerti")',
63
- 'button:has-text("Oke")',
64
- 'button:has-text("OK")',
65
- 'button:has-text("Got it")',
66
- 'button:has-text("I understand")',
67
- 'div[role="button"]:has-text("Continue")',
68
- 'div[role="button"]:has-text("Next")',
69
- 'div[role="button"]:has-text("Allow")',
70
- 'div[role="button"]:has-text("Lanjutkan")',
71
- 'div[role="button"]:has-text("Berikutnya")',
72
- 'div[role="button"]:has-text("Izinkan")',
73
- 'div[role="button"]:has-text("Setuju")',
74
- 'div[role="button"]:has-text("Saya mengerti")',
75
- 'div[role="button"]:has-text("Oke")',
76
- 'div[role="button"]:has-text("OK")',
77
- 'div[role="button"]:has-text("Got it")',
78
- 'div[role="button"]:has-text("I understand")',
79
- 'input[type="button"][value="Saya mengerti"]',
80
- 'input[type="submit"][value="Saya mengerti"]',
81
- ];
82
-
83
- const SKIP_BUTTON_SELECTORS = [
84
- 'button:has-text("Skip")',
85
- 'button:has-text("Lewati")',
86
- 'button:has-text("Not now")',
87
- 'button:has-text("Bukan sekarang")',
88
- 'button:has-text("No thanks")',
89
- 'button:has-text("Tidak sekarang")',
90
- 'div[role="button"]:has-text("Skip")',
91
- 'div[role="button"]:has-text("Not now")',
92
- ];
93
-
94
- const GOOGLE_LOGIN_BUTTON_SELECTORS = [
95
- '#social-google',
96
- 'a#social-google',
97
- 'a:has-text("Sign up with Google")',
98
- 'a:has-text("Log in with Google")',
99
- 'a:has-text("Login with Google")',
100
- 'a:has-text("Continue with Google")',
101
- 'a:has-text("Sign in with Google")',
102
- 'button:has-text("Sign up with Google")',
103
- 'button:has-text("Log in with Google")',
104
- 'button:has-text("Login with Google")',
105
- 'button:has-text("Continue with Google")',
106
- 'button:has-text("Sign in with Google")',
107
- // Cloudflare dash: visible label is just "Google", aria is "Continue with Google"
108
- 'button[aria-label*="Continue with Google" i]',
109
- 'button[aria-label*="Google" i]',
110
- 'button:has-text("Google")',
111
- 'a:has-text("Google")',
112
- 'div[role="button"]:has-text("Continue with Google")',
113
- 'div[role="button"]:has-text("Login with Google")',
114
- 'div[role="button"]:has-text("Google")',
115
- 'span:has-text("Continue with Google")',
116
- 'span:has-text("Login with Google")',
117
- 'span:has-text("Google")',
118
- '[aria-label*="Google" i]',
119
- '[data-provider*="google" i]',
120
- // xAI / Grok device + account pages
121
- 'button:has-text("Login with Google")',
122
- 'button:has-text("Continue with Google")',
123
- '[data-testid*="google" i]',
124
- ];
125
-
126
- /** OneTrust / cookie walls that block the first Google click (Cloudflare login). */
127
- const COOKIE_DISMISS_SELECTORS = [
128
- '#onetrust-accept-btn-handler',
129
- '#onetrust-reject-all-handler',
130
- '#accept-recommended-btn-handler',
131
- 'button:has-text("Allow All")',
132
- 'button:has-text("Reject All")',
133
- 'button:has-text("Accept All")',
134
- 'button:has-text("Accept all")',
135
- 'button:has-text("Confirm My Choices")',
136
- ];
137
-
138
- const TERMS_CHECKBOX_SELECTORS = [
139
- '#agree-policy-account',
140
- '#agree-policy',
141
- '#agree-policy-sso',
142
- 'input[type="checkbox"][id*="agree" i]',
143
- 'input[type="checkbox"][name*="agree" i]',
144
- 'input[type="checkbox"][id*="policy" i]',
145
- 'input[type="checkbox"][name*="policy" i]',
146
- 'input[type="checkbox"][id*="terms" i]',
147
- 'input[type="checkbox"][name*="terms" i]',
148
- '.login-checkbox input[type="checkbox"]',
149
- '[class*="checkbox"] input[type="checkbox"]',
150
- '[class*="agree"] input[type="checkbox"]',
151
- 'input[type="checkbox"]',
152
- ];
153
-
154
- const PRIVACY_CONFIRM_BUTTON_SELECTORS = [
155
- '.ui-dialog button:has-text("Confirm")',
156
- 'dialog button:has-text("Confirm")',
157
- 'button:has-text("Confirm")',
158
- 'button:has-text("I agree")',
159
- 'button:has-text("Agree")',
160
- 'button:has-text("\u540c\u610f")',
161
- 'button:has-text("\u786e\u8ba4")',
162
- ];
163
-
164
- const PROVIDER_ONBOARDING_ACTION_SELECTORS = [
165
- 'button:has-text("Continue")',
166
- '[role="button"]:has-text("Continue")',
167
- 'button:has-text("Get started")',
168
- 'button:has-text("GET STARTED")',
169
- 'input[type="submit"][value="GET STARTED"]',
170
- 'button:has-text("Start")',
171
- 'button:has-text("Confirm")',
172
- 'button:has-text("Done")',
173
- 'button:has-text("Next")',
174
- 'button:has-text("Skip")',
175
- 'button:has-text("Not now")',
176
- 'button:has-text("Save")',
177
- 'button:has-text("Create")',
178
- 'button:has-text("Enter")',
179
- 'button:has-text("Launch")',
180
- 'button:has-text("Use CodeBuddy")',
181
- 'button:has-text("Go to CodeBuddy")',
182
- ];
183
-
184
- const PROVIDER_REGION_TRIGGER_SELECTORS = [
185
- 'select',
186
- '[role="combobox"]',
187
- '.page-region [role="combobox"]',
188
- '.page-region .t-select',
189
- '.page-region [class*="t-select"]',
190
- '.page-region [class*="select"]',
191
- '.page-region input[placeholder]',
192
- 'button:has-text("Region")',
193
- '[role="button"]:has-text("Region")',
194
- 'button:has-text("Select region")',
195
- '[role="button"]:has-text("Select region")',
196
- 'button:has-text("Data region")',
197
- '[aria-label*="region" i]',
198
- '[placeholder*="region" i]',
199
- ];
200
-
201
- const PROVIDER_REGION_OPTION_SELECTORS = [
202
- 'text=/^Indonesia$/i',
203
- 'text=/^ID$/i',
204
- 'text=/^Singapore$/i',
205
- 'text=/^SG$/i',
206
- 'text=/^Japan$/i',
207
- 'text=/^JP$/i',
208
- 'text=/^Thailand$/i',
209
- 'text=/^TH$/i',
210
- 'text=/^Global$/i',
211
- 'text=/^International$/i',
212
- 'text=/^United States$/i',
213
- 'text=/^US$/i',
214
- 'text=/^Asia Pacific$/i',
215
- 'text=/^Hong Kong$/i',
216
- 'text=/^Default$/i',
217
- ];
218
-
219
- const PROVIDER_ONBOARDING_INPUT_DEFAULTS = [
220
- { selector: 'input[name*="workspace" i]', value: "Default" },
221
- { selector: 'input[placeholder*="workspace" i]', value: "Default" },
222
- { selector: 'input[name*="team" i]', value: "Default" },
223
- { selector: 'input[placeholder*="team" i]', value: "Default" },
224
- { selector: 'input[name*="name" i]', value: "Default" },
225
- { selector: 'input[placeholder*="name" i]', value: "Default" },
226
- ];
227
-
228
- const INVALID_CREDENTIAL_MARKERS = [
229
- "wrong password",
230
- "incorrect password",
231
- "couldn't find your google account",
232
- "couldn\u2019t find your google account",
233
- "enter a valid email",
234
- "couldn\u2019t sign you in",
235
- "couldn't sign you in",
236
- "invalid email or password",
237
- "password is incorrect",
238
- ];
239
-
240
- const MANUAL_ASSIST_MARKERS = [
241
- "2-step verification",
242
- "2-step verification required",
243
- "verify it\u2019s you",
244
- "verify it's you",
245
- "check your phone",
246
- "confirm it\u2019s you",
247
- "confirm it's you",
248
- "recovery email",
249
- "recovery phone",
250
- "suspicious sign-in prevented",
251
- "unusual activity detected",
252
- "captcha",
253
- "i'm not a robot",
254
- "im not a robot",
255
- "not a robot",
256
- "recaptcha",
257
- "select all images",
258
- "select all squares",
259
- "try again later",
260
- "browser or app may not be secure",
261
- "try using a different browser",
262
- "couldn\u2019t sign you in",
263
- "couldn't sign you in",
264
- "this browser or app may not be secure",
265
- ];
266
-
267
- const RESTRICTED_ACCOUNT_MARKERS = [
268
- "restricted",
269
- "account has been restricted",
270
- "account is restricted",
271
- "account has been suspended",
272
- "account is suspended",
273
- "account has been disabled",
274
- "account is disabled",
275
- "account has been banned",
276
- "account is banned",
277
- "access denied",
278
- "account blocked",
279
- "your account has been",
280
- "violation of terms",
281
- "terms of service violation",
282
- "temporarily locked",
283
- "permanently locked",
284
- "account locked",
285
- "akun dibatasi",
286
- "akun diblokir",
287
- "akun ditangguhkan",
288
- ];
289
-
290
- const GOOGLE_ONBOARDING_MARKERS = [
291
- "welcome to your new google account",
292
- "selamat datang di akun google baru anda",
293
- "welcome to your new account",
294
- "selamat datang di akun baru",
295
- "privacy and terms",
296
- "privasi dan persyaratan",
297
- "personalize your google services",
298
- "personalisasikan layanan google anda",
299
- "add recovery phone",
300
- "tambahkan nomor telepon pemulihan",
301
- "choose your settings",
302
- "pilih setelan anda",
303
- ];
304
-
305
- const GOOGLE_WORKSPACE_WELCOME_MARKERS = [
306
- "welcome to your new account",
307
- "selamat datang di akun baru",
308
- "your administrator decides which",
309
- "administrator anda memutuskan layanan",
310
- "your organisation administrator manages",
311
- "your organization administrator manages",
312
- ];
313
-
314
- const KIRO_CALLBACK_PREFIX = "kiro://kiro.kiroAgent/authenticate-success";
315
-
316
- function parseCallbackUrl(rawUrl) {
317
- if (!rawUrl || !rawUrl.startsWith(KIRO_CALLBACK_PREFIX)) return null;
318
-
319
- const queryIndex = rawUrl.indexOf("?");
320
- const params = new URLSearchParams(queryIndex >= 0 ? rawUrl.slice(queryIndex + 1) : "");
321
- const code = params.get("code");
322
- const state = params.get("state");
323
-
324
- if (!code) return null;
325
-
326
- return {
327
- callbackUrl: rawUrl,
328
- code,
329
- state,
330
- };
331
- }
332
-
333
- function getInteractionScopes(page) {
334
- const frames = typeof page.frames === "function" ? page.frames() : [];
335
- return [page, ...frames.filter((frame) => frame !== page.mainFrame?.())];
336
- }
337
-
338
- async function clickFirstVisible(page, selectors) {
339
- for (const scope of getInteractionScopes(page)) {
340
- for (const selector of selectors) {
341
- const locator = scope.locator(selector).first();
342
- const count = await locator.count().catch(() => 0);
343
- if (!count) continue;
344
-
345
- const visible = await locator.isVisible().catch(() => false);
346
- if (!visible) continue;
347
-
348
- await locator.click({ timeout: 5_000 }).catch(() => null);
349
- return true;
350
- }
351
- }
352
-
353
- return false;
354
- }
355
-
356
- async function clickFirstActionable(page, selectors) {
357
- for (const scope of getInteractionScopes(page)) {
358
- for (const selector of selectors) {
359
- const locator = scope.locator(selector).first();
360
- const count = await locator.count().catch(() => 0);
361
- if (!count) continue;
362
-
363
- await locator.scrollIntoViewIfNeeded().catch(() => null);
364
-
365
- const visible = await locator.isVisible().catch(() => false);
366
- if (!visible) continue;
367
-
368
- const enabled = await locator.isEnabled().catch(() => true);
369
- if (!enabled) continue;
370
-
371
- const clicked = await locator.click({ timeout: 5_000 }).then(() => true).catch(() => false);
372
- if (clicked) return true;
373
- }
374
- }
375
-
376
- return false;
377
- }
378
-
379
- async function checkFirstVisible(page, selectors) {
380
- for (const scope of getInteractionScopes(page)) {
381
- for (const selector of selectors) {
382
- const locator = scope.locator(selector).first();
383
- const count = await locator.count().catch(() => 0);
384
- if (!count) continue;
385
-
386
- const checked = await locator.isChecked().catch(() => false);
387
- if (checked) return true;
388
-
389
- const visible = await locator.isVisible().catch(() => false);
390
- const didCheck = visible
391
- ? await locator.check({ force: true, timeout: 5_000 }).then(() => true).catch(() => false)
392
- : false;
393
- if (didCheck) return true;
394
-
395
- const clicked = visible
396
- ? await locator.click({ force: true, timeout: 5_000 }).then(() => true).catch(() => false)
397
- : false;
398
- if (clicked) return true;
399
-
400
- const domChecked = await scope.evaluate((candidateSelector) => {
401
- const input = document.querySelector(candidateSelector);
402
- if (!(input instanceof HTMLInputElement)) return false;
403
- input.checked = true;
404
- input.dispatchEvent(new Event("input", { bubbles: true }));
405
- input.dispatchEvent(new Event("change", { bubbles: true }));
406
- return input.checked;
407
- }, selector).catch(() => false);
408
- if (domChecked) return true;
409
- }
410
- }
411
-
412
- return false;
413
- }
414
-
415
- async function getFirstVisibleLocator(page, selector) {
416
- for (const scope of getInteractionScopes(page)) {
417
- const locator = scope.locator(selector).first();
418
- const count = await locator.count().catch(() => 0);
419
- if (!count) continue;
420
-
421
- const visible = await locator.isVisible().catch(() => false);
422
- if (!visible) continue;
423
-
424
- return locator;
425
- }
426
-
427
- return null;
428
- }
429
-
430
- async function waitForFirstVisibleLocator(page, selector, { timeout = 15_000, pollInterval = 150 } = {}) {
431
- const deadline = Date.now() + timeout;
432
- while (Date.now() < deadline) {
433
- const found = await getFirstVisibleLocator(page, selector);
434
- if (found) return found;
435
- const remaining = deadline - Date.now();
436
- if (remaining <= 0) break;
437
- await new Promise((r) => setTimeout(r, Math.min(pollInterval, remaining)));
438
- }
439
- return null;
440
- }
441
-
442
- /** Tiny yield only — never use multi-second sleeps for “maybe page will load”. */
443
- function yieldMs(ms = 50) {
444
- return new Promise((r) => setTimeout(r, ms));
445
- }
446
-
447
- /**
448
- * Wait until a condition is true, polling fast. Replaces fixed sleep after clicks.
449
- * @returns {Promise<boolean>} true if condition met before timeout
450
- */
451
- async function waitUntil(checkFn, { timeout = 8_000, interval = 100 } = {}) {
452
- const deadline = Date.now() + timeout;
453
- while (Date.now() < deadline) {
454
- try {
455
- if (await checkFn()) return true;
456
- } catch {
457
- /* retry */
458
- }
459
- await yieldMs(interval);
460
- }
461
- return false;
462
- }
463
-
464
- function isGoogleHostname(url) {
465
- try {
466
- const host = new URL(url).hostname;
467
- return host === "accounts.google.com"
468
- || host.endsWith(".accounts.google.com")
469
- || /^accounts\.google\./i.test(host);
470
- } catch {
471
- return false;
472
- }
473
- }
474
-
475
- /** After navigation/click: wait for URL change or next UI, not a fixed sleep. */
476
- async function waitForPageAdvance(page, {
477
- fromUrl = "",
478
- urlMatch = null,
479
- selector = null,
480
- timeout = 8_000,
481
- } = {}) {
482
- const startUrl = fromUrl || page.url?.() || "";
483
- return waitUntil(async () => {
484
- const url = page.url?.() || "";
485
- if (urlMatch) {
486
- if (typeof urlMatch === "function" && urlMatch(url)) return true;
487
- if (urlMatch instanceof RegExp && urlMatch.test(url)) return true;
488
- }
489
- if (url && url !== startUrl && !url.startsWith("about:")) return true;
490
- if (selector) {
491
- const found = await getFirstVisibleLocator(page, selector);
492
- if (found) return true;
493
- }
494
- return false;
495
- }, { timeout, interval: 80 });
496
- }
497
-
498
- async function fillInputResilient(locator, value, { timeout = 15_000 } = {}) {
499
- if (!locator || value == null) return false;
500
-
501
- // Prefer fill() first (fast); slow type is only a fallback for React
502
- // controlled fields that reject programmatic fill.
503
- try {
504
- await locator.click({ timeout: 3_000 });
505
- } catch {
506
- /* noop */
507
- }
508
- try {
509
- await locator.fill(String(value), { timeout: Math.min(timeout, 8_000) });
510
- const observed = await locator.inputValue().catch(() => "");
511
- if (observed === value) return true;
512
- } catch {
513
- /* fall through to typed input */
514
- }
515
-
516
- try {
517
- await locator.fill("", { timeout: 2_000 });
518
- } catch {
519
- /* noop */
520
- }
521
- try {
522
- // Light humanization only if fill failed — 15–35ms/key (was 40–120ms).
523
- const delay = Math.floor(15 + Math.random() * 20);
524
- await locator.type(String(value), { delay, timeout });
525
- } catch {
526
- try {
527
- await locator.fill(String(value), { timeout });
528
- } catch {
529
- return false;
530
- }
531
- }
532
-
533
- let observed = "";
534
- try {
535
- observed = await locator.inputValue();
536
- } catch {
537
- observed = "";
538
- }
539
- return observed === value;
540
- }
541
-
542
- function parseSelectorList(selector) {
543
- return String(selector || "")
544
- .split(",")
545
- .map((s) => s.trim())
546
- .filter(Boolean);
547
- }
548
-
549
- async function readPageText(page) {
550
- const chunks = [];
551
- for (const scope of getInteractionScopes(page)) {
552
- try {
553
- chunks.push(await scope.evaluate(() => document.body?.innerText || ""));
554
- } catch {
555
- // Cross-origin frames can be unreadable; ignore them.
556
- }
557
- }
558
- return chunks.join("\n");
559
- }
560
-
561
- function includesAny(text, markers) {
562
- const normalized = String(text || "").toLowerCase();
563
- return markers.some((marker) => normalized.includes(marker));
564
- }
565
-
566
- function isGoogleAuthPage(page) {
567
- try {
568
- const url = new URL(page.url());
569
- return url.hostname === "accounts.google.com"
570
- || url.hostname.endsWith(".accounts.google.com")
571
- || /^accounts\.google\./i.test(url.hostname);
572
- } catch {
573
- return false;
574
- }
575
- }
576
-
577
- /** Fast bulk path: skip multi-second sleeps (Grok, Cloudflare, etc.). */
578
- function isGrokish(serviceLabel) {
579
- return /grok|cloudflare/i.test(String(serviceLabel || ""));
580
- }
581
-
582
- function isCloudflareLoginUrl(url) {
583
- try {
584
- const u = new URL(url || "");
585
- return u.hostname === "dash.cloudflare.com" && u.pathname.includes("/login");
586
- } catch {
587
- return false;
588
- }
589
- }
590
-
591
- async function dismissCookieBanners(page, reportStep) {
592
- // Cookie / OneTrust modals steal the first clicks (CF login shows "Allow All").
593
- // Fast path: one scan — must stay cheap because the main automation loop
594
- // calls this on every tick (dashboard harvest must not burn 2s here).
595
- for (const selector of COOKIE_DISMISS_SELECTORS) {
596
- try {
597
- const loc = page.locator(selector).first();
598
- if (await loc.isVisible({ timeout: 100 }).catch(() => false)) {
599
- // noWaitAfter: banner click must not wait on any incidental navigation
600
- await loc.click({ timeout: 2_000, noWaitAfter: true }).catch(() => null);
601
- reportStep?.("dismissing_cookies", "Dismissed cookie / privacy banner");
602
- return true;
603
- }
604
- } catch {
605
- /* next */
606
- }
607
- }
608
- const viaApi = await page.evaluate(() => {
609
- try {
610
- if (typeof window.OneTrust?.AllowAll === "function") {
611
- const banner = document.querySelector(
612
- "#onetrust-banner-sdk, #onetrust-consent-sdk, #onetrust-accept-btn-handler",
613
- );
614
- // Only invoke when a banner is actually present — AllowAll on every
615
- // loop tick is wasteful and can re-open consent UI.
616
- if (!banner) return false;
617
- window.OneTrust.AllowAll();
618
- return true;
619
- }
620
- const btn = document.querySelector("#onetrust-accept-btn-handler");
621
- if (btn && btn.offsetParent !== null) {
622
- btn.click();
623
- return true;
624
- }
625
- } catch {
626
- /* ignore */
627
- }
628
- return false;
629
- }).catch(() => false);
630
- if (viaApi) {
631
- reportStep?.("dismissing_cookies", "Dismissed cookie / privacy banner");
632
- return true;
633
- }
634
- return false;
635
- }
636
-
637
- // Google bounces flagged (headless) browsers:
638
- // - myaccount.google.com/not-supported
639
- // - accounts.google.com/v3/signin/rejected ("This browser or app may not be secure")
640
- // - about.google drift after consent
641
- function isBlockedBrowserPage(page) {
642
- try {
643
- const url = new URL(page.url());
644
- if (url.pathname.startsWith("/not-supported")) return true;
645
- if (url.pathname.includes("/signin/rejected")) return true;
646
- if (url.pathname.includes("/rejected")) return true;
647
- if (url.hostname === "about.google" || url.hostname.endsWith(".about.google")) return true;
648
- } catch {
649
- // fall through to body text
650
- }
651
- return false;
652
- }
653
-
654
- async function isBlockedBrowser(page) {
655
- if (isBlockedBrowserPage(page)) return true;
656
- const text = await readPageText(page).catch(() => "");
657
- return includesAny(text, [
658
- "browser or app may not be secure",
659
- "try using a different browser",
660
- "couldn't sign you in",
661
- "couldn\u2019t sign you in",
662
- "this browser or app may not be secure",
663
- "browser is not secure",
664
- ]);
665
- }
666
-
667
- /**
668
- * Hook successPromise so interstitial waits can exit as soon as the OAuth
669
- * callback (kiro://) is captured on the network — even while the main frame
670
- * stays parked on blank SetSID.
671
- */
672
- function attachSuccessSettledFlag(successPromise) {
673
- if (!successPromise || typeof successPromise.then !== "function") return;
674
- if (successPromise.__zevaiSettledHooked) return;
675
- successPromise.__zevaiSettledHooked = true;
676
- successPromise.then(
677
- () => { successPromise.__zevaiSettled = true; },
678
- () => { successPromise.__zevaiSettled = true; },
679
- );
680
- }
681
-
682
- function isSuccessSettled(successPromise) {
683
- return Boolean(successPromise && successPromise.__zevaiSettled);
684
- }
685
-
686
- /**
687
- * Google often parks on intermediate pages with empty body after password/consent:
688
- * accounts.google.com(.xx)/accounts/SetSID
689
- * AccountChooser, continue, challenge handoffs
690
- *
691
- * Do NOT force-navigate consent/idpresponse from here — that aborts the natural
692
- * network hop that emits Location: kiro://. Wait for auto-redirect / AccountChooser
693
- * UI, and bail early when successPromise already settled (CDP/page listeners).
694
- *
695
- * @returns {boolean} true if still on an interstitial when maxWaitMs elapsed
696
- */
697
- async function waitThroughGoogleInterstitials(page, reportStep, { maxWaitMs = 20_000, successPromise = null } = {}) {
698
- const start = Date.now();
699
- let lastUrl = "";
700
- attachSuccessSettledFlag(successPromise);
701
-
702
- while (Date.now() - start < maxWaitMs) {
703
- if (isSuccessSettled(successPromise)) {
704
- reportStep?.("waiting_google_redirect", "OAuth callback already received — leaving interstitial wait");
705
- return false;
706
- }
707
-
708
- const url = page.url?.() || "";
709
- const body = String(await readPageText(page).catch(() => "")).trim();
710
- const isSetSid = /\/accounts\/SetSID/i.test(url);
711
- const isChooser = /\/AccountChooser/i.test(url);
712
- const isEmpty = body.length < 30;
713
- const isInterstitial = isSetSid || (isEmpty && /accounts\.google\./i.test(url));
714
-
715
- if (!isInterstitial && !isChooser) return false;
716
-
717
- if (url !== lastUrl) {
718
- reportStep?.(
719
- "waiting_google_redirect",
720
- `Waiting for Google redirect (url=${url.slice(0, 120)} empty=${isEmpty})`,
721
- );
722
- lastUrl = url;
723
- }
724
-
725
- // Account chooser: click first account row if present
726
- if (isChooser) {
727
- const clicked = await clickFirstActionable(page, [
728
- 'div[data-identifier]',
729
- 'div[data-email]',
730
- 'li[data-identifier]',
731
- 'div[role="link"]',
732
- 'div[role="button"]',
733
- ]);
734
- if (clicked) {
735
- reportStep?.("selecting_google_account", "Selected account from Google AccountChooser");
736
- await waitForPageAdvance(page, { timeout: 5_000 });
737
- continue;
738
- }
739
- }
740
-
741
- const waiters = [
742
- page.waitForNavigation({ waitUntil: "domcontentloaded", timeout: 3_000 }).catch(() => null),
743
- // Cap idle wait low — exit as soon as URL/body changes or success settles.
744
- yieldMs(400),
745
- ];
746
- if (successPromise && !isSuccessSettled(successPromise)) {
747
- waiters.push(successPromise.then(() => null).catch(() => null));
748
- }
749
- await Promise.race(waiters);
750
- }
751
- return true;
752
- }
753
-
754
- function isProviderPage(page) {
755
- try {
756
- const url = new URL(page.url());
757
- const host = url.hostname || "";
758
- return /codebuddy\.(ai|cn)$/.test(host)
759
- || host.endsWith(".codebuddy.ai")
760
- || host.endsWith(".codebuddy.cn")
761
- // xAI / Grok CLI device authorization + account host
762
- || host === "accounts.x.ai"
763
- || host === "auth.x.ai"
764
- || host.endsWith(".x.ai")
765
- || host === "grok.com"
766
- || host.endsWith(".grok.com")
767
- // Cloudflare dashboard (Workers AI bulk)
768
- || host === "dash.cloudflare.com"
769
- || host.endsWith(".cloudflare.com");
770
- } catch {
771
- return false;
772
- }
773
- }
774
-
775
- async function handleGoogleConsent(page, reportStep) {
776
- if (!isGoogleAuthPage(page)) return false;
777
-
778
- const text = await readPageText(page);
779
- const looksLikeConsent = /wants to access|ingin mengakses|akses ke akun google|allow/i.test(text);
780
- if (!looksLikeConsent) return false;
781
-
782
- await page.evaluate(() => {
783
- const root = document.scrollingElement || document.documentElement || document.body;
784
- if (root) root.scrollTop = root.scrollHeight;
785
- window.scrollTo(0, document.body?.scrollHeight || document.documentElement?.scrollHeight || 0);
786
- }).catch(() => null);
787
- await page.waitForTimeout(300);
788
-
789
- const clickedApprove = await clickFirstActionable(page, APPROVE_BUTTON_SELECTORS);
790
- if (clickedApprove) {
791
- reportStep("approving_google_consent", "Approving Google OAuth consent");
792
- await page.waitForTimeout(1000);
793
- return true;
794
- }
795
-
796
- return false;
797
- }
798
-
799
- async function handleGoogleOnboarding(page, pageText) {
800
- const text = String(pageText || "");
801
- if (!includesAny(text, GOOGLE_ONBOARDING_MARKERS)) {
802
- return false;
803
- }
804
-
805
- await page.evaluate(() => {
806
- const root = document.scrollingElement || document.documentElement || document.body;
807
- if (root) root.scrollTop = root.scrollHeight;
808
- window.scrollTo(0, document.body?.scrollHeight || document.documentElement?.scrollHeight || 0);
809
- }).catch(() => null);
810
- await page.waitForTimeout(500);
811
-
812
- // Workspace welcome ("Welcome to your new account" for @domain.com) has
813
- // only one valid action: the primary "I understand" button. There is no
814
- // skip option \u2014 clicking nothing leaves the worker stuck polling forever
815
- // while the headless tab sits on the consent screen. Prioritise the
816
- // primary action selector before the generic skip pass so we don't fall
817
- // through to a non-existent "Not now" link.
818
- if (includesAny(text, GOOGLE_WORKSPACE_WELCOME_MARKERS)) {
819
- const acknowledged = await clickFirstActionable(page, APPROVE_BUTTON_SELECTORS);
820
- if (acknowledged) {
821
- await page.waitForTimeout(700);
822
- return true;
823
- }
824
- const submittedFromDom = await page.evaluate(() => {
825
- const candidates = [
826
- document.getElementById("confirm"),
827
- document.querySelector('form#tos_form input[type="submit"]'),
828
- document.querySelector('input[type="submit"][value="Saya mengerti"]'),
829
- document.querySelector('input[type="submit"][value="I understand"]'),
830
- ].filter(Boolean);
831
- const btn = candidates[0];
832
- if (!btn) return false;
833
- btn.scrollIntoView({ block: "center" });
834
- btn.click();
835
- return true;
836
- }).catch(() => false);
837
- if (submittedFromDom) {
838
- await page.waitForTimeout(800);
839
- return true;
840
- }
841
- const formSubmitted = await page.evaluate(() => {
842
- const form = document.getElementById("tos_form");
843
- if (!form) return false;
844
- form.submit();
845
- return true;
846
- }).catch(() => false);
847
- if (formSubmitted) {
848
- await page.waitForTimeout(800);
849
- return true;
850
- }
851
- }
852
-
853
- const clickedSkip = await clickFirstActionable(page, SKIP_BUTTON_SELECTORS);
854
- if (clickedSkip) {
855
- await page.waitForTimeout(700);
856
- return true;
857
- }
858
-
859
- const clickedContinue = await clickFirstActionable(page, APPROVE_BUTTON_SELECTORS);
860
- if (clickedContinue) {
861
- await page.waitForTimeout(700);
862
- return true;
863
- }
864
-
865
- return false;
866
- }
867
-
868
- async function selectNativeRegionOption(page) {
869
- const preferred = /global|international|singapore|united states|^us$|asia|hong kong|default/i;
870
-
871
- for (const scope of getInteractionScopes(page)) {
872
- const selects = scope.locator("select");
873
- const count = await selects.count().catch(() => 0);
874
- for (let index = 0; index < count; index += 1) {
875
- const select = selects.nth(index);
876
- const visible = await select.isVisible().catch(() => false);
877
- const enabled = await select.isEnabled().catch(() => true);
878
- if (!visible || !enabled) continue;
879
-
880
- const value = await select.evaluate((element, patternSource) => {
881
- const matcher = new RegExp(patternSource, "i");
882
- const options = [...element.options].filter((option) => !option.disabled && option.value !== "");
883
- const preferredOption = options.find((option) => matcher.test(`${option.label} ${option.textContent} ${option.value}`));
884
- return (preferredOption || options[0])?.value || "";
885
- }, preferred.source).catch(() => "");
886
-
887
- if (!value) continue;
888
- const selected = await select.selectOption(value).then(() => true).catch(() => false);
889
- if (selected) return true;
890
- }
891
- }
892
-
893
- return false;
894
- }
895
-
896
- async function fillProviderOnboardingDefaults(page) {
897
- let filled = false;
898
-
899
- for (const scope of getInteractionScopes(page)) {
900
- for (const { selector, value } of PROVIDER_ONBOARDING_INPUT_DEFAULTS) {
901
- const locator = scope.locator(selector).first();
902
- const count = await locator.count().catch(() => 0);
903
- if (!count) continue;
904
-
905
- const visible = await locator.isVisible().catch(() => false);
906
- const enabled = await locator.isEnabled().catch(() => true);
907
- if (!visible || !enabled) continue;
908
-
909
- const currentValue = await locator.inputValue().catch(() => "");
910
- if (currentValue) continue;
911
-
912
- const didFill = await locator.fill(value, { timeout: 5_000 }).then(() => true).catch(() => false);
913
- if (didFill) filled = true;
914
- }
915
- }
916
-
917
- return filled;
918
- }
919
-
920
- async function clickLocatorCenter(page, locator) {
921
- await locator.scrollIntoViewIfNeeded().catch(() => null);
922
- const visible = await locator.isVisible().catch(() => false);
923
- const enabled = await locator.isEnabled().catch(() => true);
924
- if (!visible || !enabled) return false;
925
-
926
- const box = await locator.boundingBox().catch(() => null);
927
- if (!box || box.width <= 0 || box.height <= 0) return false;
928
-
929
- const x = box.x + box.width / 2;
930
- const y = box.y + box.height / 2;
931
- await page.mouse.move(x, y);
932
- await page.mouse.down();
933
- await page.mouse.up();
934
- return true;
935
- }
936
-
937
- async function clickVisibleLocatorByText(page, selector, patterns) {
938
- for (const scope of getInteractionScopes(page)) {
939
- const locators = scope.locator(selector);
940
- const count = Math.min(await locators.count().catch(() => 0), 80);
941
- const candidates = [];
942
-
943
- for (let index = 0; index < count; index += 1) {
944
- const locator = locators.nth(index);
945
- const visible = await locator.isVisible().catch(() => false);
946
- if (!visible) continue;
947
-
948
- const text = (await locator.innerText({ timeout: 1_000 }).catch(() => "")
949
- || await locator.textContent({ timeout: 1_000 }).catch(() => "")
950
- || "").trim();
951
- if (!text) continue;
952
- candidates.push({ locator, text });
953
- }
954
-
955
- for (const pattern of patterns) {
956
- const candidate = candidates.find((item) => pattern.test(item.text));
957
- if (!candidate) continue;
958
- const clicked = await clickLocatorCenter(page, candidate.locator).catch(() => false);
959
- if (clicked) return candidate.text;
960
- }
961
-
962
- if (candidates[0]) {
963
- const clicked = await clickLocatorCenter(page, candidates[0].locator).catch(() => false);
964
- if (clicked) return candidates[0].text;
965
- }
966
- }
967
-
968
- return "";
969
- }
970
-
971
- async function clickFirstVisibleLocatorCenter(page, selectors) {
972
- for (const scope of getInteractionScopes(page)) {
973
- for (const selector of selectors) {
974
- const locators = scope.locator(selector);
975
- const count = Math.min(await locators.count().catch(() => 0), 20);
976
- for (let index = 0; index < count; index += 1) {
977
- const locator = locators.nth(index);
978
- const clicked = await clickLocatorCenter(page, locator).catch(() => false);
979
- if (clicked) return true;
980
- }
981
- }
982
- }
983
-
984
- return false;
985
- }
986
-
987
- async function handleCodeBuddyRegionPageViaApi(page, reportStep) {
988
- if (!isProviderPage(page) || isGoogleAuthPage(page)) return false;
989
-
990
- const result = await page.evaluate(async () => {
991
- const bodyText = document.body?.innerText || "";
992
- const looksLikeRegionPage = document.querySelector(".page-region")
993
- || /select\s+region|region|country|area|get started|complete/i.test(bodyText);
994
- if (!looksLikeRegionPage) return null;
995
-
996
- try {
997
- const response = await fetch("https://www.codebuddy.ai/console/login/account", {
998
- method: "POST",
999
- credentials: "include",
1000
- headers: {
1001
- accept: "application/json, text/plain, */*",
1002
- "content-type": "application/json",
1003
- "x-requested-with": "XMLHttpRequest",
1004
- "x-domain": window.location.hostname || "www.codebuddy.ai",
1005
- },
1006
- referrer: "https://www.codebuddy.ai/register/user/complete",
1007
- body: JSON.stringify({
1008
- attributes: {
1009
- countryCode: ["62"],
1010
- countryFullName: ["Indonesia"],
1011
- countryName: ["ID"],
1012
- },
1013
- }),
1014
- });
1015
-
1016
- const text = await response.text().catch(() => "");
1017
- let data = null;
1018
- try {
1019
- data = text ? JSON.parse(text) : null;
1020
- } catch {
1021
- data = { raw: text };
1022
- }
1023
-
1024
- if (response.ok && (!data || data.code === 0 || data.code === 200 || typeof data.code === "undefined")) {
1025
- return { action: "submitted_via_api" };
1026
- }
1027
-
1028
- return {
1029
- action: "api_failed",
1030
- status: response.status,
1031
- code: data?.code,
1032
- message: data?.msg || data?.message || text || `HTTP ${response.status}`,
1033
- };
1034
- } catch (error) {
1035
- return {
1036
- action: "api_failed",
1037
- message: error?.message || "region submit request failed",
1038
- };
1039
- }
1040
- }).catch(() => null);
1041
-
1042
- if (!result?.action) return false;
1043
-
1044
- if (result.action === "submitted_via_api") {
1045
- reportStep("submitting_codebuddy_region", "Submitted CodeBuddy region via account API");
1046
- await page.waitForTimeout(1500);
1047
- return true;
1048
- }
1049
-
1050
- reportStep(
1051
- "codebuddy_region_api_failed",
1052
- result.message
1053
- ? `CodeBuddy region API submit failed: ${result.message}`
1054
- : "CodeBuddy region API submit failed"
1055
- );
1056
- return false;
1057
- }
1058
-
1059
- async function handleCodeBuddyRegionPageWithMouse(page, reportStep) {
1060
- if (!isProviderPage(page) || isGoogleAuthPage(page)) return false;
1061
-
1062
- const isRegionPage = await page.locator(".page-region").first().count().then(Boolean).catch(() => false);
1063
- if (!isRegionPage) return false;
1064
-
1065
- const optionPatterns = [
1066
- /indonesia|^id$|\u5370\u5ea6\u5c3c\u897f\u4e9a/i,
1067
- /singapore|^sg$|\u65b0\u52a0\u5761/i,
1068
- /japan|^jp$|\u65e5\u672c/i,
1069
- /thailand|^th$|\u6cf0\u56fd/i,
1070
- /global|international|default/i,
1071
- ];
1072
-
1073
- const submitClicked = await clickFirstVisibleLocatorCenter(page, [
1074
- ".page-region [class*='28B894']",
1075
- ".page-region button:has-text('Get started')",
1076
- ".page-region button:has-text('Start')",
1077
- ".page-region button:has-text('Submit')",
1078
- ".page-region button:has-text('Continue')",
1079
- ".page-region [role='button']:has-text('Get started')",
1080
- ".page-region [role='button']:has-text('Start')",
1081
- ".page-region [role='button']:has-text('Submit')",
1082
- ".page-region [role='button']:has-text('Continue')",
1083
- ]);
1084
- if (submitClicked) {
1085
- reportStep("submitting_codebuddy_region", "Submitted CodeBuddy region selection");
1086
- await page.waitForTimeout(1200);
1087
- return true;
1088
- }
1089
-
1090
- const visibleOption = await clickVisibleLocatorByText(
1091
- page,
1092
- "ul.dropdown-section li, .dropdown-section li, [role='option'], .t-select-option, [class*='option']",
1093
- optionPatterns
1094
- );
1095
- if (visibleOption) {
1096
- reportStep("selecting_codebuddy_region", `Selected CodeBuddy region: ${visibleOption}`);
1097
- await page.waitForTimeout(900);
1098
- return true;
1099
- }
1100
-
1101
- const opened = await clickFirstVisibleLocatorCenter(page, [
1102
- ".page-region .t-select",
1103
- ".page-region [class*='t-select']",
1104
- ".page-region [role='combobox']",
1105
- ".page-region input[placeholder]",
1106
- ".page-region [class*='select']",
1107
- ".page-region [class*='cursor-pointer']",
1108
- ]);
1109
- if (!opened) return false;
1110
-
1111
- reportStep("opening_codebuddy_region_selector", "Opening CodeBuddy region selector");
1112
- await page.waitForTimeout(600);
1113
-
1114
- const openedOption = await clickVisibleLocatorByText(
1115
- page,
1116
- "ul.dropdown-section li, .dropdown-section li, [role='option'], .t-select-option, [class*='option']",
1117
- optionPatterns
1118
- );
1119
- if (openedOption) {
1120
- reportStep("selecting_codebuddy_region", `Selected CodeBuddy region: ${openedOption}`);
1121
- await page.waitForTimeout(900);
1122
- }
1123
-
1124
- return true;
1125
- }
1126
-
1127
- async function handleCodeBuddyRegionPage(page, reportStep) {
1128
- if (!isProviderPage(page) || isGoogleAuthPage(page)) return false;
1129
-
1130
- const handledViaApi = await handleCodeBuddyRegionPageViaApi(page, reportStep);
1131
- if (handledViaApi) return true;
1132
-
1133
- const handledWithMouse = await handleCodeBuddyRegionPageWithMouse(page, reportStep);
1134
- if (handledWithMouse) return true;
1135
-
1136
- for (const scope of getInteractionScopes(page)) {
1137
- const result = await scope.evaluate(() => {
1138
- const visible = (element) => {
1139
- if (!(element instanceof HTMLElement)) return false;
1140
- const style = window.getComputedStyle(element);
1141
- if (style.visibility === "hidden" || style.display === "none" || Number(style.opacity) === 0) return false;
1142
- const rect = element.getBoundingClientRect();
1143
- return rect.width > 0 && rect.height > 0;
1144
- };
1145
-
1146
- const root = document.querySelector(".page-region");
1147
- const bodyText = document.body?.innerText || "";
1148
- const looksLikeRegionPage = root
1149
- || /select\s+region|region|country|area|get started|complete/i.test(bodyText);
1150
- if (!looksLikeRegionPage) return null;
1151
-
1152
- const clickElement = (element) => {
1153
- element.scrollIntoView({ block: "center", inline: "center" });
1154
- for (const type of ["pointerdown", "mousedown", "pointerup", "mouseup", "click"]) {
1155
- element.dispatchEvent(new MouseEvent(type, {
1156
- bubbles: true,
1157
- cancelable: true,
1158
- view: window,
1159
- buttons: type.endsWith("down") ? 1 : 0,
1160
- }));
1161
- }
1162
- };
1163
-
1164
- const optionPatterns = [
1165
- /indonesia|^id$|\u5370\u5ea6\u5c3c\u897f\u4e9a/i,
1166
- /singapore|^sg$|\u65b0\u52a0\u5761/i,
1167
- /japan|^jp$|\u65e5\u672c/i,
1168
- /thailand|^th$|\u6cf0\u56fd/i,
1169
- /global|international|default/i,
1170
- ];
1171
-
1172
- const searchRoot = root || document.body;
1173
- const submitSelectors = [
1174
- "button",
1175
- "[role='button']",
1176
- "input[type='submit']",
1177
- ".t-button",
1178
- "[class*='button']",
1179
- "[class*='28B894']",
1180
- ];
1181
- const submitButtons = [...searchRoot.querySelectorAll(submitSelectors.join(","))]
1182
- .filter(visible)
1183
- .filter((element) => {
1184
- const text = `${element.innerText || ""} ${element.getAttribute("aria-label") || ""} ${element.getAttribute("value") || ""}`;
1185
- const className = element.getAttribute("class") || "";
1186
- return /submit|start|continue|confirm|done|get started|complete|\u5b8c\u6210|\u5f00\u59cb|\u786e\u5b9a|\u4e0b\u4e00\u6b65/i.test(text)
1187
- || className.includes("28B894");
1188
- });
1189
-
1190
- if (submitButtons.length) {
1191
- clickElement(submitButtons[0]);
1192
- return { action: "submitted" };
1193
- }
1194
-
1195
- const optionSelectors = [
1196
- "ul.dropdown-section li",
1197
- ".dropdown-section li",
1198
- "[role='option']",
1199
- ".t-select-option",
1200
- "[class*='option']",
1201
- "[class*='dropdown'] li",
1202
- ];
1203
- const options = [...document.querySelectorAll(optionSelectors.join(","))]
1204
- .filter(visible)
1205
- .filter((element) => (element.innerText || element.textContent || "").trim());
1206
-
1207
- if (options.length) {
1208
- const option = optionPatterns
1209
- .map((pattern) => options.find((element) => pattern.test((element.innerText || element.textContent || "").trim())))
1210
- .find(Boolean) || options[0];
1211
- const label = (option.innerText || option.textContent || "").trim();
1212
- clickElement(option);
1213
- return { action: "selected", label };
1214
- }
1215
-
1216
- const controlSelectors = [
1217
- "[role='combobox']",
1218
- ".t-select",
1219
- "[class*='t-select']",
1220
- "[class*='select']",
1221
- "input[placeholder]",
1222
- ".text-sm",
1223
- "[class*='cursor-pointer']",
1224
- ];
1225
- const controls = [...searchRoot.querySelectorAll(controlSelectors.join(","))]
1226
- .filter(visible)
1227
- .filter((element) => {
1228
- const text = `${element.innerText || ""} ${element.getAttribute("placeholder") || ""} ${element.getAttribute("aria-label") || ""}`;
1229
- return /region|country|area|select|placeholder|\u5730\u533a|\u56fd\u5bb6|\u9009\u62e9/i.test(text)
1230
- || element.matches?.(".t-select,[class*='t-select'],input[placeholder],[class*='select']");
1231
- });
1232
-
1233
- if (controls.length) {
1234
- clickElement(controls[0]);
1235
- return { action: "opened" };
1236
- }
1237
-
1238
- return null;
1239
- }).catch(() => null);
1240
-
1241
- if (!result?.action) continue;
1242
-
1243
- if (result.action === "selected") {
1244
- reportStep("selecting_codebuddy_region", `Selected CodeBuddy region${result.label ? `: ${result.label}` : ""}`);
1245
- await page.waitForTimeout(700);
1246
- return true;
1247
- }
1248
-
1249
- if (result.action === "submitted") {
1250
- reportStep("submitting_codebuddy_region", "Submitted CodeBuddy region selection");
1251
- await page.waitForTimeout(1200);
1252
- return true;
1253
- }
1254
-
1255
- reportStep("opening_codebuddy_region_selector", "Opening CodeBuddy region selector");
1256
- await page.waitForTimeout(700);
1257
- return true;
1258
- }
1259
-
1260
- return false;
1261
- }
1262
-
1263
- async function handleCodeBuddyStartedAuthorization(page, reportStep) {
1264
- if (!isProviderPage(page) || isGoogleAuthPage(page)) return false;
1265
-
1266
- const result = await page.evaluate(async () => {
1267
- const url = new URL(window.location.href);
1268
- if (!/\/started\/?$/.test(url.pathname)) return null;
1269
-
1270
- const platform = url.searchParams.get("platform") || "CLI";
1271
- const state = url.searchParams.get("state");
1272
- if (!state) return null;
1273
-
1274
- const domains = [window.location.hostname || "www.codebuddy.ai"].filter(Boolean);
1275
- for (const domain of [...new Set(domains)]) {
1276
- const authUrl = new URL("/console/auth/login", window.location.origin);
1277
- authUrl.searchParams.set("platform", platform);
1278
- authUrl.searchParams.set("state", state);
1279
- authUrl.searchParams.set("domain", domain);
1280
-
1281
- try {
1282
- const response = await fetch(authUrl.toString(), {
1283
- method: "GET",
1284
- credentials: "include",
1285
- redirect: "manual",
1286
- headers: {
1287
- "x-requested-with": "XMLHttpRequest",
1288
- "X-Domain": domain,
1289
- },
1290
- });
1291
- if (response.type === "opaqueredirect" || (response.status >= 300 && response.status < 400)) {
1292
- return { action: "attempted", domain, message: "redirected" };
1293
- }
1294
- const text = await response.text();
1295
- let data = null;
1296
- try {
1297
- data = text ? JSON.parse(text) : null;
1298
- } catch {
1299
- data = { raw: text };
1300
- }
1301
- if (response.ok && (!data || data.code === 0 || data.code === 200 || typeof data.code === "undefined")) {
1302
- return { action: "authorized", domain };
1303
- }
1304
- if (response.ok) {
1305
- return { action: "attempted", domain, code: data?.code, message: data?.msg || data?.message || "" };
1306
- }
1307
- } catch (error) {
1308
- // Try the next domain variant.
1309
- }
1310
- }
1311
-
1312
- return { action: "failed" };
1313
- }).catch(() => null);
1314
-
1315
- if (!result?.action || result.action === "failed") return false;
1316
-
1317
- if (result.action === "authorized") {
1318
- reportStep("authorizing_codebuddy_cli_state", "Authorized CodeBuddy CLI login state");
1319
- await page.waitForTimeout(1200);
1320
- return true;
1321
- }
1322
-
1323
- reportStep(
1324
- "authorizing_codebuddy_cli_state",
1325
- result.message
1326
- ? `Attempted CodeBuddy CLI login state authorization: ${result.message}`
1327
- : "Attempted CodeBuddy CLI login state authorization"
1328
- );
1329
- await page.waitForTimeout(1200);
1330
- return true;
1331
- }
1332
-
1333
- async function providerHasGoogleLogin(page) {
1334
- try {
1335
- for (const name of [/continue with google/i, /sign in with google/i, /sign up with google/i, /^google$/i]) {
1336
- const btn = page.getByRole("button", { name }).first();
1337
- if (await btn.isVisible({ timeout: 300 }).catch(() => false)) return true;
1338
- const link = page.getByRole("link", { name }).first();
1339
- if (await link.isVisible({ timeout: 200 }).catch(() => false)) return true;
1340
- }
1341
- } catch {
1342
- /* ignore */
1343
- }
1344
- for (const selector of GOOGLE_LOGIN_BUTTON_SELECTORS) {
1345
- try {
1346
- const loc = page.locator(selector).first();
1347
- if (await loc.isVisible({ timeout: 200 }).catch(() => false)) return true;
1348
- } catch {
1349
- /* next */
1350
- }
1351
- }
1352
- return false;
1353
- }
1354
-
1355
- function isXaiProviderPage(page) {
1356
- try {
1357
- const host = new URL(page.url()).hostname || "";
1358
- return host === "accounts.x.ai" || host === "auth.x.ai" || host.endsWith(".x.ai")
1359
- || host === "grok.com" || host.endsWith(".grok.com");
1360
- } catch {
1361
- return false;
1362
- }
1363
- }
1364
-
1365
- async function handleProviderOnboarding(page, reportStep, serviceLabel) {
1366
- if (!isProviderPage(page) || isGoogleAuthPage(page)) return false;
1367
-
1368
- const confirmedPrivacy = await clickFirstActionable(page, PRIVACY_CONFIRM_BUTTON_SELECTORS);
1369
- if (confirmedPrivacy) {
1370
- reportStep("accepting_provider_privacy_dialog", `Confirmed ${serviceLabel} privacy or terms dialog`);
1371
- await page.waitForTimeout(800);
1372
- return true;
1373
- }
1374
-
1375
- const handledCodeBuddyStarted = await handleCodeBuddyStartedAuthorization(page, reportStep);
1376
- if (handledCodeBuddyStarted) {
1377
- return true;
1378
- }
1379
-
1380
- const handledCodeBuddyRegion = await handleCodeBuddyRegionPage(page, reportStep);
1381
- if (handledCodeBuddyRegion) {
1382
- return true;
1383
- }
1384
-
1385
- // Region / workspace defaults are CodeBuddy-style — not xAI device approve.
1386
- // False-positive select matches on xAI wasted the session into "Invalid action".
1387
- if (!isXaiProviderPage(page)) {
1388
- const selectedNativeRegion = await selectNativeRegionOption(page);
1389
- if (selectedNativeRegion) {
1390
- reportStep("selecting_provider_region", `Selected ${serviceLabel} region`);
1391
- await page.waitForTimeout(700);
1392
- return true;
1393
- }
1394
-
1395
- const openedRegionMenu = await clickFirstActionable(page, PROVIDER_REGION_TRIGGER_SELECTORS);
1396
- if (openedRegionMenu) {
1397
- reportStep("opening_provider_region_selector", `Opening ${serviceLabel} region selector`);
1398
- await page.waitForTimeout(500);
1399
- const selectedRegion = await clickFirstActionable(page, PROVIDER_REGION_OPTION_SELECTORS);
1400
- if (selectedRegion) {
1401
- reportStep("selecting_provider_region", `Selected ${serviceLabel} region`);
1402
- await page.waitForTimeout(700);
1403
- }
1404
- return true;
1405
- }
1406
-
1407
- const selectedRegion = await clickFirstActionable(page, PROVIDER_REGION_OPTION_SELECTORS);
1408
- if (selectedRegion) {
1409
- reportStep("selecting_provider_region", `Selected ${serviceLabel} region`);
1410
- await page.waitForTimeout(700);
1411
- return true;
1412
- }
1413
-
1414
- const filledDefaults = await fillProviderOnboardingDefaults(page);
1415
- if (filledDefaults) {
1416
- reportStep("filling_provider_onboarding", `Filled ${serviceLabel} onboarding defaults`);
1417
- await page.waitForTimeout(500);
1418
- return true;
1419
- }
1420
- }
1421
-
1422
- // xAI device pages: never click generic Continue/Next/Confirm. Those submit
1423
- // the device form without a session → "Invalid action" and burn 1–3 minutes.
1424
- // Only Google SSO (login gate) + Allow/Authorize (clickXaiDeviceAuthorize).
1425
- if (isXaiProviderPage(page)) {
1426
- return false;
1427
- }
1428
-
1429
- // Cloudflare dashboard / login: "Allow All" cookie + "Sign in" must not be
1430
- // treated as provider onboarding Continues.
1431
- try {
1432
- const host = new URL(page.url()).hostname || "";
1433
- if (host === "dash.cloudflare.com" || host.endsWith(".cloudflare.com")) {
1434
- return false;
1435
- }
1436
- } catch {
1437
- /* ignore */
1438
- }
1439
-
1440
- // If Google SSO is still offered, do not mash generic Continue.
1441
- if (await providerHasGoogleLogin(page)) {
1442
- return false;
1443
- }
1444
-
1445
- const clickedAction = await clickFirstActionable(page, PROVIDER_ONBOARDING_ACTION_SELECTORS);
1446
- if (clickedAction) {
1447
- reportStep("continuing_provider_onboarding", `Continuing ${serviceLabel} onboarding`);
1448
- await page.waitForTimeout(1000);
1449
- return true;
1450
- }
1451
-
1452
- return false;
1453
- }
1454
-
1455
- /**
1456
- * xAI device step 1: "Enter the code shown in your terminal" → Continue.
1457
- * Only after this do we land on sign-in with "Login with Google".
1458
- * Never run this after Google login — that re-submits Continue into Invalid action.
1459
- */
1460
- async function handleXaiDeviceCodeConfirm(page, reportStep, { alreadyAuthed = false } = {}) {
1461
- if (!isXaiProviderPage(page)) return false;
1462
- if (alreadyAuthed) return false;
1463
- // Already on Google SSO wall — past this step.
1464
- if (await providerHasGoogleLogin(page)) return false;
1465
-
1466
- const text = await readPageText(page).catch(() => "");
1467
- // Logged-in device/approve screens — do not re-click Continue.
1468
- if (/sign out|log out|device authorized|you can close|invalid action/i.test(text)) {
1469
- return false;
1470
- }
1471
-
1472
- const isCodeConfirm =
1473
- /enter the code shown in your terminal/i.test(text)
1474
- || /only enter this code if you just initiated/i.test(text)
1475
- || (/sign in to grok/i.test(text) && /continue/i.test(text) && !/login with/i.test(text));
1476
- if (!isCodeConfirm) return false;
1477
-
1478
- const fromUrl = page.url?.() || "";
1479
- let clicked = false;
1480
- try {
1481
- const btn = page.getByRole("button", { name: /^Continue$/i }).first();
1482
- if (await btn.isVisible({ timeout: 300 }).catch(() => false)) {
1483
- await btn.click({ timeout: 5_000 });
1484
- clicked = true;
1485
- }
1486
- } catch {
1487
- /* fall through */
1488
- }
1489
- if (!clicked) {
1490
- clicked = await clickFirstActionable(page, [
1491
- 'button[type="submit"]:has-text("Continue")',
1492
- 'button:has-text("Continue")',
1493
- ]);
1494
- }
1495
- if (!clicked) return false;
1496
-
1497
- reportStep?.("confirming_device_code", "Confirmed device user code on xAI");
1498
- // Event-driven: next screen is Login with Google or URL change — no fixed 1.2s sleep.
1499
- // GOOGLE_LOGIN_BUTTON_SELECTORS is a string[] — never .split() it.
1500
- await waitForPageAdvance(page, {
1501
- fromUrl,
1502
- urlMatch: (u) => /sign-in|login|oauth/i.test(u) && u !== fromUrl,
1503
- selector: [
1504
- ...GOOGLE_LOGIN_BUTTON_SELECTORS.slice(0, 8),
1505
- 'button:has-text("Login with Google")',
1506
- 'button:has-text("Login with email")',
1507
- ].join(", "),
1508
- timeout: 10_000,
1509
- });
1510
- return true;
1511
- }
1512
-
1513
- /**
1514
- * Click a Google SSO control without waiting for the cross-origin navigation.
1515
- *
1516
- * Playwright's default click() waits for navigations started by the action.
1517
- * CF → accounts.google.com through a residential proxy often exceeds 5s, so the
1518
- * click "fails" even though OAuth already started — then we re-click for 30–40s.
1519
- */
1520
- async function clickSsoControl(page, locator) {
1521
- const enabled = await locator.isEnabled().catch(() => true);
1522
- if (!enabled) return false;
1523
- await locator.scrollIntoViewIfNeeded().catch(() => null);
1524
- const clicked = await locator
1525
- .click({ timeout: 2_500, force: true, noWaitAfter: true })
1526
- .then(() => true)
1527
- .catch(() => false);
1528
- if (clicked) return true;
1529
- // Trusted mouse path (also does not wait on navigation).
1530
- return clickLocatorCenter(page, locator).catch(() => false);
1531
- }
1532
-
1533
- async function clickGoogleLoginRole(page) {
1534
- // Role-based matches are more reliable on SPA auth shells (xAI, CF, etc.)
1535
- // than CSS :has-text alone — especially when the label is nested / aria-only.
1536
- const roleNames = [
1537
- /continue with google/i,
1538
- /login with google/i,
1539
- /log in with google/i,
1540
- /sign up with google/i,
1541
- /sign in with google/i,
1542
- /^google$/i,
1543
- ];
1544
- for (const name of roleNames) {
1545
- try {
1546
- const btn = page.getByRole("button", { name }).first();
1547
- if (await btn.isVisible({ timeout: 250 }).catch(() => false)) {
1548
- if (await clickSsoControl(page, btn)) return true;
1549
- }
1550
- } catch {
1551
- /* next */
1552
- }
1553
- try {
1554
- const link = page.getByRole("link", { name }).first();
1555
- if (await link.isVisible({ timeout: 200 }).catch(() => false)) {
1556
- if (await clickSsoControl(page, link)) return true;
1557
- }
1558
- } catch {
1559
- /* next */
1560
- }
1561
- }
1562
- // Cloudflare: button text "Google", aria-label "Continue with Google"
1563
- try {
1564
- const ariaBtn = page.locator('button[aria-label*="Google" i]').first();
1565
- if (await ariaBtn.isVisible({ timeout: 200 }).catch(() => false)) {
1566
- if (await clickSsoControl(page, ariaBtn)) return true;
1567
- }
1568
- } catch {
1569
- /* ignore */
1570
- }
1571
- // Last resort: CSS text match with noWaitAfter
1572
- try {
1573
- const textBtn = page.locator('button:has-text("Google")').first();
1574
- if (await textBtn.isVisible({ timeout: 150 }).catch(() => false)) {
1575
- if (await clickSsoControl(page, textBtn)) return true;
1576
- }
1577
- } catch {
1578
- /* ignore */
1579
- }
1580
- return false;
1581
- }
1582
-
1583
- async function ensureProviderTermsChecked(page, reportStep) {
1584
- // Returns true only when we newly checked a box (not when already checked).
1585
- for (const scope of getInteractionScopes(page)) {
1586
- for (const selector of TERMS_CHECKBOX_SELECTORS) {
1587
- try {
1588
- const locator = scope.locator(selector).first();
1589
- const count = await locator.count().catch(() => 0);
1590
- if (!count) continue;
1591
- const visible = await locator.isVisible().catch(() => false);
1592
- if (!visible) continue;
1593
- const already = await locator.isChecked().catch(() => false);
1594
- if (already) return false;
1595
- const did = await locator.check({ force: true, timeout: 3_000 }).then(() => true).catch(() => false)
1596
- || await locator.click({ force: true, timeout: 3_000 }).then(() => true).catch(() => false);
1597
- if (did) {
1598
- reportStep?.("accepting_provider_terms", "Accepted provider terms for Google login");
1599
- // Wait until Google button enables — not a blind sleep.
1600
- await waitUntil(
1601
- async () => {
1602
- try {
1603
- const btn = page.getByRole("button", { name: /google/i }).first();
1604
- return (await btn.isVisible().catch(() => false))
1605
- && (await btn.isEnabled().catch(() => true));
1606
- } catch {
1607
- return true;
1608
- }
1609
- },
1610
- { timeout: 2_000, interval: 80 },
1611
- );
1612
- return true;
1613
- }
1614
- } catch {
1615
- /* next */
1616
- }
1617
- }
1618
- }
1619
- return false;
1620
- }
1621
-
1622
- async function handleProviderLoginGate(page, reportStep, { allowGoogleClick = true } = {}) {
1623
- if (isGoogleAuthPage(page)) return false;
1624
-
1625
- await dismissCookieBanners(page, reportStep);
1626
-
1627
- const confirmedExistingDialog = await clickFirstActionable(page, PRIVACY_CONFIRM_BUTTON_SELECTORS);
1628
- if (confirmedExistingDialog) {
1629
- reportStep("accepting_provider_privacy_dialog", "Confirmed provider privacy agreement dialog");
1630
- return true;
1631
- }
1632
-
1633
- // Always try terms first — but do NOT treat "already checked" as progress.
1634
- // Returning true every loop on an already-checked box blocked Google re-click
1635
- // for ~30–60s after a failed first SSO attempt.
1636
- const newlyCheckedTerms = await ensureProviderTermsChecked(page, reportStep);
1637
-
1638
- if (!allowGoogleClick) {
1639
- return newlyCheckedTerms;
1640
- }
1641
-
1642
- // Prefer explicit Google SSO over generic Continue (device code pages
1643
- // often have both — clicking Continue without a session yields invalid_code).
1644
- // Cloudflare: click Google SSO only — never the CF email "Sign in" form.
1645
- const clickedGoogleRole = await clickGoogleLoginRole(page);
1646
- let clickedGoogle = clickedGoogleRole;
1647
- if (!clickedGoogle) {
1648
- // Selector fallback with noWaitAfter (clickFirstActionable waits on nav — bad for SSO).
1649
- for (const selector of GOOGLE_LOGIN_BUTTON_SELECTORS.slice(0, 16)) {
1650
- try {
1651
- const loc = page.locator(selector).first();
1652
- if (await loc.isVisible({ timeout: 100 }).catch(() => false)) {
1653
- if (await clickSsoControl(page, loc)) {
1654
- clickedGoogle = true;
1655
- break;
1656
- }
1657
- }
1658
- } catch {
1659
- /* next */
1660
- }
1661
- }
1662
- }
1663
- if (clickedGoogle) {
1664
- reportStep("selecting_google_login", "Selecting Google login");
1665
-
1666
- const confirmedDialog = await clickFirstActionable(page, PRIVACY_CONFIRM_BUTTON_SELECTORS);
1667
- if (confirmedDialog) {
1668
- reportStep("accepting_provider_privacy_dialog", "Confirmed provider privacy agreement dialog");
1669
- }
1670
-
1671
- // Wait for OAuth redirect to Google (or email field) — event-driven.
1672
- // CF→Google through proxy can take a few seconds; click already returned (noWaitAfter).
1673
- const onCf = isCloudflareLoginUrl(page.url?.() || "");
1674
- const reached = await waitForPageAdvance(page, {
1675
- urlMatch: (u) => isGoogleHostname(u),
1676
- selector: EMAIL_INPUT_SELECTOR,
1677
- timeout: onCf ? 10_000 : 12_000,
1678
- });
1679
- if (reached || isGoogleAuthPage(page)) {
1680
- reportStep("google_login_page", "Reached Google sign-in after provider SSO");
1681
- } else {
1682
- // Popup-based Google SSO
1683
- try {
1684
- const ctx = page.context?.();
1685
- const pages = ctx?.pages?.() || [];
1686
- for (let i = pages.length - 1; i >= 0; i -= 1) {
1687
- const p = pages[i];
1688
- const u = p.url?.() || "";
1689
- if (isGoogleHostname(u)) {
1690
- reportStep("google_login_popup", "Google sign-in opened in a popup");
1691
- break;
1692
- }
1693
- }
1694
- } catch {
1695
- /* ignore */
1696
- }
1697
- }
1698
-
1699
- return true;
1700
- }
1701
-
1702
- return newlyCheckedTerms;
1703
- }
1704
-
1705
- /** Fast path for xAI device approve after Google session exists. */
1706
- async function clickXaiDeviceAuthorize(page, reportStep) {
1707
- if (!isXaiProviderPage(page)) return false;
1708
- // Never approve while Google SSO is still on the page — that was thrashing
1709
- // Continue / Allow before login and landing on "Invalid action".
1710
- if (await providerHasGoogleLogin(page)) return false;
1711
-
1712
- // Prefer exact authorize verbs — avoid bare "Continue" (too many false hits).
1713
- const roles = [
1714
- /^(Allow|Authorize|Approve|Confirm)$/i,
1715
- /^(Allow|Authorize|Approve)\b/i,
1716
- ];
1717
- for (const re of roles) {
1718
- try {
1719
- const btn = page.getByRole("button", { name: re }).first();
1720
- if (await btn.isVisible({ timeout: 200 }).catch(() => false)) {
1721
- const label = (await btn.innerText().catch(() => "")) || "";
1722
- if (/google/i.test(label)) continue;
1723
- await btn.click({ timeout: 3_000 });
1724
- reportStep?.("approving_consent", "Approving xAI device authorization");
1725
- return true;
1726
- }
1727
- } catch {
1728
- /* next */
1729
- }
1730
- }
1731
- return false;
1732
- }
1733
-
1734
- /**
1735
- * Capture Kiro OAuth callback (kiro://…?code=…).
1736
- *
1737
- * After password, Google parks the main frame on empty SetSID while the network
1738
- * completes consent → Cognito idpresponse → 302 Location: kiro://…. Custom-protocol
1739
- * redirects often never become a page navigation, so we listen on:
1740
- * - page + context request / requestfailed / response (Location header)
1741
- * - CDP Network (most reliable on headed Chromium / SetSID)
1742
- *
1743
- * Never force-navigate idpresponse/consent from the monitor — that aborts the
1744
- * natural hop before kiro:// is emitted.
1745
- */
1746
- export function createKiroCallbackMonitor(context, page, timeoutMs = DEFAULT_MANUAL_TIMEOUT_MS) {
1747
- let resolveOuter;
1748
- let rejectOuter;
1749
- const promise = new Promise((resolve, reject) => {
1750
- resolveOuter = resolve;
1751
- rejectOuter = reject;
1752
- });
1753
-
1754
- let settled = false;
1755
- const trackedPages = new Set();
1756
- const contextCleanups = new Map();
1757
- const timeoutHandle = setTimeout(() => {
1758
- settle(null, new Error("Timed out waiting for Kiro callback"));
1759
- }, timeoutMs);
1760
-
1761
- function settle(result, error = null) {
1762
- if (settled) return;
1763
- settled = true;
1764
- clearTimeout(timeoutHandle);
1765
- for (const fns of contextCleanups.values()) {
1766
- for (const fn of fns) {
1767
- try { fn(); } catch {}
1768
- }
1769
- }
1770
- contextCleanups.clear();
1771
- if (error) rejectOuter(error);
1772
- else resolveOuter(result);
1773
- }
1774
-
1775
- function trySettleFromUrl(rawUrl) {
1776
- const parsed = parseCallbackUrl(rawUrl || "");
1777
- if (parsed) settle(parsed);
1778
- return Boolean(parsed);
1779
- }
1780
-
1781
- function trySettleFromResponse(response) {
1782
- try {
1783
- trySettleFromUrl(response?.url?.() || "");
1784
- const headers = typeof response?.headers === "function" ? response.headers() : null;
1785
- const location = headers?.location || headers?.Location || "";
1786
- if (location) trySettleFromUrl(location);
1787
- } catch {
1788
- /* ignore */
1789
- }
1790
- }
1791
-
1792
- function attachCdpNetwork(trackedPage, ownerCleanups) {
1793
- void (async () => {
1794
- try {
1795
- if (settled) return;
1796
- const ctx = trackedPage.context?.();
1797
- if (!ctx?.newCDPSession) return;
1798
- const session = await ctx.newCDPSession(trackedPage);
1799
- await session.send("Network.enable").catch(() => null);
1800
-
1801
- const onCdpResponse = (params) => {
1802
- try {
1803
- const headers = params?.response?.headers || {};
1804
- const loc = headers.location || headers.Location || "";
1805
- if (loc) trySettleFromUrl(loc);
1806
- trySettleFromUrl(params?.response?.url || "");
1807
- } catch {
1808
- /* ignore */
1809
- }
1810
- };
1811
- const onCdpRequest = (params) => {
1812
- try {
1813
- trySettleFromUrl(params?.request?.url || "");
1814
- } catch {
1815
- /* ignore */
1816
- }
1817
- };
1818
-
1819
- session.on("Network.responseReceived", onCdpResponse);
1820
- session.on("Network.requestWillBeSent", onCdpRequest);
1821
- ownerCleanups.push(() => {
1822
- try { session.off?.("Network.responseReceived", onCdpResponse); } catch {}
1823
- try { session.off?.("Network.requestWillBeSent", onCdpRequest); } catch {}
1824
- void session.detach?.().catch(() => null);
1825
- });
1826
- } catch {
1827
- /* CDP unavailable — page/context listeners remain */
1828
- }
1829
- })();
1830
- }
1831
-
1832
- function registerPage(trackedPage, ownerCleanups) {
1833
- if (!trackedPage || trackedPages.has(trackedPage)) return;
1834
- trackedPages.add(trackedPage);
1835
-
1836
- const onFrame = (frame) => trySettleFromUrl(frame?.url?.() || "");
1837
- const onRequest = (request) => trySettleFromUrl(request?.url?.() || "");
1838
- const onRequestFailed = (request) => trySettleFromUrl(request?.url?.() || "");
1839
- const onResponse = (response) => trySettleFromResponse(response);
1840
- const onLoadState = () => trySettleFromUrl(trackedPage.url?.() || "");
1841
- const onClose = () => {
1842
- settle(null, new Error("Browser session closed while waiting for Kiro callback"));
1843
- };
1844
-
1845
- trackedPage.on("framenavigated", onFrame);
1846
- trackedPage.on("request", onRequest);
1847
- trackedPage.on("requestfailed", onRequestFailed);
1848
- trackedPage.on("response", onResponse);
1849
- trackedPage.on("domcontentloaded", onLoadState);
1850
- trackedPage.on("load", onLoadState);
1851
- trackedPage.on("close", onClose);
1852
-
1853
- ownerCleanups.push(() => {
1854
- trackedPage.off("framenavigated", onFrame);
1855
- trackedPage.off("request", onRequest);
1856
- trackedPage.off("requestfailed", onRequestFailed);
1857
- trackedPage.off("response", onResponse);
1858
- trackedPage.off("domcontentloaded", onLoadState);
1859
- trackedPage.off("load", onLoadState);
1860
- trackedPage.off("close", onClose);
1861
- });
1862
-
1863
- attachCdpNetwork(trackedPage, ownerCleanups);
1864
-
1865
- const current = parseCallbackUrl(trackedPage.url?.() || "");
1866
- if (current) settle(current);
1867
- }
1868
-
1869
- function bind(ctx, pg) {
1870
- if (settled) return;
1871
- if (contextCleanups.has(ctx)) return;
1872
- const cleanups = [];
1873
- contextCleanups.set(ctx, cleanups);
1874
-
1875
- const onPage = (newPage) => registerPage(newPage, cleanups);
1876
- const onClose = () => {
1877
- settle(null, new Error("Browser context closed while waiting for Kiro callback"));
1878
- };
1879
- const onCtxRequest = (request) => trySettleFromUrl(request?.url?.() || "");
1880
- const onCtxRequestFailed = (request) => trySettleFromUrl(request?.url?.() || "");
1881
- const onCtxResponse = (response) => trySettleFromResponse(response);
1882
-
1883
- ctx.on("page", onPage);
1884
- ctx.on("close", onClose);
1885
- ctx.on("request", onCtxRequest);
1886
- ctx.on("requestfailed", onCtxRequestFailed);
1887
- ctx.on("response", onCtxResponse);
1888
- cleanups.push(() => ctx.off("page", onPage));
1889
- cleanups.push(() => ctx.off("close", onClose));
1890
- cleanups.push(() => ctx.off("request", onCtxRequest));
1891
- cleanups.push(() => ctx.off("requestfailed", onCtxRequestFailed));
1892
- cleanups.push(() => ctx.off("response", onCtxResponse));
1893
-
1894
- if (pg) registerPage(pg, cleanups);
1895
- }
1896
-
1897
- bind(context, page);
1898
-
1899
- promise.rebind = ({ context: newContext, page: newPage } = {}) => {
1900
- if (newContext) bind(newContext, newPage);
1901
- };
1902
-
1903
- promise.abort = (reason = "Job cancelled") => {
1904
- settle(null, new Error(reason));
1905
- };
1906
-
1907
- return promise;
1908
- }
1909
-
1910
- // Parse any OAuth redirect callback URL (e.g. http://localhost:8080/callback?code=...)
1911
- // against a configurable prefix. Returns { callbackUrl, code, state } or null.
1912
- function parseCallbackUrlWithPrefix(rawUrl, prefix) {
1913
- if (!rawUrl || !prefix || !rawUrl.startsWith(prefix)) return null;
1914
- const queryIndex = rawUrl.indexOf("?");
1915
- const params = new URLSearchParams(queryIndex >= 0 ? rawUrl.slice(queryIndex + 1) : "");
1916
- const code = params.get("code");
1917
- const state = params.get("state");
1918
- if (!code) return null;
1919
- return { callbackUrl: rawUrl, code, state };
1920
- }
1921
-
1922
- // Generic version of createKiroCallbackMonitor for authorization_code providers
1923
- // whose redirect_uri is an http(s) loopback (e.g. Antigravity → http://localhost:8080/callback).
1924
- // The browser may fail to actually load the loopback (connection refused), but the
1925
- // request/framenavigated/requestfailed events still fire with the URL+code, which we capture.
1926
- export function createGenericCallbackMonitor(context, page, { prefix, timeoutMs = DEFAULT_MANUAL_TIMEOUT_MS } = {}) {
1927
- let resolveOuter;
1928
- let rejectOuter;
1929
- const promise = new Promise((resolve, reject) => {
1930
- resolveOuter = resolve;
1931
- rejectOuter = reject;
1932
- });
1933
-
1934
- let settled = false;
1935
- const trackedPages = new Set();
1936
- const contextCleanups = new Map();
1937
- const timeoutHandle = setTimeout(() => {
1938
- settle(null, new Error("Timed out waiting for OAuth callback"));
1939
- }, timeoutMs);
1940
-
1941
- function settle(result, error = null) {
1942
- if (settled) return;
1943
- settled = true;
1944
- clearTimeout(timeoutHandle);
1945
- for (const fns of contextCleanups.values()) {
1946
- for (const fn of fns) {
1947
- try { fn(); } catch {}
1948
- }
1949
- }
1950
- contextCleanups.clear();
1951
- if (error) rejectOuter(error);
1952
- else resolveOuter(result);
1953
- }
1954
-
1955
- function registerPage(trackedPage, ownerCleanups) {
1956
- if (!trackedPage || trackedPages.has(trackedPage)) return;
1957
- trackedPages.add(trackedPage);
1958
-
1959
- const check = (url) => {
1960
- const parsed = parseCallbackUrlWithPrefix(url || "", prefix);
1961
- if (parsed) settle(parsed);
1962
- };
1963
- const onFrame = (frame) => check(frame?.url?.() || "");
1964
- const onRequest = (request) => check(request?.url?.() || "");
1965
- const onRequestFailed = (request) => check(request?.url?.() || "");
1966
- const onLoadState = () => check(trackedPage.url?.() || "");
1967
-
1968
- trackedPage.on("framenavigated", onFrame);
1969
- trackedPage.on("request", onRequest);
1970
- trackedPage.on("requestfailed", onRequestFailed);
1971
- trackedPage.on("domcontentloaded", onLoadState);
1972
- trackedPage.on("load", onLoadState);
1973
-
1974
- ownerCleanups.push(() => {
1975
- trackedPage.off("framenavigated", onFrame);
1976
- trackedPage.off("request", onRequest);
1977
- trackedPage.off("requestfailed", onRequestFailed);
1978
- trackedPage.off("domcontentloaded", onLoadState);
1979
- trackedPage.off("load", onLoadState);
1980
- });
1981
-
1982
- check(trackedPage.url?.() || "");
1983
- }
1984
-
1985
- function bind(ctx, pg) {
1986
- if (settled) return;
1987
- if (contextCleanups.has(ctx)) return;
1988
- const cleanups = [];
1989
- contextCleanups.set(ctx, cleanups);
1990
- const onPage = (newPage) => registerPage(newPage, cleanups);
1991
- ctx.on("page", onPage);
1992
- cleanups.push(() => ctx.off("page", onPage));
1993
- if (pg) registerPage(pg, cleanups);
1994
- }
1995
-
1996
- bind(context, page);
1997
- promise.rebind = ({ context: newContext, page: newPage } = {}) => {
1998
- if (newContext) bind(newContext, newPage);
1999
- };
2000
-
2001
- return promise;
2002
- }
2003
-
2004
- export async function runGoogleAccountAutomation({
2005
- page,
2006
- authUrl,
2007
- email,
2008
- password,
2009
- successPromise,
2010
- shortTimeoutMs = DEFAULT_SHORT_TIMEOUT_MS,
2011
- serviceLabel = "provider",
2012
- openingStep = "opening_google_oauth",
2013
- openingMessage = "Opening Google OAuth page",
2014
- successStep = "oauth_success_received",
2015
- successMessage = "OAuth success received",
2016
- onStep,
2017
- /** When true, skip page.goto(authUrl) — caller already navigated (e.g. CF pre-click Google). */
2018
- skipGoto = false,
2019
- /** Caller already clicked Google SSO; wait for accounts.google.com before re-clicking. */
2020
- expectGoogleSoon = false,
2021
- }) {
2022
- const startTime = Date.now();
2023
- const reportStep = (step, message) => {
2024
- onStep?.(step, message);
2025
- };
2026
-
2027
- const interstitialOpts = (maxWaitMs) => ({ maxWaitMs, successPromise });
2028
- // Prevent re-submitting email/password while Google is still transitioning
2029
- // (pwd page stays mounted ~1–3s after Next; re-fill aborts the OAuth chain).
2030
- let passwordSubmittedAt = 0;
2031
- let emailSubmittedAt = 0;
2032
- let googleLoginSelectedAt = 0;
2033
- let seenGoogleAuth = false;
2034
- let deviceApproveAt = 0;
2035
- let deviceInvalidReopenAt = 0;
2036
- let deviceInvalidReopenCount = 0;
2037
- // Cooldowns prevent double-submit only — not artificial pacing.
2038
- const PASSWORD_RESUBMIT_COOLDOWN_MS = isGrokish(serviceLabel) ? 6_000 : 18_000;
2039
- // Longer email cooldown for fast bulk — Google identifier page can sit 5–10s
2040
- // after Next; re-typing the whole email wastes another 10–15s.
2041
- const EMAIL_RESUBMIT_COOLDOWN_MS = isGrokish(serviceLabel) ? 12_000 : 8_000;
2042
- const GOOGLE_SSO_COOLDOWN_MS = isGrokish(serviceLabel) ? 3_000 : 8_000;
2043
- // Don't hammer Allow — xAI rate_limits rapid device posts.
2044
- const DEVICE_APPROVE_COOLDOWN_MS = 3_000;
2045
- const DEVICE_INVALID_REOPEN_COOLDOWN_MS = 4_000;
2046
- const DEVICE_INVALID_REOPEN_MAX = 3;
2047
- const isGrokFlow = isGrokish(serviceLabel);
2048
- // Grok does not need the long Kiro SetSID / kiro:// interstitial window.
2049
- const postPasswordInterstitialMs = isGrokFlow ? 4_000 : 25_000;
2050
- // Loop poll: race successPromise — keep tiny so fast networks aren't stalled.
2051
- const loopTickMs = isGrokFlow ? 120 : 500;
2052
-
2053
- let alreadyOnGoogle = skipGoto && isGoogleAuthPage(page);
2054
- if (!skipGoto) {
2055
- reportStep(openingStep, openingMessage);
2056
- await page.goto(authUrl, { waitUntil: "domcontentloaded", timeout: 60_000 });
2057
- await dismissCookieBanners(page, reportStep);
2058
- } else if (alreadyOnGoogle) {
2059
- reportStep("google_login_page", "Already on Google sign-in — filling credentials");
2060
- } else if (expectGoogleSoon) {
2061
- // CF (etc.) already clicked Google — wait for redirect, do NOT re-goto / re-click yet.
2062
- reportStep("waiting_google_redirect", "Waiting for Google after provider SSO click");
2063
- const reached = await waitUntil(() => isGoogleAuthPage(page), {
2064
- timeout: 25_000,
2065
- interval: 100,
2066
- });
2067
- if (reached) {
2068
- alreadyOnGoogle = true;
2069
- googleLoginSelectedAt = Date.now();
2070
- reportStep("google_login_page", "Reached Google sign-in after provider SSO");
2071
- } else {
2072
- reportStep("google_redirect_slow", "Google redirect slow — will retry SSO click");
2073
- }
2074
- } else {
2075
- reportStep(openingStep, openingMessage);
2076
- await dismissCookieBanners(page, reportStep);
2077
- }
2078
-
2079
- // Cloudflare login always shows email/password fields — do NOT treat those as
2080
- // "ready for Google email fill". Wait for Google SSO button / Google page only.
2081
- const onCfLogin = isCloudflareLoginUrl(page.url?.() || "") || /cloudflare/i.test(String(serviceLabel || ""));
2082
-
2083
- if (!alreadyOnGoogle) {
2084
- await waitUntil(
2085
- async () => {
2086
- if (isGoogleAuthPage(page)) return true;
2087
- if (await getFirstVisibleLocator(
2088
- page,
2089
- 'button[aria-label*="Google" i], button:has-text("Continue with Google"), button:has-text("Login with Google"), button:has-text("Google")',
2090
- )) {
2091
- return true;
2092
- }
2093
- if (!onCfLogin && (await getFirstVisibleLocator(page, EMAIL_INPUT_SELECTOR))) {
2094
- return true;
2095
- }
2096
- if (!onCfLogin && (await getFirstVisibleLocator(page, 'button:has-text("Continue")'))) {
2097
- return true;
2098
- }
2099
- return false;
2100
- },
2101
- { timeout: isGrokFlow ? 8_000 : 12_000, interval: 80 },
2102
- );
2103
- if (!isGrokFlow) {
2104
- await waitThroughGoogleInterstitials(page, reportStep, interstitialOpts(8_000));
2105
- }
2106
-
2107
- // Provider shells (xAI device, CodeBuddy, Cloudflare, …) must pick Google SSO first.
2108
- // Never type credentials into provider email fields (CF has its own email/password).
2109
- for (let attempt = 0; attempt < (isGrokFlow || onCfLogin ? 8 : 2); attempt += 1) {
2110
- if (isGoogleAuthPage(page)) break;
2111
- await dismissCookieBanners(page, reportStep);
2112
- if (await handleXaiDeviceCodeConfirm(page, reportStep)) {
2113
- continue;
2114
- }
2115
- if (await handleProviderLoginGate(page, reportStep)) {
2116
- googleLoginSelectedAt = Date.now();
2117
- if (isGoogleAuthPage(page)) break;
2118
- // Gate already waited for Google URL; only brief yield if still on provider.
2119
- await yieldMs(50);
2120
- continue;
2121
- }
2122
- // SPA not ready — poll for Google SSO (not CF email form).
2123
- const ready = await waitUntil(
2124
- async () =>
2125
- isGoogleAuthPage(page)
2126
- || (await providerHasGoogleLogin(page))
2127
- || /enter the code|login with google|continue with google/i.test(
2128
- await readPageText(page).catch(() => ""),
2129
- ),
2130
- { timeout: 600, interval: 80 },
2131
- );
2132
- if (!ready) await yieldMs(80);
2133
- }
2134
- if (!isGrokFlow) {
2135
- await waitThroughGoogleInterstitials(page, reportStep, interstitialOpts(6_000));
2136
- }
2137
- }
2138
-
2139
- // Only fill Google email once we are actually on accounts.google.com.
2140
- if (isGoogleAuthPage(page)) {
2141
- seenGoogleAuth = true;
2142
- const emailInput = await waitForFirstVisibleLocator(page, EMAIL_INPUT_SELECTOR, { timeout: 10_000 });
2143
- if (emailInput) {
2144
- reportStep("entering_email", "Entering Google email");
2145
- const filled = await fillInputResilient(emailInput, email);
2146
- if (!filled) {
2147
- reportStep("email_fill_failed", "Could not fill the Google email field; will retry in the polling loop");
2148
- } else {
2149
- reportStep("submitting_email", "Submitting email");
2150
- await clickFirstVisible(page, NEXT_BUTTON_SELECTORS);
2151
- emailSubmittedAt = Date.now();
2152
- // Wait for password field (or leave email step) — not fixed sleep.
2153
- await waitForPageAdvance(page, {
2154
- selector: PASSWORD_INPUT_SELECTOR,
2155
- timeout: isGrokFlow ? 8_000 : 12_000,
2156
- });
2157
- if (!isGrokFlow) {
2158
- await waitThroughGoogleInterstitials(page, reportStep, interstitialOpts(8_000));
2159
- }
2160
- }
2161
- }
2162
- } else if (isProviderPage(page)) {
2163
- reportStep(
2164
- "waiting_for_google_sso",
2165
- `Provider page still open (${(page.url?.() || "").slice(0, 80)}) — will keep selecting Google login`,
2166
- );
2167
- }
2168
-
2169
- while (Date.now() - startTime < shortTimeoutMs) {
2170
- const successResult = await Promise.race([
2171
- successPromise.then((result) => ({ kind: "success", result })).catch((error) => ({ kind: "success_error", error })),
2172
- new Promise((resolve) => setTimeout(() => resolve(null), loopTickMs)),
2173
- ]);
2174
-
2175
- if (successResult?.kind === "success") {
2176
- reportStep(successStep, successMessage);
2177
- return {
2178
- status: "success",
2179
- ...successResult.result,
2180
- };
2181
- }
2182
-
2183
- if (successResult?.kind === "success_error") {
2184
- reportStep("oauth_timeout", `Timed out waiting for ${serviceLabel} authorization`);
2185
- return {
2186
- status: "failed_timeout",
2187
- error: successResult.error?.message || `Timed out waiting for ${serviceLabel} authorization`,
2188
- };
2189
- }
2190
-
2191
- // Cloudflare: after Google password, land on dash — park on harvest promise.
2192
- // Do NOT thrash cookie dismiss / generic Approve (starves token API work).
2193
- if (
2194
- isGrokFlow
2195
- && seenGoogleAuth
2196
- && passwordSubmittedAt
2197
- && /cloudflare/i.test(String(serviceLabel || ""))
2198
- ) {
2199
- try {
2200
- const u = new URL(page.url?.() || "");
2201
- const onDash =
2202
- u.hostname === "dash.cloudflare.com"
2203
- && !u.pathname.includes("/login")
2204
- && !u.href.includes("oidcJwt");
2205
- if (onDash) {
2206
- reportStep(
2207
- "waiting_cf_harvest",
2208
- "On Cloudflare dashboard — waiting for Workers AI token harvest",
2209
- );
2210
- // Yield the page: only race success (longer tick while harvesting).
2211
- const parked = await Promise.race([
2212
- successPromise
2213
- .then((result) => ({ kind: "success", result }))
2214
- .catch((error) => ({ kind: "success_error", error })),
2215
- yieldMs(2_000).then(() => null),
2216
- ]);
2217
- if (parked?.kind === "success") {
2218
- reportStep(successStep, successMessage);
2219
- return { status: "success", ...parked.result };
2220
- }
2221
- if (parked?.kind === "success_error") {
2222
- reportStep("oauth_timeout", `Timed out waiting for ${serviceLabel} authorization`);
2223
- return {
2224
- status: "failed_timeout",
2225
- error: parked.error?.message || `Timed out waiting for ${serviceLabel} authorization`,
2226
- };
2227
- }
2228
- continue;
2229
- }
2230
- } catch {
2231
- /* fall through */
2232
- }
2233
- }
2234
-
2235
- // Unblock SetSID / empty Google interstitials before other handlers
2236
- const waited = await waitThroughGoogleInterstitials(
2237
- page,
2238
- reportStep,
2239
- interstitialOpts(isGrokFlow ? 2_500 : 8_000),
2240
- );
2241
- if (waited) {
2242
- continue;
2243
- }
2244
-
2245
- const handledGoogleConsent = await handleGoogleConsent(page, reportStep);
2246
- if (handledGoogleConsent) {
2247
- if (!isGrokFlow) {
2248
- await waitThroughGoogleInterstitials(page, reportStep, interstitialOpts(12_000));
2249
- } else {
2250
- await waitForPageAdvance(page, { timeout: 4_000 });
2251
- }
2252
- continue;
2253
- }
2254
-
2255
- // Headless Chromium is rejected after email submit → /v3/signin/rejected
2256
- // ("This browser or app may not be secure"). Fail fast — do not spin 90s.
2257
- if (await isBlockedBrowser(page)) {
2258
- const url = page.url?.() || "";
2259
- reportStep(
2260
- "browser_blocked_by_google",
2261
- `Google blocked this browser (url=${url.slice(0, 120)}). Use headed CloakBrowser (Xvfb on Linux).`,
2262
- );
2263
- return {
2264
- status: "failed_browser_blocked",
2265
- error:
2266
- "Google blocked the automated browser (\"This browser or app may not be secure\" / signin rejected). " +
2267
- "Kiro bulk must use headed CloakBrowser (Xvfb on Linux), not headless Chrome.",
2268
- };
2269
- }
2270
-
2271
- const text = await readPageText(page);
2272
- if (includesAny(text, INVALID_CREDENTIAL_MARKERS)) {
2273
- reportStep("invalid_credentials", "Google rejected the supplied email or password");
2274
- return {
2275
- status: "failed_invalid_credentials",
2276
- error: "Google rejected the supplied email or password.",
2277
- };
2278
- }
2279
-
2280
- if (includesAny(text, RESTRICTED_ACCOUNT_MARKERS)) {
2281
- reportStep("account_restricted", "Account is restricted, suspended, or banned by the provider");
2282
- return {
2283
- status: "failed_restricted",
2284
- error: "Account is restricted, suspended, or banned. Skipping.",
2285
- };
2286
- }
2287
-
2288
- if (includesAny(text, MANUAL_ASSIST_MARKERS)) {
2289
- const isCaptcha = /captcha|recaptcha|not a robot|select all images|select all squares/i.test(text);
2290
- reportStep(
2291
- isCaptcha ? "google_captcha" : "manual_assist_required",
2292
- isCaptcha
2293
- ? "Google CAPTCHA / bot check"
2294
- : "Google requested CAPTCHA, 2FA, or recovery verification",
2295
- );
2296
- return {
2297
- status: "needs_manual",
2298
- error: isCaptcha
2299
- ? "Google CAPTCHA (bot check). Not fixed by lowering workers — use headed CloakBrowser with Xvfb, a residential proxy, and avoid blocking Google domains. Open manual assist to solve CAPTCHA once."
2300
- : "Manual assist required in the browser session (CAPTCHA, 2FA, recovery, or suspicious-login challenge).",
2301
- };
2302
- }
2303
-
2304
- const handledOnboarding = await handleGoogleOnboarding(page, text);
2305
- if (handledOnboarding) {
2306
- reportStep("google_onboarding", "Accepted Google onboarding or privacy prompt");
2307
- continue;
2308
- }
2309
-
2310
- // xAI rate-limits device authorize after rapid retries — fail fast.
2311
- if (
2312
- isProviderPage(page)
2313
- && (/rate[_ ]?limit/i.test(text) || /error=rate_limited/i.test(page.url?.() || ""))
2314
- ) {
2315
- reportStep("device_rate_limited", "xAI device authorization rate-limited");
2316
- return {
2317
- status: "failed",
2318
- error: "xAI rate-limited device authorization. Wait a few minutes and retry (too many rapid device-code attempts).",
2319
- };
2320
- }
2321
-
2322
- // xAI often lands on /oauth2/device/approve with "Invalid action" after
2323
- // Google consent when the approve form was double-submitted. Re-open the
2324
- // original device URL (with user_code) a few times — not every loop tick.
2325
- if (
2326
- isProviderPage(page)
2327
- && /invalid action|invalid[_ ]?code|code (has )?expired|expired code/i.test(text)
2328
- && authUrl
2329
- && seenGoogleAuth
2330
- && deviceInvalidReopenCount < DEVICE_INVALID_REOPEN_MAX
2331
- && Date.now() - deviceInvalidReopenAt > DEVICE_INVALID_REOPEN_COOLDOWN_MS
2332
- ) {
2333
- deviceInvalidReopenCount += 1;
2334
- deviceInvalidReopenAt = Date.now();
2335
- deviceApproveAt = 0;
2336
- reportStep(
2337
- "device_invalid_reopen",
2338
- `Device page error — reopening auth URL (${deviceInvalidReopenCount}/${DEVICE_INVALID_REOPEN_MAX})`,
2339
- );
2340
- await page.goto(authUrl, { waitUntil: "domcontentloaded", timeout: 60_000 }).catch(() => null);
2341
- await waitUntil(
2342
- async () =>
2343
- (await getFirstVisibleLocator(page, 'button:has-text("Continue"), button:has-text("Allow"), button:has-text("Authorize")'))
2344
- || (await providerHasGoogleLogin(page)),
2345
- { timeout: 4_000, interval: 80 },
2346
- );
2347
- continue;
2348
- }
2349
-
2350
- const googleAuthed = Boolean(seenGoogleAuth && passwordSubmittedAt);
2351
-
2352
- // xAI device user_code confirm (Continue) — only before Google login.
2353
- if (await handleXaiDeviceCodeConfirm(page, reportStep, { alreadyAuthed: googleAuthed })) {
2354
- continue;
2355
- }
2356
-
2357
- // Provider Google SSO BEFORE generic onboarding Continues.
2358
- // Cooldown: re-clicking Google mid-redirect restarts OAuth and wastes time.
2359
- const allowGoogleClick =
2360
- !googleAuthed
2361
- && (!googleLoginSelectedAt || Date.now() - googleLoginSelectedAt > GOOGLE_SSO_COOLDOWN_MS);
2362
- const handledProviderGate = await handleProviderLoginGate(page, reportStep, { allowGoogleClick });
2363
- if (handledProviderGate) {
2364
- if (allowGoogleClick) googleLoginSelectedAt = Date.now();
2365
- continue;
2366
- }
2367
-
2368
- // xAI device approve ONLY after Google password submitted.
2369
- if (
2370
- googleAuthed
2371
- && Date.now() - deviceApproveAt > DEVICE_APPROVE_COOLDOWN_MS
2372
- && await clickXaiDeviceAuthorize(page, reportStep)
2373
- ) {
2374
- deviceApproveAt = Date.now();
2375
- continue;
2376
- }
2377
-
2378
- const handledProviderOnboarding = await handleProviderOnboarding(page, reportStep, serviceLabel);
2379
- if (handledProviderOnboarding) {
2380
- continue;
2381
- }
2382
-
2383
- // Credentials only on accounts.google.com — never into provider shells.
2384
- if (isGoogleAuthPage(page)) {
2385
- seenGoogleAuth = true;
2386
- // Check password BEFORE email — after submitting the email the password
2387
- // page loads and during the transition the old email input can briefly
2388
- // remain visible; if we checked email first we'd re-type the email
2389
- // address into whatever field is focused (often the password input).
2390
- const passwordInput = await getFirstVisibleLocator(page, PASSWORD_INPUT_SELECTOR);
2391
- if (passwordInput) {
2392
- const sincePw = Date.now() - passwordSubmittedAt;
2393
- if (passwordSubmittedAt && sincePw < PASSWORD_RESUBMIT_COOLDOWN_MS) {
2394
- // Still on (or animating off) the password form after a recent submit —
2395
- // do NOT re-fill; wait for SetSID/consent/callback instead.
2396
- reportStep(
2397
- "waiting_after_password",
2398
- `Password already submitted ${Math.round(sincePw / 1000)}s ago — waiting for Google redirect`,
2399
- );
2400
- await waitThroughGoogleInterstitials(
2401
- page,
2402
- reportStep,
2403
- interstitialOpts(isGrokFlow ? 2_000 : 6_000),
2404
- );
2405
- continue;
2406
- }
2407
-
2408
- reportStep("entering_password", "Entering Google password");
2409
- const filled = await fillInputResilient(passwordInput, password);
2410
- if (filled) {
2411
- reportStep("submitting_password", "Submitting password");
2412
- const prePwUrl = page.url?.() || "";
2413
- await clickFirstVisible(page, NEXT_BUTTON_SELECTORS);
2414
- passwordSubmittedAt = Date.now();
2415
- // Leave password challenge via navigation / URL change / success — no 2.5s sleep.
2416
- await Promise.race([
2417
- page.waitForNavigation({ waitUntil: "domcontentloaded", timeout: isGrokFlow ? 6_000 : 10_000 }).catch(() => null),
2418
- waitForPageAdvance(page, { fromUrl: prePwUrl, timeout: isGrokFlow ? 6_000 : 10_000 }),
2419
- successPromise.then(() => null).catch(() => null),
2420
- ]);
2421
- await waitThroughGoogleInterstitials(
2422
- page,
2423
- reportStep,
2424
- interstitialOpts(postPasswordInterstitialMs),
2425
- );
2426
- } else {
2427
- reportStep("password_fill_failed", "Could not fill the Google password field; retrying loop");
2428
- await yieldMs(100);
2429
- }
2430
- continue;
2431
- }
2432
-
2433
- const nextEmailInput = await getFirstVisibleLocator(page, EMAIL_INPUT_SELECTOR);
2434
- if (nextEmailInput) {
2435
- const sinceEmail = Date.now() - emailSubmittedAt;
2436
- if (emailSubmittedAt && sinceEmail < EMAIL_RESUBMIT_COOLDOWN_MS) {
2437
- reportStep(
2438
- "waiting_after_email",
2439
- `Email already submitted ${Math.round(sinceEmail / 1000)}s ago — waiting for password/next screen`,
2440
- );
2441
- await waitForPageAdvance(page, {
2442
- selector: PASSWORD_INPUT_SELECTOR,
2443
- timeout: Math.max(200, EMAIL_RESUBMIT_COOLDOWN_MS - sinceEmail),
2444
- });
2445
- continue;
2446
- }
2447
-
2448
- reportStep("entering_email", "Entering Google email");
2449
- const filled = await fillInputResilient(nextEmailInput, email);
2450
- if (filled) {
2451
- reportStep("submitting_email", "Submitting email");
2452
- await clickFirstVisible(page, NEXT_BUTTON_SELECTORS);
2453
- emailSubmittedAt = Date.now();
2454
- await waitForPageAdvance(page, {
2455
- selector: PASSWORD_INPUT_SELECTOR,
2456
- timeout: isGrokFlow ? 6_000 : 10_000,
2457
- });
2458
- } else {
2459
- reportStep("email_fill_failed", "Could not fill the Google email field; retrying loop");
2460
- await yieldMs(80);
2461
- }
2462
- continue;
2463
- }
2464
- }
2465
-
2466
- // On xAI before Google login, APPROVE selectors match "Continue with Google"
2467
- // via :has-text("Continue") and wreck the device code → Invalid action loop.
2468
- // On Cloudflare login, "Allow All" cookies + "Sign in" must not be mashed.
2469
- await dismissCookieBanners(page, reportStep);
2470
- const onCfHost = (() => {
2471
- try {
2472
- const h = new URL(page.url()).hostname || "";
2473
- return h === "dash.cloudflare.com" || h.endsWith(".cloudflare.com");
2474
- } catch {
2475
- return false;
2476
- }
2477
- })();
2478
- const mayGenericApprove =
2479
- isGoogleAuthPage(page)
2480
- || (
2481
- seenGoogleAuth
2482
- && passwordSubmittedAt
2483
- && !(await providerHasGoogleLogin(page))
2484
- && !isCloudflareLoginUrl(page.url?.() || "")
2485
- );
2486
- if (mayGenericApprove && !isCloudflareLoginUrl(page.url?.() || "")) {
2487
- // Avoid OneTrust "Allow All" as if it were OAuth approve when still mid-flow
2488
- const clickedApprove = await clickFirstVisible(page, APPROVE_BUTTON_SELECTORS);
2489
- if (clickedApprove) {
2490
- reportStep("approving_consent", `Approving Google or ${serviceLabel} consent`);
2491
- deviceApproveAt = Date.now();
2492
- await waitForPageAdvance(page, { timeout: isGrokFlow ? 2_000 : 4_000 });
2493
- continue;
2494
- }
2495
- }
2496
- // Cloudflare login stuck: keep hammering Google SSO only
2497
- if (onCfHost && !seenGoogleAuth && (await handleProviderLoginGate(page, reportStep))) {
2498
- googleLoginSelectedAt = Date.now();
2499
- continue;
2500
- }
2501
-
2502
- // Periodic diagnostics so jobs aren't opaque "waiting" spam
2503
- if (Math.floor((Date.now() - startTime) / 5000) !== Math.floor((Date.now() - startTime - loopTickMs) / 5000)) {
2504
- const url = page.url?.() || "";
2505
- const snippet = String(text || (await readPageText(page).catch(() => ""))).slice(0, 100).replace(/\s+/g, " ");
2506
- reportStep(
2507
- "waiting_for_next_screen",
2508
- `Waiting for the next Google or ${serviceLabel} screen (url=${url.slice(0, 100)} body=${snippet})`,
2509
- );
2510
- } else {
2511
- reportStep("waiting_for_next_screen", `Waiting for the next Google or ${serviceLabel} screen`);
2512
- }
2513
- // Only yield — next loop races successPromise + handlers. Fast net = fast exit.
2514
- await yieldMs(loopTickMs);
2515
- }
2516
-
2517
- // Final blocked check before generic needs_manual
2518
- if (await isBlockedBrowser(page)) {
2519
- reportStep("browser_blocked_by_google", "Google blocked browser at end of automation window");
2520
- return {
2521
- status: "failed_browser_blocked",
2522
- error:
2523
- "Google blocked the automated browser (\"This browser or app may not be secure\"). " +
2524
- "Use headed CloakBrowser (Xvfb).",
2525
- };
2526
- }
2527
-
2528
- const finalUrl = page.url?.() || "";
2529
- const finalBody = String(await readPageText(page).catch(() => "")).slice(0, 120).replace(/\s+/g, " ");
2530
- reportStep(
2531
- "manual_assist_required",
2532
- `Flow did not complete ${serviceLabel} authorization automatically (url=${finalUrl.slice(0, 100)} body=${finalBody})`,
2533
- );
2534
- return {
2535
- status: "needs_manual",
2536
- error:
2537
- `Manual assist required — ${serviceLabel} authorization did not finish automatically ` +
2538
- `(last url: ${finalUrl.slice(0, 140)}). If you see "browser may not be secure", use headed CloakBrowser.`,
2539
- };
2540
- }
2541
-
2542
- export async function runKiroGoogleAutomation({
2543
- page,
2544
- authUrl,
2545
- email,
2546
- password,
2547
- callbackPromise,
2548
- shortTimeoutMs = DEFAULT_SHORT_TIMEOUT_MS,
2549
- onStep,
2550
- }) {
2551
- return runGoogleAccountAutomation({
2552
- page,
2553
- authUrl,
2554
- email,
2555
- password,
2556
- successPromise: callbackPromise,
2557
- shortTimeoutMs,
2558
- serviceLabel: "Kiro",
2559
- openingStep: "opening_google_oauth",
2560
- openingMessage: "Opening Google OAuth page",
2561
- successStep: "kiro_callback_received",
2562
- successMessage: "Kiro callback received",
2563
- onStep,
2564
- });
2565
- }
2566
-
2567
- export {
2568
- handleCodeBuddyRegionPage,
2569
- handleProviderOnboarding,
2570
- handleCodeBuddyStartedAuthorization,
2571
- isProviderPage,
2572
- };
2573
-
2574
- export const __test__ = {
2575
- waitForFirstVisibleLocator,
2576
- fillInputResilient,
2577
- parseSelectorList,
2578
- getFirstVisibleLocator,
2579
- waitForPageAdvance,
2580
- waitUntil,
2581
- handleXaiDeviceCodeConfirm,
2582
- GOOGLE_LOGIN_BUTTON_SELECTORS,
2583
- isGrokish,
2584
- dismissCookieBanners,
2585
- clickGoogleLoginRole,
2586
- isCloudflareLoginUrl,
2587
- };