zevairouter 1.0.147 → 1.0.149

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 (318) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/cli/app/.next-cli-build/BUILD_ID +1 -1
  3. package/cli/app/.next-cli-build/app-path-routes-manifest.json +10 -10
  4. package/cli/app/.next-cli-build/build-manifest.json +2 -2
  5. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/automation/page_client-reference-manifest.js +1 -1
  6. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  7. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  8. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  9. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  10. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  11. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/context/page_client-reference-manifest.js +1 -1
  12. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  13. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  14. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  15. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  16. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  17. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  18. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  19. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/playground/page_client-reference-manifest.js +1 -1
  20. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  21. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  22. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  23. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  24. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  25. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
  26. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  27. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/terminal/page_client-reference-manifest.js +1 -1
  28. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  29. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  30. package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  31. package/cli/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  32. package/cli/app/.next-cli-build/server/app/_global-error.html +1 -1
  33. package/cli/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  34. package/cli/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  35. package/cli/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  36. package/cli/app/.next-cli-build/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  37. package/cli/app/.next-cli-build/server/app/_global-error.segments/_head.segment.rsc +1 -1
  38. package/cli/app/.next-cli-build/server/app/_global-error.segments/_index.segment.rsc +1 -1
  39. package/cli/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  40. package/cli/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  41. package/cli/app/.next-cli-build/server/app/_not-found.html +1 -1
  42. package/cli/app/.next-cli-build/server/app/_not-found.rsc +3 -3
  43. package/cli/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +3 -3
  44. package/cli/app/.next-cli-build/server/app/_not-found.segments/_head.segment.rsc +1 -1
  45. package/cli/app/.next-cli-build/server/app/_not-found.segments/_index.segment.rsc +3 -3
  46. package/cli/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  47. package/cli/app/.next-cli-build/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  48. package/cli/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  49. package/cli/app/.next-cli-build/server/app/api/models/route.js +1 -1
  50. package/cli/app/.next-cli-build/server/app/api/providers/route.js +1 -1
  51. package/cli/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
  52. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
  53. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
  54. package/cli/app/.next-cli-build/server/app/api/version/route.js +1 -1
  55. package/cli/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
  56. package/cli/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
  57. package/cli/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  58. package/cli/app/.next-cli-build/server/app/callback.html +1 -1
  59. package/cli/app/.next-cli-build/server/app/callback.rsc +3 -3
  60. package/cli/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +3 -3
  61. package/cli/app/.next-cli-build/server/app/callback.segments/_head.segment.rsc +1 -1
  62. package/cli/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +3 -3
  63. package/cli/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +1 -1
  64. package/cli/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  65. package/cli/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
  66. package/cli/app/.next-cli-build/server/app/dashboard/automation.html +1 -1
  67. package/cli/app/.next-cli-build/server/app/dashboard/automation.rsc +5 -5
  68. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation/__PAGE__.segment.rsc +2 -2
  69. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation.segment.rsc +1 -1
  70. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  71. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  72. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_full.segment.rsc +5 -5
  73. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_head.segment.rsc +1 -1
  74. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_index.segment.rsc +3 -3
  75. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_tree.segment.rsc +1 -1
  76. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
  77. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +5 -5
  78. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
  79. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
  80. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  81. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  82. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +5 -5
  83. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
  84. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_index.segment.rsc +3 -3
  85. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
  86. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
  87. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +5 -5
  88. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
  89. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
  90. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  91. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  92. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +5 -5
  93. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
  94. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_index.segment.rsc +3 -3
  95. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
  96. package/cli/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
  97. package/cli/app/.next-cli-build/server/app/dashboard/combos.rsc +5 -5
  98. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
  99. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
  100. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  101. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  102. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +5 -5
  103. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
  104. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_index.segment.rsc +3 -3
  105. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
  106. package/cli/app/.next-cli-build/server/app/dashboard/context.html +1 -1
  107. package/cli/app/.next-cli-build/server/app/dashboard/context.rsc +5 -5
  108. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard/context/__PAGE__.segment.rsc +2 -2
  109. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard/context.segment.rsc +1 -1
  110. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  111. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  112. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_full.segment.rsc +5 -5
  113. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_head.segment.rsc +1 -1
  114. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_index.segment.rsc +3 -3
  115. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_tree.segment.rsc +1 -1
  116. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
  117. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.rsc +5 -5
  118. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
  119. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
  120. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  121. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  122. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +5 -5
  123. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
  124. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_index.segment.rsc +3 -3
  125. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
  126. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
  127. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +5 -5
  128. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
  129. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
  130. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
  131. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  132. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  133. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +5 -5
  134. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
  135. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +3 -3
  136. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +1 -1
  137. package/cli/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
  138. package/cli/app/.next-cli-build/server/app/dashboard/mitm.rsc +5 -5
  139. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
  140. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
  141. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  142. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  143. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +5 -5
  144. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
  145. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_index.segment.rsc +3 -3
  146. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
  147. package/cli/app/.next-cli-build/server/app/dashboard/playground.html +1 -1
  148. package/cli/app/.next-cli-build/server/app/dashboard/playground.rsc +5 -5
  149. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard/playground/__PAGE__.segment.rsc +2 -2
  150. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard/playground.segment.rsc +1 -1
  151. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  152. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  153. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_full.segment.rsc +5 -5
  154. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_head.segment.rsc +1 -1
  155. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_index.segment.rsc +3 -3
  156. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_tree.segment.rsc +1 -1
  157. package/cli/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
  158. package/cli/app/.next-cli-build/server/app/dashboard/profile.rsc +5 -5
  159. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
  160. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
  161. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  162. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  163. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +5 -5
  164. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
  165. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_index.segment.rsc +3 -3
  166. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
  167. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
  168. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.rsc +5 -5
  169. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
  170. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
  171. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  172. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  173. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  174. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +5 -5
  175. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
  176. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_index.segment.rsc +3 -3
  177. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
  178. package/cli/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
  179. package/cli/app/.next-cli-build/server/app/dashboard/providers.rsc +5 -5
  180. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
  181. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  182. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  183. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  184. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +5 -5
  185. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
  186. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_index.segment.rsc +3 -3
  187. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
  188. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
  189. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +5 -5
  190. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
  191. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
  192. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  193. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  194. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +5 -5
  195. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
  196. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +3 -3
  197. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
  198. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.html +1 -1
  199. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.rsc +5 -5
  200. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +2 -2
  201. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe.segment.rsc +1 -1
  202. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  203. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  204. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_full.segment.rsc +5 -5
  205. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_head.segment.rsc +1 -1
  206. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_index.segment.rsc +3 -3
  207. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +1 -1
  208. package/cli/app/.next-cli-build/server/app/dashboard/quota.html +2 -2
  209. package/cli/app/.next-cli-build/server/app/dashboard/quota.rsc +6 -6
  210. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
  211. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
  212. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  213. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  214. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +6 -6
  215. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
  216. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_index.segment.rsc +3 -3
  217. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
  218. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  219. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  220. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +3 -3
  221. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +3 -3
  222. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  223. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +3 -3
  224. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
  225. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  226. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  227. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  228. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  229. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
  230. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.rsc +5 -5
  231. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +2 -2
  232. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver.segment.rsc +1 -1
  233. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  234. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  235. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +5 -5
  236. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_head.segment.rsc +1 -1
  237. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_index.segment.rsc +3 -3
  238. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +1 -1
  239. package/cli/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
  240. package/cli/app/.next-cli-build/server/app/dashboard/translator.rsc +5 -5
  241. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
  242. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
  243. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  244. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  245. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +5 -5
  246. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
  247. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_index.segment.rsc +3 -3
  248. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
  249. package/cli/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
  250. package/cli/app/.next-cli-build/server/app/dashboard/usage.rsc +5 -5
  251. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
  252. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
  253. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  254. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  255. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +5 -5
  256. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
  257. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_index.segment.rsc +3 -3
  258. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
  259. package/cli/app/.next-cli-build/server/app/dashboard.html +1 -1
  260. package/cli/app/.next-cli-build/server/app/dashboard.rsc +5 -5
  261. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
  262. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  263. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  264. package/cli/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +5 -5
  265. package/cli/app/.next-cli-build/server/app/dashboard.segments/_head.segment.rsc +1 -1
  266. package/cli/app/.next-cli-build/server/app/dashboard.segments/_index.segment.rsc +3 -3
  267. package/cli/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +1 -1
  268. package/cli/app/.next-cli-build/server/app/index.html +1 -1
  269. package/cli/app/.next-cli-build/server/app/index.rsc +3 -3
  270. package/cli/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  271. package/cli/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +3 -3
  272. package/cli/app/.next-cli-build/server/app/index.segments/_head.segment.rsc +1 -1
  273. package/cli/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +3 -3
  274. package/cli/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +1 -1
  275. package/cli/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  276. package/cli/app/.next-cli-build/server/app/landing.html +1 -1
  277. package/cli/app/.next-cli-build/server/app/landing.rsc +4 -4
  278. package/cli/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +4 -4
  279. package/cli/app/.next-cli-build/server/app/landing.segments/_head.segment.rsc +1 -1
  280. package/cli/app/.next-cli-build/server/app/landing.segments/_index.segment.rsc +3 -3
  281. package/cli/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +1 -1
  282. package/cli/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +2 -2
  283. package/cli/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
  284. package/cli/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  285. package/cli/app/.next-cli-build/server/app/login.html +1 -1
  286. package/cli/app/.next-cli-build/server/app/login.rsc +4 -4
  287. package/cli/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +4 -4
  288. package/cli/app/.next-cli-build/server/app/login.segments/_head.segment.rsc +1 -1
  289. package/cli/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +3 -3
  290. package/cli/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +1 -1
  291. package/cli/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  292. package/cli/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
  293. package/cli/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  294. package/cli/app/.next-cli-build/server/app-paths-manifest.json +10 -10
  295. package/cli/app/.next-cli-build/server/chunks/3155.js +1 -1
  296. package/cli/app/.next-cli-build/server/chunks/4566.js +1 -1
  297. package/cli/app/.next-cli-build/server/chunks/4746.js +1 -1
  298. package/cli/app/.next-cli-build/server/chunks/5307.js +1 -1
  299. package/cli/app/.next-cli-build/server/chunks/5949.js +3 -3
  300. package/cli/app/.next-cli-build/server/chunks/8306.js +1 -1
  301. package/cli/app/.next-cli-build/server/chunks/8371.js +1 -1
  302. package/cli/app/.next-cli-build/server/chunks/9621.js +1 -1
  303. package/cli/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  304. package/cli/app/.next-cli-build/server/pages/404.html +1 -1
  305. package/cli/app/.next-cli-build/server/pages/500.html +1 -1
  306. package/cli/app/.next-cli-build/static/chunks/{620-375754e53341e85b.js → 620-104e711e028e5a60.js} +1 -1
  307. package/cli/app/CHANGELOG.md +19 -0
  308. package/cli/app/cli/hooks/cloakbrowserRuntime.js +111 -4
  309. package/cli/app/package.json +1 -1
  310. package/cli/hooks/cloakbrowserRuntime.js +111 -4
  311. package/cli/package.json +1 -1
  312. package/package.json +1 -1
  313. package/src/lib/oauth/services/bulkImportBrowserEngine.js +36 -0
  314. package/src/lib/oauth/services/codebuddyCnBulkImportManager.js +603 -181
  315. package/src/lib/oauth/services/codebuddyCnPhoneAutomation.js +97 -47
  316. package/src/lib/oauth/services/kiroBulkImportManager.js +7 -1
  317. /package/cli/app/.next-cli-build/static/{y-U4C09T7DItXT7CZZV41 → w0fFe0wlenV7JedZI_N94}/_buildManifest.js +0 -0
  318. /package/cli/app/.next-cli-build/static/{y-U4C09T7DItXT7CZZV41 → w0fFe0wlenV7JedZI_N94}/_ssgManifest.js +0 -0
