zevairouter 1.0.61 → 1.0.65

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 (403) hide show
  1. package/CHANGELOG.md +36 -8
  2. package/README.md +58 -10
  3. package/README.zh-CN.md +37 -0
  4. package/cli/app/.next-cli-build/BUILD_ID +1 -1
  5. package/cli/app/.next-cli-build/app-path-routes-manifest.json +25 -25
  6. package/cli/app/.next-cli-build/build-manifest.json +2 -2
  7. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/automation/page_client-reference-manifest.js +1 -1
  8. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  9. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  10. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  11. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  12. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  13. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/context/page_client-reference-manifest.js +1 -1
  14. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  15. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  16. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  17. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  18. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  19. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  20. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  21. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/playground/page_client-reference-manifest.js +1 -1
  22. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  23. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  24. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  25. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  26. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  27. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
  28. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  29. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/terminal/page_client-reference-manifest.js +1 -1
  30. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  31. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  32. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  33. package/cli/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  34. package/cli/app/.next-cli-build/server/app/_global-error.html +1 -1
  35. package/cli/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  36. package/cli/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  37. package/cli/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  38. package/cli/app/.next-cli-build/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  39. package/cli/app/.next-cli-build/server/app/_global-error.segments/_head.segment.rsc +1 -1
  40. package/cli/app/.next-cli-build/server/app/_global-error.segments/_index.segment.rsc +1 -1
  41. package/cli/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  42. package/cli/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  43. package/cli/app/.next-cli-build/server/app/_not-found.html +1 -1
  44. package/cli/app/.next-cli-build/server/app/_not-found.rsc +3 -3
  45. package/cli/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +3 -3
  46. package/cli/app/.next-cli-build/server/app/_not-found.segments/_head.segment.rsc +1 -1
  47. package/cli/app/.next-cli-build/server/app/_not-found.segments/_index.segment.rsc +3 -3
  48. package/cli/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  49. package/cli/app/.next-cli-build/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  50. package/cli/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  51. package/cli/app/.next-cli-build/server/app/api/models/route.js +1 -1
  52. package/cli/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
  53. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  54. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  55. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/[jobId]/route.js.nft.json +1 -1
  56. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/latest/route.js.nft.json +1 -1
  57. package/cli/app/.next-cli-build/server/app/api/oauth/antigravity/bulk-import/route.js.nft.json +1 -1
  58. package/cli/app/.next-cli-build/server/app/api/oauth/autoclaw/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  59. package/cli/app/.next-cli-build/server/app/api/oauth/autoclaw/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  60. package/cli/app/.next-cli-build/server/app/api/oauth/autoclaw/bulk-import/[jobId]/route.js.nft.json +1 -1
  61. package/cli/app/.next-cli-build/server/app/api/oauth/autoclaw/bulk-import/latest/route.js.nft.json +1 -1
  62. package/cli/app/.next-cli-build/server/app/api/oauth/autoclaw/bulk-import/route.js.nft.json +1 -1
  63. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  64. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  65. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/[jobId]/route.js.nft.json +1 -1
  66. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/latest/route.js.nft.json +1 -1
  67. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy/bulk-import/route.js.nft.json +1 -1
  68. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/cancel/route.js +1 -1
  69. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  70. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/manual/[workerId]/route.js +1 -1
  71. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  72. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/route.js +1 -1
  73. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/[jobId]/route.js.nft.json +1 -1
  74. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/latest/route.js +1 -1
  75. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/latest/route.js.nft.json +1 -1
  76. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/route.js +1 -1
  77. package/cli/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/route.js.nft.json +1 -1
  78. package/cli/app/.next-cli-build/server/app/api/oauth/grok-cli/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  79. package/cli/app/.next-cli-build/server/app/api/oauth/grok-cli/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  80. package/cli/app/.next-cli-build/server/app/api/oauth/grok-cli/bulk-import/[jobId]/route.js.nft.json +1 -1
  81. package/cli/app/.next-cli-build/server/app/api/oauth/grok-cli/bulk-import/latest/route.js.nft.json +1 -1
  82. package/cli/app/.next-cli-build/server/app/api/oauth/grok-cli/bulk-import/route.js.nft.json +1 -1
  83. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  84. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  85. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/[jobId]/route.js.nft.json +1 -1
  86. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/latest/route.js.nft.json +1 -1
  87. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/bulk-import/route.js.nft.json +1 -1
  88. package/cli/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  89. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/cancel/route.js.nft.json +1 -1
  90. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/manual/[workerId]/route.js.nft.json +1 -1
  91. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/[jobId]/route.js.nft.json +1 -1
  92. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/latest/route.js.nft.json +1 -1
  93. package/cli/app/.next-cli-build/server/app/api/oauth/qoder/bulk-import/route.js.nft.json +1 -1
  94. package/cli/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
  95. package/cli/app/.next-cli-build/server/app/api/providers/route.js +1 -1
  96. package/cli/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
  97. package/cli/app/.next-cli-build/server/app/api/settings/database/route.js +1 -1
  98. package/cli/app/.next-cli-build/server/app/api/settings/route.js +1 -1
  99. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/input/route.js.nft.json +1 -1
  100. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/resize/route.js.nft.json +1 -1
  101. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/route.js.nft.json +1 -1
  102. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/stream/route.js.nft.json +1 -1
  103. package/cli/app/.next-cli-build/server/app/api/terminal/session/route.js.nft.json +1 -1
  104. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
  105. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
  106. package/cli/app/.next-cli-build/server/app/api/version/route.js +1 -1
  107. package/cli/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
  108. package/cli/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
  109. package/cli/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  110. package/cli/app/.next-cli-build/server/app/callback.html +1 -1
  111. package/cli/app/.next-cli-build/server/app/callback.rsc +3 -3
  112. package/cli/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +3 -3
  113. package/cli/app/.next-cli-build/server/app/callback.segments/_head.segment.rsc +1 -1
  114. package/cli/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +3 -3
  115. package/cli/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +1 -1
  116. package/cli/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  117. package/cli/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
  118. package/cli/app/.next-cli-build/server/app/dashboard/automation.html +1 -1
  119. package/cli/app/.next-cli-build/server/app/dashboard/automation.rsc +5 -5
  120. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation/__PAGE__.segment.rsc +2 -2
  121. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation.segment.rsc +1 -1
  122. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  123. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  124. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_full.segment.rsc +5 -5
  125. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_head.segment.rsc +1 -1
  126. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_index.segment.rsc +3 -3
  127. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_tree.segment.rsc +1 -1
  128. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
  129. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +5 -5
  130. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
  131. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
  132. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  133. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  134. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +5 -5
  135. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
  136. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_index.segment.rsc +3 -3
  137. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
  138. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
  139. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +5 -5
  140. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
  141. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
  142. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  143. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  144. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +5 -5
  145. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
  146. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_index.segment.rsc +3 -3
  147. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
  148. package/cli/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
  149. package/cli/app/.next-cli-build/server/app/dashboard/combos.rsc +5 -5
  150. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
  151. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
  152. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  153. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  154. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +5 -5
  155. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
  156. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_index.segment.rsc +3 -3
  157. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
  158. package/cli/app/.next-cli-build/server/app/dashboard/context.html +1 -1
  159. package/cli/app/.next-cli-build/server/app/dashboard/context.rsc +5 -5
  160. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard/context/__PAGE__.segment.rsc +2 -2
  161. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard/context.segment.rsc +1 -1
  162. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  163. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  164. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_full.segment.rsc +5 -5
  165. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_head.segment.rsc +1 -1
  166. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_index.segment.rsc +3 -3
  167. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_tree.segment.rsc +1 -1
  168. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
  169. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.rsc +5 -5
  170. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
  171. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
  172. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  173. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  174. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +5 -5
  175. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
  176. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_index.segment.rsc +3 -3
  177. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
  178. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
  179. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +5 -5
  180. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
  181. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
  182. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
  183. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  184. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  185. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +5 -5
  186. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
  187. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +3 -3
  188. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +1 -1
  189. package/cli/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
  190. package/cli/app/.next-cli-build/server/app/dashboard/mitm.rsc +5 -5
  191. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
  192. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
  193. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  194. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  195. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +5 -5
  196. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
  197. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_index.segment.rsc +3 -3
  198. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
  199. package/cli/app/.next-cli-build/server/app/dashboard/playground.html +1 -1
  200. package/cli/app/.next-cli-build/server/app/dashboard/playground.rsc +5 -5
  201. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard/playground/__PAGE__.segment.rsc +2 -2
  202. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard/playground.segment.rsc +1 -1
  203. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  204. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  205. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_full.segment.rsc +5 -5
  206. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_head.segment.rsc +1 -1
  207. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_index.segment.rsc +3 -3
  208. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_tree.segment.rsc +1 -1
  209. package/cli/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
  210. package/cli/app/.next-cli-build/server/app/dashboard/profile.rsc +5 -5
  211. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
  212. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
  213. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  214. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  215. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +5 -5
  216. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
  217. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_index.segment.rsc +3 -3
  218. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
  219. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
  220. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.rsc +5 -5
  221. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
  222. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
  223. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  224. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  225. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  226. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +5 -5
  227. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
  228. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_index.segment.rsc +3 -3
  229. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
  230. package/cli/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
  231. package/cli/app/.next-cli-build/server/app/dashboard/providers.rsc +5 -5
  232. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
  233. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  234. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  235. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  236. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +5 -5
  237. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
  238. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_index.segment.rsc +3 -3
  239. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
  240. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
  241. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +5 -5
  242. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
  243. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
  244. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  245. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  246. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +5 -5
  247. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
  248. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +3 -3
  249. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
  250. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.html +1 -1
  251. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.rsc +5 -5
  252. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +2 -2
  253. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe.segment.rsc +1 -1
  254. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  255. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  256. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_full.segment.rsc +5 -5
  257. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_head.segment.rsc +1 -1
  258. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_index.segment.rsc +3 -3
  259. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +1 -1
  260. package/cli/app/.next-cli-build/server/app/dashboard/quota.html +2 -2
  261. package/cli/app/.next-cli-build/server/app/dashboard/quota.rsc +6 -6
  262. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
  263. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
  264. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  265. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  266. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +6 -6
  267. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
  268. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_index.segment.rsc +3 -3
  269. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
  270. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  271. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  272. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +3 -3
  273. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +3 -3
  274. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  275. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +3 -3
  276. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
  277. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  278. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  279. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  280. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  281. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
  282. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.rsc +5 -5
  283. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +2 -2
  284. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver.segment.rsc +1 -1
  285. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  286. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  287. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +5 -5
  288. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_head.segment.rsc +1 -1
  289. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_index.segment.rsc +3 -3
  290. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +1 -1
  291. package/cli/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
  292. package/cli/app/.next-cli-build/server/app/dashboard/translator.rsc +5 -5
  293. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
  294. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
  295. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  296. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  297. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +5 -5
  298. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
  299. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_index.segment.rsc +3 -3
  300. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
  301. package/cli/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
  302. package/cli/app/.next-cli-build/server/app/dashboard/usage.rsc +5 -5
  303. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
  304. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
  305. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  306. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  307. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +5 -5
  308. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
  309. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_index.segment.rsc +3 -3
  310. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
  311. package/cli/app/.next-cli-build/server/app/dashboard.html +1 -1
  312. package/cli/app/.next-cli-build/server/app/dashboard.rsc +5 -5
  313. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
  314. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  315. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  316. package/cli/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +5 -5
  317. package/cli/app/.next-cli-build/server/app/dashboard.segments/_head.segment.rsc +1 -1
  318. package/cli/app/.next-cli-build/server/app/dashboard.segments/_index.segment.rsc +3 -3
  319. package/cli/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +1 -1
  320. package/cli/app/.next-cli-build/server/app/index.html +1 -1
  321. package/cli/app/.next-cli-build/server/app/index.rsc +3 -3
  322. package/cli/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  323. package/cli/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +3 -3
  324. package/cli/app/.next-cli-build/server/app/index.segments/_head.segment.rsc +1 -1
  325. package/cli/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +3 -3
  326. package/cli/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +1 -1
  327. package/cli/app/.next-cli-build/server/app/landing/page.js +1 -1
  328. package/cli/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  329. package/cli/app/.next-cli-build/server/app/landing.html +1 -1
  330. package/cli/app/.next-cli-build/server/app/landing.rsc +4 -4
  331. package/cli/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +4 -4
  332. package/cli/app/.next-cli-build/server/app/landing.segments/_head.segment.rsc +1 -1
  333. package/cli/app/.next-cli-build/server/app/landing.segments/_index.segment.rsc +3 -3
  334. package/cli/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +1 -1
  335. package/cli/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +2 -2
  336. package/cli/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
  337. package/cli/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  338. package/cli/app/.next-cli-build/server/app/login.html +1 -1
  339. package/cli/app/.next-cli-build/server/app/login.rsc +4 -4
  340. package/cli/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +4 -4
  341. package/cli/app/.next-cli-build/server/app/login.segments/_head.segment.rsc +1 -1
  342. package/cli/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +3 -3
  343. package/cli/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +1 -1
  344. package/cli/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  345. package/cli/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
  346. package/cli/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  347. package/cli/app/.next-cli-build/server/app-paths-manifest.json +25 -25
  348. package/cli/app/.next-cli-build/server/chunks/3110.js +1 -1
  349. package/cli/app/.next-cli-build/server/chunks/3407.js +1 -1
  350. package/cli/app/.next-cli-build/server/chunks/4746.js +1 -1
  351. package/cli/app/.next-cli-build/server/chunks/5681.js +1 -1
  352. package/cli/app/.next-cli-build/server/chunks/5949.js +8 -3
  353. package/cli/app/.next-cli-build/server/chunks/6896.js +1 -1
  354. package/cli/app/.next-cli-build/server/chunks/7276.js +1 -1
  355. package/cli/app/.next-cli-build/server/chunks/8157.js +1 -1
  356. package/cli/app/.next-cli-build/server/chunks/8371.js +1 -1
  357. package/cli/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  358. package/cli/app/.next-cli-build/server/pages/404.html +1 -1
  359. package/cli/app/.next-cli-build/server/pages/500.html +1 -1
  360. package/cli/app/.next-cli-build/static/chunks/{3702-18f5f207de6e9eeb.js → 3702-a3e0eb456327db63.js} +1 -1
  361. package/cli/app/.next-cli-build/static/chunks/app/landing/page-6621ec8b157e77cc.js +1 -0
  362. package/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/src/lib/terminal/ptyBridge.py +163 -0
  363. package/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/src/lib/terminal/ptyBridge.py +163 -0
  364. package/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/src/lib/terminal/ptyBridge.py +163 -0
  365. package/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/src/lib/terminal/ptyBridge.py +163 -0
  366. package/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/src/lib/terminal/ptyBridge.py +163 -0
  367. package/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/src/lib/terminal/ptyBridge.py +163 -0
  368. package/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/src/lib/terminal/ptyBridge.py +163 -0
  369. package/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/src/lib/terminal/ptyBridge.py +163 -0
  370. package/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/src/lib/terminal/ptyBridge.py +163 -0
  371. package/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/src/lib/terminal/ptyBridge.py +163 -0
  372. package/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/src/lib/terminal/ptyBridge.py +163 -0
  373. package/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/cli/app/src/lib/terminal/ptyBridge.py +163 -0
  374. package/cli/app/cli/hooks/camoufoxRuntime.js +227 -24
  375. package/cli/app/cli/hooks/cloakbrowserRuntime.js +81 -31
  376. package/cli/app/cli/hooks/postinstall.js +3 -3
  377. package/cli/app/package.json +1 -1
  378. package/cli/app/src/lib/oauth/services/displayEnv.js +134 -0
  379. package/cli/hooks/camoufoxRuntime.js +227 -24
  380. package/cli/hooks/cloakbrowserRuntime.js +81 -31
  381. package/cli/hooks/postinstall.js +3 -3
  382. package/cli/package.json +1 -1
  383. package/i18n/README.ja-JP.md +19 -1191
  384. package/i18n/README.ru.md +19 -1293
  385. package/i18n/README.vi.md +19 -1292
  386. package/i18n/README.zh-CN.md +19 -1288
  387. package/open-sse/config/kiroConstants.js +1 -1
  388. package/package.json +1 -1
  389. package/src/app/landing/components/Features.js +2 -2
  390. package/src/app/landing/components/HeroSection.js +1 -1
  391. package/src/app/landing/components/HowItWorks.js +2 -2
  392. package/src/app/landing/page.js +3 -3
  393. package/src/lib/network/outboundProxy.js +37 -23
  394. package/src/lib/oauth/services/bulkImportBrowserEngine.js +220 -22
  395. package/src/lib/oauth/services/codebuddyCnBulkImportManager.js +161 -72
  396. package/src/lib/oauth/services/codebuddyCnPhoneAutomation.js +95 -41
  397. package/src/lib/oauth/services/kiroBulkImportManager.js +18 -13
  398. package/src/mitm/manager.js +1 -1
  399. package/src/shared/constants/providers.js +4 -4
  400. package/cli/app/.next-cli-build/static/chunks/app/landing/page-77b3f78b93a8d0c7.js +0 -1
  401. package/cli/app/src/lib/oauth/services/bulkImportBrowserEngine.js +0 -324
  402. /package/cli/app/.next-cli-build/static/{Fip2gTBHjVyX1dEyiiJZM → UogfdHPvWmU8zuWF5IR-t}/_buildManifest.js +0 -0
  403. /package/cli/app/.next-cli-build/static/{Fip2gTBHjVyX1dEyiiJZM → UogfdHPvWmU8zuWF5IR-t}/_ssgManifest.js +0 -0
