zevairouter 1.0.152 → 1.0.154

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 (1306) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/cli/app/.next-cli-build/BUILD_ID +1 -1
  3. package/cli/app/.next-cli-build/app-path-routes-manifest.json +13 -11
  4. package/cli/app/.next-cli-build/build-manifest.json +2 -2
  5. package/cli/app/.next-cli-build/routes-manifest.json +14 -0
  6. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/automation/page.js +2 -2
  7. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/automation/page.js.nft.json +1 -1
  8. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/automation/page_client-reference-manifest.js +1 -1
  9. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js +2 -2
  10. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -1
  11. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  12. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +3 -3
  13. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
  14. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  15. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js +2 -2
  16. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  17. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  18. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js +2 -2
  19. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
  20. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  21. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js +2 -2
  22. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
  23. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  24. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/context/page.js +2 -2
  25. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/context/page.js.nft.json +1 -1
  26. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/context/page_client-reference-manifest.js +1 -1
  27. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js +2 -2
  28. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  29. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  30. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js +19 -19
  31. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js.nft.json +1 -1
  32. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  33. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js +2 -2
  34. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js.nft.json +1 -1
  35. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  36. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js +4 -4
  37. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js.nft.json +1 -1
  38. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  39. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js +2 -2
  40. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js.nft.json +1 -1
  41. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  42. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js +2 -2
  43. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -1
  44. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  45. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js +2 -2
  46. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  47. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  48. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/playground/page.js +2 -2
  49. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/playground/page.js.nft.json +1 -1
  50. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/playground/page_client-reference-manifest.js +1 -1
  51. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js +2 -2
  52. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
  53. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  54. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js +3 -3
  55. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
  56. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  57. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js +2 -2
  58. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
  59. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  60. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js +2 -2
  61. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
  62. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  63. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js +4 -4
  64. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
  65. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  66. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page.js +2 -2
  67. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page.js.nft.json +1 -1
  68. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
  69. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js +2 -2
  70. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
  71. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  72. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/terminal/page.js +2 -2
  73. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/terminal/page.js.nft.json +1 -1
  74. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/terminal/page_client-reference-manifest.js +1 -1
  75. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page.js +2 -2
  76. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page.js.nft.json +1 -1
  77. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  78. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js +2 -2
  79. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
  80. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  81. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js +2 -2
  82. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
  83. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  84. package/cli/app/.next-cli-build/server/app/_global-error/page.js +3 -3
  85. package/cli/app/.next-cli-build/server/app/_global-error/page.js.nft.json +1 -1
  86. package/cli/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  87. package/cli/app/.next-cli-build/server/app/_global-error.html +1 -1
  88. package/cli/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  89. package/cli/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  90. package/cli/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  91. package/cli/app/.next-cli-build/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  92. package/cli/app/.next-cli-build/server/app/_global-error.segments/_head.segment.rsc +1 -1
  93. package/cli/app/.next-cli-build/server/app/_global-error.segments/_index.segment.rsc +1 -1
  94. package/cli/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  95. package/cli/app/.next-cli-build/server/app/_not-found/page.js +2 -2
  96. package/cli/app/.next-cli-build/server/app/_not-found/page.js.nft.json +1 -1
  97. package/cli/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  98. package/cli/app/.next-cli-build/server/app/_not-found.html +1 -1
  99. package/cli/app/.next-cli-build/server/app/_not-found.rsc +3 -3
  100. package/cli/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +3 -3
  101. package/cli/app/.next-cli-build/server/app/_not-found.segments/_head.segment.rsc +1 -1
  102. package/cli/app/.next-cli-build/server/app/_not-found.segments/_index.segment.rsc +3 -3
  103. package/cli/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  104. package/cli/app/.next-cli-build/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  105. package/cli/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  106. package/cli/app/.next-cli-build/server/app/api/auth/login/route.js +1 -1
  107. package/cli/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
  108. package/cli/app/.next-cli-build/server/app/api/auth/logout/route.js +1 -1
  109. package/cli/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
  110. package/cli/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js +1 -1
  111. package/cli/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
  112. package/cli/app/.next-cli-build/server/app/api/auth/oidc/start/route.js +1 -1
  113. package/cli/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
  114. package/cli/app/.next-cli-build/server/app/api/auth/oidc/test/route.js +1 -1
  115. package/cli/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
  116. package/cli/app/.next-cli-build/server/app/api/auth/status/route.js +1 -1
  117. package/cli/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
  118. package/cli/app/.next-cli-build/server/app/api/cache/stats/route.js +1 -1
  119. package/cli/app/.next-cli-build/server/app/api/cache/stats/route.js.nft.json +1 -1
  120. package/cli/app/.next-cli-build/server/app/api/changelog/route.js +1 -1
  121. package/cli/app/.next-cli-build/server/app/api/changelog/route.js.nft.json +1 -1
  122. package/cli/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js +2 -2
  123. package/cli/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
  124. package/cli/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js +1 -1
  125. package/cli/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  126. package/cli/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js +1 -1
  127. package/cli/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
  128. package/cli/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js +1 -1
  129. package/cli/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
  130. package/cli/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js +1 -1
  131. package/cli/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js.nft.json +1 -1
  132. package/cli/app/.next-cli-build/server/app/api/cli-tools/codex-gateway/accounts/route.js +1 -1
  133. package/cli/app/.next-cli-build/server/app/api/cli-tools/codex-gateway/accounts/route.js.nft.json +1 -1
  134. package/cli/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js +1 -1
  135. package/cli/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
  136. package/cli/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js +1 -1
  137. package/cli/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
  138. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js +1 -1
  139. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js.nft.json +1 -1
  140. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js +1 -1
  141. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js.nft.json +1 -1
  142. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js +1 -1
  143. package/cli/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
  144. package/cli/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js +2 -2
  145. package/cli/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js.nft.json +1 -1
  146. package/cli/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js +2 -2
  147. package/cli/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
  148. package/cli/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js +2 -2
  149. package/cli/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js.nft.json +1 -1
  150. package/cli/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js +2 -2
  151. package/cli/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js.nft.json +1 -1
  152. package/cli/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js +2 -2
  153. package/cli/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js.nft.json +1 -1
  154. package/cli/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
  155. package/cli/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
  156. package/cli/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js +2 -2
  157. package/cli/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js.nft.json +1 -1
  158. package/cli/app/.next-cli-build/server/app/api/combos/[id]/route.js +1 -1
  159. package/cli/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
  160. package/cli/app/.next-cli-build/server/app/api/combos/route.js +1 -1
  161. package/cli/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
  162. package/cli/app/.next-cli-build/server/app/api/context/[id]/route.js +1 -1
  163. package/cli/app/.next-cli-build/server/app/api/context/[id]/route.js.nft.json +1 -1
  164. package/cli/app/.next-cli-build/server/app/api/context/bulk/route.js +1 -1
  165. package/cli/app/.next-cli-build/server/app/api/context/bulk/route.js.nft.json +1 -1
  166. package/cli/app/.next-cli-build/server/app/api/context/route.js +1 -1
  167. package/cli/app/.next-cli-build/server/app/api/context/route.js.nft.json +1 -1
  168. package/cli/app/.next-cli-build/server/app/api/dashboard/chat/completions/route.js +1 -1
  169. package/cli/app/.next-cli-build/server/app/api/dashboard/chat/completions/route.js.nft.json +1 -1
  170. package/cli/app/.next-cli-build/server/app/api/dashboard/cli-tools/keys/route.js +1 -0
  171. package/cli/app/.next-cli-build/server/app/api/dashboard/cli-tools/keys/route.js.nft.json +1 -0
  172. package/cli/app/.next-cli-build/server/app/api/dashboard/cli-tools/keys/route_client-reference-manifest.js +1 -0
  173. package/cli/app/.next-cli-build/server/app/api/dashboard/media/[operation]/route.js +1 -0
  174. package/cli/app/.next-cli-build/server/app/api/dashboard/media/[operation]/route.js.nft.json +1 -0
  175. package/cli/app/.next-cli-build/server/app/api/dashboard/media/[operation]/route_client-reference-manifest.js +1 -0
  176. package/cli/app/.next-cli-build/server/app/api/headroom/extras/route.js +1 -1
  177. package/cli/app/.next-cli-build/server/app/api/headroom/extras/route.js.nft.json +1 -1
  178. package/cli/app/.next-cli-build/server/app/api/headroom/proxy/[...path]/route.js +1 -1
  179. package/cli/app/.next-cli-build/server/app/api/headroom/proxy/[...path]/route.js.nft.json +1 -1
  180. package/cli/app/.next-cli-build/server/app/api/headroom/restart/route.js +1 -1
  181. package/cli/app/.next-cli-build/server/app/api/headroom/restart/route.js.nft.json +1 -1
  182. package/cli/app/.next-cli-build/server/app/api/headroom/start/route.js +1 -1
  183. package/cli/app/.next-cli-build/server/app/api/headroom/start/route.js.nft.json +1 -1
  184. package/cli/app/.next-cli-build/server/app/api/headroom/status/route.js +1 -1
  185. package/cli/app/.next-cli-build/server/app/api/headroom/status/route.js.nft.json +1 -1
  186. package/cli/app/.next-cli-build/server/app/api/headroom/stop/route.js +1 -1
  187. package/cli/app/.next-cli-build/server/app/api/headroom/stop/route.js.nft.json +1 -1
  188. package/cli/app/.next-cli-build/server/app/api/health/ready/route.js +1 -1
  189. package/cli/app/.next-cli-build/server/app/api/health/ready/route.js.nft.json +1 -1
  190. package/cli/app/.next-cli-build/server/app/api/health/route.js +1 -1
  191. package/cli/app/.next-cli-build/server/app/api/health/route.js.nft.json +1 -1
  192. package/cli/app/.next-cli-build/server/app/api/init/route.js +1 -1
  193. package/cli/app/.next-cli-build/server/app/api/init/route.js.nft.json +1 -1
  194. package/cli/app/.next-cli-build/server/app/api/keys/[id]/rotate/route.js +1 -1
  195. package/cli/app/.next-cli-build/server/app/api/keys/[id]/rotate/route.js.nft.json +1 -1
  196. package/cli/app/.next-cli-build/server/app/api/keys/[id]/route.js +1 -1
  197. package/cli/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
  198. package/cli/app/.next-cli-build/server/app/api/keys/route.js +1 -1
  199. package/cli/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
  200. package/cli/app/.next-cli-build/server/app/api/locale/route.js +1 -1
  201. package/cli/app/.next-cli-build/server/app/api/locale/route.js.nft.json +1 -1
  202. package/cli/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js +1 -1
  203. package/cli/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
  204. package/cli/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js +1 -1
  205. package/cli/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
  206. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js +1 -1
  207. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
  208. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js +1 -1
  209. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
  210. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js +1 -1
  211. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
  212. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js +1 -1
  213. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
  214. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js +1 -1
  215. package/cli/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -1
  216. package/cli/app/.next-cli-build/server/app/api/metrics/route.js +2 -2
  217. package/cli/app/.next-cli-build/server/app/api/metrics/route.js.nft.json +1 -1
  218. package/cli/app/.next-cli-build/server/app/api/models/alias/route.js +1 -1
  219. package/cli/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
  220. package/cli/app/.next-cli-build/server/app/api/models/availability/route.js +1 -1
  221. package/cli/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
  222. package/cli/app/.next-cli-build/server/app/api/models/custom/route.js +1 -1
  223. package/cli/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
  224. package/cli/app/.next-cli-build/server/app/api/models/disabled/route.js +1 -1
  225. package/cli/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
  226. package/cli/app/.next-cli-build/server/app/api/models/route.js +1 -1
  227. package/cli/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
  228. package/cli/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
  229. package/cli/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
  230. package/cli/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js +1 -1
  231. package/cli/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  232. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/cancel/route.js +1 -1
  233. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  234. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/manual/[workerId]/route.js +1 -1
  235. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  236. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/route.js +1 -1
  237. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/route.js.nft.json +1 -1
  238. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/latest/route.js +1 -1
  239. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/latest/route.js.nft.json +1 -1
  240. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/route.js +1 -1
  241. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/route.js.nft.json +1 -1
  242. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/cancel/route.js +1 -1
  243. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  244. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/manual/[workerId]/route.js +1 -1
  245. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  246. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/route.js +1 -1
  247. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/route.js.nft.json +1 -1
  248. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/latest/route.js +1 -1
  249. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/latest/route.js.nft.json +1 -1
  250. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/route.js +1 -1
  251. package/cli/app/.next-cli-build/server/app/api/oauth/cloudflare-ai/bulk-import/route.js.nft.json +1 -1
  252. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/cancel/route.js +1 -1
  253. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  254. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/manual/[workerId]/route.js +1 -1
  255. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  256. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/route.js +1 -1
  257. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/route.js.nft.json +1 -1
  258. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/latest/route.js +1 -1
  259. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/latest/route.js.nft.json +1 -1
  260. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/route.js +1 -1
  261. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/route.js.nft.json +1 -1
  262. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-token/route.js +1 -1
  263. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-token/route.js.nft.json +1 -1
  264. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/quota-cookie/route.js +1 -1
  265. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/quota-cookie/route.js.nft.json +1 -1
  266. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/cancel/route.js +1 -1
  267. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  268. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/manual/[workerId]/route.js +1 -1
  269. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  270. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/route.js +1 -1
  271. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/route.js.nft.json +1 -1
  272. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/latest/route.js +1 -1
  273. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/latest/route.js.nft.json +1 -1
  274. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/route.js +1 -1
  275. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/route.js.nft.json +1 -1
  276. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-token/route.js +1 -1
  277. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-token/route.js.nft.json +1 -1
  278. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/quota-cookie/route.js +1 -1
  279. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/quota-cookie/route.js.nft.json +1 -1
  280. package/cli/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js +1 -1
  281. package/cli/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
  282. package/cli/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js +2 -2
  283. package/cli/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
  284. package/cli/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js +1 -1
  285. package/cli/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  286. package/cli/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js +1 -1
  287. package/cli/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
  288. package/cli/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js +1 -1
  289. package/cli/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
  290. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route.js +1 -1
  291. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -1
  292. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/cancel/route.js +1 -1
  293. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  294. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/manual/[workerId]/route.js +1 -1
  295. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  296. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/route.js +1 -1
  297. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/route.js.nft.json +1 -1
  298. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/latest/route.js +1 -1
  299. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/latest/route.js.nft.json +1 -1
  300. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/route.js +1 -1
  301. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/route.js.nft.json +1 -1
  302. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js +1 -1
  303. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  304. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js +1 -1
  305. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +1 -1
  306. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js +1 -1
  307. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  308. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/cancel/route.js +1 -1
  309. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  310. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/manual/[workerId]/route.js +1 -1
  311. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  312. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/route.js +1 -1
  313. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/route.js.nft.json +1 -1
  314. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/latest/route.js +1 -1
  315. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/latest/route.js.nft.json +1 -1
  316. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/route.js +1 -1
  317. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/route.js.nft.json +1 -1
  318. package/cli/app/.next-cli-build/server/app/api/pricing/route.js +1 -1
  319. package/cli/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
  320. package/cli/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js +1 -1
  321. package/cli/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  322. package/cli/app/.next-cli-build/server/app/api/provider-nodes/route.js +1 -1
  323. package/cli/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
  324. package/cli/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js +1 -1
  325. package/cli/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js.nft.json +1 -1
  326. package/cli/app/.next-cli-build/server/app/api/providers/[id]/models/route.js +1 -1
  327. package/cli/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  328. package/cli/app/.next-cli-build/server/app/api/providers/[id]/route.js +1 -1
  329. package/cli/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
  330. package/cli/app/.next-cli-build/server/app/api/providers/[id]/test/route.js +1 -1
  331. package/cli/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  332. package/cli/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
  333. package/cli/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  334. package/cli/app/.next-cli-build/server/app/api/providers/bulk-delete/route.js +1 -1
  335. package/cli/app/.next-cli-build/server/app/api/providers/bulk-delete/route.js.nft.json +1 -1
  336. package/cli/app/.next-cli-build/server/app/api/providers/client/route.js +1 -1
  337. package/cli/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
  338. package/cli/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js +1 -1
  339. package/cli/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js.nft.json +1 -1
  340. package/cli/app/.next-cli-build/server/app/api/providers/route.js +1 -1
  341. package/cli/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
  342. package/cli/app/.next-cli-build/server/app/api/providers/suggested-models/route.js +1 -1
  343. package/cli/app/.next-cli-build/server/app/api/providers/suggested-models/route.js.nft.json +1 -1
  344. package/cli/app/.next-cli-build/server/app/api/providers/test-batch/route.js +1 -1
  345. package/cli/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  346. package/cli/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
  347. package/cli/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
  348. package/cli/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js +1 -1
  349. package/cli/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
  350. package/cli/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js +1 -1
  351. package/cli/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
  352. package/cli/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js +2 -2
  353. package/cli/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
  354. package/cli/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js +2 -2
  355. package/cli/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
  356. package/cli/app/.next-cli-build/server/app/api/proxy-pools/route.js +1 -1
  357. package/cli/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
  358. package/cli/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js +2 -2
  359. package/cli/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
  360. package/cli/app/.next-cli-build/server/app/api/pxpipe/health/route.js +2 -2
  361. package/cli/app/.next-cli-build/server/app/api/pxpipe/health/route.js.nft.json +1 -1
  362. package/cli/app/.next-cli-build/server/app/api/pxpipe/install/route.js +2 -2
  363. package/cli/app/.next-cli-build/server/app/api/pxpipe/install/route.js.nft.json +1 -1
  364. package/cli/app/.next-cli-build/server/app/api/pxpipe/restart/route.js +2 -2
  365. package/cli/app/.next-cli-build/server/app/api/pxpipe/restart/route.js.nft.json +1 -1
  366. package/cli/app/.next-cli-build/server/app/api/pxpipe/start/route.js +2 -2
  367. package/cli/app/.next-cli-build/server/app/api/pxpipe/start/route.js.nft.json +1 -1
  368. package/cli/app/.next-cli-build/server/app/api/pxpipe/stats/route.js +2 -2
  369. package/cli/app/.next-cli-build/server/app/api/pxpipe/stats/route.js.nft.json +1 -1
  370. package/cli/app/.next-cli-build/server/app/api/pxpipe/status/route.js +2 -2
  371. package/cli/app/.next-cli-build/server/app/api/pxpipe/status/route.js.nft.json +1 -1
  372. package/cli/app/.next-cli-build/server/app/api/pxpipe/stop/route.js +2 -2
  373. package/cli/app/.next-cli-build/server/app/api/pxpipe/stop/route.js.nft.json +1 -1
  374. package/cli/app/.next-cli-build/server/app/api/settings/database/route.js +1 -1
  375. package/cli/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
  376. package/cli/app/.next-cli-build/server/app/api/settings/proxy-test/route.js +1 -1
  377. package/cli/app/.next-cli-build/server/app/api/settings/proxy-test/route.js.nft.json +1 -1
  378. package/cli/app/.next-cli-build/server/app/api/settings/require-login/route.js +1 -1
  379. package/cli/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
  380. package/cli/app/.next-cli-build/server/app/api/settings/route.js +1 -1
  381. package/cli/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
  382. package/cli/app/.next-cli-build/server/app/api/shutdown/route.js +1 -1
  383. package/cli/app/.next-cli-build/server/app/api/shutdown/route.js.nft.json +1 -1
  384. package/cli/app/.next-cli-build/server/app/api/tags/route.js +1 -1
  385. package/cli/app/.next-cli-build/server/app/api/tags/route.js.nft.json +1 -1
  386. package/cli/app/.next-cli-build/server/app/api/terminal/auth/setup/route.js +1 -1
  387. package/cli/app/.next-cli-build/server/app/api/terminal/auth/setup/route.js.nft.json +1 -1
  388. package/cli/app/.next-cli-build/server/app/api/terminal/auth/status/route.js +1 -1
  389. package/cli/app/.next-cli-build/server/app/api/terminal/auth/status/route.js.nft.json +1 -1
  390. package/cli/app/.next-cli-build/server/app/api/terminal/auth/unlock/route.js +1 -1
  391. package/cli/app/.next-cli-build/server/app/api/terminal/auth/unlock/route.js.nft.json +1 -1
  392. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/input/route.js +1 -1
  393. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/input/route.js.nft.json +1 -1
  394. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/resize/route.js +1 -1
  395. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/resize/route.js.nft.json +1 -1
  396. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/route.js +1 -1
  397. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/route.js.nft.json +1 -1
  398. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/stream/route.js +2 -2
  399. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/stream/route.js.nft.json +1 -1
  400. package/cli/app/.next-cli-build/server/app/api/terminal/session/route.js +1 -1
  401. package/cli/app/.next-cli-build/server/app/api/terminal/session/route.js.nft.json +1 -1
  402. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
  403. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/route.js.nft.json +1 -1
  404. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +2 -2
  405. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -1
  406. package/cli/app/.next-cli-build/server/app/api/translator/load/route.js +1 -1
  407. package/cli/app/.next-cli-build/server/app/api/translator/load/route.js.nft.json +1 -1
  408. package/cli/app/.next-cli-build/server/app/api/translator/save/route.js +1 -1
  409. package/cli/app/.next-cli-build/server/app/api/translator/save/route.js.nft.json +1 -1
  410. package/cli/app/.next-cli-build/server/app/api/translator/send/route.js +1 -1
  411. package/cli/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
  412. package/cli/app/.next-cli-build/server/app/api/translator/translate/route.js +1 -1
  413. package/cli/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
  414. package/cli/app/.next-cli-build/server/app/api/tunnel/disable/route.js +1 -1
  415. package/cli/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  416. package/cli/app/.next-cli-build/server/app/api/tunnel/enable/route.js +1 -1
  417. package/cli/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  418. package/cli/app/.next-cli-build/server/app/api/tunnel/status/route.js +1 -1
  419. package/cli/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
  420. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js +1 -1
  421. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
  422. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js +1 -1
  423. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
  424. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js +1 -1
  425. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
  426. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js +1 -1
  427. package/cli/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
  428. package/cli/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js +1 -1
  429. package/cli/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  430. package/cli/app/.next-cli-build/server/app/api/usage/aggregate/route.js +1 -1
  431. package/cli/app/.next-cli-build/server/app/api/usage/aggregate/route.js.nft.json +1 -1
  432. package/cli/app/.next-cli-build/server/app/api/usage/chart/route.js +1 -1
  433. package/cli/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
  434. package/cli/app/.next-cli-build/server/app/api/usage/history/route.js +1 -1
  435. package/cli/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
  436. package/cli/app/.next-cli-build/server/app/api/usage/providers/route.js +1 -1
  437. package/cli/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
  438. package/cli/app/.next-cli-build/server/app/api/usage/request-details/route.js +1 -1
  439. package/cli/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
  440. package/cli/app/.next-cli-build/server/app/api/usage/request-logs/route.js +1 -1
  441. package/cli/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  442. package/cli/app/.next-cli-build/server/app/api/usage/stats/route.js +1 -1
  443. package/cli/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
  444. package/cli/app/.next-cli-build/server/app/api/usage/stream/route.js +3 -5
  445. package/cli/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
  446. package/cli/app/.next-cli-build/server/app/api/v1/api/chat/route.js +1 -1
  447. package/cli/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  448. package/cli/app/.next-cli-build/server/app/api/v1/audio/speech/route.js +1 -1
  449. package/cli/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  450. package/cli/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js +1 -1
  451. package/cli/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  452. package/cli/app/.next-cli-build/server/app/api/v1/audio/voices/route.js +1 -1
  453. package/cli/app/.next-cli-build/server/app/api/v1/audio/voices/route.js.nft.json +1 -1
  454. package/cli/app/.next-cli-build/server/app/api/v1/chat/completions/route.js +1 -1
  455. package/cli/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  456. package/cli/app/.next-cli-build/server/app/api/v1/embeddings/route.js +1 -1
  457. package/cli/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  458. package/cli/app/.next-cli-build/server/app/api/v1/images/generations/route.js +1 -4
  459. package/cli/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  460. package/cli/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js +1 -1
  461. package/cli/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -1
  462. package/cli/app/.next-cli-build/server/app/api/v1/messages/route.js +1 -1
  463. package/cli/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
  464. package/cli/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js +1 -1
  465. package/cli/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
  466. package/cli/app/.next-cli-build/server/app/api/v1/models/info/route.js +1 -1
  467. package/cli/app/.next-cli-build/server/app/api/v1/models/info/route.js.nft.json +1 -1
  468. package/cli/app/.next-cli-build/server/app/api/v1/models/route.js +1 -1
  469. package/cli/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
  470. package/cli/app/.next-cli-build/server/app/api/v1/responses/compact/route.js +1 -1
  471. package/cli/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
  472. package/cli/app/.next-cli-build/server/app/api/v1/responses/route.js +1 -1
  473. package/cli/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
  474. package/cli/app/.next-cli-build/server/app/api/v1/route.js +1 -1
  475. package/cli/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
  476. package/cli/app/.next-cli-build/server/app/api/v1/search/route.js +1 -1
  477. package/cli/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
  478. package/cli/app/.next-cli-build/server/app/api/v1/web/fetch/route.js +1 -1
  479. package/cli/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
  480. package/cli/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js +1 -1
  481. package/cli/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  482. package/cli/app/.next-cli-build/server/app/api/v1beta/models/route.js +1 -1
  483. package/cli/app/.next-cli-build/server/app/api/v1beta/models/route.js.nft.json +1 -1
  484. package/cli/app/.next-cli-build/server/app/api/version/route.js +1 -1
  485. package/cli/app/.next-cli-build/server/app/api/version/route.js.nft.json +1 -1
  486. package/cli/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
  487. package/cli/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
  488. package/cli/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
  489. package/cli/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +1 -1
  490. package/cli/app/.next-cli-build/server/app/callback/page.js +2 -2
  491. package/cli/app/.next-cli-build/server/app/callback/page.js.nft.json +1 -1
  492. package/cli/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  493. package/cli/app/.next-cli-build/server/app/callback.html +1 -1
  494. package/cli/app/.next-cli-build/server/app/callback.rsc +3 -3
  495. package/cli/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +3 -3
  496. package/cli/app/.next-cli-build/server/app/callback.segments/_head.segment.rsc +1 -1
  497. package/cli/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +3 -3
  498. package/cli/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +1 -1
  499. package/cli/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  500. package/cli/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
  501. package/cli/app/.next-cli-build/server/app/dashboard/automation.html +1 -1
  502. package/cli/app/.next-cli-build/server/app/dashboard/automation.rsc +5 -5
  503. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation/__PAGE__.segment.rsc +2 -2
  504. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation.segment.rsc +1 -1
  505. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  506. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  507. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_full.segment.rsc +5 -5
  508. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_head.segment.rsc +1 -1
  509. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_index.segment.rsc +3 -3
  510. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_tree.segment.rsc +1 -1
  511. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
  512. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +5 -5
  513. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
  514. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
  515. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  516. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  517. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +5 -5
  518. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
  519. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_index.segment.rsc +3 -3
  520. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
  521. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
  522. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +5 -5
  523. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
  524. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
  525. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  526. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  527. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +5 -5
  528. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
  529. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_index.segment.rsc +3 -3
  530. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
  531. package/cli/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
  532. package/cli/app/.next-cli-build/server/app/dashboard/combos.rsc +5 -5
  533. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
  534. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
  535. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  536. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  537. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +5 -5
  538. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
  539. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_index.segment.rsc +3 -3
  540. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
  541. package/cli/app/.next-cli-build/server/app/dashboard/context.html +1 -1
  542. package/cli/app/.next-cli-build/server/app/dashboard/context.rsc +5 -5
  543. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard/context/__PAGE__.segment.rsc +2 -2
  544. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard/context.segment.rsc +1 -1
  545. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  546. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  547. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_full.segment.rsc +5 -5
  548. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_head.segment.rsc +1 -1
  549. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_index.segment.rsc +3 -3
  550. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_tree.segment.rsc +1 -1
  551. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
  552. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.rsc +5 -5
  553. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
  554. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
  555. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  556. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  557. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +5 -5
  558. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
  559. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_index.segment.rsc +3 -3
  560. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
  561. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
  562. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +5 -5
  563. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
  564. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
  565. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
  566. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  567. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  568. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +5 -5
  569. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
  570. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +3 -3
  571. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +1 -1
  572. package/cli/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
  573. package/cli/app/.next-cli-build/server/app/dashboard/mitm.rsc +5 -5
  574. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
  575. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
  576. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  577. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  578. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +5 -5
  579. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
  580. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_index.segment.rsc +3 -3
  581. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
  582. package/cli/app/.next-cli-build/server/app/dashboard/playground.html +1 -1
  583. package/cli/app/.next-cli-build/server/app/dashboard/playground.rsc +5 -5
  584. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard/playground/__PAGE__.segment.rsc +2 -2
  585. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard/playground.segment.rsc +1 -1
  586. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  587. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  588. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_full.segment.rsc +5 -5
  589. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_head.segment.rsc +1 -1
  590. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_index.segment.rsc +3 -3
  591. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_tree.segment.rsc +1 -1
  592. package/cli/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
  593. package/cli/app/.next-cli-build/server/app/dashboard/profile.rsc +5 -5
  594. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
  595. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
  596. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  597. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  598. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +5 -5
  599. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
  600. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_index.segment.rsc +3 -3
  601. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
  602. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
  603. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.rsc +5 -5
  604. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
  605. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
  606. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  607. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  608. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  609. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +5 -5
  610. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
  611. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_index.segment.rsc +3 -3
  612. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
  613. package/cli/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
  614. package/cli/app/.next-cli-build/server/app/dashboard/providers.rsc +5 -5
  615. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
  616. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  617. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  618. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  619. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +5 -5
  620. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
  621. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_index.segment.rsc +3 -3
  622. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
  623. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
  624. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +5 -5
  625. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
  626. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
  627. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  628. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  629. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +5 -5
  630. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
  631. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +3 -3
  632. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
  633. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.html +1 -1
  634. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.rsc +5 -5
  635. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +2 -2
  636. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe.segment.rsc +1 -1
  637. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  638. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  639. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_full.segment.rsc +5 -5
  640. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_head.segment.rsc +1 -1
  641. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_index.segment.rsc +3 -3
  642. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +1 -1
  643. package/cli/app/.next-cli-build/server/app/dashboard/quota.html +2 -2
  644. package/cli/app/.next-cli-build/server/app/dashboard/quota.rsc +6 -6
  645. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
  646. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
  647. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  648. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  649. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +6 -6
  650. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
  651. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_index.segment.rsc +3 -3
  652. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
  653. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js +2 -2
  654. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js.nft.json +1 -1
  655. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  656. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  657. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +3 -3
  658. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +3 -3
  659. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  660. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +3 -3
  661. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
  662. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  663. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  664. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  665. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  666. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
  667. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.rsc +5 -5
  668. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +2 -2
  669. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver.segment.rsc +1 -1
  670. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  671. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  672. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +5 -5
  673. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_head.segment.rsc +1 -1
  674. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_index.segment.rsc +3 -3
  675. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +1 -1
  676. package/cli/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
  677. package/cli/app/.next-cli-build/server/app/dashboard/translator.rsc +5 -5
  678. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
  679. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
  680. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  681. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  682. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +5 -5
  683. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
  684. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_index.segment.rsc +3 -3
  685. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
  686. package/cli/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
  687. package/cli/app/.next-cli-build/server/app/dashboard/usage.rsc +5 -5
  688. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
  689. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
  690. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  691. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  692. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +5 -5
  693. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
  694. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_index.segment.rsc +3 -3
  695. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
  696. package/cli/app/.next-cli-build/server/app/dashboard.html +1 -1
  697. package/cli/app/.next-cli-build/server/app/dashboard.rsc +5 -5
  698. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
  699. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  700. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  701. package/cli/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +5 -5
  702. package/cli/app/.next-cli-build/server/app/dashboard.segments/_head.segment.rsc +1 -1
  703. package/cli/app/.next-cli-build/server/app/dashboard.segments/_index.segment.rsc +3 -3
  704. package/cli/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +1 -1
  705. package/cli/app/.next-cli-build/server/app/index.html +1 -1
  706. package/cli/app/.next-cli-build/server/app/index.rsc +3 -3
  707. package/cli/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  708. package/cli/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +3 -3
  709. package/cli/app/.next-cli-build/server/app/index.segments/_head.segment.rsc +1 -1
  710. package/cli/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +3 -3
  711. package/cli/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +1 -1
  712. package/cli/app/.next-cli-build/server/app/landing/page.js +2 -2
  713. package/cli/app/.next-cli-build/server/app/landing/page.js.nft.json +1 -1
  714. package/cli/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  715. package/cli/app/.next-cli-build/server/app/landing.html +1 -1
  716. package/cli/app/.next-cli-build/server/app/landing.rsc +4 -4
  717. package/cli/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +4 -4
  718. package/cli/app/.next-cli-build/server/app/landing.segments/_head.segment.rsc +1 -1
  719. package/cli/app/.next-cli-build/server/app/landing.segments/_index.segment.rsc +3 -3
  720. package/cli/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +1 -1
  721. package/cli/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +2 -2
  722. package/cli/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
  723. package/cli/app/.next-cli-build/server/app/login/page.js +2 -2
  724. package/cli/app/.next-cli-build/server/app/login/page.js.nft.json +1 -1
  725. package/cli/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  726. package/cli/app/.next-cli-build/server/app/login.html +1 -1
  727. package/cli/app/.next-cli-build/server/app/login.rsc +4 -4
  728. package/cli/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +4 -4
  729. package/cli/app/.next-cli-build/server/app/login.segments/_head.segment.rsc +1 -1
  730. package/cli/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +3 -3
  731. package/cli/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +1 -1
  732. package/cli/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  733. package/cli/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
  734. package/cli/app/.next-cli-build/server/app/manifest.webmanifest/route.js +2 -2
  735. package/cli/app/.next-cli-build/server/app/manifest.webmanifest/route.js.nft.json +1 -1
  736. package/cli/app/.next-cli-build/server/app/page.js +2 -2
  737. package/cli/app/.next-cli-build/server/app/page.js.nft.json +1 -1
  738. package/cli/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  739. package/cli/app/.next-cli-build/server/app-paths-manifest.json +13 -11
  740. package/cli/app/.next-cli-build/server/chunks/1188.js +1 -1
  741. package/cli/app/.next-cli-build/server/chunks/2557.js +1 -0
  742. package/cli/app/.next-cli-build/server/chunks/2732.js +1 -1
  743. package/cli/app/.next-cli-build/server/chunks/3104.js +1 -1
  744. package/cli/app/.next-cli-build/server/chunks/3110.js +9 -8
  745. package/cli/app/.next-cli-build/server/chunks/3155.js +1 -1
  746. package/cli/app/.next-cli-build/server/chunks/318.js +11 -9
  747. package/cli/app/.next-cli-build/server/chunks/3579.js +1 -1
  748. package/cli/app/.next-cli-build/server/chunks/3593.js +1 -1
  749. package/cli/app/.next-cli-build/server/chunks/412.js +2 -2
  750. package/cli/app/.next-cli-build/server/chunks/4229.js +1 -1
  751. package/cli/app/.next-cli-build/server/chunks/4404.js +1 -1
  752. package/cli/app/.next-cli-build/server/chunks/4470.js +1 -1
  753. package/cli/app/.next-cli-build/server/chunks/4566.js +1 -1
  754. package/cli/app/.next-cli-build/server/chunks/4632.js +1 -1
  755. package/cli/app/.next-cli-build/server/chunks/4720.js +1 -1
  756. package/cli/app/.next-cli-build/server/chunks/4739.js +1 -1
  757. package/cli/app/.next-cli-build/server/chunks/4746.js +1 -1
  758. package/cli/app/.next-cli-build/server/chunks/4780.js +1 -1
  759. package/cli/app/.next-cli-build/server/chunks/507.js +1 -1
  760. package/cli/app/.next-cli-build/server/chunks/5236.js +1 -1
  761. package/cli/app/.next-cli-build/server/chunks/5258.js +1 -1
  762. package/cli/app/.next-cli-build/server/chunks/5307.js +1 -1
  763. package/cli/app/.next-cli-build/server/chunks/5436.js +4 -0
  764. package/cli/app/.next-cli-build/server/chunks/5949.js +3 -3
  765. package/cli/app/.next-cli-build/server/chunks/6036.js +1 -1
  766. package/cli/app/.next-cli-build/server/chunks/698.js +1 -1
  767. package/cli/app/.next-cli-build/server/chunks/7239.js +1 -1
  768. package/cli/app/.next-cli-build/server/chunks/7965.js +1 -1
  769. package/cli/app/.next-cli-build/server/chunks/8028.js +1 -0
  770. package/cli/app/.next-cli-build/server/chunks/8255.js +1 -1
  771. package/cli/app/.next-cli-build/server/chunks/8306.js +1 -1
  772. package/cli/app/.next-cli-build/server/chunks/8371.js +1 -1
  773. package/cli/app/.next-cli-build/server/chunks/8520.js +1 -1
  774. package/cli/app/.next-cli-build/server/chunks/877.js +24 -0
  775. package/cli/app/.next-cli-build/server/chunks/8895.js +7 -7
  776. package/cli/app/.next-cli-build/server/chunks/891.js +1 -1
  777. package/cli/app/.next-cli-build/server/chunks/9372.js +1 -1
  778. package/cli/app/.next-cli-build/server/chunks/9489.js +1 -1
  779. package/cli/app/.next-cli-build/server/chunks/9621.js +1 -1
  780. package/cli/app/.next-cli-build/server/functions-config-manifest.json +4 -0
  781. package/cli/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  782. package/cli/app/.next-cli-build/server/middleware.js +4 -4
  783. package/cli/app/.next-cli-build/server/pages/404.html +1 -1
  784. package/cli/app/.next-cli-build/server/pages/500.html +1 -1
  785. package/cli/app/.next-cli-build/static/SC3btW1lCuB9q-iyIwwWK/_buildManifest.js +1 -0
  786. package/cli/app/.next-cli-build/static/chunks/5497-f1e851d6feffa7c0.js +7 -0
  787. package/cli/app/.next-cli-build/static/chunks/{620-51d6fc84653a20a0.js → 620-a13f0f7b318585ab.js} +1 -1
  788. package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/cli-tools/[toolId]/page-da4bf4d40037f090.js +1 -0
  789. package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/cli-tools/{page-27b7575d0d2d59fa.js → page-19f56d717383fbf9.js} +1 -1
  790. package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page-59c81d5cf13456ba.js +59 -0
  791. package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/media-providers/combo/[id]/page-4c46f9cac4765fc5.js +4 -0
  792. package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/mitm/page-57c4b3a5e8b61f18.js +1 -0
  793. package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/profile/{page-ceb414eddc31fbfc.js → page-bdcc38dc8f8c5619.js} +1 -1
  794. package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-b4f4b88642bbe60d.js +3 -0
  795. package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/proxy-pools/page-16d3736170202fcd.js +4 -0
  796. package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/quota/page-3e2009fdd918191b.js +1 -0
  797. package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/usage/page-6062386d726c38dd.js +1 -0
  798. package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/{layout-59c5060c7f023ab8.js → layout-203b0a53f7406968.js} +1 -1
  799. package/cli/app/.next-cli-build/static/chunks/app/_global-error/page-f29633932d5ddd5a.js +1 -0
  800. package/cli/app/.next-cli-build/static/chunks/app/api/auth/login/route-f29633932d5ddd5a.js +1 -0
  801. package/cli/app/.next-cli-build/static/chunks/app/api/auth/logout/route-f29633932d5ddd5a.js +1 -0
  802. package/cli/app/.next-cli-build/static/chunks/app/api/auth/oidc/callback/route-f29633932d5ddd5a.js +1 -0
  803. package/cli/app/.next-cli-build/static/chunks/app/api/auth/oidc/start/route-f29633932d5ddd5a.js +1 -0
  804. package/cli/app/.next-cli-build/static/chunks/app/api/auth/oidc/test/route-f29633932d5ddd5a.js +1 -0
  805. package/cli/app/.next-cli-build/static/chunks/app/api/auth/status/route-f29633932d5ddd5a.js +1 -0
  806. package/cli/app/.next-cli-build/static/chunks/app/api/cache/stats/route-f29633932d5ddd5a.js +1 -0
  807. package/cli/app/.next-cli-build/static/chunks/app/api/changelog/route-f29633932d5ddd5a.js +1 -0
  808. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/all-statuses/route-f29633932d5ddd5a.js +1 -0
  809. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-f29633932d5ddd5a.js +1 -0
  810. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/route-f29633932d5ddd5a.js +1 -0
  811. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/claude-settings/route-f29633932d5ddd5a.js +1 -0
  812. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/cline-settings/route-f29633932d5ddd5a.js +1 -0
  813. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/codex-gateway/accounts/route-f29633932d5ddd5a.js +1 -0
  814. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/codex-settings/route-f29633932d5ddd5a.js +1 -0
  815. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/copilot-settings/route-f29633932d5ddd5a.js +1 -0
  816. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-f29633932d5ddd5a.js +1 -0
  817. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-f29633932d5ddd5a.js +1 -0
  818. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-settings/route-f29633932d5ddd5a.js +1 -0
  819. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/deepseek-tui-settings/route-f29633932d5ddd5a.js +1 -0
  820. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/droid-settings/route-f29633932d5ddd5a.js +1 -0
  821. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/hermes-settings/route-f29633932d5ddd5a.js +1 -0
  822. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/jcode-settings/route-f29633932d5ddd5a.js +1 -0
  823. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/kilo-settings/route-f29633932d5ddd5a.js +1 -0
  824. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/openclaw-settings/route-f29633932d5ddd5a.js +1 -0
  825. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/opencode-settings/route-f29633932d5ddd5a.js +1 -0
  826. package/cli/app/.next-cli-build/static/chunks/app/api/combos/[id]/route-f29633932d5ddd5a.js +1 -0
  827. package/cli/app/.next-cli-build/static/chunks/app/api/combos/route-f29633932d5ddd5a.js +1 -0
  828. package/cli/app/.next-cli-build/static/chunks/app/api/context/[id]/route-f29633932d5ddd5a.js +1 -0
  829. package/cli/app/.next-cli-build/static/chunks/app/api/context/bulk/route-f29633932d5ddd5a.js +1 -0
  830. package/cli/app/.next-cli-build/static/chunks/app/api/context/route-f29633932d5ddd5a.js +1 -0
  831. package/cli/app/.next-cli-build/static/chunks/app/api/dashboard/chat/completions/route-f29633932d5ddd5a.js +1 -0
  832. package/cli/app/.next-cli-build/static/chunks/app/api/dashboard/cli-tools/keys/route-f29633932d5ddd5a.js +1 -0
  833. package/cli/app/.next-cli-build/static/chunks/app/api/dashboard/media/[operation]/route-f29633932d5ddd5a.js +1 -0
  834. package/cli/app/.next-cli-build/static/chunks/app/api/headroom/extras/route-f29633932d5ddd5a.js +1 -0
  835. package/cli/app/.next-cli-build/static/chunks/app/api/headroom/proxy/[...path]/route-f29633932d5ddd5a.js +1 -0
  836. package/cli/app/.next-cli-build/static/chunks/app/api/headroom/restart/route-f29633932d5ddd5a.js +1 -0
  837. package/cli/app/.next-cli-build/static/chunks/app/api/headroom/start/route-f29633932d5ddd5a.js +1 -0
  838. package/cli/app/.next-cli-build/static/chunks/app/api/headroom/status/route-f29633932d5ddd5a.js +1 -0
  839. package/cli/app/.next-cli-build/static/chunks/app/api/headroom/stop/route-f29633932d5ddd5a.js +1 -0
  840. package/cli/app/.next-cli-build/static/chunks/app/api/health/ready/route-f29633932d5ddd5a.js +1 -0
  841. package/cli/app/.next-cli-build/static/chunks/app/api/health/route-f29633932d5ddd5a.js +1 -0
  842. package/cli/app/.next-cli-build/static/chunks/app/api/init/route-f29633932d5ddd5a.js +1 -0
  843. package/cli/app/.next-cli-build/static/chunks/app/api/keys/[id]/rotate/route-f29633932d5ddd5a.js +1 -0
  844. package/cli/app/.next-cli-build/static/chunks/app/api/keys/[id]/route-f29633932d5ddd5a.js +1 -0
  845. package/cli/app/.next-cli-build/static/chunks/app/api/keys/route-f29633932d5ddd5a.js +1 -0
  846. package/cli/app/.next-cli-build/static/chunks/app/api/locale/route-f29633932d5ddd5a.js +1 -0
  847. package/cli/app/.next-cli-build/static/chunks/app/api/mcp/[plugin]/message/route-f29633932d5ddd5a.js +1 -0
  848. package/cli/app/.next-cli-build/static/chunks/app/api/mcp/[plugin]/sse/route-f29633932d5ddd5a.js +1 -0
  849. package/cli/app/.next-cli-build/static/chunks/app/api/media-providers/tts/deepgram/voices/route-f29633932d5ddd5a.js +1 -0
  850. package/cli/app/.next-cli-build/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-f29633932d5ddd5a.js +1 -0
  851. package/cli/app/.next-cli-build/static/chunks/app/api/media-providers/tts/inworld/voices/route-f29633932d5ddd5a.js +1 -0
  852. package/cli/app/.next-cli-build/static/chunks/app/api/media-providers/tts/minimax/voices/route-f29633932d5ddd5a.js +1 -0
  853. package/cli/app/.next-cli-build/static/chunks/app/api/media-providers/tts/voices/route-f29633932d5ddd5a.js +1 -0
  854. package/cli/app/.next-cli-build/static/chunks/app/api/metrics/route-f29633932d5ddd5a.js +1 -0
  855. package/cli/app/.next-cli-build/static/chunks/app/api/models/alias/route-f29633932d5ddd5a.js +1 -0
  856. package/cli/app/.next-cli-build/static/chunks/app/api/models/availability/route-f29633932d5ddd5a.js +1 -0
  857. package/cli/app/.next-cli-build/static/chunks/app/api/models/custom/route-f29633932d5ddd5a.js +1 -0
  858. package/cli/app/.next-cli-build/static/chunks/app/api/models/disabled/route-f29633932d5ddd5a.js +1 -0
  859. package/cli/app/.next-cli-build/static/chunks/app/api/models/route-f29633932d5ddd5a.js +1 -0
  860. package/cli/app/.next-cli-build/static/chunks/app/api/models/test/route-f29633932d5ddd5a.js +1 -0
  861. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/[provider]/[action]/route-f29633932d5ddd5a.js +1 -0
  862. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/antigravity/bulk-import/[jobId]/cancel/route-f29633932d5ddd5a.js +1 -0
  863. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/antigravity/bulk-import/[jobId]/manual/[workerId]/route-f29633932d5ddd5a.js +1 -0
  864. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/antigravity/bulk-import/[jobId]/route-f29633932d5ddd5a.js +1 -0
  865. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/antigravity/bulk-import/latest/route-f29633932d5ddd5a.js +1 -0
  866. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/antigravity/bulk-import/route-f29633932d5ddd5a.js +1 -0
  867. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/cancel/route-f29633932d5ddd5a.js +1 -0
  868. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/manual/[workerId]/route-f29633932d5ddd5a.js +1 -0
  869. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/route-f29633932d5ddd5a.js +1 -0
  870. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/cloudflare-ai/bulk-import/latest/route-f29633932d5ddd5a.js +1 -0
  871. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/cloudflare-ai/bulk-import/route-f29633932d5ddd5a.js +1 -0
  872. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy/bulk-import/[jobId]/cancel/route-f29633932d5ddd5a.js +1 -0
  873. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy/bulk-import/[jobId]/manual/[workerId]/route-f29633932d5ddd5a.js +1 -0
  874. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy/bulk-import/[jobId]/route-f29633932d5ddd5a.js +1 -0
  875. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy/bulk-import/latest/route-f29633932d5ddd5a.js +1 -0
  876. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy/bulk-import/route-f29633932d5ddd5a.js +1 -0
  877. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy/bulk-token/route-f29633932d5ddd5a.js +1 -0
  878. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy/quota-cookie/route-f29633932d5ddd5a.js +1 -0
  879. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/cancel/route-f29633932d5ddd5a.js +1 -0
  880. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/manual/[workerId]/route-f29633932d5ddd5a.js +1 -0
  881. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/route-f29633932d5ddd5a.js +1 -0
  882. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy-cn/bulk-import/latest/route-f29633932d5ddd5a.js +1 -0
  883. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy-cn/bulk-import/route-f29633932d5ddd5a.js +1 -0
  884. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy-cn/bulk-token/route-f29633932d5ddd5a.js +1 -0
  885. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy-cn/quota-cookie/route-f29633932d5ddd5a.js +1 -0
  886. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codex/import-token/route-f29633932d5ddd5a.js +1 -0
  887. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/cursor/auto-import/route-f29633932d5ddd5a.js +1 -0
  888. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/cursor/import/route-f29633932d5ddd5a.js +1 -0
  889. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/gitlab/pat/route-f29633932d5ddd5a.js +1 -0
  890. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/iflow/cookie/route-f29633932d5ddd5a.js +1 -0
  891. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/kiro/auto-import/route-f29633932d5ddd5a.js +1 -0
  892. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/kiro/bulk-import/[jobId]/cancel/route-f29633932d5ddd5a.js +1 -0
  893. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/kiro/bulk-import/[jobId]/manual/[workerId]/route-f29633932d5ddd5a.js +1 -0
  894. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/kiro/bulk-import/[jobId]/route-f29633932d5ddd5a.js +1 -0
  895. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/kiro/bulk-import/latest/route-f29633932d5ddd5a.js +1 -0
  896. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/kiro/bulk-import/route-f29633932d5ddd5a.js +1 -0
  897. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/kiro/import/route-f29633932d5ddd5a.js +1 -0
  898. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/kiro/social-authorize/route-f29633932d5ddd5a.js +1 -0
  899. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/kiro/social-exchange/route-f29633932d5ddd5a.js +1 -0
  900. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/qoder/bulk-import/[jobId]/cancel/route-f29633932d5ddd5a.js +1 -0
  901. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/qoder/bulk-import/[jobId]/manual/[workerId]/route-f29633932d5ddd5a.js +1 -0
  902. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/qoder/bulk-import/[jobId]/route-f29633932d5ddd5a.js +1 -0
  903. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/qoder/bulk-import/latest/route-f29633932d5ddd5a.js +1 -0
  904. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/qoder/bulk-import/route-f29633932d5ddd5a.js +1 -0
  905. package/cli/app/.next-cli-build/static/chunks/app/api/pricing/route-f29633932d5ddd5a.js +1 -0
  906. package/cli/app/.next-cli-build/static/chunks/app/api/provider-nodes/[id]/route-f29633932d5ddd5a.js +1 -0
  907. package/cli/app/.next-cli-build/static/chunks/app/api/provider-nodes/route-f29633932d5ddd5a.js +1 -0
  908. package/cli/app/.next-cli-build/static/chunks/app/api/provider-nodes/validate/route-f29633932d5ddd5a.js +1 -0
  909. package/cli/app/.next-cli-build/static/chunks/app/api/providers/[id]/models/route-f29633932d5ddd5a.js +1 -0
  910. package/cli/app/.next-cli-build/static/chunks/app/api/providers/[id]/route-f29633932d5ddd5a.js +1 -0
  911. package/cli/app/.next-cli-build/static/chunks/app/api/providers/[id]/test/route-f29633932d5ddd5a.js +1 -0
  912. package/cli/app/.next-cli-build/static/chunks/app/api/providers/[id]/test-models/route-f29633932d5ddd5a.js +1 -0
  913. package/cli/app/.next-cli-build/static/chunks/app/api/providers/bulk-delete/route-f29633932d5ddd5a.js +1 -0
  914. package/cli/app/.next-cli-build/static/chunks/app/api/providers/client/route-f29633932d5ddd5a.js +1 -0
  915. package/cli/app/.next-cli-build/static/chunks/app/api/providers/kilo/free-models/route-f29633932d5ddd5a.js +1 -0
  916. package/cli/app/.next-cli-build/static/chunks/app/api/providers/route-f29633932d5ddd5a.js +1 -0
  917. package/cli/app/.next-cli-build/static/chunks/app/api/providers/suggested-models/route-f29633932d5ddd5a.js +1 -0
  918. package/cli/app/.next-cli-build/static/chunks/app/api/providers/test-batch/route-f29633932d5ddd5a.js +1 -0
  919. package/cli/app/.next-cli-build/static/chunks/app/api/providers/validate/route-f29633932d5ddd5a.js +1 -0
  920. package/cli/app/.next-cli-build/static/chunks/app/api/proxy-pools/[id]/route-f29633932d5ddd5a.js +1 -0
  921. package/cli/app/.next-cli-build/static/chunks/app/api/proxy-pools/[id]/test/route-f29633932d5ddd5a.js +1 -0
  922. package/cli/app/.next-cli-build/static/chunks/app/api/proxy-pools/cloudflare-deploy/route-f29633932d5ddd5a.js +1 -0
  923. package/cli/app/.next-cli-build/static/chunks/app/api/proxy-pools/deno-deploy/route-f29633932d5ddd5a.js +1 -0
  924. package/cli/app/.next-cli-build/static/chunks/app/api/proxy-pools/route-f29633932d5ddd5a.js +1 -0
  925. package/cli/app/.next-cli-build/static/chunks/app/api/proxy-pools/vercel-deploy/route-f29633932d5ddd5a.js +1 -0
  926. package/cli/app/.next-cli-build/static/chunks/app/api/pxpipe/health/route-f29633932d5ddd5a.js +1 -0
  927. package/cli/app/.next-cli-build/static/chunks/app/api/pxpipe/install/route-f29633932d5ddd5a.js +1 -0
  928. package/cli/app/.next-cli-build/static/chunks/app/api/pxpipe/restart/route-f29633932d5ddd5a.js +1 -0
  929. package/cli/app/.next-cli-build/static/chunks/app/api/pxpipe/start/route-f29633932d5ddd5a.js +1 -0
  930. package/cli/app/.next-cli-build/static/chunks/app/api/pxpipe/stats/route-f29633932d5ddd5a.js +1 -0
  931. package/cli/app/.next-cli-build/static/chunks/app/api/pxpipe/status/route-f29633932d5ddd5a.js +1 -0
  932. package/cli/app/.next-cli-build/static/chunks/app/api/pxpipe/stop/route-f29633932d5ddd5a.js +1 -0
  933. package/cli/app/.next-cli-build/static/chunks/app/api/settings/database/route-f29633932d5ddd5a.js +1 -0
  934. package/cli/app/.next-cli-build/static/chunks/app/api/settings/proxy-test/route-f29633932d5ddd5a.js +1 -0
  935. package/cli/app/.next-cli-build/static/chunks/app/api/settings/require-login/route-f29633932d5ddd5a.js +1 -0
  936. package/cli/app/.next-cli-build/static/chunks/app/api/settings/route-f29633932d5ddd5a.js +1 -0
  937. package/cli/app/.next-cli-build/static/chunks/app/api/shutdown/route-f29633932d5ddd5a.js +1 -0
  938. package/cli/app/.next-cli-build/static/chunks/app/api/tags/route-f29633932d5ddd5a.js +1 -0
  939. package/cli/app/.next-cli-build/static/chunks/app/api/terminal/auth/setup/route-f29633932d5ddd5a.js +1 -0
  940. package/cli/app/.next-cli-build/static/chunks/app/api/terminal/auth/status/route-f29633932d5ddd5a.js +1 -0
  941. package/cli/app/.next-cli-build/static/chunks/app/api/terminal/auth/unlock/route-f29633932d5ddd5a.js +1 -0
  942. package/cli/app/.next-cli-build/static/chunks/app/api/terminal/session/[id]/input/route-f29633932d5ddd5a.js +1 -0
  943. package/cli/app/.next-cli-build/static/chunks/app/api/terminal/session/[id]/resize/route-f29633932d5ddd5a.js +1 -0
  944. package/cli/app/.next-cli-build/static/chunks/app/api/terminal/session/[id]/route-f29633932d5ddd5a.js +1 -0
  945. package/cli/app/.next-cli-build/static/chunks/app/api/terminal/session/[id]/stream/route-f29633932d5ddd5a.js +1 -0
  946. package/cli/app/.next-cli-build/static/chunks/app/api/terminal/session/route-f29633932d5ddd5a.js +1 -0
  947. package/cli/app/.next-cli-build/static/chunks/app/api/translator/console-logs/route-f29633932d5ddd5a.js +1 -0
  948. package/cli/app/.next-cli-build/static/chunks/app/api/translator/console-logs/stream/route-f29633932d5ddd5a.js +1 -0
  949. package/cli/app/.next-cli-build/static/chunks/app/api/translator/load/route-f29633932d5ddd5a.js +1 -0
  950. package/cli/app/.next-cli-build/static/chunks/app/api/translator/save/route-f29633932d5ddd5a.js +1 -0
  951. package/cli/app/.next-cli-build/static/chunks/app/api/translator/send/route-f29633932d5ddd5a.js +1 -0
  952. package/cli/app/.next-cli-build/static/chunks/app/api/translator/translate/route-f29633932d5ddd5a.js +1 -0
  953. package/cli/app/.next-cli-build/static/chunks/app/api/tunnel/disable/route-f29633932d5ddd5a.js +1 -0
  954. package/cli/app/.next-cli-build/static/chunks/app/api/tunnel/enable/route-f29633932d5ddd5a.js +1 -0
  955. package/cli/app/.next-cli-build/static/chunks/app/api/tunnel/status/route-f29633932d5ddd5a.js +1 -0
  956. package/cli/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-check/route-f29633932d5ddd5a.js +1 -0
  957. package/cli/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-disable/route-f29633932d5ddd5a.js +1 -0
  958. package/cli/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-enable/route-f29633932d5ddd5a.js +1 -0
  959. package/cli/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-install/route-f29633932d5ddd5a.js +1 -0
  960. package/cli/app/.next-cli-build/static/chunks/app/api/usage/[connectionId]/route-f29633932d5ddd5a.js +1 -0
  961. package/cli/app/.next-cli-build/static/chunks/app/api/usage/aggregate/route-f29633932d5ddd5a.js +1 -0
  962. package/cli/app/.next-cli-build/static/chunks/app/api/usage/chart/route-f29633932d5ddd5a.js +1 -0
  963. package/cli/app/.next-cli-build/static/chunks/app/api/usage/history/route-f29633932d5ddd5a.js +1 -0
  964. package/cli/app/.next-cli-build/static/chunks/app/api/usage/providers/route-f29633932d5ddd5a.js +1 -0
  965. package/cli/app/.next-cli-build/static/chunks/app/api/usage/request-details/route-f29633932d5ddd5a.js +1 -0
  966. package/cli/app/.next-cli-build/static/chunks/app/api/usage/request-logs/route-f29633932d5ddd5a.js +1 -0
  967. package/cli/app/.next-cli-build/static/chunks/app/api/usage/stats/route-f29633932d5ddd5a.js +1 -0
  968. package/cli/app/.next-cli-build/static/chunks/app/api/usage/stream/route-f29633932d5ddd5a.js +1 -0
  969. package/cli/app/.next-cli-build/static/chunks/app/api/v1/api/chat/route-f29633932d5ddd5a.js +1 -0
  970. package/cli/app/.next-cli-build/static/chunks/app/api/v1/audio/speech/route-f29633932d5ddd5a.js +1 -0
  971. package/cli/app/.next-cli-build/static/chunks/app/api/v1/audio/transcriptions/route-f29633932d5ddd5a.js +1 -0
  972. package/cli/app/.next-cli-build/static/chunks/app/api/v1/audio/voices/route-f29633932d5ddd5a.js +1 -0
  973. package/cli/app/.next-cli-build/static/chunks/app/api/v1/chat/completions/route-f29633932d5ddd5a.js +1 -0
  974. package/cli/app/.next-cli-build/static/chunks/app/api/v1/embeddings/route-f29633932d5ddd5a.js +1 -0
  975. package/cli/app/.next-cli-build/static/chunks/app/api/v1/images/generations/route-f29633932d5ddd5a.js +1 -0
  976. package/cli/app/.next-cli-build/static/chunks/app/api/v1/messages/count_tokens/route-f29633932d5ddd5a.js +1 -0
  977. package/cli/app/.next-cli-build/static/chunks/app/api/v1/messages/route-f29633932d5ddd5a.js +1 -0
  978. package/cli/app/.next-cli-build/static/chunks/app/api/v1/models/[kind]/route-f29633932d5ddd5a.js +1 -0
  979. package/cli/app/.next-cli-build/static/chunks/app/api/v1/models/info/route-f29633932d5ddd5a.js +1 -0
  980. package/cli/app/.next-cli-build/static/chunks/app/api/v1/models/route-f29633932d5ddd5a.js +1 -0
  981. package/cli/app/.next-cli-build/static/chunks/app/api/v1/responses/compact/route-f29633932d5ddd5a.js +1 -0
  982. package/cli/app/.next-cli-build/static/chunks/app/api/v1/responses/route-f29633932d5ddd5a.js +1 -0
  983. package/cli/app/.next-cli-build/static/chunks/app/api/v1/route-f29633932d5ddd5a.js +1 -0
  984. package/cli/app/.next-cli-build/static/chunks/app/api/v1/search/route-f29633932d5ddd5a.js +1 -0
  985. package/cli/app/.next-cli-build/static/chunks/app/api/v1/web/fetch/route-f29633932d5ddd5a.js +1 -0
  986. package/cli/app/.next-cli-build/static/chunks/app/api/v1beta/models/[...path]/route-f29633932d5ddd5a.js +1 -0
  987. package/cli/app/.next-cli-build/static/chunks/app/api/v1beta/models/route-f29633932d5ddd5a.js +1 -0
  988. package/cli/app/.next-cli-build/static/chunks/app/api/version/route-f29633932d5ddd5a.js +1 -0
  989. package/cli/app/.next-cli-build/static/chunks/app/api/version/shutdown/route-f29633932d5ddd5a.js +1 -0
  990. package/cli/app/.next-cli-build/static/chunks/app/api/version/update/route-f29633932d5ddd5a.js +1 -0
  991. package/cli/app/.next-cli-build/static/chunks/app/manifest.webmanifest/route-f29633932d5ddd5a.js +1 -0
  992. package/cli/app/.next-cli-build/static/chunks/app/page-f29633932d5ddd5a.js +1 -0
  993. package/cli/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/app-error-f29633932d5ddd5a.js +1 -0
  994. package/cli/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/forbidden-f29633932d5ddd5a.js +1 -0
  995. package/cli/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/not-found-f29633932d5ddd5a.js +1 -0
  996. package/cli/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/unauthorized-f29633932d5ddd5a.js +1 -0
  997. package/cli/app/CHANGELOG.md +24 -0
  998. package/cli/app/package.json +5 -3
  999. package/cli/app/src/lib/db/adapters/betterSqliteAdapter.js +6 -3
  1000. package/cli/app/src/lib/db/adapters/bunSqliteAdapter.js +4 -2
  1001. package/cli/app/src/lib/db/adapters/nodeSqliteAdapter.js +4 -2
  1002. package/cli/app/src/lib/db/adapters/sqljsAdapter.js +84 -27
  1003. package/cli/app/src/lib/db/maintenance.js +6 -0
  1004. package/cli/package.json +1 -1
  1005. package/cli/src/cli/api/client.js +3 -1
  1006. package/open-sse/executors/github.js +7 -3
  1007. package/open-sse/executors/kiro.js +29 -0
  1008. package/open-sse/handlers/chatCore/nonStreamingHandler.js +40 -12
  1009. package/open-sse/handlers/chatCore/sseToJsonHandler.js +348 -53
  1010. package/open-sse/handlers/chatCore/streamingHandler.js +33 -11
  1011. package/open-sse/handlers/chatCore.js +21 -6
  1012. package/open-sse/handlers/responsesHandler.js +5 -70
  1013. package/open-sse/services/accountFallback.js +146 -18
  1014. package/open-sse/transformer/responsesTransformer.js +246 -176
  1015. package/open-sse/transformer/streamToJsonConverter.js +68 -24
  1016. package/open-sse/translator/helpers/claudeHelper.js +3 -2
  1017. package/open-sse/translator/helpers/imageHelper.js +72 -8
  1018. package/open-sse/translator/helpers/responsesApiHelper.js +100 -25
  1019. package/open-sse/translator/index.js +4 -1
  1020. package/open-sse/translator/request/antigravity-to-openai.js +40 -14
  1021. package/open-sse/translator/request/claude-to-openai.js +74 -28
  1022. package/open-sse/translator/request/openai-responses.js +84 -190
  1023. package/open-sse/translator/request/openai-to-claude.js +40 -14
  1024. package/open-sse/translator/request/openai-to-commandcode.js +11 -3
  1025. package/open-sse/translator/request/openai-to-cursor.js +18 -6
  1026. package/open-sse/translator/request/openai-to-gemini.js +7 -5
  1027. package/open-sse/translator/request/openai-to-kiro.js +15 -3
  1028. package/open-sse/translator/response/openai-responses.js +71 -37
  1029. package/open-sse/utils/responsesStreamHelpers.js +73 -16
  1030. package/open-sse/utils/stream.js +183 -73
  1031. package/open-sse/utils/streamHandler.js +18 -6
  1032. package/open-sse/utils/usageTracking.js +1 -1
  1033. package/package.json +5 -3
  1034. package/postcss.config.mjs +3 -1
  1035. package/src/app/(dashboard)/dashboard/cli-tools/CLIToolsPageClient.js +5 -1
  1036. package/src/app/(dashboard)/dashboard/cli-tools/[toolId]/ToolDetailClient.js +1 -1
  1037. package/src/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js +35 -41
  1038. package/src/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js +9 -9
  1039. package/src/app/(dashboard)/dashboard/mitm/MitmPageClient.js +1 -1
  1040. package/src/app/(dashboard)/dashboard/profile/page.js +3 -3
  1041. package/src/app/(dashboard)/dashboard/providers/[id]/ConnectionRow.js +3 -26
  1042. package/src/app/(dashboard)/dashboard/providers/[id]/page.js +29 -30
  1043. package/src/app/(dashboard)/dashboard/providers/components/ConnectionsCard.js +3 -16
  1044. package/src/app/(dashboard)/dashboard/proxy-pools/page.js +16 -4
  1045. package/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/index.js +23 -21
  1046. package/src/app/(dashboard)/dashboard/usage/components/RequestDetailsTab.js +25 -6
  1047. package/src/app/api/dashboard/cli-tools/keys/route.js +33 -0
  1048. package/src/app/api/dashboard/media/[operation]/route.js +60 -0
  1049. package/src/app/api/keys/[id]/route.js +62 -12
  1050. package/src/app/api/keys/route.js +20 -6
  1051. package/src/app/api/metrics/route.js +3 -2
  1052. package/src/app/api/providers/[id]/route.js +79 -17
  1053. package/src/app/api/providers/[id]/test/testUtils.js +11 -2
  1054. package/src/app/api/providers/client/route.js +33 -31
  1055. package/src/app/api/providers/route.js +87 -16
  1056. package/src/app/api/providers/suggested-models/route.js +1 -0
  1057. package/src/app/api/proxy-pools/[id]/route.js +16 -4
  1058. package/src/app/api/proxy-pools/[id]/test/route.js +4 -2
  1059. package/src/app/api/proxy-pools/route.js +23 -4
  1060. package/src/app/api/usage/aggregate/route.js +6 -0
  1061. package/src/app/api/usage/stream/route.js +106 -43
  1062. package/src/app/api/v1/responses/compact/route.js +21 -3
  1063. package/src/lib/db/adapters/betterSqliteAdapter.js +6 -3
  1064. package/src/lib/db/adapters/bunSqliteAdapter.js +4 -2
  1065. package/src/lib/db/adapters/nodeSqliteAdapter.js +4 -2
  1066. package/src/lib/db/adapters/sqljsAdapter.js +84 -27
  1067. package/src/lib/db/driver.js +27 -7
  1068. package/src/lib/db/maintenance.js +6 -0
  1069. package/src/lib/db/repos/requestDetailsRepo.js +35 -9
  1070. package/src/lib/db/repos/settingsRepo.js +2 -0
  1071. package/src/lib/db/repos/usageRepo.js +191 -52
  1072. package/src/lib/headroom/process.js +128 -61
  1073. package/src/lib/oauth/services/bulkImportBrowserEngine.js +141 -31
  1074. package/src/lib/oauth/services/codebuddyCnBulkImportManager.js +265 -55
  1075. package/src/lib/oauth/services/codebuddyCnPhoneAutomation.js +84 -24
  1076. package/src/lib/oauth/services/fiveSimClient.js +237 -40
  1077. package/src/lib/oauth/services/kiroBulkImportManager.js +178 -45
  1078. package/src/lib/providerConnectionSanitizer.js +180 -0
  1079. package/src/lib/responseCache.js +23 -13
  1080. package/src/lib/safeFetch.js +101 -4
  1081. package/src/lib/usage/quotaRefresh.js +51 -22
  1082. package/src/lib/usage/quotaService.js +54 -2
  1083. package/src/shared/components/BulkAccountAutomationModal.js +12 -16
  1084. package/src/shared/components/CodeBuddyCnPhoneRegisterModal.js +13 -15
  1085. package/src/shared/components/KiroAuthModal.js +23 -26
  1086. package/src/shared/components/Modal.js +4 -1
  1087. package/src/shared/components/UsageStats.js +4 -7
  1088. package/src/shared/hooks/useModelLockUntil.js +18 -0
  1089. package/src/shared/services/initializeApp.js +20 -3
  1090. package/src/shared/utils/asyncPolling.js +27 -0
  1091. package/src/shared/utils/connectionStatus.js +9 -3
  1092. package/src/shared/utils/dashboardMedia.js +19 -0
  1093. package/src/shared/utils/modelLockTimer.js +32 -0
  1094. package/src/shared/utils/usageStats.js +10 -0
  1095. package/src/sse/handlers/chat.js +12 -3
  1096. package/src/sse/handlers/streamFailure.js +34 -0
  1097. package/src/sse/services/auth.js +73 -33
  1098. package/cli/app/.next-cli-build/server/chunks/5024.js +0 -1
  1099. package/cli/app/.next-cli-build/server/chunks/601.js +0 -24
  1100. package/cli/app/.next-cli-build/static/chunks/5497-8d0ec2995dc0a392.js +0 -7
  1101. package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/cli-tools/[toolId]/page-f16310d2b403445e.js +0 -1
  1102. package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page-a35d16eda369d68e.js +0 -59
  1103. package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/media-providers/combo/[id]/page-e7989e6397c3cd28.js +0 -4
  1104. package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/mitm/page-81eaa9fe75830559.js +0 -1
  1105. package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-4f6f0b7c3b3da037.js +0 -3
  1106. package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/proxy-pools/page-9e3ac0e62a8bba94.js +0 -4
  1107. package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/quota/page-579bf915396efc69.js +0 -1
  1108. package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/usage/page-bc3ada97fab644b3.js +0 -1
  1109. package/cli/app/.next-cli-build/static/chunks/app/_global-error/page-915c9a5b78eafa55.js +0 -1
  1110. package/cli/app/.next-cli-build/static/chunks/app/api/auth/login/route-915c9a5b78eafa55.js +0 -1
  1111. package/cli/app/.next-cli-build/static/chunks/app/api/auth/logout/route-915c9a5b78eafa55.js +0 -1
  1112. package/cli/app/.next-cli-build/static/chunks/app/api/auth/oidc/callback/route-915c9a5b78eafa55.js +0 -1
  1113. package/cli/app/.next-cli-build/static/chunks/app/api/auth/oidc/start/route-915c9a5b78eafa55.js +0 -1
  1114. package/cli/app/.next-cli-build/static/chunks/app/api/auth/oidc/test/route-915c9a5b78eafa55.js +0 -1
  1115. package/cli/app/.next-cli-build/static/chunks/app/api/auth/status/route-915c9a5b78eafa55.js +0 -1
  1116. package/cli/app/.next-cli-build/static/chunks/app/api/cache/stats/route-915c9a5b78eafa55.js +0 -1
  1117. package/cli/app/.next-cli-build/static/chunks/app/api/changelog/route-915c9a5b78eafa55.js +0 -1
  1118. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/all-statuses/route-915c9a5b78eafa55.js +0 -1
  1119. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-915c9a5b78eafa55.js +0 -1
  1120. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/route-915c9a5b78eafa55.js +0 -1
  1121. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/claude-settings/route-915c9a5b78eafa55.js +0 -1
  1122. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/cline-settings/route-915c9a5b78eafa55.js +0 -1
  1123. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/codex-gateway/accounts/route-915c9a5b78eafa55.js +0 -1
  1124. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/codex-settings/route-915c9a5b78eafa55.js +0 -1
  1125. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/copilot-settings/route-915c9a5b78eafa55.js +0 -1
  1126. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-915c9a5b78eafa55.js +0 -1
  1127. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-915c9a5b78eafa55.js +0 -1
  1128. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-settings/route-915c9a5b78eafa55.js +0 -1
  1129. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/deepseek-tui-settings/route-915c9a5b78eafa55.js +0 -1
  1130. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/droid-settings/route-915c9a5b78eafa55.js +0 -1
  1131. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/hermes-settings/route-915c9a5b78eafa55.js +0 -1
  1132. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/jcode-settings/route-915c9a5b78eafa55.js +0 -1
  1133. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/kilo-settings/route-915c9a5b78eafa55.js +0 -1
  1134. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/openclaw-settings/route-915c9a5b78eafa55.js +0 -1
  1135. package/cli/app/.next-cli-build/static/chunks/app/api/cli-tools/opencode-settings/route-915c9a5b78eafa55.js +0 -1
  1136. package/cli/app/.next-cli-build/static/chunks/app/api/combos/[id]/route-915c9a5b78eafa55.js +0 -1
  1137. package/cli/app/.next-cli-build/static/chunks/app/api/combos/route-915c9a5b78eafa55.js +0 -1
  1138. package/cli/app/.next-cli-build/static/chunks/app/api/context/[id]/route-915c9a5b78eafa55.js +0 -1
  1139. package/cli/app/.next-cli-build/static/chunks/app/api/context/bulk/route-915c9a5b78eafa55.js +0 -1
  1140. package/cli/app/.next-cli-build/static/chunks/app/api/context/route-915c9a5b78eafa55.js +0 -1
  1141. package/cli/app/.next-cli-build/static/chunks/app/api/dashboard/chat/completions/route-915c9a5b78eafa55.js +0 -1
  1142. package/cli/app/.next-cli-build/static/chunks/app/api/headroom/extras/route-915c9a5b78eafa55.js +0 -1
  1143. package/cli/app/.next-cli-build/static/chunks/app/api/headroom/proxy/[...path]/route-915c9a5b78eafa55.js +0 -1
  1144. package/cli/app/.next-cli-build/static/chunks/app/api/headroom/restart/route-915c9a5b78eafa55.js +0 -1
  1145. package/cli/app/.next-cli-build/static/chunks/app/api/headroom/start/route-915c9a5b78eafa55.js +0 -1
  1146. package/cli/app/.next-cli-build/static/chunks/app/api/headroom/status/route-915c9a5b78eafa55.js +0 -1
  1147. package/cli/app/.next-cli-build/static/chunks/app/api/headroom/stop/route-915c9a5b78eafa55.js +0 -1
  1148. package/cli/app/.next-cli-build/static/chunks/app/api/health/ready/route-915c9a5b78eafa55.js +0 -1
  1149. package/cli/app/.next-cli-build/static/chunks/app/api/health/route-915c9a5b78eafa55.js +0 -1
  1150. package/cli/app/.next-cli-build/static/chunks/app/api/init/route-915c9a5b78eafa55.js +0 -1
  1151. package/cli/app/.next-cli-build/static/chunks/app/api/keys/[id]/rotate/route-915c9a5b78eafa55.js +0 -1
  1152. package/cli/app/.next-cli-build/static/chunks/app/api/keys/[id]/route-915c9a5b78eafa55.js +0 -1
  1153. package/cli/app/.next-cli-build/static/chunks/app/api/keys/route-915c9a5b78eafa55.js +0 -1
  1154. package/cli/app/.next-cli-build/static/chunks/app/api/locale/route-915c9a5b78eafa55.js +0 -1
  1155. package/cli/app/.next-cli-build/static/chunks/app/api/mcp/[plugin]/message/route-915c9a5b78eafa55.js +0 -1
  1156. package/cli/app/.next-cli-build/static/chunks/app/api/mcp/[plugin]/sse/route-915c9a5b78eafa55.js +0 -1
  1157. package/cli/app/.next-cli-build/static/chunks/app/api/media-providers/tts/deepgram/voices/route-915c9a5b78eafa55.js +0 -1
  1158. package/cli/app/.next-cli-build/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-915c9a5b78eafa55.js +0 -1
  1159. package/cli/app/.next-cli-build/static/chunks/app/api/media-providers/tts/inworld/voices/route-915c9a5b78eafa55.js +0 -1
  1160. package/cli/app/.next-cli-build/static/chunks/app/api/media-providers/tts/minimax/voices/route-915c9a5b78eafa55.js +0 -1
  1161. package/cli/app/.next-cli-build/static/chunks/app/api/media-providers/tts/voices/route-915c9a5b78eafa55.js +0 -1
  1162. package/cli/app/.next-cli-build/static/chunks/app/api/metrics/route-915c9a5b78eafa55.js +0 -1
  1163. package/cli/app/.next-cli-build/static/chunks/app/api/models/alias/route-915c9a5b78eafa55.js +0 -1
  1164. package/cli/app/.next-cli-build/static/chunks/app/api/models/availability/route-915c9a5b78eafa55.js +0 -1
  1165. package/cli/app/.next-cli-build/static/chunks/app/api/models/custom/route-915c9a5b78eafa55.js +0 -1
  1166. package/cli/app/.next-cli-build/static/chunks/app/api/models/disabled/route-915c9a5b78eafa55.js +0 -1
  1167. package/cli/app/.next-cli-build/static/chunks/app/api/models/route-915c9a5b78eafa55.js +0 -1
  1168. package/cli/app/.next-cli-build/static/chunks/app/api/models/test/route-915c9a5b78eafa55.js +0 -1
  1169. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/[provider]/[action]/route-915c9a5b78eafa55.js +0 -1
  1170. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/antigravity/bulk-import/[jobId]/cancel/route-915c9a5b78eafa55.js +0 -1
  1171. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/antigravity/bulk-import/[jobId]/manual/[workerId]/route-915c9a5b78eafa55.js +0 -1
  1172. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/antigravity/bulk-import/[jobId]/route-915c9a5b78eafa55.js +0 -1
  1173. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/antigravity/bulk-import/latest/route-915c9a5b78eafa55.js +0 -1
  1174. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/antigravity/bulk-import/route-915c9a5b78eafa55.js +0 -1
  1175. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/cancel/route-915c9a5b78eafa55.js +0 -1
  1176. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/manual/[workerId]/route-915c9a5b78eafa55.js +0 -1
  1177. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/cloudflare-ai/bulk-import/[jobId]/route-915c9a5b78eafa55.js +0 -1
  1178. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/cloudflare-ai/bulk-import/latest/route-915c9a5b78eafa55.js +0 -1
  1179. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/cloudflare-ai/bulk-import/route-915c9a5b78eafa55.js +0 -1
  1180. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy/bulk-import/[jobId]/cancel/route-915c9a5b78eafa55.js +0 -1
  1181. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy/bulk-import/[jobId]/manual/[workerId]/route-915c9a5b78eafa55.js +0 -1
  1182. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy/bulk-import/[jobId]/route-915c9a5b78eafa55.js +0 -1
  1183. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy/bulk-import/latest/route-915c9a5b78eafa55.js +0 -1
  1184. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy/bulk-import/route-915c9a5b78eafa55.js +0 -1
  1185. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy/bulk-token/route-915c9a5b78eafa55.js +0 -1
  1186. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy/quota-cookie/route-915c9a5b78eafa55.js +0 -1
  1187. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/cancel/route-915c9a5b78eafa55.js +0 -1
  1188. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/manual/[workerId]/route-915c9a5b78eafa55.js +0 -1
  1189. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/route-915c9a5b78eafa55.js +0 -1
  1190. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy-cn/bulk-import/latest/route-915c9a5b78eafa55.js +0 -1
  1191. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy-cn/bulk-import/route-915c9a5b78eafa55.js +0 -1
  1192. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy-cn/bulk-token/route-915c9a5b78eafa55.js +0 -1
  1193. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codebuddy-cn/quota-cookie/route-915c9a5b78eafa55.js +0 -1
  1194. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/codex/import-token/route-915c9a5b78eafa55.js +0 -1
  1195. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/cursor/auto-import/route-915c9a5b78eafa55.js +0 -1
  1196. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/cursor/import/route-915c9a5b78eafa55.js +0 -1
  1197. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/gitlab/pat/route-915c9a5b78eafa55.js +0 -1
  1198. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/iflow/cookie/route-915c9a5b78eafa55.js +0 -1
  1199. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/kiro/auto-import/route-915c9a5b78eafa55.js +0 -1
  1200. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/kiro/bulk-import/[jobId]/cancel/route-915c9a5b78eafa55.js +0 -1
  1201. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/kiro/bulk-import/[jobId]/manual/[workerId]/route-915c9a5b78eafa55.js +0 -1
  1202. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/kiro/bulk-import/[jobId]/route-915c9a5b78eafa55.js +0 -1
  1203. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/kiro/bulk-import/latest/route-915c9a5b78eafa55.js +0 -1
  1204. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/kiro/bulk-import/route-915c9a5b78eafa55.js +0 -1
  1205. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/kiro/import/route-915c9a5b78eafa55.js +0 -1
  1206. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/kiro/social-authorize/route-915c9a5b78eafa55.js +0 -1
  1207. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/kiro/social-exchange/route-915c9a5b78eafa55.js +0 -1
  1208. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/qoder/bulk-import/[jobId]/cancel/route-915c9a5b78eafa55.js +0 -1
  1209. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/qoder/bulk-import/[jobId]/manual/[workerId]/route-915c9a5b78eafa55.js +0 -1
  1210. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/qoder/bulk-import/[jobId]/route-915c9a5b78eafa55.js +0 -1
  1211. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/qoder/bulk-import/latest/route-915c9a5b78eafa55.js +0 -1
  1212. package/cli/app/.next-cli-build/static/chunks/app/api/oauth/qoder/bulk-import/route-915c9a5b78eafa55.js +0 -1
  1213. package/cli/app/.next-cli-build/static/chunks/app/api/pricing/route-915c9a5b78eafa55.js +0 -1
  1214. package/cli/app/.next-cli-build/static/chunks/app/api/provider-nodes/[id]/route-915c9a5b78eafa55.js +0 -1
  1215. package/cli/app/.next-cli-build/static/chunks/app/api/provider-nodes/route-915c9a5b78eafa55.js +0 -1
  1216. package/cli/app/.next-cli-build/static/chunks/app/api/provider-nodes/validate/route-915c9a5b78eafa55.js +0 -1
  1217. package/cli/app/.next-cli-build/static/chunks/app/api/providers/[id]/models/route-915c9a5b78eafa55.js +0 -1
  1218. package/cli/app/.next-cli-build/static/chunks/app/api/providers/[id]/route-915c9a5b78eafa55.js +0 -1
  1219. package/cli/app/.next-cli-build/static/chunks/app/api/providers/[id]/test/route-915c9a5b78eafa55.js +0 -1
  1220. package/cli/app/.next-cli-build/static/chunks/app/api/providers/[id]/test-models/route-915c9a5b78eafa55.js +0 -1
  1221. package/cli/app/.next-cli-build/static/chunks/app/api/providers/bulk-delete/route-915c9a5b78eafa55.js +0 -1
  1222. package/cli/app/.next-cli-build/static/chunks/app/api/providers/client/route-915c9a5b78eafa55.js +0 -1
  1223. package/cli/app/.next-cli-build/static/chunks/app/api/providers/kilo/free-models/route-915c9a5b78eafa55.js +0 -1
  1224. package/cli/app/.next-cli-build/static/chunks/app/api/providers/route-915c9a5b78eafa55.js +0 -1
  1225. package/cli/app/.next-cli-build/static/chunks/app/api/providers/suggested-models/route-915c9a5b78eafa55.js +0 -1
  1226. package/cli/app/.next-cli-build/static/chunks/app/api/providers/test-batch/route-915c9a5b78eafa55.js +0 -1
  1227. package/cli/app/.next-cli-build/static/chunks/app/api/providers/validate/route-915c9a5b78eafa55.js +0 -1
  1228. package/cli/app/.next-cli-build/static/chunks/app/api/proxy-pools/[id]/route-915c9a5b78eafa55.js +0 -1
  1229. package/cli/app/.next-cli-build/static/chunks/app/api/proxy-pools/[id]/test/route-915c9a5b78eafa55.js +0 -1
  1230. package/cli/app/.next-cli-build/static/chunks/app/api/proxy-pools/cloudflare-deploy/route-915c9a5b78eafa55.js +0 -1
  1231. package/cli/app/.next-cli-build/static/chunks/app/api/proxy-pools/deno-deploy/route-915c9a5b78eafa55.js +0 -1
  1232. package/cli/app/.next-cli-build/static/chunks/app/api/proxy-pools/route-915c9a5b78eafa55.js +0 -1
  1233. package/cli/app/.next-cli-build/static/chunks/app/api/proxy-pools/vercel-deploy/route-915c9a5b78eafa55.js +0 -1
  1234. package/cli/app/.next-cli-build/static/chunks/app/api/pxpipe/health/route-915c9a5b78eafa55.js +0 -1
  1235. package/cli/app/.next-cli-build/static/chunks/app/api/pxpipe/install/route-915c9a5b78eafa55.js +0 -1
  1236. package/cli/app/.next-cli-build/static/chunks/app/api/pxpipe/restart/route-915c9a5b78eafa55.js +0 -1
  1237. package/cli/app/.next-cli-build/static/chunks/app/api/pxpipe/start/route-915c9a5b78eafa55.js +0 -1
  1238. package/cli/app/.next-cli-build/static/chunks/app/api/pxpipe/stats/route-915c9a5b78eafa55.js +0 -1
  1239. package/cli/app/.next-cli-build/static/chunks/app/api/pxpipe/status/route-915c9a5b78eafa55.js +0 -1
  1240. package/cli/app/.next-cli-build/static/chunks/app/api/pxpipe/stop/route-915c9a5b78eafa55.js +0 -1
  1241. package/cli/app/.next-cli-build/static/chunks/app/api/settings/database/route-915c9a5b78eafa55.js +0 -1
  1242. package/cli/app/.next-cli-build/static/chunks/app/api/settings/proxy-test/route-915c9a5b78eafa55.js +0 -1
  1243. package/cli/app/.next-cli-build/static/chunks/app/api/settings/require-login/route-915c9a5b78eafa55.js +0 -1
  1244. package/cli/app/.next-cli-build/static/chunks/app/api/settings/route-915c9a5b78eafa55.js +0 -1
  1245. package/cli/app/.next-cli-build/static/chunks/app/api/shutdown/route-915c9a5b78eafa55.js +0 -1
  1246. package/cli/app/.next-cli-build/static/chunks/app/api/tags/route-915c9a5b78eafa55.js +0 -1
  1247. package/cli/app/.next-cli-build/static/chunks/app/api/terminal/auth/setup/route-915c9a5b78eafa55.js +0 -1
  1248. package/cli/app/.next-cli-build/static/chunks/app/api/terminal/auth/status/route-915c9a5b78eafa55.js +0 -1
  1249. package/cli/app/.next-cli-build/static/chunks/app/api/terminal/auth/unlock/route-915c9a5b78eafa55.js +0 -1
  1250. package/cli/app/.next-cli-build/static/chunks/app/api/terminal/session/[id]/input/route-915c9a5b78eafa55.js +0 -1
  1251. package/cli/app/.next-cli-build/static/chunks/app/api/terminal/session/[id]/resize/route-915c9a5b78eafa55.js +0 -1
  1252. package/cli/app/.next-cli-build/static/chunks/app/api/terminal/session/[id]/route-915c9a5b78eafa55.js +0 -1
  1253. package/cli/app/.next-cli-build/static/chunks/app/api/terminal/session/[id]/stream/route-915c9a5b78eafa55.js +0 -1
  1254. package/cli/app/.next-cli-build/static/chunks/app/api/terminal/session/route-915c9a5b78eafa55.js +0 -1
  1255. package/cli/app/.next-cli-build/static/chunks/app/api/translator/console-logs/route-915c9a5b78eafa55.js +0 -1
  1256. package/cli/app/.next-cli-build/static/chunks/app/api/translator/console-logs/stream/route-915c9a5b78eafa55.js +0 -1
  1257. package/cli/app/.next-cli-build/static/chunks/app/api/translator/load/route-915c9a5b78eafa55.js +0 -1
  1258. package/cli/app/.next-cli-build/static/chunks/app/api/translator/save/route-915c9a5b78eafa55.js +0 -1
  1259. package/cli/app/.next-cli-build/static/chunks/app/api/translator/send/route-915c9a5b78eafa55.js +0 -1
  1260. package/cli/app/.next-cli-build/static/chunks/app/api/translator/translate/route-915c9a5b78eafa55.js +0 -1
  1261. package/cli/app/.next-cli-build/static/chunks/app/api/tunnel/disable/route-915c9a5b78eafa55.js +0 -1
  1262. package/cli/app/.next-cli-build/static/chunks/app/api/tunnel/enable/route-915c9a5b78eafa55.js +0 -1
  1263. package/cli/app/.next-cli-build/static/chunks/app/api/tunnel/status/route-915c9a5b78eafa55.js +0 -1
  1264. package/cli/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-check/route-915c9a5b78eafa55.js +0 -1
  1265. package/cli/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-disable/route-915c9a5b78eafa55.js +0 -1
  1266. package/cli/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-enable/route-915c9a5b78eafa55.js +0 -1
  1267. package/cli/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-install/route-915c9a5b78eafa55.js +0 -1
  1268. package/cli/app/.next-cli-build/static/chunks/app/api/usage/[connectionId]/route-915c9a5b78eafa55.js +0 -1
  1269. package/cli/app/.next-cli-build/static/chunks/app/api/usage/aggregate/route-915c9a5b78eafa55.js +0 -1
  1270. package/cli/app/.next-cli-build/static/chunks/app/api/usage/chart/route-915c9a5b78eafa55.js +0 -1
  1271. package/cli/app/.next-cli-build/static/chunks/app/api/usage/history/route-915c9a5b78eafa55.js +0 -1
  1272. package/cli/app/.next-cli-build/static/chunks/app/api/usage/providers/route-915c9a5b78eafa55.js +0 -1
  1273. package/cli/app/.next-cli-build/static/chunks/app/api/usage/request-details/route-915c9a5b78eafa55.js +0 -1
  1274. package/cli/app/.next-cli-build/static/chunks/app/api/usage/request-logs/route-915c9a5b78eafa55.js +0 -1
  1275. package/cli/app/.next-cli-build/static/chunks/app/api/usage/stats/route-915c9a5b78eafa55.js +0 -1
  1276. package/cli/app/.next-cli-build/static/chunks/app/api/usage/stream/route-915c9a5b78eafa55.js +0 -1
  1277. package/cli/app/.next-cli-build/static/chunks/app/api/v1/api/chat/route-915c9a5b78eafa55.js +0 -1
  1278. package/cli/app/.next-cli-build/static/chunks/app/api/v1/audio/speech/route-915c9a5b78eafa55.js +0 -1
  1279. package/cli/app/.next-cli-build/static/chunks/app/api/v1/audio/transcriptions/route-915c9a5b78eafa55.js +0 -1
  1280. package/cli/app/.next-cli-build/static/chunks/app/api/v1/audio/voices/route-915c9a5b78eafa55.js +0 -1
  1281. package/cli/app/.next-cli-build/static/chunks/app/api/v1/chat/completions/route-915c9a5b78eafa55.js +0 -1
  1282. package/cli/app/.next-cli-build/static/chunks/app/api/v1/embeddings/route-915c9a5b78eafa55.js +0 -1
  1283. package/cli/app/.next-cli-build/static/chunks/app/api/v1/images/generations/route-915c9a5b78eafa55.js +0 -1
  1284. package/cli/app/.next-cli-build/static/chunks/app/api/v1/messages/count_tokens/route-915c9a5b78eafa55.js +0 -1
  1285. package/cli/app/.next-cli-build/static/chunks/app/api/v1/messages/route-915c9a5b78eafa55.js +0 -1
  1286. package/cli/app/.next-cli-build/static/chunks/app/api/v1/models/[kind]/route-915c9a5b78eafa55.js +0 -1
  1287. package/cli/app/.next-cli-build/static/chunks/app/api/v1/models/info/route-915c9a5b78eafa55.js +0 -1
  1288. package/cli/app/.next-cli-build/static/chunks/app/api/v1/models/route-915c9a5b78eafa55.js +0 -1
  1289. package/cli/app/.next-cli-build/static/chunks/app/api/v1/responses/compact/route-915c9a5b78eafa55.js +0 -1
  1290. package/cli/app/.next-cli-build/static/chunks/app/api/v1/responses/route-915c9a5b78eafa55.js +0 -1
  1291. package/cli/app/.next-cli-build/static/chunks/app/api/v1/route-915c9a5b78eafa55.js +0 -1
  1292. package/cli/app/.next-cli-build/static/chunks/app/api/v1/search/route-915c9a5b78eafa55.js +0 -1
  1293. package/cli/app/.next-cli-build/static/chunks/app/api/v1/web/fetch/route-915c9a5b78eafa55.js +0 -1
  1294. package/cli/app/.next-cli-build/static/chunks/app/api/v1beta/models/[...path]/route-915c9a5b78eafa55.js +0 -1
  1295. package/cli/app/.next-cli-build/static/chunks/app/api/v1beta/models/route-915c9a5b78eafa55.js +0 -1
  1296. package/cli/app/.next-cli-build/static/chunks/app/api/version/route-915c9a5b78eafa55.js +0 -1
  1297. package/cli/app/.next-cli-build/static/chunks/app/api/version/shutdown/route-915c9a5b78eafa55.js +0 -1
  1298. package/cli/app/.next-cli-build/static/chunks/app/api/version/update/route-915c9a5b78eafa55.js +0 -1
  1299. package/cli/app/.next-cli-build/static/chunks/app/manifest.webmanifest/route-915c9a5b78eafa55.js +0 -1
  1300. package/cli/app/.next-cli-build/static/chunks/app/page-915c9a5b78eafa55.js +0 -1
  1301. package/cli/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/app-error-915c9a5b78eafa55.js +0 -1
  1302. package/cli/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/forbidden-915c9a5b78eafa55.js +0 -1
  1303. package/cli/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/not-found-915c9a5b78eafa55.js +0 -1
  1304. package/cli/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/unauthorized-915c9a5b78eafa55.js +0 -1
  1305. package/cli/app/.next-cli-build/static/i-IN0_JUvDPX2TawfW0UV/_buildManifest.js +0 -1
  1306. /package/cli/app/.next-cli-build/static/{i-IN0_JUvDPX2TawfW0UV → SC3btW1lCuB9q-iyIwwWK}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- "use strict";exports.id=8371,exports.ids=[8371],exports.modules={48371:(a,b,c)=>{c.d(b,{xM:()=>_,t9:()=>ae,TK:()=>ad,cO:()=>e.cO,VU:()=>au});var d=c(55511),e=c(13868),f=c(71998),g=c(89718),h=c(20116),i=c(92990),j=c(39609);let k=globalThis.fetch,l=new Set(["a timeout","is cancelled","is complete","number banned, when number already used"]);class m extends Error{constructor(a,{status:b,body:c}={}){super(a),this.name="FiveSimError",this.status=b,this.body=c}}class n extends m{constructor(a){super(`5sim order ${a} timed out waiting for SMS`),this.name="FiveSimTimeoutError",this.orderId=a}}class o extends m{constructor(a,b){super(`5sim order ${a} cancelled: ${b}`),this.name="FiveSimCancelledError",this.orderId=a}}class p extends m{constructor(a){super(`5sim order ${a} number was already used (banned)`),this.name="FiveSimBannedError",this.orderId=a}}class q{constructor({apiKey:a,proxyOptions:b=null}={}){if(!a||"string"!=typeof a||!a.trim())throw new m("5sim API key is required");this.apiKey=a.trim(),this.proxyOptions=b}_headers(a={}){return{Authorization:`Bearer ${this.apiKey}`,Accept:"application/json",...a}}async _get(a,{headers:b,...c}={}){let d=`https://5sim.net/v1${a}`,e=this.proxyOptions?.enabled?j.proxyAwareFetch:k,f=await e(d,{method:"GET",headers:this._headers(b),...c},this.proxyOptions);if(!f.ok){let b=await f.text().catch(()=>"");throw new m(`5sim request to ${a} failed (HTTP ${f.status}): ${b.slice(0,200)}`,{status:f.status,body:b})}let g=await f.text();try{return JSON.parse(g)}catch{if(g&&!g.startsWith("{"))throw new m(`5sim ${a} returned non-JSON: ${g.slice(0,200)}`,{status:f.status,body:g});return null}}async buyNumber({country:a="hongkong",operator:b="any",product:c="codebuddy",allowProductFallback:d=!1}={}){let e="codebuddy"===c&&d?["codebuddy","other"]:[c],f=null;for(let c of e){let g=`/user/buy/activation/${encodeURIComponent(a)}/${encodeURIComponent(b)}/${encodeURIComponent(c)}`;try{let a=await this._get(g);if(!a||!a.id||!a.phone)throw new m(`5sim buyNumber returned unexpected shape: ${JSON.stringify(a).slice(0,200)}`,{body:a});return a}catch(g){f=g;let a=g?.status,b=String(g?.body||g?.message||"").toLowerCase();if(!(d&&"codebuddy"===c&&e.includes("other")&&(400===a||404===a||b.includes("no free")||b.includes("not enough")||b.includes("no product"))))throw g}}throw f||new m("5sim buyNumber failed for all product candidates")}async checkOrder(a){return this._get(`/user/check/${a}`)}async pollCode(a,{timeoutMs:b=9e5,intervalMs:c=6e3,signal:d}={}){let e=Math.max(5e3,c),f=Date.now()+b,g=0;for(;Date.now()<f;){let b;if(d?.aborted)throw new o(a,"aborted by caller");try{b=await this.checkOrder(a)}catch(a){if(a instanceof m&&a.status>=500){if(++g>5)throw a;await s(e);continue}throw a}if(g=0,Array.isArray(b.sms)&&b.sms.length>0){let a=r(b.sms[b.sms.length-1]);if(a)return a}if(b.status&&l.has(b.status)){if("a timeout"===b.status)throw new n(a);if("number banned, when number already used"===b.status)throw new p(a);if("is cancelled"===b.status)throw new o(a,b.status);if("is complete"===b.status){let c=function(a){if(!Array.isArray(a))return null;for(let b=a.length-1;b>=0;b--){let c=r(a[b]);if(c)return c}return null}(b.sms);if(c)return c;throw new m(`5sim order ${a} completed but no SMS code found`,{body:b})}}await s(e)}throw new n(a)}async finishOrder(a){try{return await this._get(`/user/finish/${a}`),!0}catch(b){return console.warn(`[5sim] finishOrder(${a}) failed (best-effort): ${b.message}`),!1}}async cancelOrder(a){try{return await this._get(`/user/cancel/${a}`),!0}catch(b){return console.warn(`[5sim] cancelOrder(${a}) failed (best-effort): ${b.message}`),!1}}async banOrder(a){try{return await this._get(`/user/ban/${a}`),!0}catch(b){return console.warn(`[5sim] banOrder(${a}) failed (best-effort): ${b.message}`),!1}}async getBalance(){try{let a=await this._get("/user/profile");return{balance:a?.balance??null,rating:a?.rating??null}}catch(a){return console.warn(`[5sim] getBalance failed: ${a.message}`),{balance:null,rating:null}}}}function r(a){return a?a.code&&/\d{4,8}/.test(String(a.code))?String(a.code).match(/\d{4,8}/)[0]:a.text?function(a){if(!a)return null;let b=String(a).match(/\b(\d{4,8})\b/);return b?b[1]:null}(a.text):null:null}function s(a){return new Promise(b=>setTimeout(b,a))}let t=["https://www.codebuddy.cn/login/","https://www.codebuddy.cn/login","https://www.codebuddy.cn/register/","https://copilot.tencent.com/login/"],u=["text=手机号","div:has-text('手机号')","span:has-text('手机号')","[class*='phone']:has-text('手机号')","div.kc-phone-tab:has-text('手机号')"],v=["text=手机号","text=其他登录方式","text=微信","#phone-iframe",".login-phone-box"],w=["button:has-text('同意')","text=同意并继续","text=同意"],x="#phone-iframe",y="#phoneNumber",z=".kc-country-option",A=".kc-country-code-text",B="#code",C=['iframe[src*="captcha"]','iframe[src*="tcaptcha"]',"#tcaptcha","#tcaptcha_transform",".nc_iconfont",".nc_wrapper",'[class*="captcha"]','[id*="captcha"]',"text=滑块","text=拖动"],D=['[class*="avatar"]','[class*="user-info"]','[class*="logout"]',"text=退出登录","text=Logout","text=Sign out"],E=["#input-error",".pf-c-form__helper-text.pf-m-error",".kc-feedback-text"],F=new Set(["login_risk_state"]),G=["账号访问受限","安全策略限制","访问受限","account restricted","access restricted"];function H(a=[]){return a.some(a=>F.has(a?.name))}function I(a="Tencent risk policy rejected the post-OTP session"){return{status:"failed_restricted",error:`Account restricted after OTP (${a}). Use a different residential CN/HK proxy with concurrency 1; do not retry this number on the same egress IP.`}}async function J({page:a,phone:b,resolvePhone:c,pollSmsPromise:d,waitForSms:e,onStep:f,phoneFormatter:g=a=>a,timeouts:h={},signal:i=null,isCancelled:j=null}){let k=h.nav??3e4,l=h.action??15e3,m=h.codeWait??9e5,n=h.postSubmit??1e4,o=(a,b)=>f?.(a,b),p=()=>{if(i?.aborted||"function"==typeof j&&j()){let a=Error("Job cancelled");throw a.code="JOB_CANCELLED",a}};try{var q;let f,h;o("cn_opening_login_page","Opening CodeBuddy CN login page"),p();try{a.setDefaultNavigationTimeout(k),a.setDefaultTimeout(l)}catch{}try{await a.context().route("**/*",a=>{var b,c;let d,e=a.request();return(b=e.url(),c=e.resourceType(),d=String(b||""),/googletagmanager|googleadservices|google-analytics|doubleclick|facebook|hotjar|clarity\.ms|hm\.baidu|google\.com\/rmkt/i.test(d)||"media"===c||"image"===c&&!/captcha|tcaptcha|challenge|verify|qrcode/i.test(d))?a.abort():a.continue()})}catch{}let i=null,j=[];for(let b=1;b<=2;b++){p();try{let c=t[(b-1)%t.length];o("cn_nav_attempt",`Navigation attempt ${b}/2 → ${c}`),b>1&&(await a.context().clearCookies().catch(()=>{}),await a.waitForTimeout(800)),await a.goto(c,{waitUntil:"commit",timeout:k}),p(),await a.waitForFunction(()=>"loading"!==document.readyState,{timeout:1e4}).catch(()=>{}),p();let d=await M(a,w,{timeout:6e3});d&&(await d.click().catch(()=>{}),o("cn_consent_dismissed","Privacy consent dialog dismissed (同意)"),await a.waitForTimeout(1e3));let e=await N(a,v,25e3);if(p(),!e){let b=await a.locator("body").innerText().catch(()=>""),d=await a.evaluate(()=>document.documentElement?.outerHTML?.length||0).catch(()=>0),e=a.url();o("cn_spa_not_ready",`SPA not ready after 25s (url=${e}, body=${String(b).slice(0,80)}, html=${d})`),!b&&d<200?(o("cn_proxy_empty_page","Empty page body — proxy may be blocking codebuddy.cn"),j.push({code:"proxy_empty",detail:`empty page via ${c} (html=${d})`})):j.push({code:"spa_timeout",detail:`SPA not ready url=${e} html=${d}`});continue}o("cn_spa_ready","Login SPA ready"),o("cn_selecting_phone_tab","Selecting phone-number tab");let f=await M(a,u,{timeout:12e3});if(f?(await f.click().catch(()=>{}),o("cn_phone_tab_selected","Phone tab selected"),await a.waitForTimeout(800)):o("cn_phone_tab_not_found","Phone tab not found — checking if iframe already present"),o("cn_waiting_for_iframe","Waiting for phone iframe to load"),await a.locator(x).waitFor({state:"attached",timeout:18e3}).catch(()=>{}),i=await K(a)){if(await i.waitForSelector(y,{state:"visible",timeout:15e3}).then(()=>!0).catch(()=>!1)){o("cn_iframe_ready","Phone iframe + #phoneNumber ready");break}o("cn_iframe_empty","Iframe found but #phoneNumber not visible yet"),j.push({code:"iframe_empty",detail:"phone iframe attached but #phoneNumber not visible"}),i=null}else o("cn_iframe_missing",`No #phone-iframe (attempt ${b}/2)`),j.push({code:"iframe_missing",detail:"SPA loaded but #phone-iframe never appeared"})}catch(e){if(e?.code==="JOB_CANCELLED")throw e;let a=String(e?.message||e||"");o("cn_nav_retry",`Navigation attempt ${b}/2 failed: ${a.slice(0,120)}`);let c=/timeout|exceeded|ETIMEDOUT|net::ERR/i.test(a),d=/ERR_PROXY|ERR_TUNNEL|ERR_CONNECTION|NS_ERROR_PROXY|proxy/i.test(a);j.push({code:d?"proxy_network":c?"nav_timeout":"nav_error",detail:a.slice(0,160)})}}if(!i)return{status:"failed",error:function(a=[],b=2){let c=a.map(a=>a.code),d=a[a.length-1],e="Fix: use a live residential CN proxy (proxyPoolMode=single), concurrency 1, then retry. 5sim is not charged until the form loads.";return c.includes("proxy_empty")||c.includes("proxy_network")?`CodeBuddy CN login page empty/blocked via proxy after ${b} attempts (${d?.detail||"proxy blackhole"}). ${e}`:c.includes("nav_timeout")?`CodeBuddy CN navigation timed out after ${b} attempts (${d?.detail||"goto timeout"}). Proxy is too slow or dead. ${e}`:c.includes("spa_timeout")?`CodeBuddy CN SPA did not boot after ${b} attempts (${d?.detail||"no login UI"}). Proxy/CDN may be filtering JS. ${e}`:c.includes("iframe_missing")||c.includes("iframe_empty")?`CodeBuddy CN page opened but phone form iframe never appeared after ${b} attempts (${d?.detail||"no #phone-iframe"}). Site layout change or half-loaded SPA — retry with another CN exit IP. ${e}`:c.includes("nav_error")&&d?.detail?`CodeBuddy CN phone form failed after ${b} attempts: ${d.detail}. ${e}`:`Could not load CodeBuddy CN phone form after ${b} attempts (${d?.code||"unknown"}: ${d?.detail||"proxy/SPA"}). ${e}`}(j,2)};await i.waitForSelector("#kc-form-login",{timeout:l}).catch(()=>{}),await i.waitForSelector(y,{state:"visible",timeout:l}).catch(()=>{});let r=b;if("function"==typeof c&&(o("cn_ordering_after_form","Login form ready — ordering 5sim number now (not before nav)"),r=await c()),!r)return{status:"failed",error:"No phone number available (resolvePhone/phone missing)"};let s=g(r),{countryCode:z,localNumber:A}=(q=s,(!(h=String(q).replace(/[\s\-()]/g,"")).startsWith("+")&&/^\d+$/.test(h)&&(h="+"+h),h.startsWith("+852"))?{countryCode:"+852",localNumber:h.slice(4)}:h.startsWith("+86")?{countryCode:"+86",localNumber:h.slice(3)}:h.startsWith("+1")?{countryCode:"+1",localNumber:h.slice(2)}:{countryCode:"",localNumber:h.replace(/^\+/,"")});o("cn_selecting_country",`Selecting country code ${z} for phone ${s}`),await L(i,z,l,o),o("cn_entering_phone",`Entering phone number: ${A}`);let C=i.locator(y).first();try{await C.waitFor({state:"visible",timeout:l})}catch{return{status:"failed",error:"Could not find the phone number input (#phoneNumber) inside the iframe"}}await O(C,A),o("cn_phone_entered",`Phone number entered: ${A}`);try{let b=a.locator(".t-checkbox").last();await b.isVisible({timeout:3e3}).catch(()=>!1)&&(await b.click().catch(()=>{}),o("cn_agreement_checked","Agreement checkbox checked"))}catch{}o("cn_clicking_send_code","Clicking send SMS code button");let D=i.locator("input.btn-lg.code-btn").first(),E=!1;try{await D.waitFor({state:"visible",timeout:5e3}),E=!0}catch{let a=i.locator(".code-btn").first();try{await a.waitFor({state:"visible",timeout:5e3}),E=!0}catch{E=!1}}if(!E)return{status:"failed",error:"Could not find the send-SMS-code button (.code-btn) inside the iframe"};await D.click().catch(()=>{}),o("cn_send_code_clicked","Send code button clicked"),await i.waitForSelector(B,{state:"visible",timeout:5e3}).catch(()=>{});let F=await W(i);if(F)return{status:"failed",error:`Form error after sending code: ${F}`};o("cn_waiting_for_sms","Waiting for SMS verification code from 5sim (timer starts now)");try{let a;if("function"==typeof e)a=Promise.resolve().then(()=>e());else if(d)a=d;else throw Error("No waitForSms/pollSmsPromise provided");let b=new Promise((a,b)=>setTimeout(()=>b(Error("Timed out waiting for SMS code")),m));f=await Promise.race([a,b])}catch(a){if(a&&"FiveSimTimeoutError"===a.name)throw a;return{status:"failed",error:`Failed to receive SMS code: ${a.message}`}}if(!f)return{status:"failed",error:"Received empty SMS code from 5sim"};o("cn_sms_received",`SMS code received: ${f}`),o("cn_entering_code","Entering SMS verification code");let G=i.locator(B).first();try{await G.waitFor({state:"visible",timeout:l})}catch{return{status:"failed",error:"Could not find the verification code input (#code) inside the iframe"}}await O(G,f),o("cn_code_entered","Verification code entered");let J=1200+Math.floor(1800*Math.random());o("cn_pre_submit_pause",`Waiting ${J}ms before submit (humanize)`),await a.waitForTimeout(J);let P=Math.max(n,12e3),Q=!1;for(let b=0;b<2;b++){o("cn_submitting",`Clicking submit button (attempt ${b+1}/2)`);let c=await K(a);if(!c){let b=await R(a,{timeoutMs:5e3,reportStep:o});if(b.ok)return o("cn_session_cookies",`Keycloak session after iframe detach (${b.cookie})`),{status:"success"};if(H(b.cookies))return o("cn_account_restricted","Tencent login_risk_state present after iframe detached"),I("login_risk_state cookie present");return{status:"failed",error:"Lost phone iframe after submit"}}if(await c.locator(y).first().isVisible({timeout:3e3}).catch(()=>!1)&&b>0){o("cn_re_entering_after_refresh",`Re-entering phone + code after refresh (retry ${b})`),await L(c,z,l,o);let d=c.locator(y).first();await O(d,A);try{let b=a.locator(".t-checkbox").first();await b.isVisible({timeout:2e3}).catch(()=>!1)&&await b.click().catch(()=>{})}catch{}let e=c.locator(B).first();await e.isVisible({timeout:3e3}).catch(()=>!1)&&await O(e,f),await a.waitForTimeout(800+Math.floor(700*Math.random()))}if(await S(c,l),o("cn_submitted",`Registration form submitted (attempt ${b+1})`),await a.waitForLoadState("domcontentloaded",{timeout:5e3}).catch(()=>{}),await a.waitForTimeout(1800),c=await K(a)||c,await V(a,c))return o("cn_account_restricted",`Account restricted after submit (attempt ${b+1}) — stopping automatic retries`),I("restriction message detected");if(o("cn_checking_captcha","Checking for captcha"),await X(a,c,3e3))return o("cn_captcha_detected","Captcha appeared during registration — manual assist needed"),{status:"needs_manual",error:"A captcha appeared during registration. Please complete it manually in the opened browser window.",captcha:!0};let d=await W(c);if(d)return{status:"failed",error:`Form error after submit: ${d}`};o("cn_waiting_session",`Waiting up to ${Math.round(P/1e3)}s for Keycloak session cookies`);let e=await R(a,{timeoutMs:P,reportStep:o,alsoCheckFrame:()=>K(a)});if(e.ok)return o("cn_session_cookies",`Keycloak session cookies present (${e.cookie}) — registration success`),{status:"success"};if("restricted"===e.reason)return o("cn_account_restricted","Restriction detected while waiting for Keycloak session"),I("restriction message detected during session handoff");if(await T(a)&&b<1){o("cn_submit_no_effect","Login form still visible after submit — retrying");continue}o("cn_session_nudge","No session yet — navigating to home to complete OIDC handoff"),await a.goto("https://www.codebuddy.cn/",{waitUntil:"domcontentloaded",timeout:k}).catch(()=>{}),await a.waitForTimeout(2e3);let g=await R(a,{timeoutMs:1e4,reportStep:o});if(g.ok)return o("cn_session_cookies",`Keycloak session after home nudge (${g.cookie})`),{status:"success"};if("restricted"===g.reason)return o("cn_account_restricted","Restriction detected after home handoff"),I("restriction message detected after OIDC handoff");if(H(g.cookies))return o("cn_account_restricted","Home handoff returned no authenticated session and login_risk_state is present"),I("login_risk_state persisted after OIDC handoff");Q=!0;break}if(!Q)return o("cn_submit_retries_exhausted","Account restricted after 2 retries — needs manual"),{status:"needs_manual",error:"Account restricted after 2 refresh retries. Please try with a different VPN/proxy or complete manually."};o("cn_confirming_success","Confirming registration success");let Z=await R(a,{timeoutMs:5e3});if(Z.ok)return o("cn_registration_success",`Phone registration completed (Keycloak session: ${Z.cookie})`),{status:"success"};if(H(Z.cookies))return o("cn_account_restricted","No authenticated session and Tencent login_risk_state is present — account restricted"),I("login_risk_state without an authenticated session");if(await Y(a,i,1e4))return o("cn_registration_success","Phone registration completed successfully (UI markers)"),{status:"success"};let $=await U(a);return o("cn_success_unconfirmed",`No Keycloak session after submit — ${$.summary}`),{status:"needs_manual",error:`Login submit finished but no Keycloak session yet (${$.summary}). Complete login in the headed browser or retry with a fresh China proxy.`}}catch(a){if(a&&"FiveSimTimeoutError"===a.name)throw a;return o("cn_automation_error",`Phone registration automation error: ${a.message}`),{status:"failed",error:a.message||"Unexpected error during phone registration"}}}async function K(a){try{await a.locator(x).waitFor({state:"attached",timeout:5e3});let b=await a.locator(x).elementHandle({timeout:2e3});if(b){let a=await b.contentFrame();if(a)return a}}catch{}for(let b of a.frames()){let a=b.url();if(a.includes("codebuddy.cn/auth/realms/copilot")||a.includes("protocol/openid-connect"))return b}return null}async function L(a,b,c,d){if(!b)return;let e=Math.min(Number(c)||15e3,1e4),f=async()=>{let c=a.locator(A).first(),f=String(await c.textContent({timeout:3e3}).catch(()=>"")).trim();if(f===b)return void d?.("cn_country_already_selected",`Country code already ${b}`);d?.("cn_opening_country_dropdown",`Opening country dropdown (current: ${f}, target: ${b})`);let g=a.locator(".kc-country-selector").first();for(let c of(await g.waitFor({state:"visible",timeout:Math.min(e,5e3)}),await g.click({timeout:3e3}).catch(()=>{}),await a.locator(z).first().waitFor({state:"visible",timeout:3e3}).catch(()=>{}),({"+852":["中国香港","香港","Hong Kong","+852"],"+86":["中国大陆","中国","China","+86"],"+853":["中国澳门","澳门","Macau","+853"],"+886":["中国台湾","台湾","Taiwan","+886"]})[b]||[b]))for(let e of[a.locator(`${z}:has-text("${c}")`).first(),a.getByText(c,{exact:!1}).first()]){if(!await e.isVisible({timeout:1500}).catch(()=>!1))continue;let f=await e.textContent({timeout:1500}).catch(()=>c);await e.click({timeout:2e3}).catch(()=>{}),await a.locator(A).filter({hasText:b}).first().waitFor({state:"visible",timeout:2e3}).catch(()=>{}),d?.("cn_country_selected",`Country selected: ${String(f||c).trim()}`);return}d?.("cn_country_not_found",`Country code ${b} not found in dropdown; using default`),await a.locator("body").click({timeout:1e3}).catch(()=>{})};try{await Promise.race([f(),new Promise((a,b)=>{let c=setTimeout(()=>b(Error(`selectCountry timed out after ${e}ms`)),e);"function"==typeof c.unref&&c.unref()})])}catch(a){d?.("cn_country_select_error",`Country selection error: ${a.message}`)}}async function M(a,b,{timeout:c=1e4}={}){for(let d of b)try{let b=a.locator(d).first();return await b.waitFor({state:"visible",timeout:Math.min(c,5e3)}),b}catch{}return null}async function N(a,b,c=15e3){let d=Date.now()+c;for(;Date.now()<d;){for(let c of b)try{let b=a.locator(c).first();if(await b.isVisible().catch(()=>!1))return!0}catch{}await new Promise(a=>setTimeout(a,250))}return!1}async function O(a,b){try{return await a.click(),await a.fill(""),await a.fill(b),!0}catch{try{return await a.click(),await a.press("Control+a"),await a.type(b,{delay:50}),!0}catch{return!1}}}let P=["KEYCLOAK_IDENTITY","KEYCLOAK_SESSION","KEYCLOAK_IDENTITY_LEGACY","KEYCLOAK_SESSION_LEGACY"];function Q(a=[]){for(let b of P)if(a.some(a=>a.name===b))return b;let b=a.find(a=>a.name.startsWith("KEYCLOAK_")&&!/locale|theme|restart/i.test(a.name));return b?.name||null}async function R(a,{timeoutMs:b=2e4,reportStep:c,alsoCheckFrame:d}={}){let e=Date.now()+b,f=0;for(;Date.now()<e;){let b=await a.context().cookies().catch(()=>[]),g=Q(b);if(g)return{ok:!0,cookie:g,cookies:b};try{let c=a.url();if(c&&!c.includes("/login")&&!c.includes("/auth/realms")){let a=b.find(a=>/^(access_token|cb_token|codebuddy)/i.test(a.name)||"token"===a.name&&a.domain?.includes("codebuddy"));if(a)return{ok:!0,cookie:a.name,cookies:b}}}catch{}let h=d?await d().catch(()=>null):null;if(await V(a,h))return{ok:!1,cookies:b,reason:"restricted"};if(h){let a=await W(h);if(a)return{ok:!1,cookies:b,reason:`form_error:${a}`}}if(c&&Date.now()-f>4e3){f=Date.now();let a=Math.max(0,Math.round((e-Date.now())/1e3));c("cn_waiting_session",`Still waiting for Keycloak session… ${a}s left`)}await a.waitForTimeout(500)}return{ok:!1,cookies:await a.context().cookies().catch(()=>[])}}async function S(a,b=15e3){let c=a.locator("#kc-login").first();try{await c.waitFor({state:"visible",timeout:b}),await c.click({timeout:5e3}).catch(()=>{})}catch{}try{await a.evaluate(()=>{let a=document.querySelector("#kc-form-login")||document.querySelector("form");if(a)if("function"==typeof a.requestSubmit){let b=a.querySelector("#kc-login")||a.querySelector('[type="submit"]');b?a.requestSubmit(b):a.requestSubmit()}else a.submit()})}catch{await a.locator(B).first().press("Enter").catch(()=>{})}}async function T(a){let b=await K(a);return!!b&&b.locator(y).first().isVisible({timeout:1500}).catch(()=>!1)}async function U(a){let b="";try{b=a.url()}catch{b="(unknown)"}let c=(await a.context().cookies().catch(()=>[])).map(a=>a.name).slice(0,20).join(",")||"(none)",d="";try{d=await a.evaluate(()=>(document.body?.innerText||"").replace(/\s+/g," ").trim().slice(0,120))}catch{d=""}let e=await K(a),f="no-iframe";if(e)try{f=(await e.url()).slice(0,80)}catch{f="iframe-detached"}return{summary:`url=${b.slice(0,60)} cookies=[${c}] frame=${f}${d?` text="${d}"`:""}`,url:b,cookieNames:c,bodySnippet:d}}async function V(a,b){for(let c of[b,a])if(c)try{let a=await c.evaluate(()=>document.body?.innerText||"");if(function(a){let b=String(a||"").toLowerCase();return G.some(a=>b.includes(a.toLowerCase()))}(a))return!0}catch{}return!1}async function W(a){for(let b of E)try{let c=a.locator(b).first();if(await c.isVisible({timeout:1500}).catch(()=>!1)){let a=await c.textContent().catch(()=>""),b=String(a).trim();if(b&&b.length>1)return b}}catch{}try{let b=await a.evaluate(()=>(document.body?.innerText||"").replace(/\s+/g," ").trim());for(let a of["验证码错误","验证码已过期","验证码无效","请输入正确的验证码","手机号格式","发送过于频繁","Invalid","incorrect"])if(b.includes(a)){let c=b.indexOf(a);return b.slice(Math.max(0,c-10),c+a.length+40).trim()}}catch{}return null}async function X(a,b,c=5e3){for(let b of C)try{let d=a.locator(b).first();if(await d.isVisible({timeout:Math.min(c,2e3)}).catch(()=>!1))return!0}catch{}if(b)for(let a of C)try{let d=b.locator(a).first();if(await d.isVisible({timeout:Math.min(c,2e3)}).catch(()=>!1))return!0}catch{}return!1}async function Y(a,b,c=15e3){let d=[];try{if(d=await a.context().cookies().catch(()=>[]),Q(d))return!0}catch{}if(H(d)||await T(a).catch(()=>!1))return!1;for(let b of D)try{let d=a.locator(b).first();if(await d.isVisible({timeout:Math.min(c,2e3)}).catch(()=>!1))return!0}catch{}try{let b=a.url(),c=new Set(d.map(a=>a.name));if(b&&!b.includes("/login")&&!b.includes("/auth/realms")&&(c.has("qcloud_uid")||c.has("qcmainCSRFToken"))&&!c.has("login_risk_state")&&!await T(a).catch(()=>!1))return!0}catch{}return!1}var Z=c(40891),$=c(75949);let _=200,aa=Number.parseInt(process.env.ZEVAI_CN_ACCOUNT_TIMEOUT_MS||"",10)||3e5,ab="CN_API_KEY_OUTCOME_UNKNOWN",ac="CN_ACCOUNT_RESTRICTED",ad=new Set(["hongkong","china","any"]),ae="hongkong";function af(a){return String(a||"").trim()}function ag(){try{let{totalMemGb:a}=(0,h.si)();return Number.isFinite(a)&&a>0&&a<3}catch{return!1}}async function ah(a,{timeoutMs:b=6e3}={}){let c=null;try{c=a?.request||null}catch{c=null}if(!c||"function"!=typeof c.get)return{ok:!1,ip:null,ips:[],samples:0,error:"context request unavailable"};let d=[],e=null;for(let a of $.PROXY_EGRESS_ECHO_URLS){d.push(a);let g=null;try{var f;if(g=await c.get(a,{timeout:b,failOnStatusCode:!1,headers:{Accept:"text/plain, application/json;q=0.9, */*;q=0.1","Cache-Control":"no-cache"}}),200>g.status()||g.status()>=300){e=`HTTP ${g.status()}`;continue}let h=(f=await g.text().catch(()=>""),(0,$.parseProxyEgressIp)(f));if(!h){e="exit-IP response was not recognized";continue}return{ok:!0,ip:h,ips:[h],samples:1,attempts:d.length,attemptedUrls:d,unstable:!1,error:null}}catch(a){e=a?.name==="TimeoutError"?`timed out after ${b}ms`:"request failed"}finally{"function"==typeof g?.dispose&&await Promise.resolve(g.dispose()).catch(()=>null)}}return{ok:!1,ip:null,ips:[],samples:0,attempts:d.length,attemptedUrls:d,unstable:!1,error:e||"all exit-IP services failed"}}function ai(a,b=null){if(a?.unstable)throw Object.assign(Error("Manual proxy rotated between exit IPs during preflight; no phone number was purchased"),{code:"CN_PROXY_EGRESS_UNSTABLE"});if(!a?.ok||!a?.ip)throw Object.assign(Error(`Manual proxy exit IP could not be verified (${a?.error||"no response"}); no phone number was purchased`),{code:"CN_PROXY_EGRESS_UNVERIFIED"});if(b&&a.ip!==b)throw Object.assign(Error("Manual proxy exit IP changed after CloakBrowser GeoIP alignment; no phone number was purchased"),{code:"CN_PROXY_EGRESS_CHANGED"});return a.ip}async function aj(a,{timeoutMs:b,message:c,code:d,onTimeout:e,onLateResolve:f}){let g=Promise.resolve(a),h=null,i=!1,j=new Promise((a,f)=>{"function"==typeof(h=setTimeout(()=>{i=!0;try{"function"==typeof e&&e()}catch{}f(Object.assign(Error(c),{code:d}))},b)).unref&&h.unref()});try{return await Promise.race([g,j])}finally{h&&clearTimeout(h),i&&"function"==typeof f&&g.then(f).catch(()=>null)}}function ak(a){let b=`${a?.text||""} ${a?.data?._raw||""} ${a?.url||""}`;return/<!doctype html|<html|login-pf|\/auth\/realms\//i.test(b)}function al(a,b=[]){let c=b instanceof Set?b:new Set(b),d=`${a?.text||""} ${a?.data?._raw||""}`;return!!/账号访问受限|安全策略限制|访问受限|account restricted|access restricted/i.test(d)||!!c.has("login_risk_state")&&(ak(a)||a?.status===0||a?.status===401||a?.status===403)}async function am({context:a,page:b,timeoutMs:c=1e4}){let d={Accept:"application/json, text/plain, */*","x-requested-with":"XMLHttpRequest","X-Domain":"www.codebuddy.cn","X-Product":"SaaS"},e=null;try{e=a?.request||null}catch{e=null}if(e&&"function"==typeof e.get)try{let a=await e.get("https://www.codebuddy.cn/console/accounts",{headers:d,timeout:c,failOnStatusCode:!1}),b=await a.text().catch(()=>"");return function(a,b,c={}){let d=String(b||""),e=null;try{e=d?JSON.parse(d):null}catch{e={_raw:d.slice(0,240),_notJson:!0}}return{status:Number(a)||0,data:e,text:d.slice(0,240),...c}}(a.status(),b,{source:"context-request",url:a.url(),contentType:a.headers()?.["content-type"]||""})}catch{}return aj(b.evaluate(async({requestTimeoutMs:a,requestHeaders:b})=>{let c=new AbortController,d=setTimeout(()=>c.abort(),a);try{let a=window.location.hostname||"www.codebuddy.cn",d="www.codebuddy.cn"===a?`${window.location.origin}`:"https://www.codebuddy.cn",e=await fetch(`${d}/console/accounts`,{credentials:"include",signal:c.signal,headers:b}),f=await e.text().catch(()=>""),g=null;try{g=f?JSON.parse(f):null}catch{g={_raw:String(f||"").slice(0,240),_notJson:!0}}return{status:e.status,data:g,text:String(f||"").slice(0,240),source:"page-fetch",url:e.url,contentType:e.headers.get("content-type")||""}}catch(a){return{status:0,timedOut:a?.name==="AbortError",error:a?.message||String(a),source:"page-fetch"}}finally{clearTimeout(d)}},{requestTimeoutMs:c,requestHeaders:d}),{timeoutMs:c,message:`Console account probe timed out after ${c/1e3}s`,code:"CN_CONSOLE_PROBE_TIMEOUT"}).catch(a=>({status:0,timedOut:a?.code==="CN_CONSOLE_PROBE_TIMEOUT",error:a?.message||String(a),source:"page-fetch"}))}async function an(a){if(!a||"function"!=typeof a.close)return!0;try{return await aj(Promise.resolve().then(()=>a.close()),{timeoutMs:5e3,message:"Browser resource close timed out after 5s",code:"CN_RESOURCE_CLOSE_TIMEOUT"}),!0}catch{return!1}}async function ao(a,b){if(await an(a)||!b?.browser)return;let c=b.browser;b.browser=null,await (0,$.forceCloseBrowser)(c).catch(()=>null)}async function ap(a){try{return await aj(Promise.resolve().then(a),{timeoutMs:12e3,message:"5sim order settlement timed out after 12s",code:"CN_FIVESIM_SETTLE_TIMEOUT"})}catch{return!1}}async function aq({apiKey:a,phone:b,region:d,fiveSimOrderId:e,account:f}){let{createProviderConnection:g}=await Promise.resolve().then(c.bind(c,71998)),h={provider:"codebuddy-cn",authType:"apikey",apiKey:a,accessToken:a,name:b||`5sim-${e}`,email:b||`5sim-${e}`,providerSpecificData:{domain:"www.codebuddy.cn",phoneNumber:b,fiveSimOrderId:e,region:d,automation:"5sim-phone-bulk"},testStatus:"active"};return{connection:await g(h)}}class ar extends e.Q6{constructor({browserLauncher:a,requestDeviceCodeFn:b=Z.cT,pollToken:d=Z.ZV,fetchLoginAccountFn:e=Z.w8,saveConnection:f=aq,fiveSimClientFactory:g=as,phoneAutomation:h=J,phoneFormatter:j=af,pollIntervalMs:k=i.ne.pollInterval,storageName:l="codebuddy-cn-bulk-import"}={}){super({browserLauncher:a||(async a=>{let{forceCloseBrowser:b,launchBulkImportBrowser:d}=await Promise.resolve().then(c.bind(c,75949)),e=Array.isArray(a?.proxyUrls)&&a.proxyUrls.length?a.proxyUrls[0]:null,f=process.env.ZEVAI_CN_HEADLESS,g=!1;return("0"===f||"false"===f)&&(g=!1),("1"===f||"true"===f)&&(g=!0),aj(d({engine:a?.engine||"cloakbrowser",proxyUrl:e,headless:g,windowSize:{width:1280,height:900},requireProxyGeoip:a?.proxyPoolMode==="manual"&&!!e}),{timeoutMs:9e4,message:"CloakBrowser launch timed out after 90s",code:"CN_BROWSER_LAUNCH_TIMEOUT",onLateResolve:a=>b(a)})}),storageName:l}),this.requestDeviceCode=b,this.pollToken=d,this.fetchLoginAccount=e,this.saveConnection=f,this.fiveSimClientFactory=g,this.phoneAutomation=h,this.phoneFormatter=j,this.pollIntervalMs=k}async startJob({count:a,concurrency:b,proxyPoolMode:c,proxyPoolId:g,manualProxyUrl:i,region:j}){let k=Number.parseInt(a,10);if(!Number.isFinite(k)||k<1)throw Object.assign(Error("At least one account is required (count >= 1)"),{error:"At least one account is required (count >= 1)"});if(k>_)throw Object.assign(Error(`Count exceeds maximum of ${_}`),{error:`Count exceeds maximum of ${_}`});let l=[...this.jobs.values()].find(a=>a&&("running"===a.status||"queued"===a.status||"needs_manual"===a.status)&&!a.cancelRequested);if(l)throw Object.assign(Error(`Another CodeBuddy CN job is still active (${l.jobId}). Cancel it or wait before starting again.`),{error:`Another CodeBuddy CN job is still active (${l.jobId}). Cancel it or wait before starting again.`});let m=ad.has(j)?j:ae,n=[],o="string"==typeof i?i.trim():"";if(o){if(!/^(https?|socks4|socks5):\/\/.+/i.test(o))throw Object.assign(Error("manualProxyUrl must be a valid proxy URL (http://, https://, socks4://, or socks5://)"),{error:"manualProxyUrl must be a valid proxy URL (http://, https://, socks4://, or socks5://)"});n=[o]}else if("all"===c)n=(await (0,f.ui)({isActive:!0})).map(a=>a.proxyUrl).filter(Boolean);else if("single"===c&&g){let a=await (0,f.hr)(g);a?.isActive&&a?.proxyUrl&&(n=[a.proxyUrl])}let p=(0,d.randomUUID)(),q=(0,e.kF)(),r={jobId:p,status:"running",concurrency:function(a,{manualProxy:b=!1}={}){return b?1:function(a){let b=ag()?1:8;if((0,h.uT)(a))return Math.min(b,Math.max(1,(0,h.q)()));let c=Number.parseInt(a,10);return Number.isFinite(c)?Math.min(b,Math.max(1,c)):Math.min(b,1)}(a)}(b,{manualProxy:!!o}),proxyPoolMode:o?"manual":c||"none",proxyUrls:n,region:m,createdAt:q,startedAt:q,finishedAt:null,error:null,cancelRequested:!1,browser:null,nextIndex:0,manualFollowups:new Set,persistPromise:Promise.resolve(),lastPreview:null,lastPreviewCapturedAt:0,accounts:Array.from({length:k},(a,b)=>({line:b+1,region:m,phone:null,fiveSimOrderId:null,fiveSimActivationId:null,fingerprintSeed:(0,d.randomUUID)(),proxyUrl:null,egressIp:null,proxyTimezone:null,proxyLocale:null,abortController:new AbortController,status:"queued",error:null,connectionId:null,workerId:null,manualSession:null,runtimeSession:null,currentStep:"queued",updatedAt:q,logs:[(0,e.hn)("queued","Queued and waiting for an available worker")]}))};return this.jobs.set(p,r),this.latestJobId=p,await this.persistJobSnapshot(r,{forcePreview:!1}),this.runJob(p),at(r)}getJob(a){let b=this.jobs.get(a);return b?at(b):null}async getJobWithPreview(a){let b=this.jobs.get(a);return b?(await this.persistJobSnapshot(b,{forcePreview:!1}),at(b,{preview:b.lastPreview||null})):null}async processAccount(a,b,c){if(a.cancelRequested||!a.browser)return void this.finalizeAccount(b,"cancelled",{error:"Job cancelled"});let d=null,f=null,h=!1,i=null,j=null;try{let c;this.setAccountStep(b,"reading_settings","Reading 5sim API key from settings"),await this.persistJobSnapshot(a,{forcePreview:!0});let k=(await (0,g.mt)()).fiveSimApiKey;if(!k||!k.trim()){this.finalizeAccount(b,"failed",{error:"5sim API key not configured. Set it in the automation modal or dashboard settings.",step:"failed",message:"5sim API key not configured"}),await this.persistJobSnapshot(a,{forcePreview:!0});return}d=this.fiveSimClientFactory({apiKey:k,proxyOptions:null}),this.setAccountStep(b,"creating_browser","Creating browser context (before 5sim order)"),await this.persistJobSnapshot(a,{forcePreview:!0});let l=(0,e.go)(a.browser,b.proxyUrl,{profile:"codebuddy-cn",region:a.region||"hongkong",fingerprintSeed:b.fingerprintSeed,lowMemory:ag(),nativeCloakProfile:"manual"===a.proxyPoolMode}),m=await aj(l,{timeoutMs:3e4,message:"Browser context creation timed out after 30s",code:"CN_CONTEXT_TIMEOUT",onLateResolve:a=>Promise.resolve(a?.context?.close?.()).catch(()=>null)});i=m.context;let n=m.page;if(b.runtimeSession={context:i,page:n},"manual"===a.proxyPoolMode&&b.proxyUrl){this.setAccountStep(b,"checking_proxy_egress","Verifying pasted proxy exit IP before opening the registration form"),await this.persistJobSnapshot(a,{forcePreview:!1});let c=(0,$.getCloakProxyProfile)(a.browser),d=await ah(i);b.egressIp=j=ai(d,c?.egressIp||null),b.proxyTimezone=c?.timezone||null,b.proxyLocale=c?.locale||null,this.setAccountStep(b,"proxy_egress_ready",`Manual proxy verified: ${j} (${d.samples} checks, ${b.proxyTimezone||"timezone unknown"}, ${b.proxyLocale||"locale unknown"})`),await this.persistJobSnapshot(a,{forcePreview:!1})}if(a.cancelRequested)throw Error("Job cancelled before ordering phone number");this.setAccountStep(b,"registering","Running phone registration on CodeBuddy CN"),await this.persistJobSnapshot(a,{forcePreview:!0});try{n.setDefaultTimeout(2e4),n.setDefaultNavigationTimeout(45e3)}catch{}let o=null,p=new Promise((a,b)=>{o=setTimeout(()=>{b(Object.assign(Error(`CodeBuddy CN account hard timeout after ${Math.round(aa/1e3)}s (browser will be force-closed)`),{code:"CN_ACCOUNT_HARD_TIMEOUT"}))},aa),"function"==typeof o.unref&&o.unref()});try{c=await Promise.race([this.phoneAutomation({page:n,signal:b.abortController?.signal,isCancelled:()=>!0===a.cancelRequested,resolvePhone:async()=>{if(a.cancelRequested)throw Error("Job cancelled before ordering phone number");if("manual"===a.proxyPoolMode&&b.proxyUrl){this.setAccountStep(b,"rechecking_proxy_egress","Registration form is ready — confirming the pasted proxy stayed sticky"),await this.persistJobSnapshot(a,{forcePreview:!1});let c=await ah(i);ai(c,j),this.setAccountStep(b,"proxy_egress_confirmed",`Manual proxy remained on ${j}; safe to purchase one phone number`),await this.persistJobSnapshot(a,{forcePreview:!1})}this.setAccountStep(b,"ordering_number",`Form ready — ordering ${a.region} phone from 5sim (single buy)`),await this.persistJobSnapshot(a,{forcePreview:!0});let c=await d.buyNumber({country:a.region,product:"codebuddy",allowProductFallback:!1});return f=c.id,b.phone=c.phone,b.fiveSimOrderId=c.id,b.fiveSimActivationId=c.id,this.setAccountStep(b,"number_ordered",`Phone number ordered: ${c.phone} (1 buy, no re-order)`),await this.persistJobSnapshot(a,{forcePreview:!0}),c.phone},waitForSms:async()=>{if(!f)throw Error("Cannot poll SMS — no 5sim order id");this.setAccountStep(b,"sms_poll_started","SMS poll started (full 90s window after send-code)"),await this.persistJobSnapshot(a,{forcePreview:!1});let c=await d.pollCode(f,{timeoutMs:9e4,signal:b.abortController?.signal});return h=!0,c},onStep:(c,d)=>{this.setAccountStep(b,c,d),this.persistJobSnapshot(a,{forcePreview:!1})},phoneFormatter:this.phoneFormatter}),p])}finally{o&&clearTimeout(o)}if(String(c.status||"").startsWith("failed")){let e=c.error||"Phone registration failed before submit",g=c.status||"failed";this.finalizeAccount(b,g,{error:e,step:g,message:e}),d&&f&&(h?await ap(()=>d.finishOrder(f)):await ap(()=>d.cancelOrder(f))),b.runtimeSession=null,await ao(i,a),await this.persistJobSnapshot(a,{forcePreview:!0});return}await this.captureApiKey(a,b,i,n,d,f);return}catch(g){let c=g instanceof n,e=c?"SMS OTP not received within 90s — number banned":g.message||"Unexpected CodeBuddy CN bulk import failure";if(this.finalizeAccount(b,"failed",{error:e,step:c?"sms_timeout":"failed",message:e}),d&&f&&(h?await ap(()=>d.finishOrder(f)):c?await ap(()=>d.banOrder(f)):await ap(()=>d.cancelOrder(f))),b.runtimeSession=null,await ao(i,a),(g?.code==="CN_ACCOUNT_HARD_TIMEOUT"||g?.code==="CN_CONTEXT_TIMEOUT"||a.cancelRequested)&&a.browser){let b=a.browser;a.browser=null,await (0,$.forceCloseBrowser)(b).catch(()=>null)}await this.persistJobSnapshot(a,{forcePreview:!0})}}async captureApiKey(a,b,c,d,e,f){let g="personal-edition-user-id",h=async(a,{timeout:b=12e3,interval:c=150}={})=>{let d=Date.now()+b;for(;Date.now()<d;){try{if(await a())return!0}catch{}await new Promise(a=>setTimeout(a,c))}return!1};try{this.setAccountStep(b,"waiting_session","Establishing CodeBuddy console session (probe APIs, not just cookies)"),await this.persistJobSnapshot(a,{forcePreview:!0});let i=async()=>{let a=await c.cookies().catch(()=>[]);return{cookies:a,names:new Set(a.map(a=>a.name)),list:a.map(a=>a.name)}},j=a=>a.has("KEYCLOAK_IDENTITY")||a.has("KEYCLOAK_SESSION")||a.has("KEYCLOAK_IDENTITY_LEGACY")||a.has("KEYCLOAK_SESSION_LEGACY"),k=a=>a.has("AUTH_SESSION_ID")||a.has("session")||a.has("qcloud_uid")||a.has("qcmainCSRFToken")||a.has("x_host_key_access"),l=()=>am({context:c,page:d}),m=a=>{let b=a?.data;if(!b||"object"!=typeof b)return[];for(let a of[b?.data?.accounts,b?.accounts,b?.data?.list,b?.list,b?.data?.result,b?.result,b?.data?.items,b?.items,Array.isArray(b?.data)?b.data:null,Array.isArray(b)?b:null])if(Array.isArray(a)&&a.length>0)return a;return[]},n=async(a=2500)=>{let b=!1,c=null;try{await Promise.race([d.waitForLoadState("domcontentloaded",{timeout:a}).catch(()=>null),h(async()=>{if(b)return!0;let a=await i();return j(a.names)},{timeout:a,interval:200}),new Promise(b=>{c=setTimeout(b,a)})])}finally{b=!0,c&&clearTimeout(c)}},o=async a=>{let b=Date.now();try{await d.goto(a,{waitUntil:"commit",timeout:18e3});let c=18e3-(Date.now()-b);return c>0&&await n(Math.min(2500,c)),!0}catch{return!1}},p=["https://www.codebuddy.cn/","https://www.codebuddy.cn/console","https://www.codebuddy.cn/console/","https://www.codebuddy.cn/profile","https://www.codebuddy.cn/profile/keys"],q=[],r=null,s=!1,t="",u=null,v=0;for(let c=0;c<6;c+=1){if(a.cancelRequested)throw Error("Job cancelled while establishing session");let e=await i(),f=j(e.names),g=k(e.names),h=p[Math.min(c,p.length-1)];c<3||c%2==0||!g?(this.setAccountStep(b,"waiting_session",`OIDC handoff ${c+1}/6 → ${h.replace("https://www.codebuddy.cn","")} (${f?"KEYCLOAK":g?"soft-session":"weak"})`),await this.persistJobSnapshot(a,{forcePreview:!1}),await o(h)):await new Promise(a=>setTimeout(a,300)),/^https:\/\/www\.codebuddy\.cn(?:[/:]|$)/i.test(d.url?.()||"")||await o("https://www.codebuddy.cn/console"),r=await l(),q=m(r),(r?.status>0||r?.text||r?.data)&&(u=r),t=JSON.stringify(r?.data??r?.text??r?.error??null).slice(0,180);let n=ak(r),w=await i();if(!j(w.names)&&al(r,w.names)?v+=1:v=0,v>=2)throw Object.assign(Error(`Tencent restricted the post-OTP session (${v} console probes returned login/risk evidence; source=${r?.source||"unknown"})`),{code:ac});if(r?.status===200&&!n&&Array.isArray(q)&&q.length>0){s=!0,this.setAccountStep(b,"session_ready",`Console session accepted (HTTP 200, ${q.length} account(s)${f?", KEYCLOAK ok":", soft session"})`),await this.persistJobSnapshot(a,{forcePreview:!0});break}if(g&&r?.status===200&&!n&&r?.data?._notJson!==!0&&Array.isArray(q)&&0===q.length&&c>=3){this.setAccountStep(b,"session_soft","Console HTTP 200 but 0 accounts — trying personal API key with soft session (cookies ok)"),await this.persistJobSnapshot(a,{forcePreview:!0}),s=!0;break}this.setAccountStep(b,"resolving_enterprise",`Console not ready (HTTP ${r?.status||0}, accounts=${q.length}${n?", login HTML":""}, source=${r?.source||"unknown"}) — ${c+1}/6 body=${t.slice(0,80)}`),await this.persistJobSnapshot(a,{forcePreview:!1})}if(!s){let a=await i(),b=u||r,c=al(b,a.names)||a.names.has("login_risk_state")&&v>0;throw Object.assign(Error(c?`Tencent restricted the post-OTP session (HTTP ${b?.status||0}; login_risk_state present; source=${b?.source||"unknown"})`:`Console accounts unavailable after login (HTTP ${b?.status||0}; cookies: ${a.list.slice(0,18).join(",")||"(none)"}; body=${t.slice(0,120)}; probeError=${r?.error||"none"}) — session not accepted for API key`),{code:c?ac:"CN_CONSOLE_SESSION_UNAVAILABLE"})}let w=g;if(Array.isArray(q)&&q.length>0){let a=q.find(a=>a?.lastLogin)||q[0];a?.type&&"personal"!==a.type&&a.enterpriseId?w=a.enterpriseId:a?.enterpriseId&&a?.type!=="personal"&&(w=a.enterpriseId)}this.setAccountStep(b,"creating_api_key",`Creating API key (enterprise=${w}, accounts=${q.length})`),await this.persistJobSnapshot(a,{forcePreview:!0});let x=`zevai-router-${b.workerId||"account"}-${Date.now()}`,y=async a=>d.evaluate(async({enterpriseId:a,keyName:b,timeoutMs:c})=>{let d=new AbortController,e=setTimeout(()=>d.abort(),c);try{let c=window.location.hostname||"www.codebuddy.cn",e="www.codebuddy.cn"===c?window.location.origin:"https://www.codebuddy.cn",f=await fetch(`${e}/console/api/client/v1/api-keys`,{method:"POST",credentials:"include",signal:d.signal,headers:{"Content-Type":"application/json",Accept:"application/json, text/plain, */*","x-requested-with":"XMLHttpRequest","X-Domain":"www.codebuddy.cn","X-Product":"SaaS"},body:JSON.stringify({name:b,expire_in_days:365,user_enterprise_id:a})}),g=await f.text().catch(()=>""),h=null;try{h=g?JSON.parse(g):null}catch{h={_raw:String(g||"").slice(0,200)}}return{ok:f.ok,status:f.status,data:h}}catch(a){return{ok:!1,status:0,outcomeUnknown:!0,timedOut:a?.name==="AbortError",error:a?.message||String(a)}}finally{clearTimeout(e)}},{enterpriseId:a,keyName:x,timeoutMs:6e4}),z=async(c,d)=>{let e,f=Date.now(),g=null,h=setInterval(()=>{if(g)return;let c=Math.max(5,Math.round((Date.now()-f)/1e3));this.setAccountStep(b,"creating_api_key",`${d} — waiting for CodeBuddy (${c}s)`),g=this.persistJobSnapshot(a,{forcePreview:!1}).catch(()=>null).finally(()=>{g=null})},5e3);"function"==typeof h.unref&&h.unref();try{e=await aj(y(c),{timeoutMs:6e4,message:"API key request timed out after 60s; creation outcome is unknown",code:ab})}catch(a){if(a?.code===ab)throw a;throw Object.assign(Error(`API key request lost its response; creation outcome is unknown: ${a?.message||String(a)}`),{code:ab})}finally{clearInterval(h),g&&await g.catch(()=>null)}if(e?.outcomeUnknown){let a=e.timedOut?"timed out after 60s":`lost its response (${e.error||"network error"})`;throw Object.assign(Error(`API key request ${a}; creation outcome is unknown`),{code:ab})}return e};if(!await o("https://www.codebuddy.cn/profile/keys"))throw Object.assign(Error("Keys page navigation timed out after 18s"),{code:"CN_CONSOLE_NAV_TIMEOUT"});let A=await z(w,"Creating API key");A?.status===400&&w!==g&&(this.setAccountStep(b,"retrying_api_key","Retrying with personal-edition enterprise id"),await this.persistJobSnapshot(a,{forcePreview:!1}),A=await z(g,"Retrying personal API key"));let B=a=>a?.ok===!1&&(401===a.status||403===a.status);for(let c=1;c<=2&&B(A);c+=1){for(let d of(this.setAccountStep(b,"retrying_api_key",`API key 401/403 — OIDC re-handoff round ${c}/2 (waiting strong session)`),await this.persistJobSnapshot(a,{forcePreview:!0}),["https://www.codebuddy.cn/","https://www.codebuddy.cn/console","https://www.codebuddy.cn/profile/keys"]))await o(d);await h(async()=>{let a=await i();return j(a.names)},{timeout:8e3*c,interval:300}).catch(()=>null),A=await z(g,`Retrying API key after OIDC handoff ${c}/2`)}let C=A?.data?.code;if(!A||!A.ok||!A.data||0!==C&&200!==C&&void 0!==C){let a="string"==typeof A?.data?._raw?A.data._raw.replace(/\s+/g," ").slice(0,120):null,b=a&&/openresty|nginx|Authorization Required/i.test(a)?" [edge proxy blocked — session half-baked]":"";throw Error(`API key creation failed (HTTP ${A?.status??"no-response"}, code=${C??"n/a"})${b}: ${JSON.stringify(A?.data??null).slice(0,200)}`)}let D=A.data?.data||A.data,E=D?.apiKey||D?.key||D?.token||D?.secret||D?.api_key||("string"==typeof D?D:null)||A.data.apiKey||A.data.key||A.data.token||A.data.secret;if(!E||"string"!=typeof E)throw Object.assign(Error(`API key response did not contain a key field; creation outcome is unknown: ${JSON.stringify(A.data).slice(0,300)}`),{code:ab});this.setAccountStep(b,"api_key_created","API key created successfully"),await this.persistJobSnapshot(a,{forcePreview:!0}),this.setAccountStep(b,"saving_connection","Saving CodeBuddy CN connection"),await this.persistJobSnapshot(a,{forcePreview:!0});let{connection:F}=await this.saveConnection({apiKey:E,phone:b.phone,region:b.region,fiveSimOrderId:f,account:b});await ap(()=>e.finishOrder(f)),this.finalizeAccount(b,"success",{connectionId:F.id,step:"connection_saved",message:`CodeBuddy CN connection saved (phone: ${b.phone})`}),b.runtimeSession=null,await ao(c,a),await this.persistJobSnapshot(a,{forcePreview:!0})}catch(j){let g=j?.code===ac,h=j?.code===ab;if(g){this.finalizeAccount(b,"failed_restricted",{error:`${j.message}. Use a different residential CN/HK proxy with concurrency 1.`,step:"failed_restricted",message:"Tencent restricted the post-OTP session; API-key capture was not attempted"}),await ap(()=>e.finishOrder(f)),b.runtimeSession=null,await ao(c,a),await this.persistJobSnapshot(a,{forcePreview:!0});return}let i=h?`${j.message}. Check the CodeBuddy keys page before creating another key.`:j.message;if(this.finalizeAccount(b,"needs_manual",{error:`Registration succeeded but API key capture failed: ${i}`,step:h?"api_key_outcome_unknown":"awaiting_manual",message:h?"Registration done; API key request outcome is unknown. Check existing keys before retrying.":`Registration done, API key capture failed: ${j.message}`}),await ap(()=>e.finishOrder(f)),await this.persistJobSnapshot(a,{forcePreview:!0}),h){b.runtimeSession=null,await ao(c,a);return}await this.runCnManualFollowup(a,b,b.workerId,c,d,e,f)}}async runCnManualFollowup(a,b,c,d,e,f,g){let h=(async()=>{let c=async()=>{let c=b.manualSession,e=c?.context||d,f=c?.headedBrowser||null;await ao(e,a),f&&await (0,$.forceCloseBrowser)(f).catch(()=>null)};try{this.setAccountStep(b,"manual_waiting","Waiting for operator to complete in headed browser"),await this.persistJobSnapshot(a,{forcePreview:!0});let c=ag()?18e4:48e4,d=Date.now()+c,f=null,h=`zevai-router-manual-${b.workerId||"account"}-${Date.now()}`;for(;Date.now()<d&&!a.cancelRequested;){await new Promise(a=>setTimeout(a,1e4));try{if(!e.url().includes("codebuddy.cn"))continue;let a=await aj(e.evaluate(async({keyName:a,timeoutMs:b})=>{let c=new AbortController,d=setTimeout(()=>c.abort(),b);try{let b=window.location.hostname||"www.codebuddy.cn",d="www.codebuddy.cn"===b?window.location.origin:"https://www.codebuddy.cn",e=await fetch(`${d}/console/api/client/v1/api-keys`,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json, text/plain, */*","x-requested-with":"XMLHttpRequest","X-Domain":"www.codebuddy.cn","X-Product":"SaaS"},credentials:"include",signal:c.signal,body:JSON.stringify({name:a,expire_in_days:365,user_enterprise_id:"personal-edition-user-id"})}),f=await e.json().catch(()=>null);return{ok:e.ok,status:e.status,data:f}}catch(a){return{ok:!1,status:0,outcomeUnknown:!0,error:a?.message||String(a)}}finally{clearTimeout(d)}},{keyName:h,timeoutMs:6e4}),{timeoutMs:6e4,message:"Manual API key request timed out; creation outcome is unknown",code:ab});if(a?.outcomeUnknown)throw Object.assign(Error(`Manual API key request lost its response; creation outcome is unknown: ${a.error||"network error"}`),{code:ab});if(a?.ok){let b=a.data?.data||a.data;if((f=b?.apiKey||b?.key||b?.token||b?.secret||b?.api_key||("string"==typeof b?b:null))&&"string"==typeof f)break;throw Object.assign(Error("Manual API key response was successful but did not contain the key; creation outcome is unknown"),{code:ab})}}catch(a){if(a?.code===ab)throw a}}if(a.cancelRequested){this.finalizeAccount(b,"cancelled",{error:"Job cancelled",step:"cancelled",message:"Job cancelled while waiting for manual completion"}),await this.persistJobSnapshot(a,{forcePreview:!0});return}if(!f)throw Error("Manual assist timed out — could not capture API key");this.setAccountStep(b,"saving_connection","Saving CodeBuddy CN connection (manual)"),await this.persistJobSnapshot(a,{forcePreview:!0});let{connection:i}=await this.saveConnection({apiKey:f,phone:b.phone,region:b.region,fiveSimOrderId:g,account:b});this.finalizeAccount(b,"success",{connectionId:i.id,step:"connection_saved",message:`CodeBuddy CN connection saved via manual assist (phone: ${b.phone||"N/A"})`}),await this.persistJobSnapshot(a,{forcePreview:!0})}catch(c){a.cancelRequested?this.finalizeAccount(b,"cancelled",{error:"Job cancelled",step:"cancelled",message:"Job cancelled while waiting for manual completion"}):c?.code===ab?this.finalizeAccount(b,"needs_manual",{error:`${c.message}. Check existing CodeBuddy keys before retrying.`,step:"api_key_outcome_unknown",message:"Manual API key request outcome is unknown; automatic retries stopped"}):this.finalizeAccount(b,"failed",{error:c.message||"Manual assist flow failed",step:"failed",message:c.message||"Manual assist flow failed"}),await this.persistJobSnapshot(a,{forcePreview:!0})}finally{await c(),b.manualSession=null,b.runtimeSession=null,a.manualFollowups.delete(h),await this.persistJobSnapshot(a,{forcePreview:!0})}})();a.manualFollowups.add(h)}async runWorker(a,b){if("manual"!==a.proxyPoolMode)return super.runWorker(a,b);for(;!a.cancelRequested;){let c=this.dequeueAccount(a,b);if(!c)return;if(!a.browser)try{a.browser=await this.browserLauncher({...a,proxyUrls:c.proxyUrl?[c.proxyUrl]:a.proxyUrls})}catch(b){this.finalizeAccount(c,"failed",{error:b?.message||"Manual proxy browser launch failed",step:"failed",message:b?.message||"Manual proxy browser launch failed"}),await this.persistJobSnapshot(a,{forcePreview:!0});continue}try{await this.processAccount(a,c,b)}catch(b){"running"===c.status&&(this.finalizeAccount(c,"failed",{error:b?.message||"Unexpected manual proxy worker failure",step:"failed",message:b?.message||"Unexpected manual proxy worker failure"}),await this.persistJobSnapshot(a,{forcePreview:!0}))}finally{if(a.manualFollowups.size>0&&await Promise.allSettled([...a.manualFollowups]),a.browser){let b=a.browser;a.browser=null,await (0,$.forceCloseBrowser)(b).catch(()=>null)}}}}cancelJob(a){let b=this.jobs.get(a);if(!b)return null;for(let a of(b.cancelRequested=!0,b.accounts)){a.abortController&&!a.abortController.signal.aborted&&a.abortController.abort();let b=a.runtimeSession?.context;b&&b.close().catch(()=>null),a.runtimeSession=null,a.manualSession=null}if(b.browser){let a=b.browser;b.browser=null,(0,$.forceCloseBrowser)(a).catch(()=>null)}return"queued"===b.status&&(b.status="cancelled",b.finishedAt=(0,e.kF)(),b.accounts.forEach(a=>{"queued"===a.status&&(a.status="cancelled")})),this.persistJobSnapshot(b,{forcePreview:!0}),at(b)}}function as({apiKey:a,proxyOptions:b}){return new q({apiKey:a,proxyOptions:b})}function at(a,b={}){return a?{jobId:a.jobId,status:a.status,summary:function(a=[]){let b={total:a.length,queued:0,running:0,completed:0,success:0,failed:0,needs_manual:0,cancelled:0};for(let c of a){let a=c.status||"queued";"success"===a?(b.success+=1,b.completed+=1):a.startsWith("failed")?(b.failed+=1,b.completed+=1):"needs_manual"===a?b.needs_manual+=1:"cancelled"===a?(b.cancelled+=1,b.completed+=1):"running"===a?b.running+=1:b.queued+=1}return b}(a.accounts),concurrency:a.concurrency,proxyPoolMode:a.proxyPoolMode,region:a.region,createdAt:a.createdAt,startedAt:a.startedAt,finishedAt:a.finishedAt,error:a.error,cancelRequested:a.cancelRequested,accounts:(a.accounts||[]).map(a=>({line:a.line,region:a.region,phone:a.phone,fiveSimOrderId:a.fiveSimOrderId,proxyUrl:a.proxyUrl?function(a){if(!a)return null;try{let b=new URL(a);return b.password&&(b.password="***"),b.toString()}catch{return a}}(a.proxyUrl):null,egressIp:a.egressIp||null,proxyTimezone:a.proxyTimezone||null,proxyLocale:a.proxyLocale||null,status:a.status,error:a.error,connectionId:a.connectionId,workerId:a.workerId,manualSessionAvailable:!!a.manualSession,currentStep:a.currentStep,updatedAt:a.updatedAt,logs:a.logs||[]})),preview:void 0!==b.preview?b.preview:a.lastPreview||null,...b}:null}function au(){return(!globalThis.__codeBuddyCnBulkImportSingleton&&(globalThis.__codeBuddyCnBulkImportSingleton={manager:new ar}),globalThis.__codeBuddyCnBulkImportSingleton).manager}}};
1
+ "use strict";exports.id=8371,exports.ids=[8371],exports.modules={48371:(a,b,c)=>{c.d(b,{xM:()=>aj,t9:()=>ap,TK:()=>ao,cO:()=>i.cO,VU:()=>aL});var d=c(55511),e=c(73024),f=c.n(e),g=c(76760),h=c.n(g),i=c(13868),j=c(71998),k=c(89718),l=c(20116),m=c(90715),n=c(92990),o=c(39609);let p=globalThis.fetch,q=new Set(["ECONNABORTED","ECONNREFUSED","ECONNRESET","EHOSTUNREACH","ENETDOWN","ENETUNREACH","ENOTFOUND","EPIPE","ETIMEDOUT"]),r=new Set(["a timeout","is cancelled","is complete","number banned, when number already used"]);class s extends Error{constructor(a,{status:b,body:c}={}){super(a),this.name="FiveSimError",this.status=b,this.body=c}}class t extends s{constructor(a){super(`5sim order ${a} timed out waiting for SMS`),this.name="FiveSimTimeoutError",this.orderId=a}}class u extends s{constructor(a,b){super(`5sim request to ${a} timed out after ${b}ms`),this.name="FiveSimRequestTimeoutError",this.code="FIVESIM_REQUEST_TIMEOUT",this.path=a,this.timeoutMs=b}}class v extends s{constructor(a){super(a),this.name="FiveSimUnknownOutcomeError",this.code="FIVESIM_BUY_OUTCOME_UNKNOWN",this.outcomeUnknown=!0}}class w extends s{constructor(a,b){super(`5sim order ${a} cancelled: ${b}`),this.name="FiveSimCancelledError",this.orderId=a}}class x extends s{constructor(a){super(`5sim order ${a} number was already used (banned)`),this.name="FiveSimBannedError",this.orderId=a}}class y{constructor({apiKey:a,proxyOptions:b=null,fetchImpl:c=null}={}){if(!a||"string"!=typeof a||!a.trim())throw new s("5sim API key is required");this.apiKey=a.trim(),this.proxyOptions=b,this.fetchImpl="function"==typeof c?c:null}_headers(a={}){return{Authorization:`Bearer ${this.apiKey}`,Accept:"application/json",...a}}async _get(a,{headers:b,timeoutMs:c=15e3,signal:d,...e}={}){let f,g=`https://5sim.net/v1${a}`,h=this.fetchImpl||(this.proxyOptions?.enabled?o.proxyAwareFetch:p),i=Number.isFinite(c)&&c>0?new AbortController:null,j=i?.signal||null,k=i?setTimeout(()=>i.abort(),c):null;k?.unref?.();let l=function(a){let b=a.filter(Boolean);if(0===b.length)return null;if(1===b.length)return b[0];if("function"==typeof AbortSignal.any)return AbortSignal.any(b);let c=new AbortController;for(let a of b){if(a.aborted){c.abort(a.reason);break}a.addEventListener("abort",()=>c.abort(a.reason),{once:!0})}return c.signal}([d,j]),m=b=>{if(d?.aborted){let c=new s(`5sim request to ${a} was aborted`);return c.code="FIVESIM_REQUEST_ABORTED",c.cause=b,c}if(j?.aborted){let d=new u(a,c);return d.cause=b,d}return b};try{let c;try{f=await h(g,{method:"GET",headers:this._headers(b),...e,...l?{signal:l}:{}},this.proxyOptions)}catch(a){throw m(a)}try{c=await f.text()}catch(a){throw m(a)}if(!f.ok)throw new s(`5sim request to ${a} failed (HTTP ${f.status}): ${c.slice(0,200)}`,{status:f.status,body:c});try{return JSON.parse(c)}catch{if(c&&!c.startsWith("{"))throw new s(`5sim ${a} returned non-JSON: ${c.slice(0,200)}`,{status:f.status,body:c});return null}}finally{k&&clearTimeout(k)}}async buyNumber({country:a="hongkong",operator:b="any",product:c="codebuddy",allowProductFallback:d=!1,responseTimeoutMs:e=2e4,lateAbortTimeoutMs:f=45e3,signal:g=null}={}){if(g?.aborted){let a=new s("5sim purchase cancelled before the request started");throw a.code="FIVESIM_REQUEST_ABORTED",a}let h="codebuddy"===c&&d?["codebuddy","other"]:[c],i=null;for(let c of h){let j=`/user/buy/activation/${encodeURIComponent(a)}/${encodeURIComponent(b)}/${encodeURIComponent(c)}`;try{let a,b=Math.max(Number(f)||45e3,(Number(e)||2e4)+1e3),c=this._get(j,{timeoutMs:b});try{a=await A(c,e,g)}catch(a){throw a?.code==="FIVESIM_BUY_OUTCOME_UNKNOWN"&&c.then(a=>a?.id?this.cancelOrder(a.id):null).catch(()=>null),a}if(!a||!a.id||!a.phone)throw new s(`5sim buyNumber returned unexpected shape: ${JSON.stringify(a).slice(0,200)}`,{body:a});return a}catch(e){i=e;let a=e?.status,b=String(e?.body||e?.message||"").toLowerCase();if(!(d&&"codebuddy"===c&&h.includes("other")&&(400===a||404===a||b.includes("no free")||b.includes("not enough")||b.includes("no product"))))throw e}}throw i||new s("5sim buyNumber failed for all product candidates")}async checkOrder(a,b={}){return this._get(`/user/check/${a}`,b)}async pollCode(a,{timeoutMs:b=9e5,intervalMs:c=6e3,signal:d}={}){let e=Number(c),f=Number.isFinite(e)?Math.max(5e3,e):6e3,g=Number(b),h=Number.isFinite(g)&&g>0?g:9e5,i=Date.now()+h,j=0,k=async()=>{try{await function(a,b=null){return b?.aborted?Promise.reject(b.reason||Error("Aborted")):new Promise((c,d)=>{let e=()=>b?.removeEventListener("abort",g),f=setTimeout(()=>{e(),c()},a),g=()=>{clearTimeout(f),e(),d(b.reason||Error("Aborted"))};b?.addEventListener("abort",g,{once:!0})})}(f,d)}catch(b){if(d?.aborted)throw new w(a,"aborted by caller");throw b}};for(;Date.now()<i;){let b;if(d?.aborted)throw new w(a,"aborted by caller");try{b=await this.checkOrder(a,{signal:d})}catch(b){if(d?.aborted||b?.code==="FIVESIM_REQUEST_ABORTED")throw new w(a,"aborted by caller");if(b instanceof u||function(a){if(a instanceof s)return 408===a.status||429===a.status||a.status>=500;if(a instanceof TypeError)return!0;let b=a?.code||a?.cause?.code;return q.has(b)}(b)){if(++j>5)throw b;await k();continue}throw b}if(j=0,Array.isArray(b.sms)&&b.sms.length>0){let a=z(b.sms[b.sms.length-1]);if(a)return a}if(b.status&&r.has(b.status)){if("a timeout"===b.status)throw new t(a);if("number banned, when number already used"===b.status)throw new x(a);if("is cancelled"===b.status)throw new w(a,b.status);if("is complete"===b.status){let c=function(a){if(!Array.isArray(a))return null;for(let b=a.length-1;b>=0;b--){let c=z(a[b]);if(c)return c}return null}(b.sms);if(c)return c;throw new s(`5sim order ${a} completed but no SMS code found`,{body:b})}}await k()}throw new t(a)}async finishOrder(a){try{return await this._get(`/user/finish/${a}`),!0}catch(b){return console.warn(`[5sim] finishOrder(${a}) failed (best-effort): ${b.message}`),!1}}async cancelOrder(a){try{return await this._get(`/user/cancel/${a}`),!0}catch(b){return console.warn(`[5sim] cancelOrder(${a}) failed (best-effort): ${b.message}`),!1}}async banOrder(a){try{return await this._get(`/user/ban/${a}`),!0}catch(b){return console.warn(`[5sim] banOrder(${a}) failed (best-effort): ${b.message}`),!1}}async getBalance(){try{let a=await this._get("/user/profile");return{balance:a?.balance??null,rating:a?.rating??null}}catch(a){return console.warn(`[5sim] getBalance failed: ${a.message}`),{balance:null,rating:null}}}}function z(a){return a?a.code&&/\d{4,8}/.test(String(a.code))?String(a.code).match(/\d{4,8}/)[0]:a.text?function(a){if(!a)return null;let b=String(a).match(/\b(\d{4,8})\b/);return b?b[1]:null}(a.text):null:null}async function A(a,b,c=null){let d=Number(b)||2e4,e=null,f=null,g=new Promise((a,b)=>{let g=a=>b(new v(`5sim buy request ${a}; purchase outcome is unknown and any late successful order will be cancelled automatically`));e=setTimeout(()=>{g(`did not answer within ${d}ms`)},d),e.unref?.(),f=()=>g("was interrupted by the caller"),c?.aborted?f():c?.addEventListener("abort",f,{once:!0})});try{return await Promise.race([a,g])}finally{e&&clearTimeout(e),f&&c?.removeEventListener("abort",f)}}let B=["https://www.codebuddy.cn/login/","https://www.codebuddy.cn/login","https://www.codebuddy.cn/register/","https://copilot.tencent.com/login/"],C=["text=手机号","div:has-text('手机号')","span:has-text('手机号')","[class*='phone']:has-text('手机号')","div.kc-phone-tab:has-text('手机号')"],D=["text=手机号","text=其他登录方式","text=微信","#phone-iframe",".login-phone-box"],E=["button:has-text('同意')","text=同意并继续","text=同意"],F="#phone-iframe",G="#phoneNumber",H=".kc-country-option",I=".kc-country-code-text",J="#code",K=['iframe[src*="captcha"]','iframe[src*="tcaptcha"]',"#tcaptcha","#tcaptcha_transform",".nc_iconfont",".nc_wrapper",'[class*="captcha"]','[id*="captcha"]',"text=滑块","text=拖动"],L=['[class*="avatar"]','[class*="user-info"]','[class*="logout"]',"text=退出登录","text=Logout","text=Sign out"],M=["#input-error",".pf-c-form__helper-text.pf-m-error",".kc-feedback-text"],N=new Set(["login_risk_state"]),O=["账号访问受限","安全策略限制","访问受限","account restricted","access restricted"];function P(a=[]){return a.some(a=>N.has(a?.name))}function Q(a="Tencent risk policy rejected the post-OTP session"){return{status:"failed_restricted",error:`Account restricted after OTP (${a}). Use a different residential CN/HK proxy with concurrency 1; do not retry this number on the same egress IP.`}}async function R(a){let b=a.locator("input.btn-lg.code-btn").first(),c=null;try{await b.waitFor({state:"visible",timeout:5e3}),c=b}catch{let b=a.locator(".code-btn").first();try{await b.waitFor({state:"visible",timeout:5e3}),c=b}catch{c=null}}if(!c)return{ok:!1,reason:"missing"};let d=await c.click().then(()=>!0).catch(()=>!1);return{ok:d,reason:d?null:"click_failed"}}async function S(a,{timeoutMs:b,signal:c=null}={}){let d=null,e=null,f=new Promise((a,c)=>{d=setTimeout(()=>c(Error("Timed out waiting for SMS code")),b),d.unref?.()}),g=c?new Promise((a,b)=>{e=()=>b(c.reason||Object.assign(Error("Job cancelled"),{code:"JOB_CANCELLED"})),c.aborted?e():c.addEventListener("abort",e,{once:!0})}):null;try{return await Promise.race([a,f,...g?[g]:[]])}finally{d&&clearTimeout(d),e&&c?.removeEventListener("abort",e)}}async function T({page:a,phone:b,resolvePhone:c,pollSmsPromise:d,waitForSms:e,onStep:f,phoneFormatter:g=a=>a,timeouts:h={},signal:i=null,isCancelled:j=null}){let k=h.nav??3e4,l=h.action??15e3,m=h.codeWait??9e5,n=h.postSubmit??1e4,o=(a,b)=>f?.(a,b),p=()=>{if(i?.aborted){if(i.reason?.code==="CN_ACCOUNT_HARD_TIMEOUT")throw i.reason;let a=Error("Job cancelled");throw a.code="JOB_CANCELLED",a}if("function"==typeof j&&j()){let a=Error("Job cancelled");throw a.code="JOB_CANCELLED",a}};try{var q;let f,h;o("cn_opening_login_page","Opening CodeBuddy CN login page"),p();try{a.setDefaultNavigationTimeout(k),a.setDefaultTimeout(l)}catch{}try{await a.context().route("**/*",a=>{var b,c;let d,e=a.request();return(b=e.url(),c=e.resourceType(),d=String(b||""),/googletagmanager|googleadservices|google-analytics|doubleclick|facebook|hotjar|clarity\.ms|hm\.baidu|google\.com\/rmkt/i.test(d)||"media"===c||"image"===c&&!/captcha|tcaptcha|challenge|verify|qrcode/i.test(d))?a.abort():a.continue()})}catch{}let j=null,r=[];for(let b=1;b<=2;b++){p();try{let c=B[(b-1)%B.length];o("cn_nav_attempt",`Navigation attempt ${b}/2 → ${c}`),b>1&&(await a.context().clearCookies().catch(()=>{}),await a.waitForTimeout(800)),await a.goto(c,{waitUntil:"commit",timeout:k}),p(),await a.waitForFunction(()=>"loading"!==document.readyState,{timeout:1e4}).catch(()=>{}),p();let d=await W(a,E,{timeout:6e3});d&&(await d.click().catch(()=>{}),o("cn_consent_dismissed","Privacy consent dialog dismissed (同意)"),await a.waitForTimeout(1e3));let e=await X(a,D,25e3);if(p(),!e){let b=await a.locator("body").innerText().catch(()=>""),d=await a.evaluate(()=>document.documentElement?.outerHTML?.length||0).catch(()=>0),e=a.url();o("cn_spa_not_ready",`SPA not ready after 25s (url=${e}, body=${String(b).slice(0,80)}, html=${d})`),!b&&d<200?(o("cn_proxy_empty_page","Empty page body — proxy may be blocking codebuddy.cn"),r.push({code:"proxy_empty",detail:`empty page via ${c} (html=${d})`})):r.push({code:"spa_timeout",detail:`SPA not ready url=${e} html=${d}`});continue}o("cn_spa_ready","Login SPA ready"),o("cn_selecting_phone_tab","Selecting phone-number tab");let f=await W(a,C,{timeout:12e3});if(f?(await f.click().catch(()=>{}),o("cn_phone_tab_selected","Phone tab selected"),await a.waitForTimeout(800)):o("cn_phone_tab_not_found","Phone tab not found — checking if iframe already present"),o("cn_waiting_for_iframe","Waiting for phone iframe to load"),await a.locator(F).waitFor({state:"attached",timeout:18e3}).catch(()=>{}),j=await U(a)){if(await j.waitForSelector(G,{state:"visible",timeout:15e3}).then(()=>!0).catch(()=>!1)){o("cn_iframe_ready","Phone iframe + #phoneNumber ready");break}o("cn_iframe_empty","Iframe found but #phoneNumber not visible yet"),r.push({code:"iframe_empty",detail:"phone iframe attached but #phoneNumber not visible"}),j=null}else o("cn_iframe_missing",`No #phone-iframe (attempt ${b}/2)`),r.push({code:"iframe_missing",detail:"SPA loaded but #phone-iframe never appeared"})}catch(e){if(e?.code==="JOB_CANCELLED")throw e;let a=String(e?.message||e||"");o("cn_nav_retry",`Navigation attempt ${b}/2 failed: ${a.slice(0,120)}`);let c=/timeout|exceeded|ETIMEDOUT|net::ERR/i.test(a),d=/ERR_PROXY|ERR_TUNNEL|ERR_CONNECTION|NS_ERROR_PROXY|proxy/i.test(a);r.push({code:d?"proxy_network":c?"nav_timeout":"nav_error",detail:a.slice(0,160)})}}if(!j)return{status:"failed",error:function(a=[],b=2){let c=a.map(a=>a.code),d=a[a.length-1],e="Fix: use a live residential CN proxy (proxyPoolMode=single), concurrency 1, then retry. 5sim is not charged until the form loads.";return c.includes("proxy_empty")||c.includes("proxy_network")?`CodeBuddy CN login page empty/blocked via proxy after ${b} attempts (${d?.detail||"proxy blackhole"}). ${e}`:c.includes("nav_timeout")?`CodeBuddy CN navigation timed out after ${b} attempts (${d?.detail||"goto timeout"}). Proxy is too slow or dead. ${e}`:c.includes("spa_timeout")?`CodeBuddy CN SPA did not boot after ${b} attempts (${d?.detail||"no login UI"}). Proxy/CDN may be filtering JS. ${e}`:c.includes("iframe_missing")||c.includes("iframe_empty")?`CodeBuddy CN page opened but phone form iframe never appeared after ${b} attempts (${d?.detail||"no #phone-iframe"}). Site layout change or half-loaded SPA — retry with another CN exit IP. ${e}`:c.includes("nav_error")&&d?.detail?`CodeBuddy CN phone form failed after ${b} attempts: ${d.detail}. ${e}`:`Could not load CodeBuddy CN phone form after ${b} attempts (${d?.code||"unknown"}: ${d?.detail||"proxy/SPA"}). ${e}`}(r,2)};await j.waitForSelector("#kc-form-login",{timeout:l}).catch(()=>{}),await j.waitForSelector(G,{state:"visible",timeout:l}).catch(()=>{});let s=b;if("function"==typeof c&&(o("cn_ordering_after_form","Login form ready — ordering 5sim number now (not before nav)"),s=await c()),!s)return{status:"failed",error:"No phone number available (resolvePhone/phone missing)"};let t=g(s),{countryCode:u,localNumber:v}=(q=t,(!(h=String(q).replace(/[\s\-()]/g,"")).startsWith("+")&&/^\d+$/.test(h)&&(h="+"+h),h.startsWith("+852"))?{countryCode:"+852",localNumber:h.slice(4)}:h.startsWith("+86")?{countryCode:"+86",localNumber:h.slice(3)}:h.startsWith("+1")?{countryCode:"+1",localNumber:h.slice(2)}:{countryCode:"",localNumber:h.replace(/^\+/,"")});o("cn_selecting_country",`Selecting country code ${u} for phone ${t}`),await V(j,u,l,o),o("cn_entering_phone",`Entering phone number: ${v}`);let w=j.locator(G).first();try{await w.waitFor({state:"visible",timeout:l})}catch{return{status:"failed",error:"Could not find the phone number input (#phoneNumber) inside the iframe"}}await Y(w,v),o("cn_phone_entered",`Phone number entered: ${v}`);try{let b=a.locator(".t-checkbox").last();await b.isVisible({timeout:3e3}).catch(()=>!1)&&(await b.click().catch(()=>{}),o("cn_agreement_checked","Agreement checkbox checked"))}catch{}o("cn_clicking_send_code","Clicking send SMS code button");let x=await R(j);if("missing"===x.reason)return{status:"failed",error:"Could not find the send-SMS-code button (.code-btn) inside the iframe"};if(!x.ok)return{status:"failed",error:"Could not click the send-SMS-code button (.code-btn) inside the iframe"};o("cn_send_code_clicked","Send code button clicked"),await j.waitForSelector(J,{state:"visible",timeout:5e3}).catch(()=>{});let y=await ae(j);if(y)return{status:"failed",error:`Form error after sending code: ${y}`};o("cn_waiting_for_sms","Waiting for SMS verification code from 5sim (timer starts now)");try{let a;if("function"==typeof e)a=Promise.resolve().then(()=>e());else if(d)a=d;else throw Error("No waitForSms/pollSmsPromise provided");f=await S(a,{timeoutMs:m,signal:i})}catch(a){if(a&&"FiveSimTimeoutError"===a.name)throw a;return(i?.aborted||a?.code==="JOB_CANCELLED")&&p(),{status:"failed",error:`Failed to receive SMS code: ${a.message}`}}if(!f)return{status:"failed",error:"Received empty SMS code from 5sim"};o("cn_sms_received",`SMS code received: ${f}`),o("cn_entering_code","Entering SMS verification code");let z=j.locator(J).first();try{await z.waitFor({state:"visible",timeout:l})}catch{return{status:"failed",error:"Could not find the verification code input (#code) inside the iframe"}}await Y(z,f),o("cn_code_entered","Verification code entered");let A=1200+Math.floor(1800*Math.random());o("cn_pre_submit_pause",`Waiting ${A}ms before submit (humanize)`),await a.waitForTimeout(A);let H=Math.max(n,12e3),I=!1;for(let b=0;b<2;b++){o("cn_submitting",`Clicking submit button (attempt ${b+1}/2)`);let c=await U(a);if(!c){let b=await _(a,{timeoutMs:5e3,reportStep:o});if(b.ok)return o("cn_session_cookies",`Keycloak session after iframe detach (${b.cookie})`),{status:"success"};if(P(b.cookies))return o("cn_account_restricted","Tencent login_risk_state present after iframe detached"),Q("login_risk_state cookie present");return{status:"failed",error:"Lost phone iframe after submit"}}if(await c.locator(G).first().isVisible({timeout:3e3}).catch(()=>!1)&&b>0){o("cn_re_entering_after_refresh",`Re-entering phone + code after refresh (retry ${b})`),await V(c,u,l,o);let d=c.locator(G).first();await Y(d,v);try{let b=a.locator(".t-checkbox").first();await b.isVisible({timeout:2e3}).catch(()=>!1)&&await b.click().catch(()=>{})}catch{}let e=c.locator(J).first();await e.isVisible({timeout:3e3}).catch(()=>!1)&&await Y(e,f),await a.waitForTimeout(800+Math.floor(700*Math.random()))}if(await aa(c,l),o("cn_submitted",`Registration form submitted (attempt ${b+1})`),await a.waitForLoadState("domcontentloaded",{timeout:5e3}).catch(()=>{}),await a.waitForTimeout(1800),c=await U(a)||c,await ad(a,c))return o("cn_account_restricted",`Account restricted after submit (attempt ${b+1}) — stopping automatic retries`),Q("restriction message detected");if(o("cn_checking_captcha","Checking for captcha"),await af(a,c,3e3))return o("cn_captcha_detected","Captcha appeared during registration — manual assist needed"),{status:"needs_manual",error:"A captcha appeared during registration. Please complete it manually in the opened browser window.",captcha:!0};let d=await ae(c);if(d)return{status:"failed",error:`Form error after submit: ${d}`};o("cn_waiting_session",`Waiting up to ${Math.round(H/1e3)}s for Keycloak session cookies`);let e=await _(a,{timeoutMs:H,reportStep:o,alsoCheckFrame:()=>U(a)});if(e.ok)return o("cn_session_cookies",`Keycloak session cookies present (${e.cookie}) — registration success`),{status:"success"};if("restricted"===e.reason)return o("cn_account_restricted","Restriction detected while waiting for Keycloak session"),Q("restriction message detected during session handoff");if(await ab(a)&&b<1){o("cn_submit_no_effect","Login form still visible after submit — retrying");continue}o("cn_session_nudge","No session yet — navigating to home to complete OIDC handoff"),await a.goto("https://www.codebuddy.cn/",{waitUntil:"domcontentloaded",timeout:k}).catch(()=>{}),await a.waitForTimeout(2e3);let g=await _(a,{timeoutMs:1e4,reportStep:o});if(g.ok)return o("cn_session_cookies",`Keycloak session after home nudge (${g.cookie})`),{status:"success"};if("restricted"===g.reason)return o("cn_account_restricted","Restriction detected after home handoff"),Q("restriction message detected after OIDC handoff");if(P(g.cookies))return o("cn_account_restricted","Home handoff returned no authenticated session and login_risk_state is present"),Q("login_risk_state persisted after OIDC handoff");I=!0;break}if(!I)return o("cn_submit_retries_exhausted","Account restricted after 2 retries — needs manual"),{status:"needs_manual",error:"Account restricted after 2 refresh retries. Please try with a different VPN/proxy or complete manually."};o("cn_confirming_success","Confirming registration success");let K=await _(a,{timeoutMs:5e3});if(K.ok)return o("cn_registration_success",`Phone registration completed (Keycloak session: ${K.cookie})`),{status:"success"};if(P(K.cookies))return o("cn_account_restricted","No authenticated session and Tencent login_risk_state is present — account restricted"),Q("login_risk_state without an authenticated session");if(await ag(a,j,1e4))return o("cn_registration_success","Phone registration completed successfully (UI markers)"),{status:"success"};let L=await ac(a);return o("cn_success_unconfirmed",`No Keycloak session after submit — ${L.summary}`),{status:"needs_manual",error:`Login submit finished but no Keycloak session yet (${L.summary}). Complete login in the headed browser or retry with a fresh China proxy.`}}catch(a){if((i?.aborted||"function"==typeof j&&j())&&p(),a&&"FiveSimTimeoutError"===a.name||a?.code==="JOB_CANCELLED"||a?.code==="CN_ACCOUNT_HARD_TIMEOUT")throw a;return o("cn_automation_error",`Phone registration automation error: ${a.message}`),{status:"failed",error:a.message||"Unexpected error during phone registration"}}}async function U(a){try{await a.locator(F).waitFor({state:"attached",timeout:5e3});let b=await a.locator(F).elementHandle({timeout:2e3});if(b){let a=await b.contentFrame();if(a)return a}}catch{}for(let b of a.frames()){let a=b.url();if(a.includes("codebuddy.cn/auth/realms/copilot")||a.includes("protocol/openid-connect"))return b}return null}async function V(a,b,c,d){if(!b)return;let e=Math.min(Number(c)||15e3,1e4),f=async()=>{let c=a.locator(I).first(),f=String(await c.textContent({timeout:3e3}).catch(()=>"")).trim();if(f===b)return void d?.("cn_country_already_selected",`Country code already ${b}`);d?.("cn_opening_country_dropdown",`Opening country dropdown (current: ${f}, target: ${b})`);let g=a.locator(".kc-country-selector").first();for(let c of(await g.waitFor({state:"visible",timeout:Math.min(e,5e3)}),await g.click({timeout:3e3}).catch(()=>{}),await a.locator(H).first().waitFor({state:"visible",timeout:3e3}).catch(()=>{}),({"+852":["中国香港","香港","Hong Kong","+852"],"+86":["中国大陆","中国","China","+86"],"+853":["中国澳门","澳门","Macau","+853"],"+886":["中国台湾","台湾","Taiwan","+886"]})[b]||[b]))for(let e of[a.locator(`${H}:has-text("${c}")`).first(),a.getByText(c,{exact:!1}).first()]){if(!await e.isVisible({timeout:1500}).catch(()=>!1))continue;let f=await e.textContent({timeout:1500}).catch(()=>c);await e.click({timeout:2e3}).catch(()=>{}),await a.locator(I).filter({hasText:b}).first().waitFor({state:"visible",timeout:2e3}).catch(()=>{}),d?.("cn_country_selected",`Country selected: ${String(f||c).trim()}`);return}d?.("cn_country_not_found",`Country code ${b} not found in dropdown; using default`),await a.locator("body").click({timeout:1e3}).catch(()=>{})},g=null;try{await Promise.race([f(),new Promise((a,b)=>{g=setTimeout(()=>b(Error(`selectCountry timed out after ${e}ms`)),e),g.unref?.()})])}catch(a){d?.("cn_country_select_error",`Country selection error: ${a.message}`)}finally{g&&clearTimeout(g)}}async function W(a,b,{timeout:c=1e4}={}){for(let d of b)try{let b=a.locator(d).first();return await b.waitFor({state:"visible",timeout:Math.min(c,5e3)}),b}catch{}return null}async function X(a,b,c=15e3){let d=Date.now()+c;for(;Date.now()<d;){for(let c of b)try{let b=a.locator(c).first();if(await b.isVisible().catch(()=>!1))return!0}catch{}await new Promise(a=>setTimeout(a,250))}return!1}async function Y(a,b){try{return await a.click(),await a.fill(""),await a.fill(b),!0}catch{try{return await a.click(),await a.press("Control+a"),await a.type(b,{delay:50}),!0}catch{return!1}}}let Z=["KEYCLOAK_IDENTITY","KEYCLOAK_SESSION","KEYCLOAK_IDENTITY_LEGACY","KEYCLOAK_SESSION_LEGACY"];function $(a=[]){for(let b of Z)if(a.some(a=>a.name===b))return b;let b=a.find(a=>a.name.startsWith("KEYCLOAK_")&&!/locale|theme|restart/i.test(a.name));return b?.name||null}async function _(a,{timeoutMs:b=2e4,reportStep:c,alsoCheckFrame:d}={}){let e=Date.now()+b,f=0;for(;Date.now()<e;){let b=await a.context().cookies().catch(()=>[]),g=$(b);if(g)return{ok:!0,cookie:g,cookies:b};try{let c=a.url();if(c&&!c.includes("/login")&&!c.includes("/auth/realms")){let a=b.find(a=>/^(access_token|cb_token|codebuddy)/i.test(a.name)||"token"===a.name&&a.domain?.includes("codebuddy"));if(a)return{ok:!0,cookie:a.name,cookies:b}}}catch{}let h=d?await d().catch(()=>null):null;if(await ad(a,h))return{ok:!1,cookies:b,reason:"restricted"};if(h){let a=await ae(h);if(a)return{ok:!1,cookies:b,reason:`form_error:${a}`}}if(c&&Date.now()-f>4e3){f=Date.now();let a=Math.max(0,Math.round((e-Date.now())/1e3));c("cn_waiting_session",`Still waiting for Keycloak session… ${a}s left`)}await a.waitForTimeout(500)}return{ok:!1,cookies:await a.context().cookies().catch(()=>[])}}async function aa(a,b=15e3){let c=a.locator("#kc-login").first();try{await c.waitFor({state:"visible",timeout:b}),await c.click({timeout:5e3}).catch(()=>{})}catch{}try{await a.evaluate(()=>{let a=document.querySelector("#kc-form-login")||document.querySelector("form");if(a)if("function"==typeof a.requestSubmit){let b=a.querySelector("#kc-login")||a.querySelector('[type="submit"]');b?a.requestSubmit(b):a.requestSubmit()}else a.submit()})}catch{await a.locator(J).first().press("Enter").catch(()=>{})}}async function ab(a){let b=await U(a);return!!b&&b.locator(G).first().isVisible({timeout:1500}).catch(()=>!1)}async function ac(a){let b="";try{b=a.url()}catch{b="(unknown)"}let c=(await a.context().cookies().catch(()=>[])).map(a=>a.name).slice(0,20).join(",")||"(none)",d="";try{d=await a.evaluate(()=>(document.body?.innerText||"").replace(/\s+/g," ").trim().slice(0,120))}catch{d=""}let e=await U(a),f="no-iframe";if(e)try{f=(await e.url()).slice(0,80)}catch{f="iframe-detached"}return{summary:`url=${b.slice(0,60)} cookies=[${c}] frame=${f}${d?` text="${d}"`:""}`,url:b,cookieNames:c,bodySnippet:d}}async function ad(a,b){for(let c of[b,a])if(c)try{let a=await c.evaluate(()=>document.body?.innerText||"");if(function(a){let b=String(a||"").toLowerCase();return O.some(a=>b.includes(a.toLowerCase()))}(a))return!0}catch{}return!1}async function ae(a){for(let b of M)try{let c=a.locator(b).first();if(await c.isVisible({timeout:1500}).catch(()=>!1)){let a=await c.textContent().catch(()=>""),b=String(a).trim();if(b&&b.length>1)return b}}catch{}try{let b=await a.evaluate(()=>(document.body?.innerText||"").replace(/\s+/g," ").trim());for(let a of["验证码错误","验证码已过期","验证码无效","请输入正确的验证码","手机号格式","发送过于频繁","Invalid","incorrect"])if(b.includes(a)){let c=b.indexOf(a);return b.slice(Math.max(0,c-10),c+a.length+40).trim()}}catch{}return null}async function af(a,b,c=5e3){for(let b of K)try{let d=a.locator(b).first();if(await d.isVisible({timeout:Math.min(c,2e3)}).catch(()=>!1))return!0}catch{}if(b)for(let a of K)try{let d=b.locator(a).first();if(await d.isVisible({timeout:Math.min(c,2e3)}).catch(()=>!1))return!0}catch{}return!1}async function ag(a,b,c=15e3){let d=[];try{if(d=await a.context().cookies().catch(()=>[]),$(d))return!0}catch{}if(P(d)||await ab(a).catch(()=>!1))return!1;for(let b of L)try{let d=a.locator(b).first();if(await d.isVisible({timeout:Math.min(c,2e3)}).catch(()=>!1))return!0}catch{}try{let b=a.url(),c=new Set(d.map(a=>a.name));if(b&&!b.includes("/login")&&!b.includes("/auth/realms")&&(c.has("qcloud_uid")||c.has("qcmainCSRFToken"))&&!c.has("login_risk_state")&&!await ab(a).catch(()=>!1))return!0}catch{}return!1}var ah=c(40891),ai=c(75949);let aj=200,ak=Number.parseInt(process.env.ZEVAI_CN_ACCOUNT_TIMEOUT_MS||"",10)||3e5,al="CN_API_KEY_OUTCOME_UNKNOWN",am="CN_API_KEY_AUTOMATIC_RETRY_STOPPED",an="CN_ACCOUNT_RESTRICTED",ao=new Set(["hongkong","china","any"]),ap="hongkong",aq=new Set(["queued","running","needs_manual"]),ar=new Set(["queued","running","needs_manual"]);function as(a){return String(a||"").trim()}function at(){try{let{totalMemGb:a}=(0,l.si)();return Number.isFinite(a)&&a>0&&a<3}catch{return!1}}function au(a){return!!a?.proxyUrls?.length&&["manual","all","single"].includes(a?.proxyPoolMode)}async function av(a,{timeoutMs:b=6e3}={}){let c=null;try{c=a?.request||null}catch{c=null}if(!c||"function"!=typeof c.get)return{ok:!1,ip:null,ips:[],samples:0,error:"context request unavailable"};let d=[],e=null;for(let a of ai.PROXY_EGRESS_ECHO_URLS){d.push(a);let g=null;try{var f;if(g=await c.get(a,{timeout:b,failOnStatusCode:!1,headers:{Accept:"text/plain, application/json;q=0.9, */*;q=0.1","Cache-Control":"no-cache"}}),200>g.status()||g.status()>=300){e=`HTTP ${g.status()}`;continue}let h=(f=await g.text().catch(()=>""),(0,ai.parseProxyEgressIp)(f));if(!h){e="exit-IP response was not recognized";continue}return{ok:!0,ip:h,ips:[h],samples:1,attempts:d.length,attemptedUrls:d,unstable:!1,error:null}}catch(a){e=a?.name==="TimeoutError"?`timed out after ${b}ms`:"request failed"}finally{"function"==typeof g?.dispose&&await Promise.resolve(g.dispose()).catch(()=>null)}}return{ok:!1,ip:null,ips:[],samples:0,attempts:d.length,attemptedUrls:d,unstable:!1,error:e||"all exit-IP services failed"}}function aw(a,b=null){if(a?.unstable)throw Object.assign(Error("Manual proxy rotated between exit IPs during preflight; no phone number was purchased"),{code:"CN_PROXY_EGRESS_UNSTABLE"});if(!a?.ok||!a?.ip)throw Object.assign(Error(`Manual proxy exit IP could not be verified (${a?.error||"no response"}); no phone number was purchased`),{code:"CN_PROXY_EGRESS_UNVERIFIED"});if(b&&a.ip!==b)throw Object.assign(Error("Manual proxy exit IP changed after CloakBrowser GeoIP alignment; no phone number was purchased"),{code:"CN_PROXY_EGRESS_CHANGED"});return a.ip}async function ax(a,{timeoutMs:b,message:c,code:d,onTimeout:e,onLateResolve:f}){let g=Promise.resolve(a),h=null,i=!1,j=new Promise((a,f)=>{"function"==typeof(h=setTimeout(()=>{i=!0;try{"function"==typeof e&&e()}catch{}f(Object.assign(Error(c),{code:d}))},b)).unref&&h.unref()});try{return await Promise.race([g,j])}finally{h&&clearTimeout(h),i&&"function"==typeof f&&g.then(f).catch(()=>null)}}function ay(a,b="API key request"){let c=Number(a?.status);if(429===c)throw Object.assign(Error(`${b} was rate limited (HTTP 429); automatic POST retries stopped`),{code:am});if(Number.isFinite(c)&&c>=500)throw Object.assign(Error(`${b} returned HTTP ${c}; creation outcome may be unknown and automatic POST retries stopped`),{code:al});return a}function az(a){return a?.code===al||a?.code===am}function aA(a){let b=`${a?.text||""} ${a?.data?._raw||""} ${a?.url||""}`;return/<!doctype html|<html|login-pf|\/auth\/realms\//i.test(b)}function aB(a,b=[]){let c=b instanceof Set?b:new Set(b),d=`${a?.text||""} ${a?.data?._raw||""}`;return!!/账号访问受限|安全策略限制|访问受限|account restricted|access restricted/i.test(d)||!!c.has("login_risk_state")&&(aA(a)||a?.status===0||a?.status===401||a?.status===403)}async function aC({context:a,page:b,timeoutMs:c=1e4}){let d={Accept:"application/json, text/plain, */*","x-requested-with":"XMLHttpRequest","X-Domain":"www.codebuddy.cn","X-Product":"SaaS"},e=null;try{e=a?.request||null}catch{e=null}if(e&&"function"==typeof e.get)try{let a=await e.get("https://www.codebuddy.cn/console/accounts",{headers:d,timeout:c,failOnStatusCode:!1}),b=await a.text().catch(()=>"");return function(a,b,c={}){let d=String(b||""),e=null;try{e=d?JSON.parse(d):null}catch{e={_raw:d.slice(0,240),_notJson:!0}}return{status:Number(a)||0,data:e,text:d.slice(0,240),...c}}(a.status(),b,{source:"context-request",url:a.url(),contentType:a.headers()?.["content-type"]||""})}catch{}return ax(b.evaluate(async({requestTimeoutMs:a,requestHeaders:b})=>{let c=new AbortController,d=setTimeout(()=>c.abort(),a);try{let a=window.location.hostname||"www.codebuddy.cn",d="www.codebuddy.cn"===a?`${window.location.origin}`:"https://www.codebuddy.cn",e=await fetch(`${d}/console/accounts`,{credentials:"include",signal:c.signal,headers:b}),f=await e.text().catch(()=>""),g=null;try{g=f?JSON.parse(f):null}catch{g={_raw:String(f||"").slice(0,240),_notJson:!0}}return{status:e.status,data:g,text:String(f||"").slice(0,240),source:"page-fetch",url:e.url,contentType:e.headers.get("content-type")||""}}catch(a){return{status:0,timedOut:a?.name==="AbortError",error:a?.message||String(a),source:"page-fetch"}}finally{clearTimeout(d)}},{requestTimeoutMs:c,requestHeaders:d}),{timeoutMs:c,message:`Console account probe timed out after ${c/1e3}s`,code:"CN_CONSOLE_PROBE_TIMEOUT"}).catch(a=>({status:0,timedOut:a?.code==="CN_CONSOLE_PROBE_TIMEOUT",error:a?.message||String(a),source:"page-fetch"}))}async function aD(a){if(!a||"function"!=typeof a.close)return!0;try{return await ax(Promise.resolve().then(()=>a.close()),{timeoutMs:5e3,message:"Browser resource close timed out after 5s",code:"CN_RESOURCE_CLOSE_TIMEOUT"}),!0}catch{return!1}}async function aE(a,b){if(await aD(a)||!b?.browser)return;let c=b.browser;b.browser=null,await (0,ai.forceCloseBrowser)(c).catch(()=>null)}async function aF(a){try{return await ax(Promise.resolve().then(a),{timeoutMs:12e3,message:"5sim order settlement timed out after 12s",code:"CN_FIVESIM_SETTLE_TIMEOUT"})}catch{return!1}}async function aG({apiKey:a,phone:b,region:d,fiveSimOrderId:e,account:f}){let{createProviderConnection:g}=await Promise.resolve().then(c.bind(c,71998)),h={provider:"codebuddy-cn",authType:"apikey",apiKey:a,accessToken:a,name:b||`5sim-${e}`,email:b||`5sim-${e}`,providerSpecificData:{domain:"www.codebuddy.cn",phoneNumber:b,fiveSimOrderId:e,region:d,automation:"5sim-phone-bulk"},testStatus:"active"};return{connection:await g(h)}}class aH extends i.Q6{constructor({browserLauncher:a,requestDeviceCodeFn:b=ah.cT,pollToken:d=ah.ZV,fetchLoginAccountFn:e=ah.w8,saveConnection:g=aG,fiveSimClientFactory:i=aI,phoneAutomation:j=T,phoneFormatter:k=as,pollIntervalMs:l=n.ne.pollInterval,storageName:m="codebuddy-cn-bulk-import"}={}){super({browserLauncher:a||(async a=>{let{forceCloseBrowser:b,launchBulkImportBrowser:d}=await Promise.resolve().then(c.bind(c,75949)),e=Array.isArray(a?.proxyUrls)&&a.proxyUrls.length?a.proxyUrls[0]:null,f=process.env.ZEVAI_CN_HEADLESS,g=!1;return("0"===f||"false"===f)&&(g=!1),("1"===f||"true"===f)&&(g=!0),ax(d({engine:a?.engine||"cloakbrowser",proxyUrl:e,headless:g,windowSize:{width:1280,height:900},requireProxyGeoip:a?.proxyPoolMode==="manual"&&!!e}),{timeoutMs:9e4,message:"CloakBrowser launch timed out after 90s",code:"CN_BROWSER_LAUNCH_TIMEOUT",onLateResolve:a=>b(a)})}),storageName:m}),this.latestJobId&&this.readPersistedJob(this.latestJobId)||(this.latestJobId=function(a){try{let b=f().readdirSync(a).filter(a=>a.endsWith(".json")&&"meta.json"!==a).map(b=>{let c=h().join(a,b);try{let a=JSON.parse(f().readFileSync(c,"utf8"));if(!a?.jobId)return null;let b=Date.parse(a.createdAt||""),d=Number.isFinite(b)?b:f().statSync(c).mtimeMs;return{jobId:a.jobId,sortTime:d}}catch{return null}}).filter(Boolean).sort((a,b)=>b.sortTime-a.sortTime);return b[0]?.jobId||null}catch{return null}}(this.storageDir),this.latestJobId&&this.persistLatestJobId(this.latestJobId)),this.requestDeviceCode=b,this.pollToken=d,this.fetchLoginAccount=e,this.saveConnection=g,this.fiveSimClientFactory=i,this.phoneAutomation=j,this.phoneFormatter=k,this.pollIntervalMs=l}async startJob({count:a,concurrency:b,proxyPoolMode:c,proxyPoolId:e,manualProxyUrl:f,region:g}){let h=Number.parseInt(a,10);if(!Number.isFinite(h)||h<1)throw Object.assign(Error("At least one account is required (count >= 1)"),{error:"At least one account is required (count >= 1)"});if(h>aj)throw Object.assign(Error(`Count exceeds maximum of ${aj}`),{error:`Count exceeds maximum of ${aj}`});this.latestJobId&&!this.jobs.has(this.latestJobId)&&this.getJob(this.latestJobId);let k=[...this.jobs.values()].find(a=>a&&("running"===a.status||"queued"===a.status||"needs_manual"===a.status)&&!a.cancelRequested);if(k)throw Object.assign(Error(`Another CodeBuddy CN job is still active (${k.jobId}). Cancel it or wait before starting again.`),{error:`Another CodeBuddy CN job is still active (${k.jobId}). Cancel it or wait before starting again.`});let m=ao.has(g)?g:ap,n=[],o="string"==typeof f?f.trim():"";if(o){if(!/^(https?|socks4|socks5):\/\/.+/i.test(o))throw Object.assign(Error("manualProxyUrl must be a valid proxy URL (http://, https://, socks4://, or socks5://)"),{error:"manualProxyUrl must be a valid proxy URL (http://, https://, socks4://, or socks5://)"});n=[o]}else if("all"===c)n=(await (0,j.ui)({isActive:!0})).map(a=>a.proxyUrl).filter(Boolean);else if("single"===c&&e){let a=await (0,j.hr)(e);a?.isActive&&a?.proxyUrl&&(n=[a.proxyUrl])}o||function(a,b){if(!["all","single"].includes(a)||b.length>0)return;let c="single"===a?"Selected proxy is missing or inactive; no automation was started":"No active proxies are available in the selected pool; no automation was started";throw Object.assign(Error(c),{error:c,code:"CN_PROXY_SELECTION_EMPTY"})}(c,n);let p=(0,d.randomUUID)(),q=(0,i.kF)(),r={jobId:p,status:"running",concurrency:function(a,{manualProxy:b=!1,processBoundProxy:c=!1}={}){return b||c?1:function(a){let b=at()?1:8;if((0,l.uT)(a))return Math.min(b,Math.max(1,(0,l.q)()));let c=Number.parseInt(a,10);return Number.isFinite(c)?Math.min(b,Math.max(1,c)):Math.min(b,1)}(a)}(b,{manualProxy:!!o,processBoundProxy:n.length>0}),proxyPoolMode:o?"manual":c||"none",proxyUrls:n,region:m,createdAt:q,startedAt:q,finishedAt:null,error:null,cancelRequested:!1,browser:null,nextIndex:0,manualFollowups:new Set,persistPromise:Promise.resolve(),lastPreview:null,lastPreviewCapturedAt:0,accounts:Array.from({length:h},(a,b)=>({line:b+1,region:m,phone:null,fiveSimOrderId:null,fiveSimActivationId:null,fingerprintSeed:(0,d.randomUUID)(),proxyUrl:null,egressIp:null,proxyTimezone:null,proxyLocale:null,abortController:new AbortController,status:"queued",error:null,connectionId:null,workerId:null,manualSession:null,runtimeSession:null,currentStep:"queued",updatedAt:q,logs:[(0,i.hn)("queued","Queued and waiting for an available worker")]}))};return this.jobs.set(p,r),this.latestJobId=p,this.persistLatestJobId(p),await this.persistJobSnapshot(r,{forcePreview:!1}),this.runJob(p),aK(r)}buildPersistedSnapshot(a){return aK(a,{preview:a.lastPreview||null})}terminalizeInterruptedSnapshot(a){if(!a||!aq.has(a.status))return a;let b="CodeBuddy CN job was interrupted by a service restart. Browser and OTP sessions cannot be resumed safely; start a new job.",c=(a.accounts||[]).map(a=>{if(!ar.has(a.status))return a;let c=(0,i.hn)("failed",b,"error");return{...a,status:"failed",error:b,currentStep:"failed",updatedAt:c.at,manualSessionAvailable:!1,logs:[...a.logs||[],c].slice(-40)}}),d={...a,status:"failed",error:a.error||b,finishedAt:a.finishedAt||(0,i.kF)(),accounts:c,summary:aJ(c),preview:null};return this.writePersistedJob(a.jobId,d),d}getJob(a){let b=this.jobs.get(a);if(b)return aK(b);let c=this.readPersistedJob(a);return c?this.terminalizeInterruptedSnapshot(c):null}async getJobWithPreview(a){let b=this.jobs.get(a);return b?(await this.persistJobSnapshot(b,{forcePreview:!1}),aK(b,{preview:b.lastPreview||null})):this.getJob(a)}async processAccount(a,b,c){if(a.cancelRequested||!a.browser)return void this.finalizeAccount(b,"cancelled",{error:"Job cancelled"});let d=null,e=null,f=!1,g=null,h=null;try{let c;this.setAccountStep(b,"reading_settings","Reading 5sim API key from settings"),await this.persistJobSnapshot(a,{forcePreview:!0});let j=(await (0,k.mt)()).fiveSimApiKey;if(!j||!j.trim()){this.finalizeAccount(b,"failed",{error:"5sim API key not configured. Set it in the automation modal or dashboard settings.",step:"failed",message:"5sim API key not configured"}),await this.persistJobSnapshot(a,{forcePreview:!0});return}d=this.fiveSimClientFactory({apiKey:j,proxyOptions:null}),this.setAccountStep(b,"creating_browser","Creating browser context (before 5sim order)"),await this.persistJobSnapshot(a,{forcePreview:!0});let l=(0,i.go)(a.browser,b.proxyUrl,{profile:"codebuddy-cn",region:a.region||"hongkong",fingerprintSeed:b.fingerprintSeed,lowMemory:at(),nativeCloakProfile:au(a)&&!!b.proxyUrl}),m=await ax(l,{timeoutMs:3e4,message:"Browser context creation timed out after 30s",code:"CN_CONTEXT_TIMEOUT",onLateResolve:a=>Promise.resolve(a?.context?.close?.()).catch(()=>null)});g=m.context;let n=m.page;if(b.runtimeSession={context:g,page:n},"manual"===a.proxyPoolMode&&b.proxyUrl){this.setAccountStep(b,"checking_proxy_egress","Verifying pasted proxy exit IP before opening the registration form"),await this.persistJobSnapshot(a,{forcePreview:!1});let c=(0,ai.getCloakProxyProfile)(a.browser),d=await av(g);b.egressIp=h=aw(d,c?.egressIp||null),b.proxyTimezone=c?.timezone||null,b.proxyLocale=c?.locale||null,this.setAccountStep(b,"proxy_egress_ready",`Manual proxy verified: ${h} (${d.samples} checks, ${b.proxyTimezone||"timezone unknown"}, ${b.proxyLocale||"locale unknown"})`),await this.persistJobSnapshot(a,{forcePreview:!1})}if(a.cancelRequested)throw Error("Job cancelled before ordering phone number");this.setAccountStep(b,"registering","Running phone registration on CodeBuddy CN"),await this.persistJobSnapshot(a,{forcePreview:!0});try{n.setDefaultTimeout(2e4),n.setDefaultNavigationTimeout(45e3)}catch{}let o=null,p=new Promise((a,c)=>{o=setTimeout(()=>{let a=Object.assign(Error(`CodeBuddy CN account hard timeout after ${Math.round(ak/1e3)}s (browser will be force-closed)`),{code:"CN_ACCOUNT_HARD_TIMEOUT"});b.abortController&&!b.abortController.signal.aborted&&b.abortController.abort(a),c(a)},ak),"function"==typeof o.unref&&o.unref()});try{c=await Promise.race([this.phoneAutomation({page:n,signal:b.abortController?.signal,isCancelled:()=>!0===a.cancelRequested,resolvePhone:async()=>{if(a.cancelRequested)throw Error("Job cancelled before ordering phone number");if("manual"===a.proxyPoolMode&&b.proxyUrl){this.setAccountStep(b,"rechecking_proxy_egress","Registration form is ready — confirming the pasted proxy stayed sticky"),await this.persistJobSnapshot(a,{forcePreview:!1});let c=await av(g);aw(c,h),this.setAccountStep(b,"proxy_egress_confirmed",`Manual proxy remained on ${h}; safe to purchase one phone number`),await this.persistJobSnapshot(a,{forcePreview:!1})}this.setAccountStep(b,"ordering_number",`Form ready — ordering ${a.region} phone from 5sim (single buy)`),await this.persistJobSnapshot(a,{forcePreview:!0});let c=await d.buyNumber({country:a.region,product:"codebuddy",allowProductFallback:!1,signal:b.abortController?.signal});return e=c.id,b.phone=c.phone,b.fiveSimOrderId=c.id,b.fiveSimActivationId=c.id,this.setAccountStep(b,"number_ordered",`Phone number ordered: ${c.phone} (1 buy, no re-order)`),await this.persistJobSnapshot(a,{forcePreview:!0}),c.phone},waitForSms:async()=>{if(!e)throw Error("Cannot poll SMS — no 5sim order id");this.setAccountStep(b,"sms_poll_started","SMS poll started (full 90s window after send-code)"),await this.persistJobSnapshot(a,{forcePreview:!1});let c=await d.pollCode(e,{timeoutMs:9e4,signal:b.abortController?.signal});return f=!0,c},onStep:(c,d)=>{this.setAccountStep(b,c,d),this.persistJobSnapshot(a,{forcePreview:!1})},phoneFormatter:this.phoneFormatter}),p])}finally{o&&clearTimeout(o)}if(String(c.status||"").startsWith("failed")){let h=c.error||"Phone registration failed before submit",i=c.status||"failed";this.finalizeAccount(b,i,{error:h,step:i,message:h}),d&&e&&(f?await aF(()=>d.finishOrder(e)):await aF(()=>d.cancelOrder(e))),b.runtimeSession=null,await aE(g,a),await this.persistJobSnapshot(a,{forcePreview:!0});return}await this.captureApiKey(a,b,g,n,d,e);return}catch(j){let c=j instanceof t,h=a.cancelRequested||j?.code==="JOB_CANCELLED",i=h?"Job cancelled":c?"SMS OTP not received within 90s — number banned":j.message||"Unexpected CodeBuddy CN bulk import failure";if(this.finalizeAccount(b,h?"cancelled":"failed",{error:i,step:h?"cancelled":c?"sms_timeout":"failed",message:i}),d&&e&&(f?await aF(()=>d.finishOrder(e)):c?await aF(()=>d.banOrder(e)):await aF(()=>d.cancelOrder(e))),b.runtimeSession=null,await aE(g,a),(j?.code==="CN_ACCOUNT_HARD_TIMEOUT"||j?.code==="CN_CONTEXT_TIMEOUT"||a.cancelRequested)&&a.browser){let b=a.browser;a.browser=null,await (0,ai.forceCloseBrowser)(b).catch(()=>null)}await this.persistJobSnapshot(a,{forcePreview:!0})}}async captureApiKey(a,b,c,d,e,f){let g="personal-edition-user-id",h=null,i=async(a,{timeout:b=12e3,interval:c=150}={})=>{let d=Date.now()+b;for(;Date.now()<d;){try{if(await a())return!0}catch{}await new Promise(a=>setTimeout(a,c))}return!1};try{this.setAccountStep(b,"waiting_session","Establishing CodeBuddy console session (probe APIs, not just cookies)"),await this.persistJobSnapshot(a,{forcePreview:!0});let j=async()=>{let a=await c.cookies().catch(()=>[]);return{cookies:a,names:new Set(a.map(a=>a.name)),list:a.map(a=>a.name)}},k=a=>a.has("KEYCLOAK_IDENTITY")||a.has("KEYCLOAK_SESSION")||a.has("KEYCLOAK_IDENTITY_LEGACY")||a.has("KEYCLOAK_SESSION_LEGACY"),l=a=>a.has("AUTH_SESSION_ID")||a.has("session")||a.has("qcloud_uid")||a.has("qcmainCSRFToken")||a.has("x_host_key_access"),m=()=>aC({context:c,page:d}),n=a=>{let b=a?.data;if(!b||"object"!=typeof b)return[];for(let a of[b?.data?.accounts,b?.accounts,b?.data?.list,b?.list,b?.data?.result,b?.result,b?.data?.items,b?.items,Array.isArray(b?.data)?b.data:null,Array.isArray(b)?b:null])if(Array.isArray(a)&&a.length>0)return a;return[]},o=async(a=2500)=>{let b=!1,c=null;try{await Promise.race([d.waitForLoadState("domcontentloaded",{timeout:a}).catch(()=>null),i(async()=>{if(b)return!0;let a=await j();return k(a.names)},{timeout:a,interval:200}),new Promise(b=>{c=setTimeout(b,a)})])}finally{b=!0,c&&clearTimeout(c)}},p=async a=>{let b=Date.now();try{await d.goto(a,{waitUntil:"commit",timeout:18e3});let c=18e3-(Date.now()-b);return c>0&&await o(Math.min(2500,c)),!0}catch{return!1}},q=["https://www.codebuddy.cn/","https://www.codebuddy.cn/console","https://www.codebuddy.cn/console/","https://www.codebuddy.cn/profile","https://www.codebuddy.cn/profile/keys"],r=[],s=null,t=!1,u="",v=null,w=0;for(let c=0;c<6;c+=1){if(a.cancelRequested)throw Error("Job cancelled while establishing session");let e=await j(),f=k(e.names),g=l(e.names),h=q[Math.min(c,q.length-1)];c<3||c%2==0||!g?(this.setAccountStep(b,"waiting_session",`OIDC handoff ${c+1}/6 → ${h.replace("https://www.codebuddy.cn","")} (${f?"KEYCLOAK":g?"soft-session":"weak"})`),await this.persistJobSnapshot(a,{forcePreview:!1}),await p(h)):await new Promise(a=>setTimeout(a,300)),/^https:\/\/www\.codebuddy\.cn(?:[/:]|$)/i.test(d.url?.()||"")||await p("https://www.codebuddy.cn/console"),s=await m(),r=n(s),(s?.status>0||s?.text||s?.data)&&(v=s),u=JSON.stringify(s?.data??s?.text??s?.error??null).slice(0,180);let i=aA(s),o=await j();if(!k(o.names)&&aB(s,o.names)?w+=1:w=0,w>=2)throw Object.assign(Error(`Tencent restricted the post-OTP session (${w} console probes returned login/risk evidence; source=${s?.source||"unknown"})`),{code:an});if(s?.status===200&&!i&&Array.isArray(r)&&r.length>0){t=!0,this.setAccountStep(b,"session_ready",`Console session accepted (HTTP 200, ${r.length} account(s)${f?", KEYCLOAK ok":", soft session"})`),await this.persistJobSnapshot(a,{forcePreview:!0});break}if(g&&s?.status===200&&!i&&s?.data?._notJson!==!0&&Array.isArray(r)&&0===r.length&&c>=3){this.setAccountStep(b,"session_soft","Console HTTP 200 but 0 accounts — trying personal API key with soft session (cookies ok)"),await this.persistJobSnapshot(a,{forcePreview:!0}),t=!0;break}this.setAccountStep(b,"resolving_enterprise",`Console not ready (HTTP ${s?.status||0}, accounts=${r.length}${i?", login HTML":""}, source=${s?.source||"unknown"}) — ${c+1}/6 body=${u.slice(0,80)}`),await this.persistJobSnapshot(a,{forcePreview:!1})}if(!t){let a=await j(),b=v||s,c=aB(b,a.names)||a.names.has("login_risk_state")&&w>0;throw Object.assign(Error(c?`Tencent restricted the post-OTP session (HTTP ${b?.status||0}; login_risk_state present; source=${b?.source||"unknown"})`:`Console accounts unavailable after login (HTTP ${b?.status||0}; cookies: ${a.list.slice(0,18).join(",")||"(none)"}; body=${u.slice(0,120)}; probeError=${s?.error||"none"}) — session not accepted for API key`),{code:c?an:"CN_CONSOLE_SESSION_UNAVAILABLE"})}let x=g;if(Array.isArray(r)&&r.length>0){let a=r.find(a=>a?.lastLogin)||r[0];a?.type&&"personal"!==a.type&&a.enterpriseId?x=a.enterpriseId:a?.enterpriseId&&a?.type!=="personal"&&(x=a.enterpriseId)}this.setAccountStep(b,"creating_api_key",`Creating API key (enterprise=${x}, accounts=${r.length})`),await this.persistJobSnapshot(a,{forcePreview:!0});let y=`zevai-router-${b.workerId||"account"}-${Date.now()}`,z=async a=>d.evaluate(async({enterpriseId:a,keyName:b,timeoutMs:c})=>{let d=new AbortController,e=setTimeout(()=>d.abort(),c);try{let c=window.location.hostname||"www.codebuddy.cn",e="www.codebuddy.cn"===c?window.location.origin:"https://www.codebuddy.cn",f=await fetch(`${e}/console/api/client/v1/api-keys`,{method:"POST",credentials:"include",signal:d.signal,headers:{"Content-Type":"application/json",Accept:"application/json, text/plain, */*","x-requested-with":"XMLHttpRequest","X-Domain":"www.codebuddy.cn","X-Product":"SaaS"},body:JSON.stringify({name:b,expire_in_days:365,user_enterprise_id:a})}),g=await f.text().catch(()=>""),h=null;try{h=g?JSON.parse(g):null}catch{h={_raw:String(g||"").slice(0,200)}}return{ok:f.ok,status:f.status,data:h}}catch(a){return{ok:!1,status:0,outcomeUnknown:!0,timedOut:a?.name==="AbortError",error:a?.message||String(a)}}finally{clearTimeout(e)}},{enterpriseId:a,keyName:y,timeoutMs:6e4}),A=async(c,d)=>{let e,f=Date.now(),g=null,h=setInterval(()=>{if(g)return;let c=Math.max(5,Math.round((Date.now()-f)/1e3));this.setAccountStep(b,"creating_api_key",`${d} — waiting for CodeBuddy (${c}s)`),g=this.persistJobSnapshot(a,{forcePreview:!1}).catch(()=>null).finally(()=>{g=null})},5e3);"function"==typeof h.unref&&h.unref();try{e=await ax(z(c),{timeoutMs:6e4,message:"API key request timed out after 60s; creation outcome is unknown",code:al})}catch(a){if(a?.code===al)throw a;throw Object.assign(Error(`API key request lost its response; creation outcome is unknown: ${a?.message||String(a)}`),{code:al})}finally{clearInterval(h),g&&await g.catch(()=>null)}if(e?.outcomeUnknown){let a=e.timedOut?"timed out after 60s":`lost its response (${e.error||"network error"})`;throw Object.assign(Error(`API key request ${a}; creation outcome is unknown`),{code:al})}return ay(e,d)};if(!await p("https://www.codebuddy.cn/profile/keys"))throw Object.assign(Error("Keys page navigation timed out after 18s"),{code:"CN_CONSOLE_NAV_TIMEOUT"});let B=await A(x,"Creating API key");B?.status===400&&x!==g&&(this.setAccountStep(b,"retrying_api_key","Retrying with personal-edition enterprise id"),await this.persistJobSnapshot(a,{forcePreview:!1}),B=await A(g,"Retrying personal API key"));let C=a=>a?.ok===!1&&(401===a.status||403===a.status);for(let c=1;c<=2&&C(B);c+=1){for(let d of(this.setAccountStep(b,"retrying_api_key",`API key 401/403 — OIDC re-handoff round ${c}/2 (waiting strong session)`),await this.persistJobSnapshot(a,{forcePreview:!0}),["https://www.codebuddy.cn/","https://www.codebuddy.cn/console","https://www.codebuddy.cn/profile/keys"]))await p(d);await i(async()=>{let a=await j();return k(a.names)},{timeout:8e3*c,interval:300}).catch(()=>null),B=await A(g,`Retrying API key after OIDC handoff ${c}/2`)}let D=B?.data?.code;if(!B||!B.ok||!B.data||0!==D&&200!==D&&void 0!==D){let a="string"==typeof B?.data?._raw?B.data._raw.replace(/\s+/g," ").slice(0,120):null,b=a&&/openresty|nginx|Authorization Required/i.test(a)?" [edge proxy blocked — session half-baked]":"";throw Error(`API key creation failed (HTTP ${B?.status??"no-response"}, code=${D??"n/a"})${b}: ${JSON.stringify(B?.data??null).slice(0,200)}`)}let E=B.data?.data||B.data,F=E?.apiKey||E?.key||E?.token||E?.secret||E?.api_key||("string"==typeof E?E:null)||B.data.apiKey||B.data.key||B.data.token||B.data.secret;if(!F||"string"!=typeof F)throw Object.assign(Error(`API key response did not contain a key field; creation outcome is unknown: ${JSON.stringify(B.data).slice(0,300)}`),{code:al});h=F,this.setAccountStep(b,"api_key_created","API key created successfully"),await this.persistJobSnapshot(a,{forcePreview:!0}),this.setAccountStep(b,"saving_connection","Saving CodeBuddy CN connection"),await this.persistJobSnapshot(a,{forcePreview:!0});let{connection:G}=await this.saveConnection({apiKey:F,phone:b.phone,region:b.region,fiveSimOrderId:f,account:b});await aF(()=>e.finishOrder(f)),this.finalizeAccount(b,"success",{connectionId:G.id,step:"connection_saved",message:`CodeBuddy CN connection saved (phone: ${b.phone})`}),b.runtimeSession=null,await aE(c,a),await this.persistJobSnapshot(a,{forcePreview:!0})}catch(m){let g=m?.code===an,i=m?.code===al,j=m?.code===am,k=i||j;if(g){this.finalizeAccount(b,"failed_restricted",{error:`${m.message}. Use a different residential CN/HK proxy with concurrency 1.`,step:"failed_restricted",message:"Tencent restricted the post-OTP session; API-key capture was not attempted"}),await aF(()=>e.finishOrder(f)),b.runtimeSession=null,await aE(c,a),await this.persistJobSnapshot(a,{forcePreview:!0});return}let l=i?`${m.message}. Check the CodeBuddy keys page before creating another key.`:m.message;if(k||(b.manualSession={context:c,page:d,opened:!1,openedAt:null},b.manualSession),this.finalizeAccount(b,"needs_manual",{error:`Registration succeeded but API key capture failed: ${l}`,step:i?"api_key_outcome_unknown":j?"api_key_retry_stopped":"awaiting_manual",message:i?"Registration done; API key request outcome is unknown. Check existing keys before retrying.":j?"Registration done; API key request was rate limited. Automatic POST retries stopped.":h?`API key captured; retrying local connection save without creating another key: ${m.message}`:`Registration done, API key capture failed: ${m.message}`}),await aF(()=>e.finishOrder(f)),await this.persistJobSnapshot(a,{forcePreview:!0}),k){b.runtimeSession=null,await aE(c,a);return}await this.runCnManualFollowup(a,b,b.workerId,c,d,e,f,h)}}async runCnManualFollowup(a,b,c,d,e,f,g,h=null){let i=(async()=>{let c=async()=>{let c=b.manualSession,e=c?.context||d,f=c?.headedBrowser||null;await aE(e,a),f&&await (0,ai.forceCloseBrowser)(f).catch(()=>null)};try{this.setAccountStep(b,"manual_waiting","Waiting for operator to complete in headed browser"),await this.persistJobSnapshot(a,{forcePreview:!0});let c=at()?18e4:48e4,d=Date.now()+c,f="string"==typeof h&&h?h:null,i=`zevai-router-manual-${b.workerId||"account"}-${Date.now()}`;for(;!f&&Date.now()<d&&!a.cancelRequested;){await new Promise(a=>setTimeout(a,1e4));try{if(!e.url().includes("codebuddy.cn"))continue;let a=await ax(e.evaluate(async({keyName:a,timeoutMs:b})=>{let c=new AbortController,d=setTimeout(()=>c.abort(),b);try{let b=window.location.hostname||"www.codebuddy.cn",d="www.codebuddy.cn"===b?window.location.origin:"https://www.codebuddy.cn",e=await fetch(`${d}/console/api/client/v1/api-keys`,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json, text/plain, */*","x-requested-with":"XMLHttpRequest","X-Domain":"www.codebuddy.cn","X-Product":"SaaS"},credentials:"include",signal:c.signal,body:JSON.stringify({name:a,expire_in_days:365,user_enterprise_id:"personal-edition-user-id"})}),f=await e.json().catch(()=>null);return{ok:e.ok,status:e.status,data:f}}catch(a){return{ok:!1,status:0,outcomeUnknown:!0,error:a?.message||String(a)}}finally{clearTimeout(d)}},{keyName:i,timeoutMs:6e4}),{timeoutMs:6e4,message:"Manual API key request timed out; creation outcome is unknown",code:al});if(a?.outcomeUnknown)throw Object.assign(Error(`Manual API key request lost its response; creation outcome is unknown: ${a.error||"network error"}`),{code:al});if(ay(a,"Manual API key request"),a?.ok){let b=a.data?.data||a.data;if((f=b?.apiKey||b?.key||b?.token||b?.secret||b?.api_key||("string"==typeof b?b:null))&&"string"==typeof f)break;throw Object.assign(Error("Manual API key response was successful but did not contain the key; creation outcome is unknown"),{code:al})}}catch(a){if(az(a))throw a}}if(a.cancelRequested){this.finalizeAccount(b,"cancelled",{error:"Job cancelled",step:"cancelled",message:"Job cancelled while waiting for manual completion"}),await this.persistJobSnapshot(a,{forcePreview:!0});return}if(!f)throw Error("Manual assist timed out — could not capture API key");this.setAccountStep(b,"saving_connection","Saving CodeBuddy CN connection (manual)"),await this.persistJobSnapshot(a,{forcePreview:!0});let{connection:j}=await this.saveConnection({apiKey:f,phone:b.phone,region:b.region,fiveSimOrderId:g,account:b});this.finalizeAccount(b,"success",{connectionId:j.id,step:"connection_saved",message:`CodeBuddy CN connection saved via manual assist (phone: ${b.phone||"N/A"})`}),await this.persistJobSnapshot(a,{forcePreview:!0})}catch(c){a.cancelRequested?this.finalizeAccount(b,"cancelled",{error:"Job cancelled",step:"cancelled",message:"Job cancelled while waiting for manual completion"}):az(c)?this.finalizeAccount(b,"needs_manual",{error:`${c.message}. Check existing CodeBuddy keys before retrying manually.`,step:c?.code===al?"api_key_outcome_unknown":"api_key_retry_stopped",message:"Manual API key POST retries stopped"}):this.finalizeAccount(b,"failed",{error:c.message||"Manual assist flow failed",step:"failed",message:c.message||"Manual assist flow failed"}),await this.persistJobSnapshot(a,{forcePreview:!0})}finally{await c(),b.manualSession=null,b.runtimeSession=null,a.manualFollowups.delete(i),await this.persistJobSnapshot(a,{forcePreview:!0})}})();a.manualFollowups.add(i)}async runWorker(a,b){if(!au(a))return super.runWorker(a,b);for(;!a.cancelRequested;){let c=this.dequeueAccount(a,b);if(!c)return;if(!a.browser)try{a.browser=await this.browserLauncher({...a,proxyUrls:c.proxyUrl?[c.proxyUrl]:a.proxyUrls})}catch(b){this.finalizeAccount(c,"failed",{error:b?.message||"Manual proxy browser launch failed",step:"failed",message:b?.message||"Manual proxy browser launch failed"}),await this.persistJobSnapshot(a,{forcePreview:!0});continue}try{await this.processAccount(a,c,b)}catch(b){"running"===c.status&&(this.finalizeAccount(c,"failed",{error:b?.message||"Unexpected manual proxy worker failure",step:"failed",message:b?.message||"Unexpected manual proxy worker failure"}),await this.persistJobSnapshot(a,{forcePreview:!0}))}finally{if(a.manualFollowups.size>0&&await Promise.allSettled([...a.manualFollowups]),a.browser){let b=a.browser;a.browser=null,await (0,ai.forceCloseBrowser)(b).catch(()=>null)}}}}shouldPrelaunchBrowser(a){return!au(a)}cancelJob(a){let b=this.jobs.get(a);if(!b)return null;for(let a of(b.cancelRequested=!0,b.accounts)){a.abortController&&!a.abortController.signal.aborted&&a.abortController.abort();let b=a.manualSession,c=a.runtimeSession,d=new Set([b?.context,c?.context].filter(Boolean)),e=new Set([b?.headedBrowser,b?.ownedBrowser].filter(Boolean));Promise.allSettled([...[...d].map(a=>aD(a)),...[...e].map(a=>(0,ai.forceCloseBrowser)(a))]),a.runtimeSession=null,a.manualSession=null,ar.has(a.status)&&this.finalizeAccount(a,"cancelled",{error:"Job cancelled",step:"cancelled",message:"Job cancelled by user"})}if(b.browser){let a=b.browser;b.browser=null,(0,ai.forceCloseBrowser)(a).catch(()=>null)}return aq.has(b.status)&&(b.status="cancelled",b.finishedAt=b.finishedAt||(0,i.kF)()),this.persistJobSnapshot(b,{forcePreview:!0}),aK(b)}}function aI({apiKey:a,proxyOptions:b}){return new y({apiKey:a,proxyOptions:b})}function aJ(a=[]){let b={total:a.length,queued:0,running:0,completed:0,success:0,failed:0,needs_manual:0,cancelled:0};for(let c of a){let a=c.status||"queued";"success"===a?(b.success+=1,b.completed+=1):a.startsWith("failed")?(b.failed+=1,b.completed+=1):"needs_manual"===a?b.needs_manual+=1:"cancelled"===a?(b.cancelled+=1,b.completed+=1):"running"===a?b.running+=1:b.queued+=1}return b}function aK(a,b={}){return a?{jobId:a.jobId,status:a.status,summary:aJ(a.accounts),concurrency:a.concurrency,proxyPoolMode:a.proxyPoolMode,region:a.region,createdAt:a.createdAt,startedAt:a.startedAt,finishedAt:a.finishedAt,error:(0,m.yr)(a.error),cancelRequested:a.cancelRequested,accounts:(a.accounts||[]).map(a=>({line:a.line,region:a.region,phone:a.phone,fiveSimOrderId:a.fiveSimOrderId,proxyUrl:a.proxyUrl?function(a){if(!a)return null;let b=String(a),c=()=>b.length>20?`${b.slice(0,10)}***${b.slice(-10)}`:"***";try{let a=new URL(b);if(!/^(https?|socks4|socks5):$/.test(a.protocol))return c();return(0,m.Eq)(b)}catch{return c()}}(a.proxyUrl):null,egressIp:a.egressIp||null,proxyTimezone:a.proxyTimezone||null,proxyLocale:a.proxyLocale||null,status:a.status,error:(0,m.yr)(a.error),connectionId:a.connectionId,workerId:a.workerId,manualSessionAvailable:!!a.manualSession,currentStep:a.currentStep,updatedAt:a.updatedAt,logs:(a.logs||[]).map(a=>({...a,message:(0,m.yr)(a.message)}))})),preview:void 0!==b.preview?b.preview:a.lastPreview||null,...b}:null}function aL(){return(!globalThis.__codeBuddyCnBulkImportSingleton&&(globalThis.__codeBuddyCnBulkImportSingleton={manager:new aH}),globalThis.__codeBuddyCnBulkImportSingleton).manager}}};
@@ -1 +1 @@
1
- "use strict";exports.id=8520,exports.ids=[8520],exports.modules={88520:(a,b,c)=>{c.d(b,{createNodeSqliteAdapter:()=>e});var d=c(63775);async function e(a){let b=process.emit;process.emit=function(a,c,...d){return!("warning"===a&&c?.name==="ExperimentalWarning"&&/SQLite/i.test(c.message||""))&&b.call(process,a,c,...d)};let e=new(await Promise.resolve().then(c.t.bind(c,79868,23))).DatabaseSync(a);e.exec(d.oG);let f=new Map;function g(a){let b=f.get(a);return b||(b=e.prepare(a),f.set(a,b)),b}let h=setInterval(()=>{try{e.exec("PRAGMA wal_checkpoint(TRUNCATE)")}catch{}},6e4);function i(){try{e.exec("PRAGMA wal_checkpoint(TRUNCATE)")}catch{}try{f.clear()}catch{}try{e.close()}catch{}}"function"==typeof h.unref&&h.unref();let j=()=>i();return process.once("beforeExit",j),process.once("SIGINT",()=>{j(),process.exit(0)}),process.once("SIGTERM",()=>{j(),process.exit(0)}),{driver:"node:sqlite",run(a,b=[]){let c=g(a).run(...b);return{changes:Number(c.changes??0),lastInsertRowid:Number(c.lastInsertRowid??0)}},get:(a,b=[])=>g(a).get(...b),all:(a,b=[])=>g(a).all(...b),exec:a=>e.exec(a),transaction(a){let b=`sp_${Math.random().toString(36).slice(2)}`;e.exec(`SAVEPOINT ${b}`);try{let c=a();return e.exec(`RELEASE ${b}`),c}catch(a){try{e.exec(`ROLLBACK TO ${b}`),e.exec(`RELEASE ${b}`)}catch{}throw a}},checkpoint(){e.exec("PRAGMA wal_checkpoint(TRUNCATE)")},close(){clearInterval(h),i()},raw:e}}}};
1
+ "use strict";exports.id=8520,exports.ids=[8520],exports.modules={88520:(a,b,c)=>{c.d(b,{createNodeSqliteAdapter:()=>e});var d=c(63775);async function e(a){let b=process.emit;process.emit=function(a,c,...d){return!("warning"===a&&c?.name==="ExperimentalWarning"&&/SQLite/i.test(c.message||""))&&b.call(process,a,c,...d)};let e=new(await Promise.resolve().then(c.t.bind(c,79868,23))).DatabaseSync(a);e.exec(d.oG);let f=new Map;function g(a){let b=f.get(a);return b||(b=e.prepare(a),f.set(a,b)),b}let h=setInterval(()=>{try{e.exec("PRAGMA wal_checkpoint(TRUNCATE)")}catch{}},6e4);"function"==typeof h.unref&&h.unref();let i=!1;function j(){if(!i){i=!0;try{e.exec("PRAGMA wal_checkpoint(TRUNCATE)")}catch{}try{f.clear()}catch{}try{e.close()}catch{}}}let k=()=>j();return process.once("beforeExit",k),{driver:"node:sqlite",run(a,b=[]){let c=g(a).run(...b);return{changes:Number(c.changes??0),lastInsertRowid:Number(c.lastInsertRowid??0)}},get:(a,b=[])=>g(a).get(...b),all:(a,b=[])=>g(a).all(...b),exec:a=>e.exec(a),transaction(a){let b=`sp_${Math.random().toString(36).slice(2)}`;e.exec(`SAVEPOINT ${b}`);try{let c=a();return e.exec(`RELEASE ${b}`),c}catch(a){try{e.exec(`ROLLBACK TO ${b}`),e.exec(`RELEASE ${b}`)}catch{}throw a}},checkpoint(){e.exec("PRAGMA wal_checkpoint(TRUNCATE)")},close(){clearInterval(h),process.removeListener("beforeExit",k),j()},raw:e}}}};
@@ -0,0 +1,24 @@
1
+ "use strict";exports.id=877,exports.ids=[877],exports.modules={644:(a,b,c)=>{function d(a,b=null){if(null==a)return b;if("string"!=typeof a)return a;try{return JSON.parse(a)}catch{return b}}function e(a){return JSON.stringify(a??null)}c.d(b,{q:()=>d,s:()=>e})},1129:(a,b,c)=>{c.r(b),c.d(b,{createProviderNode:()=>k,deleteProviderNode:()=>m,getProviderNodeById:()=>j,getProviderNodes:()=>i,updateProviderNode:()=>l});var d=c(47293),e=c(36366),f=c(644);function g(a){return a?{...(0,f.q)(a.data,{}),id:a.id,type:a.type,name:a.name,createdAt:a.createdAt,updatedAt:a.updatedAt}:null}function h(a,b){let c=function(a){let{id:b,type:c,name:d,createdAt:e,updatedAt:g,...h}=a;return{id:b,type:c??null,name:d??null,data:(0,f.s)(h),createdAt:e,updatedAt:g}}(b);a.run(`INSERT INTO providerNodes(id, type, name, data, createdAt, updatedAt)
2
+ VALUES(?, ?, ?, ?, ?, ?)
3
+ ON CONFLICT(id) DO UPDATE SET
4
+ type=excluded.type, name=excluded.name, data=excluded.data, updatedAt=excluded.updatedAt`,[c.id,c.type,c.name,c.data,c.createdAt,c.updatedAt])}async function i(a={}){let b=await (0,e.cK)(),c=[],d=[];a.type&&(c.push("type = ?"),d.push(a.type));let f=`SELECT * FROM providerNodes${c.length?` WHERE ${c.join(" AND ")}`:""}`;return b.all(f,d).map(g)}async function j(a){return g((await (0,e.cK)()).get("SELECT * FROM providerNodes WHERE id = ?",[a]))}async function k(a){let b=await (0,e.cK)(),c=new Date().toISOString(),f={id:a.id||(0,d.A)(),type:a.type,name:a.name,prefix:a.prefix,apiType:a.apiType,baseUrl:a.baseUrl,createdAt:c,updatedAt:c};return h(b,f),f}async function l(a,b){let c=await (0,e.cK)(),d=null;return c.transaction(()=>{let e=c.get("SELECT * FROM providerNodes WHERE id = ?",[a]);if(!e)return;let f={...g(e),...b,updatedAt:new Date().toISOString()};h(c,f),d=f}),d}async function m(a){let b=await (0,e.cK)(),c=null;return b.transaction(()=>{let d=b.get("SELECT * FROM providerNodes WHERE id = ?",[a]);d&&(c=g(d),b.run("DELETE FROM providerNodes WHERE id = ?",[a]))}),c}},5781:(a,b,c)=>{c.r(b),c.d(b,{cleanupProviderConnections:()=>r,createProviderConnection:()=>m,deleteProviderConnection:()=>o,deleteProviderConnectionsByProvider:()=>p,getProviderConnectionById:()=>k,getProviderConnections:()=>j,reorderProviderConnections:()=>q,updateProviderConnection:()=>n});var d=c(47293),e=c(36366),f=c(644);let g=["displayName","email","globalPriority","defaultModel","accessToken","refreshToken","expiresAt","tokenType","scope","projectId","apiKey","testStatus","lastTested","lastError","lastErrorAt","rateLimitedUntil","expiresIn","errorCode","consecutiveUseCount"];function h(a){return a?{...(0,f.q)(a.data,{}),id:a.id,provider:a.provider,authType:a.authType,name:a.name,email:a.email,priority:a.priority,isActive:1===a.isActive||!0===a.isActive,createdAt:a.createdAt,updatedAt:a.updatedAt}:null}function i(a,b){let c=function(a){let{id:b,provider:c,authType:d,name:e,email:g,priority:h,isActive:i,createdAt:j,updatedAt:k,...l}=a;return{id:b,provider:c,authType:d,name:e??null,email:g??null,priority:h??null,isActive:+(!1!==i),data:(0,f.s)(l),createdAt:j,updatedAt:k}}(b);a.run(`INSERT INTO providerConnections(id, provider, authType, name, email, priority, isActive, data, createdAt, updatedAt)
5
+ VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
6
+ ON CONFLICT(id) DO UPDATE SET
7
+ provider=excluded.provider, authType=excluded.authType, name=excluded.name,
8
+ email=excluded.email, priority=excluded.priority, isActive=excluded.isActive,
9
+ data=excluded.data, updatedAt=excluded.updatedAt`,[c.id,c.provider,c.authType,c.name,c.email,c.priority,c.isActive,c.data,c.createdAt,c.updatedAt])}async function j(a={}){let b=await (0,e.cK)(),c=[],d=[];a.provider&&(c.push("provider = ?"),d.push(a.provider)),void 0!==a.isActive&&(c.push("isActive = ?"),d.push(+!!a.isActive));let f=`SELECT * FROM providerConnections${c.length?` WHERE ${c.join(" AND ")}`:""}`,g=b.all(f,d).map(h);return g.sort((a,b)=>(a.priority||999)-(b.priority||999)),g}async function k(a){return h((await (0,e.cK)()).get("SELECT * FROM providerConnections WHERE id = ?",[a]))}function l(a,b,c=null){let d=a.all("SELECT * FROM providerConnections WHERE provider = ?",[b]).map(h);if(d.sort((a,b)=>{let c=(a.priority||0)-(b.priority||0);return 0!==c?c:a.id.localeCompare(b.id)}),c){let a=d.findIndex(a=>a.id===c);if(-1!==a){let[b]=d.splice(a,1),c=Number(b.priority),e=Math.max(0,Math.min(Number.isFinite(c)?Math.ceil(c)-1:d.length,d.length));d.splice(e,0,b)}}d.forEach((b,c)=>{a.run("UPDATE providerConnections SET priority = ? WHERE id = ?",[c+1,b.id])})}async function m(a){let b,c=await (0,e.cK)(),f=new Date().toISOString();return c.transaction(()=>{let e=c.all("SELECT * FROM providerConnections WHERE provider = ?",[a.provider]).map(h),j=null;if("oauth"===a.authType&&a.email){let b=a.providerSpecificData?.chatgptAccountId;j=e.find(c=>{if("oauth"!==c.authType||c.email!==a.email)return!1;let d=c.providerSpecificData?.chatgptAccountId;return!b||!d||b===d})}else"apikey"===a.authType&&a.name&&(j=e.find(b=>"apikey"===b.authType&&b.name===a.name));if(j){let d={...j,...a,updatedAt:f};i(c,d),void 0!==a.priority?(l(c,j.provider,j.id),b=h(c.get("SELECT * FROM providerConnections WHERE id = ?",[j.id]))):b=d;return}let k=a.name||null;k||"oauth"!==a.authType&&"access_token"!==a.authType||(k=a.email||`Account ${e.length+1}`);let m=a.priority;m||(m=e.reduce((a,b)=>Math.max(a,b.priority||0),0)+1);let n={id:(0,d.A)(),provider:a.provider,authType:a.authType||"oauth",name:k,priority:m,isActive:void 0===a.isActive||a.isActive,createdAt:f,updatedAt:f};for(let b of g)void 0!==a[b]&&null!==a[b]&&(n[b]=a[b]);a.providerSpecificData&&Object.keys(a.providerSpecificData).length>0&&(n.providerSpecificData=a.providerSpecificData),void 0!==a.email&&(n.email=a.email),i(c,n),l(c,a.provider,n.id),b=h(c.get("SELECT * FROM providerConnections WHERE id = ?",[n.id]))}),b}async function n(a,b){let c,d=await (0,e.cK)();return d.transaction(()=>{let e=d.get("SELECT * FROM providerConnections WHERE id = ?",[a]);if(!e){c=null;return}let f=h(e),g={...f,...b,updatedAt:new Date().toISOString()};i(d,g),void 0!==b.priority?(l(d,f.provider,a),c=h(d.get("SELECT * FROM providerConnections WHERE id = ?",[a]))):c=g}),c}async function o(a){let b=await (0,e.cK)(),c=!1;return b.transaction(()=>{let d=b.get("SELECT provider FROM providerConnections WHERE id = ?",[a]);d&&(b.run("DELETE FROM providerConnections WHERE id = ?",[a]),l(b,d.provider),c=!0)}),c}async function p(a){let b=await (0,e.cK)(),c=b.get("SELECT COUNT(*) AS n FROM providerConnections WHERE provider = ?",[a]);return b.run("DELETE FROM providerConnections WHERE provider = ?",[a]),c?.n||0}async function q(a){let b=await (0,e.cK)();b.transaction(()=>l(b,a))}async function r(){let a=await (0,e.cK)(),b=["displayName","email","globalPriority","defaultModel","accessToken","refreshToken","expiresAt","tokenType","scope","projectId","apiKey","testStatus","lastTested","lastError","lastErrorAt","rateLimitedUntil","expiresIn","consecutiveUseCount"],c=0;return a.transaction(()=>{for(let d of a.all("SELECT * FROM providerConnections")){let e=h(d),f=!1;for(let a of b)(null===e[a]||void 0===e[a])&&a in e&&(delete e[a],c++,f=!0);e.providerSpecificData&&0===Object.keys(e.providerSpecificData).length&&(delete e.providerSpecificData,c++,f=!0),f&&i(a,e)}}),c}},9460:(a,b,c)=>{c.d(b,{L9:()=>r,OM:()=>j,S8:()=>o,fv:()=>l,getMitmAlias:()=>q,o5:()=>k,uL:()=>p,uv:()=>n});var d=c(36366),e=c(644),f=c(22846);let g=(0,f.U)("modelAliases"),h=(0,f.U)("customModels"),i=(0,f.U)("mitmAlias");async function j(){return await g.getAll()}async function k(a,b){await g.set(a,b)}async function l(a){await g.remove(a)}function m(a,b,c){return`${a}|${b}|${c}`}async function n(){return Object.values(await h.getAll())}async function o({providerAlias:a,id:b,type:c="llm",name:f}){let g=m(a,b,c),h=await (0,d.cK)(),i=!1;return h.transaction(()=>{if(h.get("SELECT 1 FROM kv WHERE scope = 'customModels' AND key = ?",[g]))return;let d=(0,e.s)({providerAlias:a,id:b,type:c,name:f||b});h.run("INSERT INTO kv(scope, key, value) VALUES('customModels', ?, ?)",[g,d]),i=!0}),i}async function p({providerAlias:a,id:b,type:c="llm"}){await h.remove(m(a,b,c))}async function q(a){return a?await i.get(a)||{}:await i.getAll()}async function r(a,b){await i.set(a,b||{})}},18943:(a,b,c)=>{c.d(b,{SL:()=>p,cj:()=>q,ox:()=>o});var d=c(36366),e=c(644);let f=null,g=0;async function h(){if(f&&Date.now()-g<5e3)return f;try{let{getSettings:a}=await Promise.resolve().then(c.bind(c,42655)),b=await a(),d="false"!==process.env.OBSERVABILITY_ENABLED;f={enabled:"boolean"==typeof b.enableObservability?b.enableObservability:d,maxRecords:b.observabilityMaxRecords||parseInt(process.env.OBSERVABILITY_MAX_RECORDS||String(200),10),batchSize:b.observabilityBatchSize||parseInt(process.env.OBSERVABILITY_BATCH_SIZE||String(20),10),flushIntervalMs:b.observabilityFlushIntervalMs||parseInt(process.env.OBSERVABILITY_FLUSH_INTERVAL_MS||String(5e3),10),maxJsonSize:1024*(b.observabilityMaxJsonSize||parseInt(process.env.OBSERVABILITY_MAX_JSON_SIZE||"5",10))}}catch{f={enabled:!1,maxRecords:200,batchSize:20,flushIntervalMs:5e3,maxJsonSize:5120}}return g=Date.now(),f}let i=[],j=null,k=!1,l=!1;function m(a){return Math.min(1e3,Math.max(100,4*a))}async function n(){if(k)return!1;if(0===i.length)return!0;k=!0;let a=null,b=[],c=!1;try{a=await h(),b=i.splice(0,Math.max(1,a.batchSize));let f=await (0,d.cK)();f.transaction(()=>{for(let a of b)f.run("INSERT INTO requestDetails(id, timestamp, provider, model, connectionId, status, data) VALUES(?, ?, ?, ?, ?, ?, ?) ON CONFLICT(id) DO UPDATE SET timestamp = excluded.timestamp, provider = excluded.provider, model = excluded.model, connectionId = excluded.connectionId, status = excluded.status, data = excluded.data",[a.id,a.timestamp,a.provider,a.model,a.connectionId,a.status,(0,e.s)(a)]);let c=f.get("SELECT COUNT(*) as c FROM requestDetails");c&&c.c>a.maxRecords&&f.run("DELETE FROM requestDetails WHERE id IN (SELECT id FROM requestDetails ORDER BY timestamp ASC LIMIT ?)",[c.c-a.maxRecords])}),c=!0}catch(c){if(b.length>0){i=[...b,...i];let c=m(a?.batchSize||20);i.length>c&&(i.splice(0,i.length-c),l||(l=!0,console.warn(`[requestDetailsRepo] Buffer limit reached (${c}); dropping oldest observability records`)))}console.error("[requestDetailsRepo] Batch write failed:",c)}finally{k=!1,0===i.length?l=!1:j||(j=setTimeout(()=>{j=null,n().catch(()=>{})},c?0:Math.max(250,Math.min(a?.flushIntervalMs||5e3,5e3))),j.unref?.())}return c}async function o(a){let b=await h();if(b.enabled){let c;c=m(b.batchSize),i.length>=c&&(i.splice(0,i.length-c+1),l||(l=!0,console.warn(`[requestDetailsRepo] Buffer limit reached (${c}); dropping oldest observability records`))),i.push(function(a,b=5120){var c,d;let e,f,g,h=(c=a?.provider,Math.max(1024,Math.min(Number.isFinite(b)?b:5120,"kiro"===c?16384:65536))),i=a=>{try{let b,c=(b=new WeakSet,JSON.stringify(a??{},(a,c)=>{if("bigint"==typeof c)return c.toString();if(c&&"object"==typeof c){if(b.has(c))return"[Circular]";b.add(c)}return c}));if(c.length>h)return{_truncated:!0,_originalSize:c.length,_preview:c.substring(0,200)};return JSON.parse(c)}catch(a){return{_truncated:!0,_serializationError:a.message}}},j=a?.request&&"object"==typeof a.request?{...a.request,headers:function(a){if(!a||"object"!=typeof a)return{};let b=["authorization","x-api-key","cookie","token","api-key"],c={...a};for(let a of Object.keys(c))b.some(b=>a.toLowerCase().includes(b))&&delete c[a];return c}(a.request.headers)}:a?.request;return{id:a?.id||(d=a?.model,e=new Date().toISOString(),f=Math.random().toString(36).substring(2,8),g=d?d.replace(/[^a-zA-Z0-9-]/g,"-"):"unknown",`${e}-${f}-${g}`),provider:a?.provider||null,model:a?.model||null,connectionId:a?.connectionId||null,timestamp:a?.timestamp||new Date().toISOString(),status:a?.status||null,latency:i(a?.latency),tokens:i(a?.tokens),request:i(j),providerRequest:i(a?.providerRequest),providerResponse:i(a?.providerResponse),response:i(a?.response)}}(a,b.maxJsonSize)),i.length>=b.batchSize?(j&&(clearTimeout(j),j=null),n().catch(a=>console.error("[requestDetailsRepo] flush err:",a))):j||(j=setTimeout(()=>{j=null,n().catch(()=>{})},b.flushIntervalMs))}}async function p(a={}){let b=await (0,d.cK)(),c=[],f=[];a.provider&&(c.push("provider = ?"),f.push(a.provider)),a.model&&(c.push("model = ?"),f.push(a.model)),a.connectionId&&(c.push("connectionId = ?"),f.push(a.connectionId)),a.status&&(c.push("status = ?"),f.push(a.status)),a.startDate&&(c.push("timestamp >= ?"),f.push(new Date(a.startDate).toISOString())),a.endDate&&(c.push("timestamp <= ?"),f.push(new Date(a.endDate).toISOString()));let g=c.length?`WHERE ${c.join(" AND ")}`:"",h=b.get(`SELECT COUNT(*) as c FROM requestDetails ${g}`,f),i=h?h.c:0,j=Number.isFinite(Number(a.page))?Math.max(1,Math.trunc(Number(a.page))):1,k=Number.isFinite(Number(a.pageSize))?Math.max(1,Math.trunc(Number(a.pageSize))):50,l=Math.max(1,Math.ceil(i/k)),m=Math.min(j,l);return{details:b.all(`SELECT data FROM requestDetails ${g} ORDER BY timestamp DESC LIMIT ? OFFSET ?`,[...f,k,(m-1)*k]).map(a=>(0,e.q)(a.data,{})),pagination:{page:m,pageSize:k,totalItems:i,totalPages:l,hasNext:m<l,hasPrev:m>1}}}async function q(){for(j&&(clearTimeout(j),j=null);k;)await new Promise(a=>setTimeout(a,10));for(;i.length>0;){if(!await n())throw j&&(clearTimeout(j),j=null),Error("Failed to flush request details to the database");for(;k;)await new Promise(a=>setTimeout(a,10))}}},22846:(a,b,c)=>{c.d(b,{U:()=>f});var d=c(36366),e=c(644);function f(a){return{async get(b,c=null){let f=(await (0,d.cK)()).get("SELECT value FROM kv WHERE scope = ? AND key = ?",[a,b]);return f?(0,e.q)(f.value,c):c},async getAll(){let b=(await (0,d.cK)()).all("SELECT key, value FROM kv WHERE scope = ?",[a]),c={};for(let a of b)c[a.key]=(0,e.q)(a.value);return c},async set(b,c){(await (0,d.cK)()).run("INSERT INTO kv(scope, key, value) VALUES(?, ?, ?) ON CONFLICT(scope, key) DO UPDATE SET value = excluded.value",[a,b,(0,e.s)(c)])},async setMany(b){let c=await (0,d.cK)();c.transaction(()=>{for(let[d,f]of Object.entries(b))c.run("INSERT INTO kv(scope, key, value) VALUES(?, ?, ?) ON CONFLICT(scope, key) DO UPDATE SET value = excluded.value",[a,d,(0,e.s)(f)])})},async remove(b){(await (0,d.cK)()).run("DELETE FROM kv WHERE scope = ? AND key = ?",[a,b])},async clear(){(await (0,d.cK)()).run("DELETE FROM kv WHERE scope = ?",[a])}}}},26556:(a,b,c)=>{c.d(b,{KK:()=>f,LF:()=>h,tV:()=>i});var d=c(36366),e=c(644);async function f(a,b,c){if(!a)return;let f=await (0,d.cK)(),g=new Date().toISOString();f.run(`INSERT INTO quotaCache(connectionId, provider, data, fetchedAt) VALUES(?, ?, ?, ?)
10
+ ON CONFLICT(connectionId) DO UPDATE SET provider = excluded.provider, data = excluded.data, fetchedAt = excluded.fetchedAt`,[a,b||"",(0,e.s)(c||{}),g])}function g(a){return a?{connectionId:a.connectionId,provider:a.provider,fetchedAt:a.fetchedAt,usage:(0,e.q)(a.data,{})}:null}async function h(a){return a?g((await (0,d.cK)()).get("SELECT connectionId, provider, data, fetchedAt FROM quotaCache WHERE connectionId = ?",[a])):null}async function i(a=null){let b=await (0,d.cK)();return(a?b.all("SELECT connectionId, provider, data, fetchedAt FROM quotaCache WHERE provider = ?",[a]):b.all("SELECT connectionId, provider, data, fetchedAt FROM quotaCache")).map(g)}},31763:(a,b,c)=>{c.d(b,{KQ:()=>o,AL:()=>n,HG:()=>m,Or:()=>p,Jh:()=>q});var d=c(76760),e=c.n(d),f=c(73024),g=c.n(f),h=c(49120),i=c(48161),j=c.n(i);let k=String.fromCharCode(57,114,111,117,116,101,114),l=".migrated-from-legacy",m=e().join(h.DATA_DIR,"db"),n=e().join(m,"data.sqlite"),o=e().join(m,"backups"),p={main:e().join(h.DATA_DIR,"db.json"),usage:e().join(h.DATA_DIR,"usage.json"),disabled:e().join(h.DATA_DIR,"disabledModels.json"),details:e().join(h.DATA_DIR,"request-details.json")};function q(){for(let a of(!function(a){if(!a||process.env.DATA_DIR)return;let b=e().join(a,l);if(g().existsSync(b))return;let c="win32"===process.platform?e().join(process.env.APPDATA||e().join(j().homedir(),"AppData","Roaming"),k):e().join(j().homedir(),`.${k}`);if(g().existsSync(c))try{if(g().existsSync(a)){if(g().readdirSync(a).filter(a=>a!==l).length>0)return void g().writeFileSync(b,new Date().toISOString())}else g().mkdirSync(a,{recursive:!0});g().cpSync(c,a,{recursive:!0,force:!1,errorOnExist:!1}),g().writeFileSync(b,new Date().toISOString()),console.log(`[dataDir] Migrated legacy data from ${c} → ${a}`)}catch(a){console.warn(`[dataDir] Legacy migration skipped: ${a?.message||a}`)}}(h.DATA_DIR),[h.DATA_DIR,m,o]))g().existsSync(a)||g().mkdirSync(a,{recursive:!0})}},36366:(a,b,c)=>{c.d(b,{cK:()=>k,y5:()=>l});var d=c(31763);global._dbAdapter||(global._dbAdapter={instance:null,initPromise:null,closePromise:null,logged:!1});let e=global._dbAdapter;async function f(){if(!process.versions.bun)return null;try{let{createBunSqliteAdapter:a}=await c.e(4739).then(c.bind(c,24739));return await a(d.AL)}catch(a){return console.warn(`[DB] bun:sqlite unavailable: ${a.message}`),null}}async function g(){if(process.versions.bun)return null;try{let{createBetterSqliteAdapter:a}=await c.e(5258).then(c.bind(c,25258));return a(d.AL)}catch(a){return console.warn(`[DB] better-sqlite3 unavailable: ${a.message}`),null}}async function h(){if(process.versions.bun)return null;let[a,b]=process.versions.node.split(".").map(Number);if(a<22||22===a&&b<5)return null;try{let{createNodeSqliteAdapter:a}=await c.e(8520).then(c.bind(c,88520));return await a(d.AL)}catch(a){return console.warn(`[DB] node:sqlite unavailable: ${a.message}`),null}}async function i(){try{let{createSqlJsAdapter:a}=await c.e(3593).then(c.bind(c,53593));return await a(d.AL)}catch(a){return console.warn(`[DB] sql.js unavailable: ${a.message}`),null}}async function j(){(0,d.Jh)();let a=await f();if(a||(a=await h()),a||(a=await g()),a||(a=await i()),!a)throw Error("[DB] No SQLite driver available (bun/node/better/sql.js all failed)");e.logged||(console.log(`[DB] Driver: ${a.driver} | file: ${d.AL}`),e.logged=!0);try{let{runMigrationOnce:b}=await c.e(5217).then(c.bind(c,45217));await b(a);let{runStartupMaintenanceOnce:d}=await c.e(4229).then(c.bind(c,14229));return d(a),a}catch(b){try{await a.close?.()}catch(a){console.warn(`[DB] failed to close partially initialized adapter: ${a.message}`)}throw b}}async function k(){if(e.instance)return e.instance;if(!e.initPromise){let a=j().then(a=>(e.instance=a,a)).catch(b=>{throw e.initPromise===a&&(e.initPromise=null),b});e.initPromise=a}return e.initPromise}async function l(){return e.closePromise||(e.closePromise=(async()=>{try{let{stopStartupMaintenance:a}=await c.e(4229).then(c.bind(c,14229));a();let b=e.instance||(e.initPromise?await e.initPromise:null);await b?.close?.()}finally{e.instance=null,e.initPromise=null,e.closePromise=null}})()),e.closePromise}"closePromise"in e||(e.closePromise=null)},42655:(a,b,c)=>{c.d(b,{Xx:()=>j,exportSettings:()=>k,getSettings:()=>i});var d=c(36366),e=c(644);let f={cloudEnabled:!1,tunnelEnabled:!1,tunnelUrl:"",tunnelProvider:"cloudflare",tailscaleEnabled:!1,tailscaleUrl:"",stickyRoundRobinLimit:3,providerStrategies:{},comboStrategy:"fallback",comboStickyRoundRobinLimit:1,comboStrategies:{},responseCacheEnabled:!1,requireLogin:!0,tunnelDashboardAccess:!0,authMode:"password",oidcIssuerUrl:"",oidcClientId:"",oidcClientSecret:"",oidcScopes:"openid profile email",oidcLoginLabel:"Sign in with OIDC",enableObservability:!0,observabilityMaxRecords:1e3,observabilityBatchSize:20,observabilityFlushIntervalMs:5e3,observabilityMaxJsonSize:5,outboundProxyEnabled:!1,outboundProxyUrl:"",outboundNoProxy:"",mitmRouterBaseUrl:"http://localhost:1997",dnsToolEnabled:{},rtkEnabled:!0,headroomEnabled:!1,headroomUrl:"http://localhost:8787",headroomCompressUserMessages:!1,headroomCodeAware:!1,headroomKompress:!0,cavemanEnabled:!1,cavemanLevel:"full",ponytailEnabled:!1,ponytailLevel:"full",pxpipeEnabled:!1,pxpipeAutoInstall:!0,pxpipeMinChars:25e3,pxpipeTimeoutMs:15e3,contextInjectionEnabled:!1,fiveSimApiKey:""};async function g(){let a=(await (0,d.cK)()).get("SELECT data FROM settings WHERE id = 1");return a?(0,e.q)(a.data,{}):{}}function h(a){let b={...f,...a||{}};for(let[a,c]of Object.entries(f))void 0===b[a]&&("outboundProxyEnabled"===a&&"string"==typeof b.outboundProxyUrl&&b.outboundProxyUrl.trim()?b[a]=!0:b[a]=c);return b}async function i(){return h(await g())}async function j(a){let b,c=await (0,d.cK)();return c.transaction(()=>{let d=c.get("SELECT data FROM settings WHERE id = 1");b={...d?(0,e.q)(d.data,{}):{},...a},c.run("INSERT INTO settings(id, data) VALUES(1, ?) ON CONFLICT(id) DO UPDATE SET data = excluded.data",[(0,e.s)(b)])}),h(b)}async function k(){return await g()}},49120:(a,b,c)=>{c.r(b),c.d(b,{DATA_DIR:()=>m,getDataDir:()=>l});var d=c(73024),e=c.n(d),f=c(33873),g=c.n(f),h=c(21820),i=c.n(h);let j="zevai";function k(){return"win32"===process.platform?g().join(process.env.APPDATA||g().join(i().homedir(),"AppData","Roaming"),j):g().join(i().homedir(),`.${j}`)}function l(){let a=process.env.DATA_DIR;if(!a)return k();try{return e().mkdirSync(a,{recursive:!0}),a}catch(b){if(b?.code==="EACCES"||b?.code==="EPERM")return console.warn(`[DATA_DIR] '${a}' not writable → fallback ~/.${j}`),k();throw b}}let m=l()},62674:(a,b,c)=>{function d(a,b,c=null){let e=a.get("SELECT value FROM _meta WHERE key = ?",[b]);return e?e.value:c}function e(a,b,c){a.run("INSERT INTO _meta(key, value) VALUES(?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value",[b,String(c)])}c.d(b,{dy:()=>d,np:()=>e}),c(36366)},63775:(a,b,c)=>{c.d(b,{CG:()=>e,oG:()=>d,zE:()=>f});let d=`
11
+ PRAGMA journal_mode = WAL;
12
+ PRAGMA synchronous = NORMAL;
13
+ PRAGMA temp_store = MEMORY;
14
+ PRAGMA mmap_size = 30000000;
15
+ PRAGMA cache_size = -64000;
16
+ PRAGMA foreign_keys = ON;
17
+ PRAGMA busy_timeout = 5000;
18
+ `,e={_meta:{columns:{key:"TEXT PRIMARY KEY",value:"TEXT NOT NULL"}},settings:{columns:{id:"INTEGER PRIMARY KEY CHECK (id = 1)",data:"TEXT NOT NULL"}},providerConnections:{columns:{id:"TEXT PRIMARY KEY",provider:"TEXT NOT NULL",authType:"TEXT NOT NULL",name:"TEXT",email:"TEXT",priority:"INTEGER",isActive:"INTEGER DEFAULT 1",data:"TEXT NOT NULL",createdAt:"TEXT NOT NULL",updatedAt:"TEXT NOT NULL"},indexes:["CREATE INDEX IF NOT EXISTS idx_pc_provider ON providerConnections(provider)","CREATE INDEX IF NOT EXISTS idx_pc_provider_active ON providerConnections(provider, isActive)","CREATE INDEX IF NOT EXISTS idx_pc_priority ON providerConnections(provider, priority)"]},providerNodes:{columns:{id:"TEXT PRIMARY KEY",type:"TEXT",name:"TEXT",data:"TEXT NOT NULL",createdAt:"TEXT NOT NULL",updatedAt:"TEXT NOT NULL"},indexes:["CREATE INDEX IF NOT EXISTS idx_pn_type ON providerNodes(type)"]},proxyPools:{columns:{id:"TEXT PRIMARY KEY",isActive:"INTEGER DEFAULT 1",testStatus:"TEXT",data:"TEXT NOT NULL",createdAt:"TEXT NOT NULL",updatedAt:"TEXT NOT NULL"},indexes:["CREATE INDEX IF NOT EXISTS idx_pp_active ON proxyPools(isActive)","CREATE INDEX IF NOT EXISTS idx_pp_status ON proxyPools(testStatus)"]},apiKeys:{columns:{id:"TEXT PRIMARY KEY",key:"TEXT UNIQUE NOT NULL",name:"TEXT",machineId:"TEXT",isActive:"INTEGER DEFAULT 1",createdAt:"TEXT NOT NULL",budgetDaily:"REAL DEFAULT 0",budgetMonthly:"REAL DEFAULT 0",requestsPerMinute:"INTEGER DEFAULT 0",allowedModels:"TEXT"},indexes:["CREATE INDEX IF NOT EXISTS idx_ak_key ON apiKeys(key)"]},combos:{columns:{id:"TEXT PRIMARY KEY",name:"TEXT UNIQUE NOT NULL",kind:"TEXT",models:"TEXT NOT NULL",createdAt:"TEXT NOT NULL",updatedAt:"TEXT NOT NULL"},indexes:["CREATE INDEX IF NOT EXISTS idx_combo_name ON combos(name)"]},kv:{columns:{scope:"TEXT NOT NULL",key:"TEXT NOT NULL",value:"TEXT NOT NULL"},primaryKey:"PRIMARY KEY (scope, key)",indexes:["CREATE INDEX IF NOT EXISTS idx_kv_scope ON kv(scope)"]},usageHistory:{columns:{id:"INTEGER PRIMARY KEY AUTOINCREMENT",timestamp:"TEXT NOT NULL",provider:"TEXT",model:"TEXT",connectionId:"TEXT",apiKey:"TEXT",endpoint:"TEXT",promptTokens:"INTEGER DEFAULT 0",completionTokens:"INTEGER DEFAULT 0",cost:"REAL DEFAULT 0",status:"TEXT",tokens:"TEXT",meta:"TEXT"},indexes:["CREATE INDEX IF NOT EXISTS idx_uh_ts ON usageHistory(timestamp DESC)","CREATE INDEX IF NOT EXISTS idx_uh_provider ON usageHistory(provider)","CREATE INDEX IF NOT EXISTS idx_uh_model ON usageHistory(model)","CREATE INDEX IF NOT EXISTS idx_uh_conn ON usageHistory(connectionId)"]},usageDaily:{columns:{dateKey:"TEXT PRIMARY KEY",data:"TEXT NOT NULL"}},requestDetails:{columns:{id:"TEXT PRIMARY KEY",timestamp:"TEXT NOT NULL",provider:"TEXT",model:"TEXT",connectionId:"TEXT",status:"TEXT",data:"TEXT NOT NULL"},indexes:["CREATE INDEX IF NOT EXISTS idx_rd_ts ON requestDetails(timestamp DESC)","CREATE INDEX IF NOT EXISTS idx_rd_provider ON requestDetails(provider)","CREATE INDEX IF NOT EXISTS idx_rd_model ON requestDetails(model)","CREATE INDEX IF NOT EXISTS idx_rd_conn ON requestDetails(connectionId)"]},quotaCache:{columns:{connectionId:"TEXT PRIMARY KEY",provider:"TEXT",data:"TEXT NOT NULL",fetchedAt:"TEXT NOT NULL"},indexes:["CREATE INDEX IF NOT EXISTS idx_qc_provider ON quotaCache(provider)"]},contextFiles:{columns:{id:"TEXT PRIMARY KEY",name:"TEXT NOT NULL",content:"TEXT NOT NULL",enabled:"INTEGER DEFAULT 1",priority:"INTEGER DEFAULT 0",createdAt:"TEXT NOT NULL",updatedAt:"TEXT NOT NULL"},indexes:["CREATE INDEX IF NOT EXISTS idx_cf_enabled ON contextFiles(enabled, priority)"]}};function f(a,b){let c=Object.entries(b.columns).map(([a,b])=>`${a} ${b}`);return b.primaryKey&&c.push(b.primaryKey),`CREATE TABLE IF NOT EXISTS ${a} (${c.join(", ")})`}},70877:(a,b,c)=>{c.d(b,{S8:()=>L.S8,admitApiKeyRequest:()=>D.admitApiKeyRequest,E5:()=>R.E5,checkApiKeyBudget:()=>D.checkApiKeyBudget,bI:()=>h.cleanupProviderConnections,Iq:()=>D.createApiKey,jd:()=>I,QI:()=>z,p3:()=>C,iE:()=>h.createProviderConnection,i0:()=>i.createProviderNode,ZO:()=>o,Lh:()=>D.deleteApiKey,CG:()=>K,NR:()=>B,uL:()=>L.uL,fv:()=>L.fv,fK:()=>h.deleteProviderConnection,op:()=>h.deleteProviderConnectionsByProvider,Pc:()=>i.deleteProviderNode,Yd:()=>q,tm:()=>P,oF:()=>Q,zP:()=>U,rg:()=>R.rg,tV:()=>r.tV,yg:()=>D.getApiKeyById,PX:()=>D.getApiKeys,j$:()=>R.j$,L:()=>G,Dj:()=>H,Uv:()=>F,yW:()=>y,uv:()=>L.uv,vF:()=>O,qd:()=>x,getLatencyStats:()=>R._3,c:()=>L.getMitmAlias,OM:()=>L.OM,r4:()=>M.r4,Mc:()=>h.getProviderConnectionById,P:()=>h.getProviderConnections,Qu:()=>i.getProviderNodeById,Fh:()=>i.getProviderNodes,hr:()=>n,ui:()=>m,LF:()=>r.LF,Zx:()=>R.Zx,SL:()=>S.SL,mt:()=>g.getSettings,BY:()=>R.BY,K1:()=>V,zY:()=>w,VT:()=>M.VT,yF:()=>M.yF,Pb:()=>D.rotateApiKey,KK:()=>r.KK,ox:()=>S.ox,sZ:()=>R.sZ,L9:()=>L.L9,o5:()=>L.o5,_V:()=>R._V,uw:()=>R.uw,XW:()=>D.updateApiKey,oG:()=>J,dK:()=>A,KJ:()=>M.KJ,rj:()=>h.updateProviderConnection,ho:()=>i.updateProviderNode,Q_:()=>p,Xx:()=>g.Xx,ek:()=>D.validateApiKey});var d=c(36366),e=c(63775),f=c(644),g=c(42655),h=c(5781),i=c(1129),j=c(47293);function k(a){return a?{...(0,f.q)(a.data,{}),id:a.id,isActive:1===a.isActive||!0===a.isActive,testStatus:a.testStatus,createdAt:a.createdAt,updatedAt:a.updatedAt}:null}function l(a,b){let c=function(a){let{id:b,isActive:c,testStatus:d,createdAt:e,updatedAt:g,...h}=a;return{id:b,isActive:+(!1!==c),testStatus:d??null,data:(0,f.s)(h),createdAt:e,updatedAt:g}}(b);a.run(`INSERT INTO proxyPools(id, isActive, testStatus, data, createdAt, updatedAt)
19
+ VALUES(?, ?, ?, ?, ?, ?)
20
+ ON CONFLICT(id) DO UPDATE SET
21
+ isActive=excluded.isActive, testStatus=excluded.testStatus,
22
+ data=excluded.data, updatedAt=excluded.updatedAt`,[c.id,c.isActive,c.testStatus,c.data,c.createdAt,c.updatedAt])}async function m(a={}){let b=await (0,d.cK)(),c=[],e=[];void 0!==a.isActive&&(c.push("isActive = ?"),e.push(+!!a.isActive)),a.testStatus&&(c.push("testStatus = ?"),e.push(a.testStatus));let f=`SELECT * FROM proxyPools${c.length?` WHERE ${c.join(" AND ")}`:""}`,g=b.all(f,e).map(k);return g.sort((a,b)=>new Date(b.updatedAt||0)-new Date(a.updatedAt||0)),g}async function n(a){return k((await (0,d.cK)()).get("SELECT * FROM proxyPools WHERE id = ?",[a]))}async function o(a){let b=await (0,d.cK)(),c=new Date().toISOString(),e={id:a.id||(0,j.A)(),name:a.name,proxyUrl:a.proxyUrl,noProxy:a.noProxy||"",type:a.type||"http",isActive:void 0===a.isActive||a.isActive,strictProxy:!0===a.strictProxy,testStatus:a.testStatus||"unknown",lastTestedAt:a.lastTestedAt||null,lastError:a.lastError||null,createdAt:c,updatedAt:c};return l(b,e),e}async function p(a,b){let c=await (0,d.cK)(),e=null;return c.transaction(()=>{let d=c.get("SELECT * FROM proxyPools WHERE id = ?",[a]);if(!d)return;let f={...k(d),...b,updatedAt:new Date().toISOString()};l(c,f),e=f}),e}async function q(a){let b=await (0,d.cK)(),c=null;return b.transaction(()=>{let d=b.get("SELECT * FROM proxyPools WHERE id = ?",[a]);d&&(c=k(d),b.run("DELETE FROM proxyPools WHERE id = ?",[a]))}),c}var r=c(26556);let s=null,t=0;function u(){s=null,t=0}function v(a){return a?{id:a.id,name:a.name,content:a.content,enabled:1===a.enabled||!0===a.enabled,priority:Number(a.priority)||0,createdAt:a.createdAt,updatedAt:a.updatedAt}:null}async function w(){return(await (0,d.cK)()).all("SELECT * FROM contextFiles ORDER BY priority ASC, createdAt ASC").map(v)}async function x(){let a=Date.now();return s&&a-t<5e3||(s=(await (0,d.cK)()).all("SELECT * FROM contextFiles WHERE enabled = 1 ORDER BY priority ASC, createdAt ASC").map(v),t=a),s}async function y(a){return v((await (0,d.cK)()).get("SELECT * FROM contextFiles WHERE id = ?",[a]))}async function z({name:a,content:b="",enabled:c=!0,priority:e=0}){let f=await (0,d.cK)(),g=(0,j.A)(),h=new Date().toISOString();return f.run(`INSERT INTO contextFiles(id, name, content, enabled, priority, createdAt, updatedAt)
23
+ VALUES(?, ?, ?, ?, ?, ?, ?)`,[g,String(a||"untitled"),String(b||""),+!!c,Number(e)||0,h,h]),u(),y(g)}async function A(a,b={}){let c=await y(a);if(!c)return null;let e=await (0,d.cK)(),f={name:void 0!==b.name?String(b.name):c.name,content:void 0!==b.content?String(b.content):c.content,enabled:void 0!==b.enabled?+!!b.enabled:+!!c.enabled,priority:void 0!==b.priority?Number(b.priority)||0:c.priority};return e.run("UPDATE contextFiles SET name = ?, content = ?, enabled = ?, priority = ?, updatedAt = ? WHERE id = ?",[f.name,f.content,f.enabled,f.priority,new Date().toISOString(),a]),u(),y(a)}async function B(a){return(await (0,d.cK)()).run("DELETE FROM contextFiles WHERE id = ?",[a]),u(),!0}async function C(a=[]){if(!Array.isArray(a)||0===a.length)return[];let b=await (0,d.cK)(),c=b.get("SELECT COALESCE(MAX(priority), -1) AS maxp FROM contextFiles"),e=(Number(c?.maxp)||-1)+1,f=[];return b.transaction(()=>{for(let c of a){let a=String(c?.name||"untitled").trim()||"untitled",d=String(c?.content||""),g=(0,j.A)(),h=new Date().toISOString();b.run(`INSERT INTO contextFiles(id, name, content, enabled, priority, createdAt, updatedAt)
24
+ VALUES(?, ?, ?, 0, ?, ?, ?)`,[g,a,d,e,h,h]),f.push({id:g,name:a}),e+=1}}),u(),f}var D=c(74452);function E(a){return a?{id:a.id,name:a.name,kind:a.kind,models:(0,f.q)(a.models,[]),createdAt:a.createdAt,updatedAt:a.updatedAt}:null}async function F(){return(await (0,d.cK)()).all("SELECT * FROM combos ORDER BY createdAt ASC").map(E)}async function G(a){return E((await (0,d.cK)()).get("SELECT * FROM combos WHERE id = ?",[a]))}async function H(a){return E((await (0,d.cK)()).get("SELECT * FROM combos WHERE name = ?",[a]))}async function I(a){let b=await (0,d.cK)(),c=new Date().toISOString(),e={id:(0,j.A)(),name:a.name,kind:a.kind||null,models:a.models||[],createdAt:c,updatedAt:c};return b.run("INSERT INTO combos(id, name, kind, models, createdAt, updatedAt) VALUES(?, ?, ?, ?, ?, ?)",[e.id,e.name,e.kind,(0,f.s)(e.models),e.createdAt,e.updatedAt]),e}async function J(a,b){let c=await (0,d.cK)(),e=null;return c.transaction(()=>{let d=c.get("SELECT * FROM combos WHERE id = ?",[a]);if(!d)return;let g={...E(d),...b,updatedAt:new Date().toISOString()};c.run("UPDATE combos SET name = ?, kind = ?, models = ?, updatedAt = ? WHERE id = ?",[g.name,g.kind,(0,f.s)(g.models||[]),g.updatedAt,a]),e=g}),e}async function K(a){let b=(await (0,d.cK)()).run("DELETE FROM combos WHERE id = ?",[a]);return(b?.changes??0)>0}var L=c(9460),M=c(97914);let N="disabledModels";async function O(){let a=(await (0,d.cK)()).all("SELECT key, value FROM kv WHERE scope = ?",[N]),b={};for(let c of a)b[c.key]=(0,f.q)(c.value,[]);return b}async function P(a,b){if(!a||!Array.isArray(b))return;let c=await (0,d.cK)();c.transaction(()=>{let d=c.get("SELECT value FROM kv WHERE scope = ? AND key = ?",[N,a]),e=[...new Set([...d&&(0,f.q)(d.value,[])||[],...b])];c.run("INSERT INTO kv(scope, key, value) VALUES(?, ?, ?) ON CONFLICT(scope, key) DO UPDATE SET value = excluded.value",[N,a,(0,f.s)(e)])})}async function Q(a,b){if(!a)return;let c=await (0,d.cK)();c.transaction(()=>{if(!Array.isArray(b)||0===b.length)return void c.run("DELETE FROM kv WHERE scope = ? AND key = ?",[N,a]);let d=c.get("SELECT value FROM kv WHERE scope = ? AND key = ?",[N,a]),e=d&&(0,f.q)(d.value,[])||[],g=new Set(b),h=e.filter(a=>!g.has(a));0===h.length?c.run("DELETE FROM kv WHERE scope = ? AND key = ?",[N,a]):c.run("INSERT INTO kv(scope, key, value) VALUES(?, ?, ?) ON CONFLICT(scope, key) DO UPDATE SET value = excluded.value",[N,a,(0,f.s)(h)])})}var R=c(99703),S=c(18943);let T=new Set(["usageHistory","requestDetails","quotaCache"]);async function U(){let a=await (0,d.cK)(),{exportSettings:b}=await Promise.resolve().then(c.bind(c,42655)),g=Object.keys(e.CG).filter(a=>!T.has(a)),h={settings:await b(),providerConnections:a.all("SELECT * FROM providerConnections").map(a=>({...(0,f.q)(a.data,{}),id:a.id,provider:a.provider,authType:a.authType,name:a.name,email:a.email,priority:a.priority,isActive:1===a.isActive,createdAt:a.createdAt,updatedAt:a.updatedAt})),providerNodes:a.all("SELECT * FROM providerNodes").map(a=>({...(0,f.q)(a.data,{}),id:a.id,type:a.type,name:a.name,createdAt:a.createdAt,updatedAt:a.updatedAt})),proxyPools:a.all("SELECT * FROM proxyPools").map(a=>({...(0,f.q)(a.data,{}),id:a.id,isActive:1===a.isActive,testStatus:a.testStatus,createdAt:a.createdAt,updatedAt:a.updatedAt})),apiKeys:a.all("SELECT * FROM apiKeys").map(a=>({id:a.id,key:a.key,name:a.name,machineId:a.machineId,isActive:1===a.isActive,createdAt:a.createdAt})),combos:a.all("SELECT * FROM combos").map(a=>({id:a.id,name:a.name,kind:a.kind,models:(0,f.q)(a.models,[]),createdAt:a.createdAt,updatedAt:a.updatedAt})),modelAliases:{},customModels:[],mitmAlias:{},pricing:{},tables:Object.fromEntries(g.map(b=>[b,a.all(`SELECT * FROM "${b}"`)])),excludedTables:[...T]};for(let b of a.all("SELECT key, value FROM kv WHERE scope = 'modelAliases'"))h.modelAliases[b.key]=(0,f.q)(b.value);for(let b of a.all("SELECT key, value FROM kv WHERE scope = 'customModels'"))h.customModels.push((0,f.q)(b.value));for(let b of a.all("SELECT key, value FROM kv WHERE scope = 'mitmAlias'"))h.mitmAlias[b.key]=(0,f.q)(b.value);for(let b of a.all("SELECT key, value FROM kv WHERE scope = 'pricing'"))h.pricing[b.key]=(0,f.q)(b.value);return h}async function V(a){if(!a||"object"!=typeof a||Array.isArray(a))throw Error("Invalid database payload");let b=await (0,d.cK)();return b.transaction(()=>{if(a.tables&&"object"==typeof a.tables&&!Array.isArray(a.tables)){for(let a of Object.keys(e.CG).reverse())b.run(`DELETE FROM "${a}"`);for(let[c,d]of Object.entries(a.tables))if(e.CG[c]&&Array.isArray(d))for(let a of d){let d=Object.keys(a).filter(a=>e.CG[c].columns[a]);0!==d.length&&b.run(`INSERT INTO "${c}" (${d.map(a=>`"${a}"`).join(", ")}) VALUES (${d.map(()=>"?").join(", ")})`,d.map(b=>a[b]))}return}for(let c of(b.run("DELETE FROM settings"),b.run("DELETE FROM providerConnections"),b.run("DELETE FROM providerNodes"),b.run("DELETE FROM proxyPools"),b.run("DELETE FROM apiKeys"),b.run("DELETE FROM combos"),b.run("DELETE FROM kv WHERE scope IN ('modelAliases', 'customModels', 'mitmAlias', 'pricing')"),a.settings&&b.run("INSERT INTO settings(id, data) VALUES(1, ?) ON CONFLICT(id) DO UPDATE SET data = excluded.data",[(0,f.s)(a.settings)]),a.providerConnections||[])){let{id:a,provider:d,authType:e,name:g,email:h,priority:i,isActive:j,createdAt:k,updatedAt:l,...m}=c;b.run("INSERT OR REPLACE INTO providerConnections(id, provider, authType, name, email, priority, isActive, data, createdAt, updatedAt) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",[a,d,e||"oauth",g||null,h||null,i||null,+(!1!==j),(0,f.s)(m),k||new Date().toISOString(),l||new Date().toISOString()])}for(let c of a.providerNodes||[]){let{id:a,type:d,name:e,createdAt:g,updatedAt:h,...i}=c;b.run("INSERT OR REPLACE INTO providerNodes(id, type, name, data, createdAt, updatedAt) VALUES(?, ?, ?, ?, ?, ?)",[a,d||null,e||null,(0,f.s)(i),g||new Date().toISOString(),h||new Date().toISOString()])}for(let c of a.proxyPools||[]){let{id:a,isActive:d,testStatus:e,createdAt:g,updatedAt:h,...i}=c;b.run("INSERT OR REPLACE INTO proxyPools(id, isActive, testStatus, data, createdAt, updatedAt) VALUES(?, ?, ?, ?, ?, ?)",[a,+(!1!==d),e||"unknown",(0,f.s)(i),g||new Date().toISOString(),h||new Date().toISOString()])}for(let c of a.apiKeys||[])b.run("INSERT OR REPLACE INTO apiKeys(id, key, name, machineId, isActive, createdAt) VALUES(?, ?, ?, ?, ?, ?)",[c.id,c.key,c.name||null,c.machineId||null,+(!1!==c.isActive),c.createdAt||new Date().toISOString()]);for(let c of a.combos||[])b.run("INSERT OR REPLACE INTO combos(id, name, kind, models, createdAt, updatedAt) VALUES(?, ?, ?, ?, ?, ?)",[c.id,c.name,c.kind||null,(0,f.s)(c.models||[]),c.createdAt||new Date().toISOString(),c.updatedAt||new Date().toISOString()]);for(let[c,d]of Object.entries(a.modelAliases||{}))b.run("INSERT OR REPLACE INTO kv(scope, key, value) VALUES('modelAliases', ?, ?)",[c,(0,f.s)(d)]);for(let c of a.customModels||[]){let a=`${c.providerAlias}|${c.id}|${c.type||"llm"}`;b.run("INSERT OR REPLACE INTO kv(scope, key, value) VALUES('customModels', ?, ?)",[a,(0,f.s)(c)])}for(let[c,d]of Object.entries(a.mitmAlias||{}))b.run("INSERT OR REPLACE INTO kv(scope, key, value) VALUES('mitmAlias', ?, ?)",[c,(0,f.s)(d||{})]);for(let[c,d]of Object.entries(a.pricing||{}))b.run("INSERT OR REPLACE INTO kv(scope, key, value) VALUES('pricing', ?, ?)",[c,(0,f.s)(d||{})])}),await U()}},74452:(a,b,c)=>{c.r(b),c.d(b,{admitApiKeyRequest:()=>p,checkApiKeyBudget:()=>s,createApiKey:()=>m,deleteApiKey:()=>q,getApiKeyById:()=>l,getApiKeys:()=>k,maskApiKey:()=>i,rotateApiKey:()=>o,updateApiKey:()=>n,validateApiKey:()=>r});var d=c(47293),e=c(36366);let f=new Set,g=new Map;function h(a){if(Array.isArray(a))return a;if(!a)return[];try{return JSON.parse(a)}catch{return[]}}function i(a){return a?a.length<=12?`${a.slice(0,4)}…`:`${a.slice(0,8)}…${a.slice(-4)}`:null}function j(a,b=!1){return a?{id:a.id,key:b?a.key:void 0,maskedKey:i(a.key),name:a.name,machineId:a.machineId,isActive:1===a.isActive||!0===a.isActive,createdAt:a.createdAt,budgetDaily:a.budgetDaily||0,budgetMonthly:a.budgetMonthly||0,requestsPerMinute:a.requestsPerMinute||0,allowedModels:h(a.allowedModels)}:null}async function k(a=!1){return(await (0,e.cK)()).all("SELECT * FROM apiKeys ORDER BY createdAt ASC").map(b=>j(b,a))}async function l(a,b=!1){return j((await (0,e.cK)()).get("SELECT * FROM apiKeys WHERE id = ?",[a]),b)}async function m(a,b){if(!b)throw Error("machineId is required");let f=await (0,e.cK)(),{generateApiKeyWithMachine:g}=await c.e(6844).then(c.bind(c,86844)),h=g(b),i={id:(0,d.A)(),name:a,key:h.key,machineId:b,isActive:!0,createdAt:new Date().toISOString()};return f.run("INSERT INTO apiKeys(id, key, name, machineId, isActive, createdAt) VALUES(?, ?, ?, ?, ?, ?)",[i.id,i.key,i.name,i.machineId,1,i.createdAt]),i}async function n(a,b){let c=await (0,e.cK)(),d=null;return c.transaction(()=>{let e=c.get("SELECT * FROM apiKeys WHERE id = ?",[a]);if(!e)return;let f={...j(e,!0),...b};c.run("UPDATE apiKeys SET key = ?, name = ?, machineId = ?, isActive = ?, budgetDaily = ?, budgetMonthly = ?, requestsPerMinute = ?, allowedModels = ? WHERE id = ?",[f.key,f.name,f.machineId,+!!f.isActive,Number(f.budgetDaily)||0,Number(f.budgetMonthly)||0,Number(f.requestsPerMinute)||0,JSON.stringify(f.allowedModels||[]),a]),d=f}),d}async function o(a){let b=await (0,e.cK)(),d=b.get("SELECT * FROM apiKeys WHERE id = ?",[a]);if(!d)return null;let{generateApiKeyWithMachine:f}=await c.e(6844).then(c.bind(c,86844)),g=f(d.machineId).key;return b.run("UPDATE apiKeys SET key = ? WHERE id = ?",[g,a]),{...j({...d,key:g}),key:g}}async function p(a,b){let c=(await (0,e.cK)()).get("SELECT budgetDaily, budgetMonthly, requestsPerMinute, allowedModels FROM apiKeys WHERE key = ?",[a]);if(!c)return{allowed:!0,release(){}};let d=h(c.allowedModels);if(d.length>0&&!d.includes(b))return{allowed:!1,status:403,reason:`Model ${b} is not allowed for this API key`};let i=Number(c.requestsPerMinute)||0;if(i>0){let b=Date.now(),c=(g.get(a)||[]).filter(a=>b-a<6e4);if(c.length>=i){let d=Math.max(1,Math.ceil((6e4-(b-c[0]))/1e3));return g.set(a,c),{allowed:!1,status:429,retryAfter:d,reason:"API key rate limit exceeded"}}c.push(b),g.set(a,c)}let j=Number(c.budgetDaily)>0||Number(c.budgetMonthly)>0;return j&&f.has(a)?{allowed:!1,status:429,retryAfter:1,reason:"A budgeted request is already in progress"}:(j&&f.add(a),{allowed:!0,release:()=>f.delete(a)})}async function q(a){let b=(await (0,e.cK)()).run("DELETE FROM apiKeys WHERE id = ?",[a]);return(b?.changes??0)>0}async function r(a){let b=(await (0,e.cK)()).get("SELECT isActive FROM apiKeys WHERE key = ?",[a]);return!!b&&(1===b.isActive||!0===b.isActive)}async function s(a){let b=await (0,e.cK)(),c=b.get("SELECT budgetDaily, budgetMonthly FROM apiKeys WHERE key = ?",[a]);if(!c)return{allowed:!0};let d=c.budgetDaily||0,f=c.budgetMonthly||0;if(d<=0&&f<=0)return{allowed:!0,budgetDaily:d,budgetMonthly:f};let g=0,h=0;try{if(d>0){let c=new Date;c.setHours(0,0,0,0);let d=b.get("SELECT COALESCE(SUM(cost), 0) AS total FROM usageHistory WHERE apiKey = ? AND timestamp >= ?",[a,c.toISOString()]);g=d?.total||0}if(f>0){let c=new Date;c.setDate(1),c.setHours(0,0,0,0);let d=b.get("SELECT COALESCE(SUM(cost), 0) AS total FROM usageHistory WHERE apiKey = ? AND timestamp >= ?",[a,c.toISOString()]);h=d?.total||0}}catch(a){return{allowed:!1,error:!0,reason:"Budget accounting unavailable"}}return d>0&&g>=d?{allowed:!1,reason:`Daily budget exceeded ($${g.toFixed(4)} / $${d})`,spentDaily:g,spentMonthly:h,budgetDaily:d,budgetMonthly:f}:f>0&&h>=f?{allowed:!1,reason:`Monthly budget exceeded ($${h.toFixed(4)} / $${f})`,spentDaily:g,spentMonthly:h,budgetDaily:d,budgetMonthly:f}:{allowed:!0,spentDaily:g,spentMonthly:h,budgetDaily:d,budgetMonthly:f}}},97914:(a,b,c)=>{c.d(b,{KJ:()=>l,VT:()=>n,getPricingForModel:()=>k,r4:()=>j,yF:()=>m});var d=c(36366),e=c(644);let f=(0,c(22846).U)("pricing"),g={value:null,expiresAt:0};function h(){g={value:null,expiresAt:0}}async function i(){return await f.getAll()}async function j(){let a=Date.now();if(g.value&&g.expiresAt>a)return g.value;let b=await i(),{PROVIDER_PRICING:d}=await c.e(7341).then(c.bind(c,57341)),e={};for(let[a,c]of Object.entries(d))if(e[a]={...c},b[a])for(let[c,d]of Object.entries(b[a]))e[a][c]=e[a][c]?{...e[a][c],...d}:d;for(let[a,c]of Object.entries(b))if(e[a])for(let[b,d]of Object.entries(c))e[a][b]||(e[a][b]=d);else e[a]={...c};return g={value:e,expiresAt:a+5e3},e}async function k(a,b){if(!b)return null;let d=await i();if(a&&d[a]?.[b])return d[a][b];let{getPricingForModel:e}=await c.e(7341).then(c.bind(c,57341));return e(a,b)}async function l(a){let b=await (0,d.cK)();return b.transaction(()=>{for(let[c,d]of Object.entries(a)){let a=b.get("SELECT value FROM kv WHERE scope = 'pricing' AND key = ?",[c]),f={...a&&(0,e.q)(a.value,{})||{}};for(let[a,b]of Object.entries(d))f[a]=b;b.run("INSERT INTO kv(scope, key, value) VALUES('pricing', ?, ?) ON CONFLICT(scope, key) DO UPDATE SET value = excluded.value",[c,(0,e.s)(f)])}}),h(),await i()}async function m(a,b){if(!a)return await i();let c=await (0,d.cK)();return c.transaction(()=>{if(!b)return void c.run("DELETE FROM kv WHERE scope = 'pricing' AND key = ?",[a]);let d=c.get("SELECT value FROM kv WHERE scope = 'pricing' AND key = ?",[a]),f=d&&(0,e.q)(d.value,{})||{};delete f[b],0===Object.keys(f).length?c.run("DELETE FROM kv WHERE scope = 'pricing' AND key = ?",[a]):c.run("INSERT INTO kv(scope, key, value) VALUES('pricing', ?, ?) ON CONFLICT(scope, key) DO UPDATE SET value = excluded.value",[a,(0,e.s)(f)])}),h(),await i()}async function n(){return await f.clear(),h(),{}}},99703:(a,b,c)=>{c.d(b,{BY:()=>G,E5:()=>J,Zx:()=>K,_3:()=>I,_V:()=>n,d_:()=>E,j$:()=>H,rg:()=>B,sZ:()=>D,uw:()=>A});var d=c(94735),e=c(77598),f=c(36366),g=c(644);c(62674);global._pendingRequests||(global._pendingRequests={byModel:{},byAccount:{}}),global._lastErrorProvider||(global._lastErrorProvider={provider:"",ts:0}),global._statsEmitter||(global._statsEmitter=new d.EventEmitter,global._statsEmitter.setMaxListeners(50)),global._pendingTimers||(global._pendingTimers={}),global._recentRing||(global._recentRing={items:[],initialized:!1}),global._connectionMapCache||(global._connectionMapCache={map:{},ts:0}),global._usageWritesInFlight||(global._usageWritesInFlight=new Set);let h=global._pendingRequests,i=global._lastErrorProvider,j=global._pendingTimers,k=global._recentRing,l=global._connectionMapCache,m=global._usageWritesInFlight,n=global._statsEmitter;function o(a){let b=a?new Date(a):new Date;return`${b.getFullYear()}-${String(b.getMonth()+1).padStart(2,"0")}-${String(b.getDate()).padStart(2,"0")}`}function p(a,b,c){a[b]||(a[b]={requests:0,promptTokens:0,completionTokens:0,cachedTokens:0,cost:0}),a[b].requests+=c.requests||1,a[b].promptTokens+=c.promptTokens||0,a[b].completionTokens+=c.completionTokens||0,a[b].cachedTokens=(a[b].cachedTokens||0)+(c.cachedTokens||0),a[b].cost+=c.cost||0,c.meta&&Object.assign(a[b],c.meta)}function q(a){return a&&"object"==typeof a&&(a.cached_tokens||a.prompt_tokens_details?.cached_tokens||a.cache_read_input_tokens)||0}function r(a,b,c){return`${a}|${b||"unknown"}|${c||"unknown"}`}function s(a,b,c){return`${a||"local-no-key"}|${b||"unknown"}|${c||"unknown"}`}function t(a){return(0,e.createHash)("sha256").update(String(a)).digest("hex").slice(0,20)}function u(a,b){return a?b?.name||`External Key ${t(a).slice(0,8)}`:"Local (No API Key)"}async function v(){if(Date.now()-l.ts<3e4)return l.map;try{let{getProviderConnections:a}=await Promise.resolve().then(c.bind(c,5781)),b=await a(),d={};for(let a of b)d[a.id]=a.name||a.email||a.id;l.map=d,l.ts=Date.now()}catch{}return l.map}async function w(){if(!k.initialized){k.initialized=!0;try{k.items=(await (0,f.cK)()).all("SELECT timestamp, provider, model, connectionId, apiKey, endpoint, cost, status, tokens FROM usageHistory ORDER BY id DESC LIMIT ?",[50]).reverse().map(a=>({timestamp:a.timestamp,provider:a.provider,model:a.model,connectionId:a.connectionId,apiKey:a.apiKey,endpoint:a.endpoint,cost:a.cost,status:a.status,tokens:(0,g.q)(a.tokens,{})}))}catch{}}}async function x(a,b,d){if(!d||!a||!b)return 0;try{let{getPricingForModel:e}=await Promise.resolve().then(c.bind(c,97914)),f=await e(a,b);if(!f)return 0;let g=0,h=d.prompt_tokens||d.input_tokens||0,i=q(d),j=void 0!==d.cached_tokens||d.prompt_tokens_details?.cached_tokens!==void 0?Math.max(0,h-i):h;if(g+=j*(f.input/1e6),i>0){let a=f.cached||f.input;g+=a/1e6*i}let k=d.completion_tokens||d.output_tokens||0;g+=k*(f.output/1e6);let l=d.reasoning_tokens||0;if(l>0){let a=f.reasoning||f.output;g+=a/1e6*l}let m=d.cache_creation_input_tokens||0;if(m>0){let a=f.cache_creation||f.input;g+=a/1e6*m}return g}catch(a){return console.error("Error calculating cost:",a),0}}function y(a,b=20){let c=new Set;return a.filter(a=>{if(0===a.promptTokens&&0===a.completionTokens)return!1;let b=JSON.stringify([a.timestamp,a.model,a.provider,a.promptTokens,a.completionTokens]);return!c.has(b)&&(c.add(b),!0)}).slice(0,b)}function z(a,b,c){h.byModel[a]||(h.byModel[a]=0),h.byModel[a]=Math.max(0,h.byModel[a]+c),0===h.byModel[a]&&delete h.byModel[a],b&&(h.byAccount[b]||(h.byAccount[b]={}),h.byAccount[b][a]||(h.byAccount[b][a]=0),h.byAccount[b][a]=Math.max(0,h.byAccount[b][a]+c),0===h.byAccount[b][a]&&(delete h.byAccount[b][a],0===Object.keys(h.byAccount[b]).length&&delete h.byAccount[b]))}function A(a,b,c,d,e=!1){let f=b?`${a} (${b})`:a,g=`${c}|${f}`;if(z(f,c,d?1:-1),d){let a=function(a,b,c){let d=j[a];if(Array.isArray(d))return d;d&&(clearTimeout(d),z(b,c,-1));let e=[];return j[a]=e,e}(g,f,c),b=setTimeout(()=>{let a=j[g];if(Array.isArray(a)){let c=a.indexOf(b);c>=0&&a.splice(c,1),0===a.length&&delete j[g]}z(f,c,-1),n.emit("pending")},6e4);b.unref?.(),a.push(b)}else{let a=j[g];if(Array.isArray(a)){let b=a.shift();b&&clearTimeout(b),0===a.length&&delete j[g]}else a&&(clearTimeout(a),delete j[g])}!d&&e&&b&&(i.provider=b.toLowerCase(),i.ts=Date.now());let h=new Date().toLocaleTimeString("en-US",{hour12:!1,hour:"2-digit",minute:"2-digit",second:"2-digit"});console.log(`[${h}] [PENDING] ${d?"START":"END"}${e?" (ERROR)":""} | provider=${b} | model=${a}`),n.emit("pending")}async function B(){let a=[],b=await v();for(let[c,d]of Object.entries(h.byAccount))for(let[e,f]of Object.entries(d))if(f>0){let d=b[c]||`Account ${c.slice(0,8)}...`,g=e.match(/^(.*) \((.*)\)$/);a.push({model:g?g[1]:e,provider:g?g[2]:"unknown",account:d,count:f})}return await w(),{activeRequests:a,recentRequests:y([...k.items].sort((a,b)=>new Date(b.timestamp)-new Date(a.timestamp)).map(a=>{let b=a.tokens||{};return{timestamp:a.timestamp,model:a.model,provider:a.provider||"",promptTokens:b.prompt_tokens||b.input_tokens||0,completionTokens:b.completion_tokens||b.output_tokens||0,status:a.status||"ok"}})),errorProvider:Date.now()-i.ts<1e4?i.provider:""}}async function C(a){try{let b=await (0,f.cK)();a.timestamp||(a.timestamp=new Date().toISOString()),a.cost=await x(a.provider,a.model,a.tokens);let c=a.tokens||{},d=c.prompt_tokens||c.input_tokens||0,e=c.completion_tokens||c.output_tokens||0;b.transaction(()=>{b.run("INSERT INTO usageHistory(timestamp, provider, model, connectionId, apiKey, endpoint, promptTokens, completionTokens, cost, status, tokens, meta) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",[a.timestamp,a.provider||null,a.model||null,a.connectionId||null,a.apiKey||null,a.endpoint||null,d,e,a.cost||0,a.status||"ok",(0,g.s)(c),(0,g.s)(a.latency&&"object"==typeof a.latency?{latency:{ttft:a.latency.ttft||0,total:a.latency.total||0}}:{})]);let f=o(a.timestamp),h=b.get("SELECT data FROM usageDaily WHERE dateKey = ?",[f]),i=h?(0,g.q)(h.data,{}):{requests:0,promptTokens:0,completionTokens:0,cost:0,byProvider:{},byModel:{},byAccount:{},byApiKey:{},byEndpoint:{}};!function(a,b){let c=b.tokens?.prompt_tokens||b.tokens?.input_tokens||0,d=b.tokens?.completion_tokens||b.tokens?.output_tokens||0,e=q(b.tokens),f=b.cost||0,g={promptTokens:c,completionTokens:d,cachedTokens:e,cost:f};a.requests=(a.requests||0)+1,a.promptTokens=(a.promptTokens||0)+c,a.completionTokens=(a.completionTokens||0)+d,a.cachedTokens=(a.cachedTokens||0)+e,a.cost=(a.cost||0)+f,a.byProvider||={},a.byModel||={},a.byAccount||={},a.byApiKey||={},a.byEndpoint||={},b.provider&&p(a.byProvider,b.provider,g);let h=b.provider?`${b.model}|${b.provider}`:b.model;if(p(a.byModel,h,{...g,meta:{rawModel:b.model,provider:b.provider}}),b.connectionId){let c=r(b.connectionId,b.model,b.provider);p(a.byAccount,c,{...g,meta:{connectionId:b.connectionId,rawModel:b.model,provider:b.provider}})}let i=s(b.apiKey&&"string"==typeof b.apiKey?b.apiKey:null,b.model,b.provider);p(a.byApiKey,i,{...g,meta:{rawModel:b.model,provider:b.provider,apiKey:b.apiKey||null}});let j=b.endpoint||"Unknown",k=`${j}|${b.model}|${b.provider||"unknown"}`;p(a.byEndpoint,k,{...g,meta:{endpoint:j,rawModel:b.model,provider:b.provider}})}(i,a),b.run("INSERT INTO usageDaily(dateKey, data) VALUES(?, ?) ON CONFLICT(dateKey) DO UPDATE SET data = excluded.data",[f,(0,g.s)(i)]);let j=b.get("SELECT value FROM _meta WHERE key = 'totalRequestsLifetime'"),k=(j?parseInt(j.value,10):0)+1;b.run("INSERT INTO _meta(key, value) VALUES('totalRequestsLifetime', ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value",[String(k)])}),k.items.push(a),k.items.length>50&&(k.items=k.items.slice(-50)),n.emit("update")}catch(a){console.error("Failed to save usage stats:",a)}}function D(a){let b=C(a);return m.add(b),b.finally(()=>m.delete(b)),b}async function E(){for(;m.size>0;)await Promise.allSettled([...m])}function F(a,b){if(null==b)return a.all("SELECT dateKey, data FROM usageDaily");let c=new Date,d=new Date(c.getFullYear(),c.getMonth(),c.getDate()-b+1),e=`${d.getFullYear()}-${String(d.getMonth()+1).padStart(2,"0")}-${String(d.getDate()).padStart(2,"0")}`;return a.all("SELECT dateKey, data FROM usageDaily WHERE dateKey >= ?",[e])}async function G(a="all"){let b=await (0,f.cK)(),[{getProviderConnections:d},{getApiKeys:e},{getProviderNodes:j}]=await Promise.all([Promise.resolve().then(c.bind(c,5781)),Promise.resolve().then(c.bind(c,74452)),Promise.resolve().then(c.bind(c,1129))]),k=[];try{k=await d()}catch{}let l={};for(let a of k)l[a.id]=a.name||a.email||a.id;let m={};try{for(let a of(await j()))a.id&&a.name&&(m[a.id]=a.name)}catch{}let n=[];try{n=await e(!0)}catch{}let v={};for(let a of n)v[a.key]={name:a.name,id:a.id,createdAt:a.createdAt};let w={totalRequests:0,totalPromptTokens:0,totalCompletionTokens:0,totalCachedTokens:0,totalCost:0,byProvider:{},byModel:{},byAccount:{},byApiKey:{},byEndpoint:{},last10Minutes:[],pending:h,activeRequests:[],recentRequests:y(b.all("SELECT timestamp, provider, model, tokens, status FROM usageHistory ORDER BY id DESC LIMIT 100").map(a=>{let b=(0,g.q)(a.tokens,{})||{};return{timestamp:a.timestamp,model:a.model,provider:a.provider||"",promptTokens:b.prompt_tokens||b.input_tokens||0,completionTokens:b.completion_tokens||b.output_tokens||0,status:a.status||"ok"}})),errorProvider:Date.now()-i.ts<1e4?i.provider:""};for(let[a,b]of Object.entries(h.byAccount))for(let[c,d]of Object.entries(b))if(d>0){let b=l[a]||`Account ${a.slice(0,8)}...`,e=c.match(/^(.*) \((.*)\)$/);w.activeRequests.push({model:e?e[1]:c,provider:e?e[2]:"unknown",account:b,count:d})}let x=new Date,z=new Date(6e4*Math.floor(x.getTime()/6e4)),A=new Date(z.getTime()-54e4),B={};for(let a=0;a<10;a++){let b=z.getTime()-(9-a)*6e4;B[b]={requests:0,promptTokens:0,completionTokens:0,cost:0},w.last10Minutes.push(B[b])}for(let a of b.all("SELECT timestamp, promptTokens, completionTokens, cost FROM usageHistory WHERE timestamp >= ? AND timestamp <= ?",[A.toISOString(),x.toISOString()])){let b=6e4*Math.floor(new Date(a.timestamp).getTime()/6e4);B[b]&&(B[b].requests++,B[b].promptTokens+=a.promptTokens||0,B[b].completionTokens+=a.completionTokens||0,B[b].cost+=a.cost||0)}if("24h"!==a&&"today"!==a){let c={"7d":7,"30d":30,"60d":60}[a]||null,d=F(b,c),e=c?Date.now()-864e5*c:0,f=b.all("SELECT timestamp, provider, model, connectionId, apiKey, endpoint, promptTokens, completionTokens, cost, tokens FROM usageHistory WHERE timestamp >= ?",[new Date(e).toISOString()]),h={};for(let a of f){let b=o(a.timestamp);(h[b]||=[]).push(a)}for(let a of d){let b=a.dateKey,c=(0,g.q)(a.data,{});for(let[a,b]of(w.totalPromptTokens+=c.promptTokens||0,w.totalCompletionTokens+=c.completionTokens||0,w.totalCachedTokens+=c.cachedTokens||0,w.totalCost+=c.cost||0,Object.entries(c.byProvider||{})))w.byProvider[a]||(w.byProvider[a]={requests:0,promptTokens:0,completionTokens:0,cachedTokens:0,cost:0}),w.byProvider[a].requests+=b.requests||0,w.byProvider[a].promptTokens+=b.promptTokens||0,w.byProvider[a].completionTokens+=b.completionTokens||0,w.byProvider[a].cachedTokens=(w.byProvider[a].cachedTokens||0)+(b.cachedTokens||0),w.byProvider[a].cost+=b.cost||0;for(let[a,d]of Object.entries(c.byModel||{})){let c=d.rawModel||a.split("|")[0],e=d.provider||a.split("|")[1]||"",f=e?`${c} (${e})`:c,g=m[e]||e;w.byModel[f]||(w.byModel[f]={requests:0,promptTokens:0,completionTokens:0,cachedTokens:0,cost:0,rawModel:c,provider:g,lastUsed:b}),w.byModel[f].requests+=d.requests||0,w.byModel[f].promptTokens+=d.promptTokens||0,w.byModel[f].completionTokens+=d.completionTokens||0,w.byModel[f].cachedTokens+=d.cachedTokens||0,w.byModel[f].cost+=d.cost||0,b>(w.byModel[f].lastUsed||"")&&(w.byModel[f].lastUsed=b)}let d=c.byAccount||{},e=Object.values(d).some(a=>!a?.connectionId),f=h[b]||[];for(let[a,h]of(e&&f.length===(c.requests||0)&&(d=function(a){let b={};for(let c of a){if(!c.connectionId)continue;let a=(0,g.q)(c.tokens,{})||{},d=c.promptTokens||a.prompt_tokens||a.input_tokens||0,e=c.completionTokens||a.completion_tokens||a.output_tokens||0;p(b,r(c.connectionId,c.model,c.provider),{requests:1,promptTokens:d,completionTokens:e,cachedTokens:q(a),cost:c.cost||0,meta:{connectionId:c.connectionId,rawModel:c.model||"",provider:c.provider||""}})}return b}(f)),Object.entries(d))){let c=h.connectionId||a,d=l[c]||`Account ${c.slice(0,8)}...`,e=h.rawModel||"",f=h.provider||"",g=m[f]||f,i=r(c,e,f);w.byAccount[i]||(w.byAccount[i]={requests:0,promptTokens:0,completionTokens:0,cachedTokens:0,cost:0,rawModel:e,provider:g,providerId:f,connectionId:c,accountName:d,lastUsed:b}),w.byAccount[i].requests+=h.requests||0,w.byAccount[i].promptTokens+=h.promptTokens||0,w.byAccount[i].completionTokens+=h.completionTokens||0,w.byAccount[i].cachedTokens+=h.cachedTokens||0,w.byAccount[i].cost+=h.cost||0,b>(w.byAccount[i].lastUsed||"")&&(w.byAccount[i].lastUsed=b)}for(let[a,d]of Object.entries(c.byApiKey||{})){let c=d.rawModel||"",e=d.provider||"",f=m[e]||e,g=d.apiKey,h=g?v[g]:null,i=u(g,h),j=g||"local-no-key";w.byApiKey[a]||(w.byApiKey[a]={requests:0,promptTokens:0,completionTokens:0,cachedTokens:0,cost:0,rawModel:c,provider:f,apiKey:g,keyName:i,apiKeyKey:j,lastUsed:b}),w.byApiKey[a].requests+=d.requests||0,w.byApiKey[a].promptTokens+=d.promptTokens||0,w.byApiKey[a].completionTokens+=d.completionTokens||0,w.byApiKey[a].cachedTokens+=d.cachedTokens||0,w.byApiKey[a].cost+=d.cost||0,b>(w.byApiKey[a].lastUsed||"")&&(w.byApiKey[a].lastUsed=b)}for(let[a,d]of Object.entries(c.byEndpoint||{})){let c=d.endpoint||a.split("|")[0]||"Unknown",e=d.rawModel||"",f=d.provider||"",g=m[f]||f;w.byEndpoint[a]||(w.byEndpoint[a]={requests:0,promptTokens:0,completionTokens:0,cachedTokens:0,cost:0,endpoint:c,rawModel:e,provider:g,lastUsed:b}),w.byEndpoint[a].requests+=d.requests||0,w.byEndpoint[a].promptTokens+=d.promptTokens||0,w.byEndpoint[a].completionTokens+=d.completionTokens||0,w.byEndpoint[a].cachedTokens+=d.cachedTokens||0,w.byEndpoint[a].cost+=d.cost||0,b>(w.byEndpoint[a].lastUsed||"")&&(w.byEndpoint[a].lastUsed=b)}}for(let a of f){let b=a.timestamp,c=a.provider?`${a.model} (${a.provider})`:a.model;if(w.byModel[c]&&new Date(b)>new Date(w.byModel[c].lastUsed)&&(w.byModel[c].lastUsed=b),a.connectionId){let c=r(a.connectionId,a.model,a.provider);w.byAccount[c]&&new Date(b)>new Date(w.byAccount[c].lastUsed)&&(w.byAccount[c].lastUsed=b)}let d=s(a.apiKey&&"string"==typeof a.apiKey?a.apiKey:null,a.model,a.provider);w.byApiKey[d]&&new Date(b)>new Date(w.byApiKey[d].lastUsed)&&(w.byApiKey[d].lastUsed=b);let e=a.endpoint||"Unknown",f=`${e}|${a.model}|${a.provider||"unknown"}`;w.byEndpoint[f]&&new Date(b)>new Date(w.byEndpoint[f].lastUsed)&&(w.byEndpoint[f].lastUsed=b)}}else{let c;if("today"===a){let a=new Date;a.setHours(0,0,0,0),c=a.toISOString()}else c=new Date(Date.now()-864e5).toISOString();for(let a of b.all("SELECT timestamp, provider, model, connectionId, apiKey, endpoint, promptTokens, completionTokens, cost, tokens FROM usageHistory WHERE timestamp >= ?",[c])){let b=(0,g.q)(a.tokens,{})||{},c=b.prompt_tokens||b.input_tokens||0,d=b.completion_tokens||b.output_tokens||0,e=q(b),f=a.cost||0,h=m[a.provider]||a.provider;w.totalPromptTokens+=c,w.totalCompletionTokens+=d,w.totalCachedTokens+=e,w.totalCost+=f,w.byProvider[a.provider]||(w.byProvider[a.provider]={requests:0,promptTokens:0,completionTokens:0,cachedTokens:0,cost:0}),w.byProvider[a.provider].requests++,w.byProvider[a.provider].promptTokens+=c,w.byProvider[a.provider].completionTokens+=d,w.byProvider[a.provider].cachedTokens=(w.byProvider[a.provider].cachedTokens||0)+e,w.byProvider[a.provider].cost+=f;let i=a.provider?`${a.model} (${a.provider})`:a.model;if(w.byModel[i]||(w.byModel[i]={requests:0,promptTokens:0,completionTokens:0,cachedTokens:0,cost:0,rawModel:a.model,provider:h,lastUsed:a.timestamp}),w.byModel[i].requests++,w.byModel[i].promptTokens+=c,w.byModel[i].completionTokens+=d,w.byModel[i].cachedTokens+=e,w.byModel[i].cost+=f,new Date(a.timestamp)>new Date(w.byModel[i].lastUsed)&&(w.byModel[i].lastUsed=a.timestamp),a.connectionId){let b=l[a.connectionId]||`Account ${a.connectionId.slice(0,8)}...`,g=r(a.connectionId,a.model,a.provider);w.byAccount[g]||(w.byAccount[g]={requests:0,promptTokens:0,completionTokens:0,cachedTokens:0,cost:0,rawModel:a.model,provider:h,providerId:a.provider,connectionId:a.connectionId,accountName:b,lastUsed:a.timestamp}),w.byAccount[g].requests++,w.byAccount[g].promptTokens+=c,w.byAccount[g].completionTokens+=d,w.byAccount[g].cachedTokens+=e,w.byAccount[g].cost+=f,new Date(a.timestamp)>new Date(w.byAccount[g].lastUsed)&&(w.byAccount[g].lastUsed=a.timestamp)}if(a.apiKey&&"string"==typeof a.apiKey){let b=v[a.apiKey],g=u(a.apiKey,b),i=s(a.apiKey,a.model,a.provider);w.byApiKey[i]||(w.byApiKey[i]={requests:0,promptTokens:0,completionTokens:0,cachedTokens:0,cost:0,rawModel:a.model,provider:h,apiKey:a.apiKey,keyName:g,apiKeyKey:a.apiKey,lastUsed:a.timestamp});let j=w.byApiKey[i];j.requests++,j.promptTokens+=c,j.completionTokens+=d,j.cachedTokens+=e,j.cost+=f,new Date(a.timestamp)>new Date(j.lastUsed)&&(j.lastUsed=a.timestamp)}else{let b=s(null,a.model,a.provider);w.byApiKey[b]||(w.byApiKey[b]={requests:0,promptTokens:0,completionTokens:0,cachedTokens:0,cost:0,rawModel:a.model,provider:h,apiKey:null,keyName:"Local (No API Key)",apiKeyKey:"local-no-key",lastUsed:a.timestamp});let g=w.byApiKey[b];g.requests++,g.promptTokens+=c,g.completionTokens+=d,g.cachedTokens+=e,g.cost+=f,new Date(a.timestamp)>new Date(g.lastUsed)&&(g.lastUsed=a.timestamp)}let j=a.endpoint||"Unknown",k=`${j}|${a.model}|${a.provider||"unknown"}`;w.byEndpoint[k]||(w.byEndpoint[k]={requests:0,promptTokens:0,completionTokens:0,cachedTokens:0,cost:0,endpoint:j,rawModel:a.model,provider:h,lastUsed:a.timestamp});let n=w.byEndpoint[k];n.requests++,n.promptTokens+=c,n.completionTokens+=d,n.cachedTokens+=e,n.cost+=f,new Date(a.timestamp)>new Date(n.lastUsed)&&(n.lastUsed=a.timestamp)}}return w.totalRequests=Object.values(w.byProvider).reduce((a,b)=>a+(b.requests||0),0),w.byApiKey=function(a,b){let c={};for(let[d,e]of Object.entries(a||{})){let a="string"==typeof e.apiKey&&e.apiKey?e.apiKey:null,f=a?b[a]:null,g=a?f?.id||`external-${t(a)}`:"local-no-key",h={...e,apiKeyKey:g};delete h.apiKey,c[`bucket-${t(d)}`]=h}return c}(w.byApiKey,v),w}async function H(a="7d"){let b=await (0,f.cK)(),c=Date.now();if("today"===a){let a=new Date;a.setHours(0,0,0,0);let c=a.getTime(),d=c+864e5,e=Array.from({length:24},(a,b)=>({label:new Date(c+36e5*b).toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit",hour12:!1}),tokens:0,cost:0}));for(let a of b.all("SELECT timestamp, promptTokens, completionTokens, cost FROM usageHistory WHERE timestamp >= ?",[new Date(c).toISOString()])){let b=new Date(a.timestamp).getTime();if(b<c||b>=d)continue;let f=Math.floor((b-c)/36e5);f>=0&&f<24&&(e[f].tokens+=(a.promptTokens||0)+(a.completionTokens||0),e[f].cost+=a.cost||0)}return e}if("24h"===a){let a=c-864e5,d=Array.from({length:24},(b,c)=>({label:new Date(a+36e5*c).toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit",hour12:!1}),tokens:0,cost:0}));for(let e of b.all("SELECT timestamp, promptTokens, completionTokens, cost FROM usageHistory WHERE timestamp >= ?",[new Date(a).toISOString()])){let b=new Date(e.timestamp).getTime();if(b<a||b>c)continue;let f=Math.min(Math.floor((b-a)/36e5),23);d[f].tokens+=(e.promptTokens||0)+(e.completionTokens||0),d[f].cost+=e.cost||0}return d}let d="7d"===a?7:"30d"===a?30:60,e=new Date,h=F(b,d),i={};for(let a of h)i[a.dateKey]=(0,g.q)(a.data,{});return Array.from({length:d},(a,b)=>{let c=new Date(e);c.setDate(c.getDate()-(d-1-b));let f=i[`${c.getFullYear()}-${String(c.getMonth()+1).padStart(2,"0")}-${String(c.getDate()).padStart(2,"0")}`];return{label:c.toLocaleDateString("en-US",{month:"short",day:"numeric"}),tokens:f?(f.promptTokens||0)+(f.completionTokens||0):0,cost:f&&f.cost||0}})}async function I(a=3e5,b=2){let c=new Map;try{let d=await (0,f.cK)(),e=new Date(Date.now()-a).toISOString(),h=d.all("SELECT provider, connectionId, meta FROM usageHistory WHERE timestamp >= ? AND status = 'ok'",[e]),i=new Map;for(let a of h){if(!a.provider||!a.connectionId)continue;let b=(0,g.q)(a.meta,{}),c=b?.latency?.total;if("number"!=typeof c||c<=0)continue;let d=`${a.provider}|${a.connectionId}`,e=i.get(d)||{total:0,count:0};e.total+=c,e.count+=1,i.set(d,e)}for(let[a,d]of i.entries())d.count>=b&&c.set(a,{avgMs:Math.round(d.total/d.count),samples:d.count})}catch(a){console.error("[usageRepo] getLatencyStats failed:",a.message)}return c}async function J(){}async function K(a=200){try{let b=(await (0,f.cK)()).all("SELECT timestamp, provider, model, connectionId, promptTokens, completionTokens, status, tokens FROM usageHistory ORDER BY id DESC LIMIT ?",[a]);if(!b.length)return[];let d={};try{let{getProviderConnections:a}=await Promise.resolve().then(c.bind(c,5781));for(let b of(await a()))d[b.id]=b.name||b.email||""}catch{}return b.map(a=>{let b=function(a=new Date){let b=a=>String(a).padStart(2,"0");return`${b(a.getDate())}-${b(a.getMonth()+1)}-${a.getFullYear()} ${b(a.getHours())}:${b(a.getMinutes())}:${b(a.getSeconds())}`}(new Date(a.timestamp)),c=a.provider?.toUpperCase()||"-",e=a.model||"-",f=d[a.connectionId]||(a.connectionId?a.connectionId.slice(0,8):"-"),h=a.tokens?(0,g.q)(a.tokens,{}):{},i=a.promptTokens??h.prompt_tokens??"-",j=a.completionTokens??h.completion_tokens??"-";return`${b} | ${e} | ${c} | ${f} | ${i} | ${j} | ${a.status||"-"}`})}catch(a){return console.error("[usageRepo] getRecentLogs failed:",a.message),[]}}}};