@@ -1,3 +1,22 @@
1
+ # v1.0.149 (2026-07-27)
2
+
3
+ ## Fixes
4
+ - **Accurate CodeBuddy CN restriction detection**: post-OTP sessions that retain Tencent's `login_risk_state` and repeatedly resolve to Keycloak login are now reported as `failed_restricted` instead of a generic API-key capture failure.
5
+ - **CORS-independent console probing**: account-session checks prefer the browser context request API, preserving cookies, redirect URLs, response status, and login HTML even when in-page fetch is blocked or collapses to HTTP 0.
6
+ - **Safe restricted-account termination**: confirmed restrictions stop OTP resubmission and skip API-key/manual fallback, while summaries count the terminal result correctly and browser resources close immediately.
7
+
8
+ # v1.0.148 (2026-07-27)
9
+
10
+ ## Fixes
11
+ - **Bounded CodeBuddy CN automation**: browser launch, context creation, console navigation, session probes, API-key requests, manual fallback, resource cleanup, and 5sim settlement can no longer hold a VPS worker indefinitely.
12
+ - **Safe console-session recovery**: login HTML returned with HTTP 200 is rejected as an unauthenticated session, destructive `/login` re-entry is avoided, and OIDC/API retry budgets are shorter and explicit.
13
+ - **Duplicate-key protection**: timed-out or response-less API-key creation is treated as an unknown outcome, stops automatic POST retries, and asks the operator to check existing keys first.
14
+ - **CloakBrowser runtime compatibility**: stale runtime installs are detected by semantic version and upgraded to the supported `0.5.2` series before automation starts.
15
+
16
+ ## Improvements
17
+ - **Lower VPS browser pressure**: low-memory hosts use bounded viewport/DPR fingerprints and skip trackers, media, and non-captcha imagery while preserving challenge resources.
18
+ - **Visible long-request progress**: API-key creation emits a five-second heartbeat so slow CodeBuddy responses remain distinguishable from a frozen job.
19
+
1
20
  # v1.0.147 (2026-07-27)