@@ -148,12 +148,12 @@ try {
148
148
  warn(`Camoufox skipped: ${e.message}`);
149
149
  }
150
150
 
151
- // 5) CloakBrowser (Grok Turnstile / xAI email bulk)
151
+ // 5) CloakBrowser + mmdb-lib (Grok Turnstile / proxy geoip)
152
152
  try {
153
- log("… CloakBrowser (Grok bulk / Turnstile)");
153
+ log("… CloakBrowser + mmdb-lib (Grok bulk / geoip)");
154
154
  const cloak = warmCloakbrowser();
155
155
  if (cloak.ok) {
156
- log("✓ CloakBrowser ready");
156
+ log("✓ CloakBrowser + mmdb-lib ready");
157
157
  } else {
158
158
  warn(`CloakBrowser skipped: ${cloak.error?.message || "unknown"} — install on first Grok bulk if needed`);
159
159
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zevairouter",
3
- "version": "1.0.61",
3
+ "version": "1.0.65",
4
4
  "description": "Self-hosted AI router: many providers, one OpenAI-compatible /v1 endpoint and dashboard",
5
5
  "bin": {
6
6
  "zevai": "./cli/cli.js"
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Headed browsers need a display. On bare Linux VPS there is no $DISPLAY.
3
+ * We try to start Xvfb automatically so CloakBrowser / Turnstile can run.
4
+ */
5
+ import { spawn, execFileSync } from "node:child_process";
6
+ import fs from "node:fs";
7
+ import path from "node:path";
8
+
9
+ const g = globalThis.__zevaiXvfb ??= {
10
+ proc: null,
11
+ display: null,
12
+ };
13
+
14
+ function which(bin) {
15
+ try {
16
+ return execFileSync("which", [bin], { encoding: "utf8" }).trim() || null;
17
+ } catch {
18
+ return null;
19
+ }
20
+ }
21
+
22
+ export function hasUsableDisplay() {
23
+ // Desktop OS: headed Chromium/Playwright works without $DISPLAY
24
+ // (macOS GUI session / Windows). Only bare Linux servers need Xvfb.
25
+ if (process.platform === "darwin" || process.platform === "win32") {
26
+ return true;
27
+ }
28
+
29
+ const d = process.env.DISPLAY;
30
+ if (!d || !String(d).trim()) return false;
31
+
32
+ // On Linux, verify something is listening if xdpyinfo exists
33
+ if (which("xdpyinfo")) {
34
+ try {
35
+ execFileSync("xdpyinfo", ["-display", d], {
36
+ stdio: "ignore",
37
+ timeout: 2000,
38
+ });
39
+ return true;
40
+ } catch {
41
+ return false;
42
+ }
43
+ }
44
+ return true;
45
+ }
46
+
47
+ function findFreeDisplayNumber() {
48
+ for (let n = 99; n <= 119; n += 1) {
49
+ const lock = path.join("/tmp", `.X${n}-lock`);
50
+ if (!fs.existsSync(lock)) return n;
51
+ }
52
+ return 99;
53
+ }
54
+
55
+ /**
56
+ * Ensure process.env.DISPLAY is set for headed launches.
57
+ * @returns {{ ok: boolean, display?: string, managed?: boolean, error?: Error }}
58
+ */
59
+ export function ensureDisplayForHeadedBrowser() {
60
+ if (hasUsableDisplay()) {
61
+ return {
62
+ ok: true,
63
+ display: process.env.DISPLAY || (process.platform === "darwin" ? "aqua" : ""),
64
+ managed: false,
65
+ };
66
+ }
67
+
68
+ // Only Linux VPS needs a virtual framebuffer
69
+ if (process.platform !== "linux") {
70
+ // Should not reach here (hasUsableDisplay is true on darwin/win32)
71
+ return { ok: true, display: process.env.DISPLAY || "", managed: false };
72
+ }
73
+
74
+ if (g.display && g.proc && !g.proc.killed) {
75
+ process.env.DISPLAY = g.display;
76
+ return { ok: true, display: g.display, managed: true };
77
+ }
78
+
79
+ const xvfb = which("Xvfb");
80
+ if (!xvfb) {
81
+ const err = new Error(
82
+ "This VPS has no graphical display ($DISPLAY). Grok/CloakBrowser needs a virtual screen.\n" +
83
+ "Fix (Ubuntu/Debian as root):\n" +
84
+ " apt-get update && apt-get install -y xvfb\n" +
85
+ "Then restart zevai / zevairouter and retry bulk import.\n" +
86
+ "ZevaiRouter will auto-start Xvfb when it is installed."
87
+ );
88
+ err.code = "XVFB_MISSING";
89
+ return { ok: false, error: err };
90
+ }
91
+
92
+ const num = findFreeDisplayNumber();
93
+ const display = `:${num}`;
94
+ try {
95
+ const proc = spawn(
96
+ xvfb,
97
+ [display, "-screen", "0", "1280x900x24", "-ac", "-nolisten", "tcp"],
98
+ {
99
+ stdio: "ignore",
100
+ detached: true,
101
+ }
102
+ );
103
+ proc.unref();
104
+ g.proc = proc;
105
+ g.display = display;
106
+ process.env.DISPLAY = display;
107
+
108
+ // Brief settle so clients don't connect before X is up
109
+ const start = Date.now();
110
+ while (Date.now() - start < 800) {
111
+ /* spin */
112
+ }
113
+ if (which("xdpyinfo")) {
114
+ try {
115
+ execFileSync("xdpyinfo", ["-display", display], {
116
+ stdio: "ignore",
117
+ timeout: 2000,
118
+ });
119
+ } catch {
120
+ // still proceed — some images lack xdpyinfo
121
+ }
122
+ }
123
+
124
+ console.log(`[display] Started Xvfb on ${display} for headed browser automation`);
125
+ return { ok: true, display, managed: true };
126
+ } catch (error) {
127
+ const err = new Error(
128
+ `Failed to start Xvfb: ${error?.message || error}. Install with: apt-get install -y xvfb`
129
+ );
130
+ err.code = "XVFB_START_FAILED";
131
+ err.cause = error;
132
+ return { ok: false, error: err };
133
+ }
134
+ }
@@ -1,9 +1,16 @@
1
1
  // Ensure camoufox-js (optional stealth Firefox engine) is installed AND its
2
- // browser binary is downloaded. The package is in optionalDependencies, so
3
- // `npm install -g zevairouter` may legitimately ship without it (e.g. when npm
4
- // skipped optional install on a constrained network). When the user picks
5
- // Camoufox in the bulk-import modal we install lazily \u2014 same shape as the
6
- // sqlite/playwright runtime helpers \u2014 instead of failing the worker.
2
+ // browser binary is downloaded + kept in sync with the JS package.
3
+ //
4
+ // Failure mode we fix for end users (Mac + Ubuntu/Linux + Windows):
5
+ // camoufox-js emits fingerprint keys (e.g. audio:seed) that an *old* cached
6
+ // Camoufox binary rejects "Unknown property audio:seed in config".
7
+ //
8
+ // Strategy:
9
+ // 1) Install camoufox-js into ~/.zevai/runtime when missing
10
+ // 2) On every process first-use: if binary missing OR package version changed
11
+ // OR no zevai stamp, run `camoufox-js fetch` (no-op when already current)
12
+ // 3) Export force-refresh so launch can recover after Unknown-property errors
13
+ // 4) Linux: best-effort install of GUI libs via playwright install-deps
7
14
  const { spawnSync } = require("child_process");
8
15
  const { createRequire } = require("module");
9
16
  const fs = require("fs");
@@ -14,6 +21,9 @@ const { runNpmInstall, getRuntimeDir, getRuntimeNodeModules } = require("./sqlit
14
21
 
15
22
  const CAMOUFOX_PACKAGE = "camoufox-js";
16
23
  const CAMOUFOX_VERSION = "^0.11.0";
24
+ // Bump when we need every install to re-check binary even if package version
25
+ // string is unchanged (e.g. known bad binary fingerprints).
26
+ const BINARY_POLICY = "v2-audio-seed";
17
27
 
18
28
  // This helper is reached through webpack-bundled server code, which rewrites
19
29
  // bare `require(...)` into its own module registry — so `require("camoufox-js")`
@@ -37,6 +47,7 @@ function getRuntimeRequire() {
37
47
  }
38
48
 
39
49
  let cachedReady = null;
50
+ let binaryCheckedThisProcess = false;
40
51
 
41
52
  function tryRequireCamoufox() {
42
53
  // 1) Direct absolute-path resolution via a runtime-anchored createRequire —
@@ -62,6 +73,34 @@ function tryRequireCamoufox() {
62
73
  return null;
63
74
  }
64
75
 
76
+ function findCamoufoxPackageDir() {
77
+ try {
78
+ const rreq = getRuntimeRequire();
79
+ const candidate = path.join(getRuntimeNodeModules(), CAMOUFOX_PACKAGE);
80
+ if (fs.existsSync(path.join(candidate, "package.json"))) return candidate;
81
+ if (rreq) {
82
+ try {
83
+ return path.dirname(rreq.resolve(`${CAMOUFOX_PACKAGE}/package.json`));
84
+ } catch {}
85
+ }
86
+ } catch {}
87
+ try {
88
+ return path.dirname(nodeRequire.resolve(`${CAMOUFOX_PACKAGE}/package.json`));
89
+ } catch {}
90
+ return null;
91
+ }
92
+
93
+ function getCamoufoxJsPackageVersion() {
94
+ try {
95
+ const dir = findCamoufoxPackageDir();
96
+ if (!dir) return null;
97
+ const pkg = JSON.parse(fs.readFileSync(path.join(dir, "package.json"), "utf8"));
98
+ return String(pkg.version || "").trim() || null;
99
+ } catch {
100
+ return null;
101
+ }
102
+ }
103
+
65
104
  function findCamoufoxCli() {
66
105
  const candidates = [];
67
106
  // camoufox-js ships its CLI entry as dist/__main__.js (there is no cli.js).
@@ -73,6 +112,8 @@ function findCamoufoxCli() {
73
112
  try {
74
113
  candidates.push(path.join(getRuntimeNodeModules(), CAMOUFOX_PACKAGE, ...rel));
75
114
  } catch {}
115
+ const pkgDir = findCamoufoxPackageDir();
116
+ if (pkgDir) candidates.push(path.join(pkgDir, ...rel));
76
117
  for (const candidate of candidates) {
77
118
  if (candidate && fs.existsSync(candidate)) return candidate;
78
119
  }
@@ -92,6 +133,10 @@ function getCamoufoxBinaryDir() {
92
133
  return path.join(homeDir, ".cache", "camoufox");
93
134
  }
94
135
 
136
+ function getStampPath() {
137
+ return path.join(getCamoufoxBinaryDir(), ".zevai-binary-stamp.json");
138
+ }
139
+
95
140
  // The launch binary camoufox-js resolves per OS (dist/pkgman.js LAUNCH_FILE),
96
141
  // relative to the install dir. Linux is the primary target (Ubuntu VPS).
97
142
  function getCamoufoxLaunchBinary() {
@@ -109,6 +154,70 @@ function isCamoufoxBinaryAvailable() {
109
154
  }
110
155
  }
111
156
 
157
+ function getInstalledBinaryVersion() {
158
+ try {
159
+ const versionPath = path.join(getCamoufoxBinaryDir(), "version.json");
160
+ if (!fs.existsSync(versionPath)) return null;
161
+ const data = JSON.parse(fs.readFileSync(versionPath, "utf8"));
162
+ if (!data?.version) return null;
163
+ return `${data.version}${data.release ? `-${data.release}` : ""}`;
164
+ } catch {
165
+ return null;
166
+ }
167
+ }
168
+
169
+ function readBinaryStamp() {
170
+ try {
171
+ const p = getStampPath();
172
+ if (!fs.existsSync(p)) return null;
173
+ return JSON.parse(fs.readFileSync(p, "utf8"));
174
+ } catch {
175
+ return null;
176
+ }
177
+ }
178
+
179
+ function writeBinaryStamp({ packageVersion, binaryVersion } = {}) {
180
+ try {
181
+ const dir = getCamoufoxBinaryDir();
182
+ fs.mkdirSync(dir, { recursive: true });
183
+ const stamp = {
184
+ policy: BINARY_POLICY,
185
+ packageVersion: packageVersion || getCamoufoxJsPackageVersion(),
186
+ binaryVersion: binaryVersion || getInstalledBinaryVersion(),
187
+ platform: process.platform,
188
+ arch: process.arch,
189
+ fetchedAt: new Date().toISOString(),
190
+ };
191
+ fs.writeFileSync(getStampPath(), JSON.stringify(stamp, null, 2));
192
+ return stamp;
193
+ } catch {
194
+ return null;
195
+ }
196
+ }
197
+
198
+ /**
199
+ * Decide whether we should run `camoufox-js fetch`.
200
+ * - Missing binary → yes
201
+ * - No stamp (legacy installs, Mac beta.24 era) → yes (fetch is no-op if current)
202
+ * - Package version or policy changed → yes
203
+ * - force → yes
204
+ */
205
+ function shouldFetchCamoufoxBinary({ force = false } = {}) {
206
+ if (force) return true;
207
+ if (process.env.ZEVAI_CAMOUFOX_SKIP_FETCH === "1") return false;
208
+ if (!isCamoufoxBinaryAvailable()) return true;
209
+ if (!getInstalledBinaryVersion()) return true;
210
+
211
+ const stamp = readBinaryStamp();
212
+ if (!stamp) return true;
213
+
214
+ const pkgVer = getCamoufoxJsPackageVersion();
215
+ if (pkgVer && stamp.packageVersion && stamp.packageVersion !== pkgVer) return true;
216
+ if (stamp.policy !== BINARY_POLICY) return true;
217
+
218
+ return false;
219
+ }
220
+
112
221
  function ensureCamoufoxPackage({ silent = false } = {}) {
113
222
  const mod = tryRequireCamoufox();
114
223
  if (mod) return { ok: true, module: mod };
@@ -140,15 +249,30 @@ function fetchCamoufoxBinary({ silent = false, timeout = 600_000 } = {}) {
140
249
  if (!cliPath) {
141
250
  return { ok: false, reason: "camoufox-js cli script not found after install" };
142
251
  }
143
- if (!silent) console.log("\u23f3 Downloading Camoufox browser binary (first run, ~150MB)...");
252
+ if (!silent) {
253
+ console.log(
254
+ isCamoufoxBinaryAvailable()
255
+ ? "\u23f3 Checking/updating Camoufox browser binary (keeps fingerprint config compatible)..."
256
+ : "\u23f3 Downloading Camoufox browser binary (first run, ~150–300MB)..."
257
+ );
258
+ }
144
259
  const res = spawnSync(process.execPath, [cliPath, "fetch"], {
145
260
  stdio: silent ? ["ignore", "pipe", "pipe"] : "inherit",
146
261
  timeout,
147
262
  encoding: "utf8",
263
+ env: {
264
+ ...process.env,
265
+ // Never skip: users hit audio:seed / unknown property when binary lags.
266
+ PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: undefined,
267
+ },
148
268
  });
149
269
  if (res.status === 0) {
270
+ writeBinaryStamp({
271
+ packageVersion: getCamoufoxJsPackageVersion(),
272
+ binaryVersion: getInstalledBinaryVersion(),
273
+ });
150
274
  if (!silent) console.log("\u2705 Camoufox browser ready");
151
- return { ok: true };
275
+ return { ok: true, binaryVersion: getInstalledBinaryVersion() };
152
276
  }
153
277
  const stderr = String(res.stderr || "");
154
278
  let reason = "unknown error";
@@ -159,6 +283,66 @@ function fetchCamoufoxBinary({ silent = false, timeout = 600_000 } = {}) {
159
283
  return { ok: false, reason };
160
284
  }
161
285
 
286
+ /**
287
+ * Ensure binary exists and matches current camoufox-js expectations.
288
+ * Safe to call often: after the first successful check this process, subsequent
289
+ * calls are free unless force=true.
290
+ */
291
+ function ensureCamoufoxBinary({ silent = false, force = false } = {}) {
292
+ if (!force && binaryCheckedThisProcess && isCamoufoxBinaryAvailable()) {
293
+ return { ok: true, skipped: "already-checked", binaryVersion: getInstalledBinaryVersion() };
294
+ }
295
+
296
+ if (!shouldFetchCamoufoxBinary({ force })) {
297
+ // Stamp already valid — still write stamp if somehow missing binary version field
298
+ if (!readBinaryStamp()) {
299
+ writeBinaryStamp();
300
+ }
301
+ binaryCheckedThisProcess = true;
302
+ return { ok: true, skipped: "up-to-date", binaryVersion: getInstalledBinaryVersion() };
303
+ }
304
+
305
+ const fetched = fetchCamoufoxBinary({ silent });
306
+ if (!fetched.ok) {
307
+ // If we already have *some* binary, degrade gracefully — launch path will
308
+ // sanitize unsupported fingerprint keys. Only hard-fail when missing entirely.
309
+ if (isCamoufoxBinaryAvailable()) {
310
+ if (!silent) {
311
+ console.log(
312
+ `\u26a0 Camoufox binary update failed (${fetched.reason}); using existing binary with config sanitization.`
313
+ );
314
+ }
315
+ binaryCheckedThisProcess = true;
316
+ return {
317
+ ok: true,
318
+ degraded: true,
319
+ reason: fetched.reason,
320
+ binaryVersion: getInstalledBinaryVersion(),
321
+ };
322
+ }
323
+ return fetched;
324
+ }
325
+
326
+ binaryCheckedThisProcess = true;
327
+ return fetched;
328
+ }
329
+
330
+ /**
331
+ * Force re-download after launch errors like "Unknown property audio:seed".
332
+ * Clears process cache so the next ensure re-checks.
333
+ */
334
+ function refreshCamoufoxBinary({ silent = false } = {}) {
335
+ binaryCheckedThisProcess = false;
336
+ cachedReady = null;
337
+ try {
338
+ const stamp = getStampPath();
339
+ if (fs.existsSync(stamp)) fs.unlinkSync(stamp);
340
+ } catch {
341
+ // ignore
342
+ }
343
+ return ensureCamoufoxBinary({ silent, force: true });
344
+ }
345
+
162
346
  function findPlaywrightCli() {
163
347
  const candidates = [];
164
348
  for (const pkg of ["playwright", "playwright-core"]) {
@@ -184,7 +368,11 @@ function findPlaywrightCli() {
184
368
  function ensureLinuxBrowserDeps({ silent = false } = {}) {
185
369
  if (process.platform !== "linux") return { ok: true, skipped: "not-linux" };
186
370
  if (typeof process.getuid === "function" && process.getuid() !== 0) {
187
- if (!silent) console.log("\u2139 Skipping auto-install of Camoufox system libs (not root). If Camoufox fails to launch, run: npx playwright install-deps firefox");
371
+ if (!silent) {
372
+ console.log(
373
+ "\u2139 Skipping auto-install of Camoufox system libs (not root). If Camoufox fails to launch, run: npx playwright install-deps firefox"
374
+ );
375
+ }
188
376
  return { ok: true, skipped: "not-root" };
189
377
  }
190
378
  const cliPath = findPlaywrightCli();
@@ -199,37 +387,41 @@ function ensureLinuxBrowserDeps({ silent = false } = {}) {
199
387
  if (!silent) console.log("\u2705 Camoufox system libraries ready");
200
388
  return { ok: true };
201
389
  }
202
- if (!silent) console.log("\u26a0 Could not auto-install system libs; if Camoufox fails to launch run: npx playwright install-deps firefox");
390
+ if (!silent) {
391
+ console.log(
392
+ "\u26a0 Could not auto-install system libs; if Camoufox fails to launch run: npx playwright install-deps firefox"
393
+ );
394
+ }
203
395
  return { ok: false, reason: String(res.stderr || "").trim().split(/\r?\n/).pop()?.slice(0, 200) };
204
396
  }
205
397
 
206
- function ensureCamoufoxRuntime({ silent = false } = {}) {
207
- if (cachedReady === true) return { ok: true };
398
+ function ensureCamoufoxRuntime({ silent = false, forceBinaryRefresh = false } = {}) {
399
+ if (cachedReady === true && !forceBinaryRefresh) {
400
+ return { ok: true, module: tryRequireCamoufox() };
401
+ }
208
402
 
209
403
  const pkg = ensureCamoufoxPackage({ silent });
210
404
  if (!pkg.ok) {
211
405
  cachedReady = false;
212
406
  const error = new Error(
213
407
  `Camoufox engine not available. ${pkg.reason}. ` +
214
- `Install manually with "npm install -g camoufox-js && npx camoufox-js fetch", then retry. ` +
215
- `You can also switch back to the Chromium engine in the bulk-import modal.`
408
+ `Install manually with "npm install -g camoufox-js && npx camoufox-js fetch", then retry. ` +
409
+ `You can also switch back to the Chromium engine in the bulk-import modal.`
216
410
  );
217
411
  error.code = "CAMOUFOX_PACKAGE_MISSING";
218
412
  return { ok: false, error };
219
413
  }
220
414
 
221
- if (!isCamoufoxBinaryAvailable()) {
222
- const fetched = fetchCamoufoxBinary({ silent });
223
- if (!fetched.ok) {
224
- cachedReady = false;
225
- const error = new Error(
226
- `Camoufox browser binary not downloaded. ${fetched.reason}. ` +
415
+ const binary = ensureCamoufoxBinary({ silent, force: forceBinaryRefresh });
416
+ if (!binary.ok) {
417
+ cachedReady = false;
418
+ const error = new Error(
419
+ `Camoufox browser binary not downloaded. ${binary.reason}. ` +
227
420
  `Run "npx camoufox-js fetch" manually, then retry. ` +
228
421
  `You can also switch back to the Chromium engine in the bulk-import modal.`
229
- );
230
- error.code = "CAMOUFOX_BINARY_MISSING";
231
- return { ok: false, error };
232
- }
422
+ );
423
+ error.code = "CAMOUFOX_BINARY_MISSING";
424
+ return { ok: false, error };
233
425
  }
234
426
 
235
427
  // Ensure Linux GUI libraries are present (idempotent). Runs even when the
@@ -238,7 +430,12 @@ function ensureCamoufoxRuntime({ silent = false } = {}) {
238
430
  ensureLinuxBrowserDeps({ silent });
239
431
 
240
432
  cachedReady = true;
241
- return { ok: true, module: pkg.module };
433
+ return {
434
+ ok: true,
435
+ module: pkg.module,
436
+ binaryVersion: binary.binaryVersion || getInstalledBinaryVersion(),
437
+ binaryDegraded: Boolean(binary.degraded),
438
+ };
242
439
  }
243
440
 
244
441
  function loadCamoufoxModule() {
@@ -247,11 +444,17 @@ function loadCamoufoxModule() {
247
444
 
248
445
  function resetCache() {
249
446
  cachedReady = null;
447
+ binaryCheckedThisProcess = false;
250
448
  }
251
449
 
252
450
  module.exports = {
253
451
  ensureCamoufoxRuntime,
452
+ ensureCamoufoxBinary,
453
+ refreshCamoufoxBinary,
254
454
  loadCamoufoxModule,
255
455
  isCamoufoxBinaryAvailable,
456
+ getInstalledBinaryVersion,
457
+ getCamoufoxJsPackageVersion,
458
+ getCamoufoxBinaryDir,
256
459
  resetCache,
257
460
  };
@@ -1,14 +1,22 @@
1
1
  // Lazy-install helper for cloakbrowser (stealth Chromium that can pass Turnstile).
2
2
  // Same shape as camoufoxRuntime / playwrightRuntime — optional package, install on demand.
3
+ // Also installs mmdb-lib (required by cloakbrowser when geoip: true for proxy timezone match).
3
4
  const { createRequire } = require("module");
4
5
  const fs = require("fs");
5
6
  const path = require("path");
6
7
 
7
- const { runNpmInstall, getRuntimeDir, getRuntimeNodeModules, summarizeNpmError } = require("./sqliteRuntime");
8
+ const {
9
+ runNpmInstall,
10
+ getRuntimeDir,
11
+ getRuntimeNodeModules,
12
+ summarizeNpmError,
13
+ buildEnvWithRuntime,
14
+ } = require("./sqliteRuntime");
8
15
 
9
16
  const CLOAKBROWSER_PACKAGE = "cloakbrowser";
10
- // Keep in sync with package.json optionalDependencies
11
17
  const CLOAKBROWSER_VERSION = "^0.3.32";
18
+ const MMDB_PACKAGE = "mmdb-lib";
19
+ const MMDB_VERSION = "^3.0.2";
12
20
 
13
21
  const nodeRequire =
14
22
  typeof __non_webpack_require__ === "function" ? __non_webpack_require__ : require;
@@ -24,6 +32,10 @@ function getRuntimeRequire() {
24
32
 
25
33
  let cachedReady = null;
26
34
 
35
+ function hasPackage(name) {
36
+ return fs.existsSync(path.join(getRuntimeNodeModules(), name, "package.json"));
37
+ }
38
+
27
39
  function tryRequireCloakbrowser() {
28
40
  try {
29
41
  const rreq = getRuntimeRequire();
@@ -41,14 +53,20 @@ function tryRequireCloakbrowser() {
41
53
  return nodeRequire(candidate);
42
54
  }
43
55
  } catch {}
44
- // Dev / user global installs
56
+ return null;
57
+ }
58
+
59
+ function tryRequireMmdb() {
45
60
  try {
46
- const home = process.env.HOME || process.env.USERPROFILE || "";
47
- const aurix = path.join(home, ".aurix/agent/node_modules", CLOAKBROWSER_PACKAGE);
48
- if (fs.existsSync(path.join(aurix, "package.json"))) {
49
- return nodeRequire(aurix);
61
+ const rreq = getRuntimeRequire();
62
+ const candidate = path.join(getRuntimeNodeModules(), MMDB_PACKAGE);
63
+ if (rreq && fs.existsSync(path.join(candidate, "package.json"))) {
64
+ return rreq(candidate);
50
65
  }
51
66
  } catch {}
67
+ try {
68
+ return nodeRequire(MMDB_PACKAGE);
69
+ } catch {}
52
70
  return null;
53
71
  }
54
72
 
@@ -56,45 +74,75 @@ function loadCloakbrowserModule() {
56
74
  return tryRequireCloakbrowser();
57
75
  }
58
76
 
77
+ /**
78
+ * Ensure cloakbrowser + mmdb-lib are available under ~/.zevai/runtime.
79
+ * mmdb-lib is required when launching with geoip: true (proxy timezone/locale).
80
+ */
59
81
  function ensureCloakbrowserRuntime({ silent = false } = {}) {
60
- if (cachedReady?.ok && cachedReady.module) {
82
+ if (cachedReady?.ok && cachedReady.module && tryRequireMmdb()) {
61
83
  return cachedReady;
62
84
  }
63
85
 
64
- let mod = tryRequireCloakbrowser();
65
- if (mod?.launch) {
66
- cachedReady = { ok: true, module: mod };
67
- return cachedReady;
86
+ // Inject runtime node_modules into resolution for cloakbrowser's require("mmdb-lib")
87
+ try {
88
+ const env = buildEnvWithRuntime(process.env);
89
+ if (env.NODE_PATH && !process.env.NODE_PATH?.includes(getRuntimeNodeModules())) {
90
+ process.env.NODE_PATH = env.NODE_PATH;
91
+ // Re-init module paths for already-running process
92
+ try {
93
+ // eslint-disable-next-line no-underscore-dangle
94
+ require("module").Module._initPaths();
95
+ } catch {
96
+ /* ignore */
97
+ }
98
+ }
99
+ } catch {
100
+ /* ignore */
68
101
  }
69
102
 
70
- if (!silent) {
71
- console.log(`[cloakbrowser] Installing ${CLOAKBROWSER_PACKAGE}@${CLOAKBROWSER_VERSION} into runtime…`);
103
+ let mod = tryRequireCloakbrowser();
104
+ const needCloak = !mod?.launch;
105
+ const needMmdb = !tryRequireMmdb() && !hasPackage(MMDB_PACKAGE);
106
+
107
+ if (needCloak || needMmdb) {
108
+ const pkgs = [];
109
+ if (needCloak) pkgs.push(`${CLOAKBROWSER_PACKAGE}@${CLOAKBROWSER_VERSION}`);
110
+ if (needMmdb) pkgs.push(`${MMDB_PACKAGE}@${MMDB_VERSION}`);
111
+
112
+ if (!silent) {
113
+ console.log(`[cloakbrowser] Installing ${pkgs.join(", ")} into runtime…`);
114
+ }
115
+
116
+ const installRes = runNpmInstall({
117
+ cwd: getRuntimeDir(),
118
+ pkgs,
119
+ timeout: 300_000,
120
+ });
121
+
122
+ if (!installRes.ok) {
123
+ const reason = summarizeNpmError(installRes.stderr || installRes.stdout || "");
124
+ const err = new Error(
125
+ `Failed to install ${pkgs.join(", ")}. On the host run: cd "${getRuntimeDir()}" && npm install ${pkgs.join(" ")} — ${reason}`
126
+ );
127
+ err.code = "CLOAKBROWSER_INSTALL_FAILED";
128
+ return { ok: false, error: err };
129
+ }
72
130
  }
73
131
 
74
- // runNpmInstall expects a single options object: { cwd, pkgs, extraArgs, timeout }
75
- // (NOT positional args). Wrong call shape caused: "pkgs is not iterable" / toast
76
- // "Failed to install cloakbrowser … b is not iterable" on first Grok bulk use.
77
- const installRes = runNpmInstall({
78
- cwd: getRuntimeDir(),
79
- pkgs: [`${CLOAKBROWSER_PACKAGE}@${CLOAKBROWSER_VERSION}`],
80
- timeout: 300_000,
81
- });
82
-
83
- if (!installRes.ok) {
84
- const reason = summarizeNpmError(installRes.stderr || installRes.stdout || "");
132
+ mod = tryRequireCloakbrowser();
133
+ if (!mod?.launch) {
85
134
  const err = new Error(
86
- `Failed to install cloakbrowser. On the host run: cd "${getRuntimeDir()}" && npm install ${CLOAKBROWSER_PACKAGE}@${CLOAKBROWSER_VERSION} ${reason}`
135
+ `cloakbrowser installed but launch() is missing. Reinstall: cd "${getRuntimeDir()}" && npm install ${CLOAKBROWSER_PACKAGE}@${CLOAKBROWSER_VERSION} ${MMDB_PACKAGE}@${MMDB_VERSION}`
87
136
  );
88
- err.code = "CLOAKBROWSER_INSTALL_FAILED";
137
+ err.code = "CLOAKBROWSER_API_MISMATCH";
89
138
  return { ok: false, error: err };
90
139
  }
91
140
 
92
- mod = tryRequireCloakbrowser();
93
- if (!mod?.launch) {
141
+ if (!tryRequireMmdb() && !hasPackage(MMDB_PACKAGE)) {
94
142
  const err = new Error(
95
- `cloakbrowser installed but launch() is missing. Reinstall: cd "${getRuntimeDir()}" && npm install ${CLOAKBROWSER_PACKAGE}@${CLOAKBROWSER_VERSION}`
143
+ `mmdb-lib is required for geoip: true. Install: cd "${getRuntimeDir()}" && npm install ${MMDB_PACKAGE}@${MMDB_VERSION}`
96
144
  );
97
- err.code = "CLOAKBROWSER_API_MISMATCH";
145
+ err.code = "MMDB_MISSING";
98
146
  return { ok: false, error: err };
99
147
  }
100
148
 
@@ -107,4 +155,6 @@ module.exports = {
107
155
  loadCloakbrowserModule,
108
156
  CLOAKBROWSER_PACKAGE,
109
157
  CLOAKBROWSER_VERSION,
158
+ MMDB_PACKAGE,
159
+ MMDB_VERSION,
110
160
  };