2
21
 
3
22
  ## Fixes
@@ -39,6 +39,91 @@ function hasPackage(name) {
39
39
  return fs.existsSync(path.join(getRuntimeNodeModules(), name, "package.json"));
40
40
  }
41
41
 
42
+ function parseSemver(value) {
43
+ const match = String(value || "").trim().match(
44
+ /^v?(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/
45
+ );
46
+ if (!match) return null;
47
+ return {
48
+ major: Number.parseInt(match[1], 10),
49
+ minor: Number.parseInt(match[2], 10),
50
+ patch: Number.parseInt(match[3], 10),
51
+ prerelease: match[4] ? match[4].split(".") : [],
52
+ };
53
+ }
54
+
55
+ function comparePrerelease(left, right) {
56
+ if (left.length === 0 && right.length === 0) return 0;
57
+ if (left.length === 0) return 1;
58
+ if (right.length === 0) return -1;
59
+
60
+ const count = Math.max(left.length, right.length);
61
+ for (let i = 0; i < count; i += 1) {
62
+ if (left[i] === undefined) return -1;
63
+ if (right[i] === undefined) return 1;
64
+ if (left[i] === right[i]) continue;
65
+
66
+ const leftNumeric = /^\d+$/.test(left[i]);
67
+ const rightNumeric = /^\d+$/.test(right[i]);
68
+ if (leftNumeric && rightNumeric) {
69
+ return Number.parseInt(left[i], 10) < Number.parseInt(right[i], 10) ? -1 : 1;
70
+ }
71
+ if (leftNumeric !== rightNumeric) return leftNumeric ? -1 : 1;
72
+ return left[i] < right[i] ? -1 : 1;
73
+ }
74
+ return 0;
75
+ }
76
+
77
+ function compareSemver(left, right) {
78
+ for (const key of ["major", "minor", "patch"]) {
79
+ if (left[key] !== right[key]) return left[key] < right[key] ? -1 : 1;
80
+ }
81
+ return comparePrerelease(left.prerelease, right.prerelease);
82
+ }
83
+
84
+ function satisfiesCaretRange(version, range) {
85
+ const installed = parseSemver(version);
86
+ const rangeMatch = String(range || "").trim().match(/^\^\s*(.+)$/);
87
+ const minimum = parseSemver(rangeMatch?.[1]);
88
+ if (!installed || !minimum) return false;
89
+
90
+ // Stable runtime requirements must never accept a prerelease implicitly.
91
+ if (installed.prerelease.length > 0 && minimum.prerelease.length === 0) return false;
92
+
93
+ let upper;
94
+ if (minimum.major > 0) {
95
+ upper = { major: minimum.major + 1, minor: 0, patch: 0, prerelease: [] };
96
+ } else if (minimum.minor > 0) {
97
+ upper = { major: 0, minor: minimum.minor + 1, patch: 0, prerelease: [] };
98
+ } else {
99
+ upper = { major: 0, minor: 0, patch: minimum.patch + 1, prerelease: [] };
100
+ }
101
+
102
+ return compareSemver(installed, minimum) >= 0 && compareSemver(installed, upper) < 0;
103
+ }
104
+
105
+ function getRuntimePackageVersion(name) {
106
+ try {
107
+ const packageJson = JSON.parse(
108
+ fs.readFileSync(path.join(getRuntimeNodeModules(), name, "package.json"), "utf8")
109
+ );
110
+ return typeof packageJson.version === "string" ? packageJson.version : null;
111
+ } catch {
112
+ return null;
113
+ }
114
+ }
115
+
116
+ function isCloakbrowserRuntimeCompatible(mod, installedVersion) {
117
+ return !!mod?.launch && satisfiesCaretRange(installedVersion, CLOAKBROWSER_VERSION);
118
+ }
119
+
120
+ function clearRuntimePackageCache(name) {
121
+ const packageRoot = `${path.join(getRuntimeNodeModules(), name)}${path.sep}`;
122
+ for (const modulePath of Object.keys(require.cache)) {
123
+ if (modulePath.startsWith(packageRoot)) delete require.cache[modulePath];
124
+ }
125
+ }
126
+
42
127
  function tryRequireCloakbrowser() {
43
128
  try {
44
129
  const rreq = getRuntimeRequire();
@@ -83,7 +168,13 @@ function loadCloakbrowserModule() {
83
168
  * playwright-core is the drive peer (no stock Chromium binary download).
84
169
  */
85
170
  function ensureCloakbrowserRuntime({ silent = false } = {}) {
86
- if (cachedReady?.ok && cachedReady.module && tryRequireMmdb() && hasPackage(PLAYWRIGHT_CORE_PACKAGE)) {
171
+ let installedCloakVersion = getRuntimePackageVersion(CLOAKBROWSER_PACKAGE);
172
+ if (
173
+ cachedReady?.ok
174
+ && isCloakbrowserRuntimeCompatible(cachedReady.module, installedCloakVersion)
175
+ && tryRequireMmdb()
176
+ && hasPackage(PLAYWRIGHT_CORE_PACKAGE)
177
+ ) {
87
178
  return cachedReady;
88
179
  }
89
180
 
@@ -94,7 +185,6 @@ function ensureCloakbrowserRuntime({ silent = false } = {}) {
94
185
  process.env.NODE_PATH = env.NODE_PATH;
95
186
  // Re-init module paths for already-running process
96
187
  try {
97
- // eslint-disable-next-line no-underscore-dangle
98
188
  require("module").Module._initPaths();
99
189
  } catch {
100
190
  /* ignore */
@@ -105,7 +195,7 @@ function ensureCloakbrowserRuntime({ silent = false } = {}) {
105
195
  }
106
196
 
107
197
  let mod = tryRequireCloakbrowser();
108
- const needCloak = !mod?.launch;
198
+ const needCloak = !isCloakbrowserRuntimeCompatible(mod, installedCloakVersion);
109
199
  const needMmdb = !tryRequireMmdb() && !hasPackage(MMDB_PACKAGE);
110
200
  const needPwCore = !hasPackage(PLAYWRIGHT_CORE_PACKAGE);
111
201
 
@@ -133,9 +223,12 @@ function ensureCloakbrowserRuntime({ silent = false } = {}) {
133
223
  err.code = "CLOAKBROWSER_INSTALL_FAILED";
134
224
  return { ok: false, error: err };
135
225
  }
226
+
227
+ if (needCloak) clearRuntimePackageCache(CLOAKBROWSER_PACKAGE);
136
228
  }
137
229
 
138
230
  mod = tryRequireCloakbrowser();
231
+ installedCloakVersion = getRuntimePackageVersion(CLOAKBROWSER_PACKAGE);
139
232
  if (!mod?.launch) {
140
233
  const err = new Error(
141
234
  `cloakbrowser installed but launch() is missing. Reinstall: cd "${getRuntimeDir()}" && npm install ${CLOAKBROWSER_PACKAGE}@${CLOAKBROWSER_VERSION} ${MMDB_PACKAGE}@${MMDB_VERSION} ${PLAYWRIGHT_CORE_PACKAGE}@${PLAYWRIGHT_CORE_VERSION}`
@@ -144,6 +237,14 @@ function ensureCloakbrowserRuntime({ silent = false } = {}) {
144
237
  return { ok: false, error: err };
145
238
  }
146
239
 
240
+ if (!satisfiesCaretRange(installedCloakVersion, CLOAKBROWSER_VERSION)) {
241
+ const err = new Error(
242
+ `cloakbrowser version mismatch: installed ${installedCloakVersion || "unknown"}, required ${CLOAKBROWSER_VERSION}. Reinstall: cd "${getRuntimeDir()}" && npm install ${CLOAKBROWSER_PACKAGE}@${CLOAKBROWSER_VERSION}`
243
+ );
244
+ err.code = "CLOAKBROWSER_VERSION_MISMATCH";
245
+ return { ok: false, error: err };
246
+ }
247
+
147
248
  if (!tryRequireMmdb() && !hasPackage(MMDB_PACKAGE)) {
148
249
  const err = new Error(
149
250
  `mmdb-lib is required for geoip: true. Install: cd "${getRuntimeDir()}" && npm install ${MMDB_PACKAGE}@${MMDB_VERSION}`
@@ -152,7 +253,7 @@ function ensureCloakbrowserRuntime({ silent = false } = {}) {
152
253
  return { ok: false, error: err };
153
254
  }
154
255
 
155
- cachedReady = { ok: true, module: mod };
256
+ cachedReady = { ok: true, module: mod, version: installedCloakVersion };
156
257
  return cachedReady;
157
258
  }
158
259
 
@@ -165,4 +266,10 @@ module.exports = {
165
266
  MMDB_VERSION,
166
267
  PLAYWRIGHT_CORE_PACKAGE,
167
268
  PLAYWRIGHT_CORE_VERSION,
269
+ __test__: {
270
+ parseSemver,
271
+ compareSemver,
272
+ satisfiesCaretRange,
273
+ isCloakbrowserRuntimeCompatible,
274
+ },
168
275
  };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zevairouter",
3
- "version": "1.0.147",
3
+ "version": "1.0.149",
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"
@@ -39,6 +39,91 @@ function hasPackage(name) {
39
39
  return fs.existsSync(path.join(getRuntimeNodeModules(), name, "package.json"));
40
40
  }
41
41
 
42
+ function parseSemver(value) {
43
+ const match = String(value || "").trim().match(
44
+ /^v?(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/
45
+ );
46
+ if (!match) return null;
47
+ return {
48
+ major: Number.parseInt(match[1], 10),
49
+ minor: Number.parseInt(match[2], 10),
50
+ patch: Number.parseInt(match[3], 10),
51
+ prerelease: match[4] ? match[4].split(".") : [],
52
+ };
53
+ }
54
+
55
+ function comparePrerelease(left, right) {
56
+ if (left.length === 0 && right.length === 0) return 0;
57
+ if (left.length === 0) return 1;
58
+ if (right.length === 0) return -1;
59
+
60
+ const count = Math.max(left.length, right.length);
61
+ for (let i = 0; i < count; i += 1) {
62
+ if (left[i] === undefined) return -1;
63
+ if (right[i] === undefined) return 1;
64
+ if (left[i] === right[i]) continue;
65
+
66
+ const leftNumeric = /^\d+$/.test(left[i]);
67
+ const rightNumeric = /^\d+$/.test(right[i]);
68
+ if (leftNumeric && rightNumeric) {
69
+ return Number.parseInt(left[i], 10) < Number.parseInt(right[i], 10) ? -1 : 1;
70
+ }
71
+ if (leftNumeric !== rightNumeric) return leftNumeric ? -1 : 1;
72
+ return left[i] < right[i] ? -1 : 1;
73
+ }
74
+ return 0;
75
+ }
76
+
77
+ function compareSemver(left, right) {
78
+ for (const key of ["major", "minor", "patch"]) {
79
+ if (left[key] !== right[key]) return left[key] < right[key] ? -1 : 1;
80
+ }
81
+ return comparePrerelease(left.prerelease, right.prerelease);
82
+ }
83
+
84
+ function satisfiesCaretRange(version, range) {
85
+ const installed = parseSemver(version);
86
+ const rangeMatch = String(range || "").trim().match(/^\^\s*(.+)$/);
87
+ const minimum = parseSemver(rangeMatch?.[1]);
88
+ if (!installed || !minimum) return false;
89
+
90
+ // Stable runtime requirements must never accept a prerelease implicitly.
91
+ if (installed.prerelease.length > 0 && minimum.prerelease.length === 0) return false;
92
+
93
+ let upper;
94
+ if (minimum.major > 0) {
95
+ upper = { major: minimum.major + 1, minor: 0, patch: 0, prerelease: [] };
96
+ } else if (minimum.minor > 0) {
97
+ upper = { major: 0, minor: minimum.minor + 1, patch: 0, prerelease: [] };
98
+ } else {
99
+ upper = { major: 0, minor: 0, patch: minimum.patch + 1, prerelease: [] };
100
+ }
101
+
102
+ return compareSemver(installed, minimum) >= 0 && compareSemver(installed, upper) < 0;
103
+ }
104
+
105
+ function getRuntimePackageVersion(name) {
106
+ try {
107
+ const packageJson = JSON.parse(
108
+ fs.readFileSync(path.join(getRuntimeNodeModules(), name, "package.json"), "utf8")
109
+ );
110
+ return typeof packageJson.version === "string" ? packageJson.version : null;
111
+ } catch {
112
+ return null;
113
+ }
114
+ }
115
+
116
+ function isCloakbrowserRuntimeCompatible(mod, installedVersion) {
117
+ return !!mod?.launch && satisfiesCaretRange(installedVersion, CLOAKBROWSER_VERSION);
118
+ }
119
+
120
+ function clearRuntimePackageCache(name) {
121
+ const packageRoot = `${path.join(getRuntimeNodeModules(), name)}${path.sep}`;
122
+ for (const modulePath of Object.keys(require.cache)) {
123
+ if (modulePath.startsWith(packageRoot)) delete require.cache[modulePath];
124
+ }
125
+ }
126
+
42
127
  function tryRequireCloakbrowser() {
43
128
  try {
44
129
  const rreq = getRuntimeRequire();
@@ -83,7 +168,13 @@ function loadCloakbrowserModule() {
83
168
  * playwright-core is the drive peer (no stock Chromium binary download).
84
169
  */
85
170
  function ensureCloakbrowserRuntime({ silent = false } = {}) {
86
- if (cachedReady?.ok && cachedReady.module && tryRequireMmdb() && hasPackage(PLAYWRIGHT_CORE_PACKAGE)) {
171
+ let installedCloakVersion = getRuntimePackageVersion(CLOAKBROWSER_PACKAGE);
172
+ if (
173
+ cachedReady?.ok
174
+ && isCloakbrowserRuntimeCompatible(cachedReady.module, installedCloakVersion)
175
+ && tryRequireMmdb()
176
+ && hasPackage(PLAYWRIGHT_CORE_PACKAGE)
177
+ ) {
87
178
  return cachedReady;
88
179
  }
89
180
 
@@ -94,7 +185,6 @@ function ensureCloakbrowserRuntime({ silent = false } = {}) {
94
185
  process.env.NODE_PATH = env.NODE_PATH;
95
186
  // Re-init module paths for already-running process
96
187
  try {
97
- // eslint-disable-next-line no-underscore-dangle
98
188
  require("module").Module._initPaths();
99
189
  } catch {
100
190
  /* ignore */
@@ -105,7 +195,7 @@ function ensureCloakbrowserRuntime({ silent = false } = {}) {
105
195
  }
106
196
 
107
197
  let mod = tryRequireCloakbrowser();
108
- const needCloak = !mod?.launch;
198
+ const needCloak = !isCloakbrowserRuntimeCompatible(mod, installedCloakVersion);
109
199
  const needMmdb = !tryRequireMmdb() && !hasPackage(MMDB_PACKAGE);
110
200
  const needPwCore = !hasPackage(PLAYWRIGHT_CORE_PACKAGE);
111
201
 
@@ -133,9 +223,12 @@ function ensureCloakbrowserRuntime({ silent = false } = {}) {
133
223
  err.code = "CLOAKBROWSER_INSTALL_FAILED";
134
224
  return { ok: false, error: err };
135
225
  }
226
+
227
+ if (needCloak) clearRuntimePackageCache(CLOAKBROWSER_PACKAGE);
136
228
  }
137
229
 
138
230
  mod = tryRequireCloakbrowser();
231
+ installedCloakVersion = getRuntimePackageVersion(CLOAKBROWSER_PACKAGE);
139
232
  if (!mod?.launch) {
140
233
  const err = new Error(
141
234
  `cloakbrowser installed but launch() is missing. Reinstall: cd "${getRuntimeDir()}" && npm install ${CLOAKBROWSER_PACKAGE}@${CLOAKBROWSER_VERSION} ${MMDB_PACKAGE}@${MMDB_VERSION} ${PLAYWRIGHT_CORE_PACKAGE}@${PLAYWRIGHT_CORE_VERSION}`
@@ -144,6 +237,14 @@ function ensureCloakbrowserRuntime({ silent = false } = {}) {
144
237
  return { ok: false, error: err };
145
238
  }
146
239
 
240
+ if (!satisfiesCaretRange(installedCloakVersion, CLOAKBROWSER_VERSION)) {
241
+ const err = new Error(
242
+ `cloakbrowser version mismatch: installed ${installedCloakVersion || "unknown"}, required ${CLOAKBROWSER_VERSION}. Reinstall: cd "${getRuntimeDir()}" && npm install ${CLOAKBROWSER_PACKAGE}@${CLOAKBROWSER_VERSION}`
243
+ );
244
+ err.code = "CLOAKBROWSER_VERSION_MISMATCH";
245
+ return { ok: false, error: err };
246
+ }
247
+
147
248
  if (!tryRequireMmdb() && !hasPackage(MMDB_PACKAGE)) {
148
249
  const err = new Error(
149
250
  `mmdb-lib is required for geoip: true. Install: cd "${getRuntimeDir()}" && npm install ${MMDB_PACKAGE}@${MMDB_VERSION}`
@@ -152,7 +253,7 @@ function ensureCloakbrowserRuntime({ silent = false } = {}) {
152
253
  return { ok: false, error: err };
153
254
  }
154
255
 
155
- cachedReady = { ok: true, module: mod };
256
+ cachedReady = { ok: true, module: mod, version: installedCloakVersion };
156
257
  return cachedReady;
157
258
  }
158
259
 
@@ -165,4 +266,10 @@ module.exports = {
165
266
  MMDB_VERSION,
166
267
  PLAYWRIGHT_CORE_PACKAGE,
167
268
  PLAYWRIGHT_CORE_VERSION,
269
+ __test__: {
270
+ parseSemver,
271
+ compareSemver,
272
+ satisfiesCaretRange,
273
+ isCloakbrowserRuntimeCompatible,
274
+ },
168
275
  };
package/cli/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zevairouter-cli",
3
- "version": "1.0.147",
3
+ "version": "1.0.149",
4
4
  "description": "ZevaiRouter CLI - Start and manage ZevaiRouter server",
5
5
  "bin": {
6
6
  "zevai": "./cli.js"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zevairouter",
3
- "version": "1.0.147",
3
+ "version": "1.0.149",
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"
@@ -94,6 +94,42 @@ export function buildAccountFingerprint(seed) {
94
94
  };
95
95
  }
96
96
 
97
+ /**
98
+ * Keep stealth dimensions internally consistent while bounding renderer cost on
99
+ * memory-constrained VPS hosts. Large DPR + 1440p fingerprints can consume most
100
+ * of a 2GB server before the login SPA finishes booting.
101
+ */
102
+ export function compactAccountFingerprint(
103
+ fingerprint,
104
+ { maxWidth = 1280, maxHeight = 800, maxDeviceScaleFactor = 1.25 } = {},
105
+ ) {
106
+ if (!fingerprint || typeof fingerprint !== "object") return fingerprint;
107
+
108
+ const viewport = fingerprint.viewport || {};
109
+ const screen = fingerprint.screen || {};
110
+ const width = Math.min(Number(viewport.width) || maxWidth, maxWidth);
111
+ const height = Math.min(Number(viewport.height) || maxHeight, maxHeight);
112
+ const originalScreenHeight = Number(screen.height) || height;
113
+ const originalAvailHeight = Number(screen.availHeight) || originalScreenHeight;
114
+ const taskbarHeight = Math.max(0, originalScreenHeight - originalAvailHeight);
115
+
116
+ return {
117
+ ...fingerprint,
118
+ viewport: { width, height },
119
+ deviceScaleFactor: Math.min(
120
+ Number(fingerprint.deviceScaleFactor) || 1,
121
+ maxDeviceScaleFactor,
122
+ ),
123
+ screen: {
124
+ ...screen,
125
+ width,
126
+ height,
127
+ availWidth: width,
128
+ availHeight: Math.max(0, height - Math.min(taskbarHeight, 48)),
129
+ },
130
+ };
131
+ }
132
+
97
133
  /**
98
134
  * Light init script for per-account HW/screen noise.
99
135
  * Avoids webdriver/WebGL patches that conflict with CloakBrowser binary stealth.