zevairouter 1.0.66 → 1.0.68

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 (325) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/cli/app/.next-cli-build/BUILD_ID +1 -1
  3. package/cli/app/.next-cli-build/app-path-routes-manifest.json +8 -8
  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/models/test/route.js +1 -1
  51. package/cli/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
  52. package/cli/app/.next-cli-build/server/app/api/providers/route.js +1 -1
  53. package/cli/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
  54. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/input/route.js.nft.json +1 -1
  55. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/resize/route.js.nft.json +1 -1
  56. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/route.js.nft.json +1 -1
  57. package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/stream/route.js.nft.json +1 -1
  58. package/cli/app/.next-cli-build/server/app/api/terminal/session/route.js.nft.json +1 -1
  59. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
  60. package/cli/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
  61. package/cli/app/.next-cli-build/server/app/api/version/route.js +1 -1
  62. package/cli/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
  63. package/cli/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
  64. package/cli/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  65. package/cli/app/.next-cli-build/server/app/callback.html +1 -1
  66. package/cli/app/.next-cli-build/server/app/callback.rsc +3 -3
  67. package/cli/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +3 -3
  68. package/cli/app/.next-cli-build/server/app/callback.segments/_head.segment.rsc +1 -1
  69. package/cli/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +3 -3
  70. package/cli/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +1 -1
  71. package/cli/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  72. package/cli/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
  73. package/cli/app/.next-cli-build/server/app/dashboard/automation.html +1 -1
  74. package/cli/app/.next-cli-build/server/app/dashboard/automation.rsc +5 -5
  75. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation/__PAGE__.segment.rsc +2 -2
  76. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation.segment.rsc +1 -1
  77. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  78. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  79. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_full.segment.rsc +5 -5
  80. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_head.segment.rsc +1 -1
  81. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_index.segment.rsc +3 -3
  82. package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_tree.segment.rsc +1 -1
  83. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
  84. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +5 -5
  85. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
  86. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
  87. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  88. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  89. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +5 -5
  90. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
  91. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_index.segment.rsc +3 -3
  92. package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
  93. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
  94. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +5 -5
  95. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
  96. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
  97. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  98. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  99. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +5 -5
  100. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
  101. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_index.segment.rsc +3 -3
  102. package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
  103. package/cli/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
  104. package/cli/app/.next-cli-build/server/app/dashboard/combos.rsc +5 -5
  105. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
  106. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
  107. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  108. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  109. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +5 -5
  110. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
  111. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_index.segment.rsc +3 -3
  112. package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
  113. package/cli/app/.next-cli-build/server/app/dashboard/context.html +1 -1
  114. package/cli/app/.next-cli-build/server/app/dashboard/context.rsc +5 -5
  115. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard/context/__PAGE__.segment.rsc +2 -2
  116. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard/context.segment.rsc +1 -1
  117. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  118. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  119. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_full.segment.rsc +5 -5
  120. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_head.segment.rsc +1 -1
  121. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_index.segment.rsc +3 -3
  122. package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_tree.segment.rsc +1 -1
  123. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
  124. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.rsc +5 -5
  125. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
  126. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
  127. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  128. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  129. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +5 -5
  130. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
  131. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_index.segment.rsc +3 -3
  132. package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
  133. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
  134. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +5 -5
  135. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
  136. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
  137. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
  138. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  139. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  140. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +5 -5
  141. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
  142. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +3 -3
  143. package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +1 -1
  144. package/cli/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
  145. package/cli/app/.next-cli-build/server/app/dashboard/mitm.rsc +5 -5
  146. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
  147. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
  148. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  149. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  150. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +5 -5
  151. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
  152. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_index.segment.rsc +3 -3
  153. package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
  154. package/cli/app/.next-cli-build/server/app/dashboard/playground.html +1 -1
  155. package/cli/app/.next-cli-build/server/app/dashboard/playground.rsc +5 -5
  156. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard/playground/__PAGE__.segment.rsc +2 -2
  157. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard/playground.segment.rsc +1 -1
  158. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  159. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  160. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_full.segment.rsc +5 -5
  161. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_head.segment.rsc +1 -1
  162. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_index.segment.rsc +3 -3
  163. package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_tree.segment.rsc +1 -1
  164. package/cli/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
  165. package/cli/app/.next-cli-build/server/app/dashboard/profile.rsc +5 -5
  166. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
  167. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
  168. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  169. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  170. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +5 -5
  171. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
  172. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_index.segment.rsc +3 -3
  173. package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
  174. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
  175. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.rsc +5 -5
  176. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
  177. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
  178. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  179. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  180. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  181. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +5 -5
  182. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
  183. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_index.segment.rsc +3 -3
  184. package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
  185. package/cli/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
  186. package/cli/app/.next-cli-build/server/app/dashboard/providers.rsc +5 -5
  187. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
  188. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  189. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  190. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  191. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +5 -5
  192. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
  193. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_index.segment.rsc +3 -3
  194. package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
  195. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
  196. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +5 -5
  197. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
  198. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
  199. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  200. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  201. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +5 -5
  202. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
  203. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +3 -3
  204. package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
  205. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.html +1 -1
  206. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.rsc +5 -5
  207. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +2 -2
  208. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe.segment.rsc +1 -1
  209. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  210. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  211. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_full.segment.rsc +5 -5
  212. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_head.segment.rsc +1 -1
  213. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_index.segment.rsc +3 -3
  214. package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +1 -1
  215. package/cli/app/.next-cli-build/server/app/dashboard/quota.html +2 -2
  216. package/cli/app/.next-cli-build/server/app/dashboard/quota.rsc +6 -6
  217. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
  218. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
  219. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  220. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  221. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +6 -6
  222. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
  223. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_index.segment.rsc +3 -3
  224. package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
  225. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  226. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  227. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +3 -3
  228. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +3 -3
  229. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  230. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +3 -3
  231. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
  232. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  233. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  234. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  235. package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  236. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
  237. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.rsc +5 -5
  238. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +2 -2
  239. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver.segment.rsc +1 -1
  240. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  241. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  242. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +5 -5
  243. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_head.segment.rsc +1 -1
  244. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_index.segment.rsc +3 -3
  245. package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +1 -1
  246. package/cli/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
  247. package/cli/app/.next-cli-build/server/app/dashboard/translator.rsc +5 -5
  248. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
  249. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
  250. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  251. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  252. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +5 -5
  253. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
  254. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_index.segment.rsc +3 -3
  255. package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
  256. package/cli/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
  257. package/cli/app/.next-cli-build/server/app/dashboard/usage.rsc +5 -5
  258. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
  259. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
  260. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  261. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  262. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +5 -5
  263. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
  264. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_index.segment.rsc +3 -3
  265. package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
  266. package/cli/app/.next-cli-build/server/app/dashboard.html +1 -1
  267. package/cli/app/.next-cli-build/server/app/dashboard.rsc +5 -5
  268. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
  269. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  270. package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  271. package/cli/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +5 -5
  272. package/cli/app/.next-cli-build/server/app/dashboard.segments/_head.segment.rsc +1 -1
  273. package/cli/app/.next-cli-build/server/app/dashboard.segments/_index.segment.rsc +3 -3
  274. package/cli/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +1 -1
  275. package/cli/app/.next-cli-build/server/app/index.html +1 -1
  276. package/cli/app/.next-cli-build/server/app/index.rsc +3 -3
  277. package/cli/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  278. package/cli/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +3 -3
  279. package/cli/app/.next-cli-build/server/app/index.segments/_head.segment.rsc +1 -1
  280. package/cli/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +3 -3
  281. package/cli/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +1 -1
  282. package/cli/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  283. package/cli/app/.next-cli-build/server/app/landing.html +1 -1
  284. package/cli/app/.next-cli-build/server/app/landing.rsc +3 -3
  285. package/cli/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +3 -3
  286. package/cli/app/.next-cli-build/server/app/landing.segments/_head.segment.rsc +1 -1
  287. package/cli/app/.next-cli-build/server/app/landing.segments/_index.segment.rsc +3 -3
  288. package/cli/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +1 -1
  289. package/cli/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
  290. package/cli/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
  291. package/cli/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  292. package/cli/app/.next-cli-build/server/app/login.html +1 -1
  293. package/cli/app/.next-cli-build/server/app/login.rsc +4 -4
  294. package/cli/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +4 -4
  295. package/cli/app/.next-cli-build/server/app/login.segments/_head.segment.rsc +1 -1
  296. package/cli/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +3 -3
  297. package/cli/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +1 -1
  298. package/cli/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  299. package/cli/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
  300. package/cli/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  301. package/cli/app/.next-cli-build/server/app-paths-manifest.json +8 -8
  302. package/cli/app/.next-cli-build/server/chunks/3407.js +1 -1
  303. package/cli/app/.next-cli-build/server/chunks/4746.js +1 -1
  304. package/cli/app/.next-cli-build/server/chunks/5949.js +3 -3
  305. package/cli/app/.next-cli-build/server/chunks/6896.js +1 -1
  306. package/cli/app/.next-cli-build/server/chunks/7276.js +2 -2
  307. package/cli/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  308. package/cli/app/.next-cli-build/server/pages/404.html +1 -1
  309. package/cli/app/.next-cli-build/server/pages/500.html +1 -1
  310. package/cli/app/.next-cli-build/static/chunks/{3702-3772f83d7867a26d.js → 3702-9e52be780ed358e2.js} +1 -1
  311. package/cli/app/.next-cli-build/static/chunks/{5497-dd4fed7ea355e6ad.js → 5497-868b3c595af77d1a.js} +1 -1
  312. 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/cli/app/cli/app/cli/app/cli/app/src/lib/terminal/ptyBridge.py +163 -0
  313. 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/cli/app/cli/app/cli/app/src/lib/terminal/ptyBridge.py +163 -0
  314. 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/cli/app/cli/app/src/lib/terminal/ptyBridge.py +163 -0
  315. package/cli/app/cli/hooks/playwrightRuntime.js +84 -17
  316. package/cli/app/package.json +1 -1
  317. package/cli/cli.js +10 -1
  318. package/cli/hooks/playwrightRuntime.js +84 -17
  319. package/cli/package.json +1 -1
  320. package/package.json +1 -1
  321. package/src/app/api/version/route.js +163 -22
  322. package/src/lib/oauth/services/bulkImportBrowserEngine.js +38 -22
  323. package/src/shared/components/Sidebar.js +7 -4
  324. /package/cli/app/.next-cli-build/static/{2RSZhfKmiF-DD-v1D0TnS → uAzRelvWR5AOBsQdc-bGC}/_buildManifest.js +0 -0
  325. /package/cli/app/.next-cli-build/static/{2RSZhfKmiF-DD-v1D0TnS → uAzRelvWR5AOBsQdc-bGC}/_ssgManifest.js +0 -0
@@ -1,10 +1,15 @@
1
1
  // Ensure Playwright + Chromium are usable at runtime. `npm i -g zevairouter`
2
- // installs the playwright npm package but does NOT trigger its postinstall
3
- // browser download under all package managers, so the first bulk-import
4
- // attempt fails with "Executable doesn't exist at .../chrome-headless-shell".
5
- // We download lazily on first launch so users who never touch automation
6
- // aren't billed ~150MB of disk.
2
+ // may not ship a resolvable playwright package under webpack/standalone, and
3
+ // does NOT always trigger browser download. We install into ~/.zevai/runtime
4
+ // and resolve with real Node require (not webpack's registry).
5
+ //
6
+ // Bug we fix (Kiro bulk mass-fail):
7
+ // "playwright installed but cannot be required"
8
+ // → package exists under ~/.zevai/runtime/node_modules/playwright but
9
+ // bare require("playwright") is rewritten by webpack and throws.
10
+ // Same pattern as camoufoxRuntime: createRequire + __non_webpack_require__.
7
11
  const { spawnSync } = require("child_process");
12
+ const { createRequire } = require("module");
8
13
  const fs = require("fs");
9
14
  const path = require("path");
10
15
 
@@ -13,19 +18,50 @@ const { runNpmInstall, getRuntimeDir, getRuntimeNodeModules } = require("./sqlit
13
18
  const PLAYWRIGHT_PACKAGE = "playwright";
14
19
  const PLAYWRIGHT_VERSION = "^1.54.2";
15
20
 
21
+ // Webpack rewrites bare require(); __non_webpack_require__ stays real Node require.
22
+ const nodeRequire =
23
+ typeof __non_webpack_require__ === "function" ? __non_webpack_require__ : require;
24
+
25
+ function getRuntimeRequire() {
26
+ try {
27
+ const anchor = path.join(getRuntimeDir(), "noop.js");
28
+ return createRequire(anchor);
29
+ } catch {
30
+ return null;
31
+ }
32
+ }
33
+
16
34
  let cachedReady = null;
17
35
 
18
36
  function tryRequirePlaywright() {
37
+ // 1) Runtime-anchored createRequire (works under webpack + any cwd)
19
38
  try {
20
- return require(PLAYWRIGHT_PACKAGE);
39
+ const rreq = getRuntimeRequire();
40
+ const candidate = path.join(getRuntimeNodeModules(), PLAYWRIGHT_PACKAGE);
41
+ if (rreq && fs.existsSync(path.join(candidate, "package.json"))) {
42
+ return rreq(candidate);
43
+ }
44
+ } catch {}
45
+
46
+ // 2) Bare real require (global / NODE_PATH)
47
+ try {
48
+ return nodeRequire(PLAYWRIGHT_PACKAGE);
21
49
  } catch {}
50
+
51
+ // 3) Absolute path via nodeRequire
22
52
  try {
23
- const runtimeNm = getRuntimeNodeModules();
24
- const candidate = path.join(runtimeNm, PLAYWRIGHT_PACKAGE);
53
+ const candidate = path.join(getRuntimeNodeModules(), PLAYWRIGHT_PACKAGE);
25
54
  if (fs.existsSync(path.join(candidate, "package.json"))) {
26
- return require(candidate);
55
+ return nodeRequire(candidate);
27
56
  }
28
57
  } catch {}
58
+
59
+ // 4) Resolve from process cwd node_modules (dev)
60
+ try {
61
+ const rreq = createRequire(path.join(process.cwd(), "package.json"));
62
+ return rreq(PLAYWRIGHT_PACKAGE);
63
+ } catch {}
64
+
29
65
  return null;
30
66
  }
31
67
 
@@ -45,11 +81,22 @@ function isChromiumBinaryAvailable() {
45
81
  function findCli() {
46
82
  const candidates = [];
47
83
  try {
48
- const pwPkg = require.resolve("playwright/package.json");
84
+ const rreq = getRuntimeRequire();
85
+ if (rreq) {
86
+ try {
87
+ candidates.push(path.join(path.dirname(rreq.resolve(`${PLAYWRIGHT_PACKAGE}/package.json`)), "cli.js"));
88
+ } catch {}
89
+ try {
90
+ candidates.push(path.join(path.dirname(rreq.resolve("playwright-core/package.json")), "cli.js"));
91
+ } catch {}
92
+ }
93
+ } catch {}
94
+ try {
95
+ const pwPkg = nodeRequire.resolve("playwright/package.json");
49
96
  candidates.push(path.join(path.dirname(pwPkg), "cli.js"));
50
97
  } catch {}
51
98
  try {
52
- const pwCorePkg = require.resolve("playwright-core/package.json");
99
+ const pwCorePkg = nodeRequire.resolve("playwright-core/package.json");
53
100
  candidates.push(path.join(path.dirname(pwCorePkg), "cli.js"));
54
101
  } catch {}
55
102
  try {
@@ -81,9 +128,17 @@ function ensurePlaywrightPackage({ silent = false } = {}) {
81
128
  };
82
129
  }
83
130
 
131
+ // Clear any half-state and re-resolve with createRequire
132
+ cachedReady = null;
84
133
  const installed = tryRequirePlaywright();
85
134
  if (!installed) {
86
- return { ok: false, reason: "playwright installed but cannot be required" };
135
+ return {
136
+ ok: false,
137
+ reason:
138
+ "playwright installed into ~/.zevai/runtime but cannot be required " +
139
+ "(webpack/module path). Restart zevai after install, or run: " +
140
+ 'node -e "require(require(\'path\').join(require(\'os\').homedir(),\'.zevai/runtime/node_modules/playwright\'))"',
141
+ };
87
142
  }
88
143
  return { ok: true, module: installed };
89
144
  }
@@ -96,10 +151,18 @@ function runInstall({ silent = false, timeout = 600_000 } = {}) {
96
151
 
97
152
  if (!silent) console.log("\u23f3 Downloading Playwright Chromium (first run, ~150MB)...");
98
153
 
154
+ // Never honor channel=chrome — Kiro bulk needs bundled Chromium, not /opt/google/chrome
155
+ const env = {
156
+ ...process.env,
157
+ PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: undefined,
158
+ };
159
+ delete env.PLAYWRIGHT_CHROMIUM_CHANNEL;
160
+
99
161
  const res = spawnSync(process.execPath, [cliPath, "install", "chromium"], {
100
162
  stdio: silent ? ["ignore", "pipe", "pipe"] : "inherit",
101
163
  timeout,
102
164
  encoding: "utf8",
165
+ env,
103
166
  });
104
167
 
105
168
  if (res.status === 0) {
@@ -118,14 +181,17 @@ function runInstall({ silent = false, timeout = 600_000 } = {}) {
118
181
  }
119
182
 
120
183
  function ensurePlaywrightRuntime({ silent = false, timeout } = {}) {
121
- if (cachedReady === true) return { ok: true };
184
+ if (cachedReady === true) {
185
+ const mod = tryRequirePlaywright();
186
+ return { ok: true, module: mod };
187
+ }
122
188
 
123
189
  const pkg = ensurePlaywrightPackage({ silent });
124
190
  if (!pkg.ok) {
125
191
  cachedReady = false;
126
192
  const error = new Error(
127
193
  `Playwright not available. ${pkg.reason}. ` +
128
- `Run "npm install -g playwright && npx playwright install chromium" manually, then retry.`
194
+ `Run "npm install -g playwright && npx playwright install chromium" manually, then retry.`
129
195
  );
130
196
  error.code = "PLAYWRIGHT_PACKAGE_MISSING";
131
197
  return { ok: false, error };
@@ -133,19 +199,19 @@ function ensurePlaywrightRuntime({ silent = false, timeout } = {}) {
133
199
 
134
200
  if (isChromiumBinaryAvailable()) {
135
201
  cachedReady = true;
136
- return { ok: true, module: pkg.module };
202
+ return { ok: true, module: pkg.module || tryRequirePlaywright() };
137
203
  }
138
204
 
139
205
  const result = runInstall({ silent, timeout });
140
206
  if (result.ok && isChromiumBinaryAvailable()) {
141
207
  cachedReady = true;
142
- return { ok: true, module: pkg.module };
208
+ return { ok: true, module: pkg.module || tryRequirePlaywright() };
143
209
  }
144
210
 
145
211
  cachedReady = false;
146
212
  const error = new Error(
147
213
  `Playwright Chromium not available. ${result.reason}. ` +
148
- `Run "npx playwright install chromium" manually, then retry.`
214
+ `Run "npx playwright install chromium" manually, then retry.`
149
215
  );
150
216
  error.code = "PLAYWRIGHT_CHROMIUM_MISSING";
151
217
  return { ok: false, error };
@@ -165,4 +231,5 @@ module.exports = {
165
231
  isChromiumBinaryAvailable,
166
232
  resetCache,
167
233
  findPlaywrightCli: findCli,
234
+ tryRequirePlaywright,
168
235
  };
package/cli/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zevairouter-cli",
3
- "version": "1.0.66",
3
+ "version": "1.0.68",
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.66",
3
+ "version": "1.0.68",
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"
@@ -1,34 +1,69 @@
1
+ import fs from "fs";
1
2
  import https from "https";
3
+ import path from "path";
4
+ import { createRequire } from "module";
2
5
  import pkg from "../../../../package.json" with { type: "json" };
3
6
 
7
+ export const dynamic = "force-dynamic";
8
+ export const revalidate = 0;
9
+
4
10
  const NPM_PACKAGE_NAME = "zevairouter";
5
11
 
6
- // Fetch latest version from npm registry
7
- function fetchLatestVersion() {
12
+ // Fetch latest version from npm registry (and common CN mirror fallback).
13
+ function fetchLatestFromUrl(url) {
8
14
  return new Promise((resolve) => {
9
- const req = https.get(
10
- `https://registry.npmjs.org/${NPM_PACKAGE_NAME}/latest`,
11
- { timeout: 4000 },
12
- (res) => {
13
- let data = "";
14
- res.on("data", (chunk) => (data += chunk));
15
- res.on("end", () => {
16
- try {
17
- resolve(JSON.parse(data).version || null);
18
- } catch {
19
- resolve(null);
20
- }
21
- });
15
+ const req = https.get(url, { timeout: 4000 }, (res) => {
16
+ // follow one redirect
17
+ if (res.statusCode && res.statusCode >= 300 && res.statusCode < 400 && res.headers.location) {
18
+ res.resume();
19
+ fetchLatestFromUrl(res.headers.location).then(resolve);
20
+ return;
22
21
  }
23
- );
22
+ let data = "";
23
+ res.on("data", (chunk) => (data += chunk));
24
+ res.on("end", () => {
25
+ try {
26
+ resolve(JSON.parse(data).version || null);
27
+ } catch {
28
+ resolve(null);
29
+ }
30
+ });
31
+ });
24
32
  req.on("error", () => resolve(null));
25
- req.on("timeout", () => { req.destroy(); resolve(null); });
33
+ req.on("timeout", () => {
34
+ req.destroy();
35
+ resolve(null);
36
+ });
26
37
  });
27
38
  }
28
39
 
40
+ async function fetchLatestVersion() {
41
+ const urls = [
42
+ `https://registry.npmjs.org/${NPM_PACKAGE_NAME}/latest`,
43
+ // npmmirror is what many CN/VPS installs hit via npm config — keep in sync
44
+ `https://registry.npmmirror.com/${NPM_PACKAGE_NAME}/latest`,
45
+ ];
46
+ for (const url of urls) {
47
+ const v = await fetchLatestFromUrl(url);
48
+ if (v) return v;
49
+ }
50
+ return null;
51
+ }
52
+
53
+ function parseSemver(v) {
54
+ const m = String(v || "")
55
+ .trim()
56
+ .replace(/^v/i, "")
57
+ .match(/^(\d+)\.(\d+)\.(\d+)/);
58
+ if (!m) return null;
59
+ return [Number(m[1]), Number(m[2]), Number(m[3])];
60
+ }
61
+
62
+ /** @returns {1|0|-1} a>b → 1, a<b → -1, equal/unparseable → 0 */
29
63
  function compareVersions(a, b) {
30
- const pa = a.split(".").map(Number);
31
- const pb = b.split(".").map(Number);
64
+ const pa = parseSemver(a);
65
+ const pb = parseSemver(b);
66
+ if (!pa || !pb) return 0;
32
67
  for (let i = 0; i < 3; i++) {
33
68
  if (pa[i] > pb[i]) return 1;
34
69
  if (pa[i] < pb[i]) return -1;
@@ -36,10 +71,116 @@ function compareVersions(a, b) {
36
71
  return 0;
37
72
  }
38
73
 
74
+ /**
75
+ * Resolve the *installed* package version from disk at request time.
76
+ * Prefer this over the webpack-inlined build-time import so a global npm
77
+ * upgrade + process restart always reflects the new package, and so we can
78
+ * detect "CLI updated but old server still running" mismatches.
79
+ */
80
+ function readJsonVersion(filePath) {
81
+ try {
82
+ if (!filePath || !fs.existsSync(filePath)) return null;
83
+ const v = JSON.parse(fs.readFileSync(filePath, "utf8"))?.version;
84
+ return typeof v === "string" && v.trim() ? v.trim() : null;
85
+ } catch {
86
+ return null;
87
+ }
88
+ }
89
+
90
+ function resolveInstalledVersion() {
91
+ const candidates = [];
92
+
93
+ // 1) Walk up from process.cwd() (standalone often starts in cli/app)
94
+ try {
95
+ let dir = process.cwd();
96
+ for (let i = 0; i < 6; i++) {
97
+ candidates.push(path.join(dir, "package.json"));
98
+ candidates.push(path.join(dir, "cli", "package.json"));
99
+ const parent = path.dirname(dir);
100
+ if (parent === dir) break;
101
+ dir = parent;
102
+ }
103
+ } catch {
104
+ // ignore
105
+ }
106
+
107
+ // 2) Resolve the published package root via Node module resolution
108
+ try {
109
+ const requireFromCwd = createRequire(path.join(process.cwd(), "package.json"));
110
+ candidates.unshift(requireFromCwd.resolve(`${NPM_PACKAGE_NAME}/package.json`));
111
+ } catch {
112
+ // ignore
113
+ }
114
+ try {
115
+ // When server lives under .../zevairouter/cli/app, package root is ../..
116
+ candidates.unshift(path.resolve(process.cwd(), "../../package.json"));
117
+ candidates.unshift(path.resolve(process.cwd(), "../package.json"));
118
+ } catch {
119
+ // ignore
120
+ }
121
+
122
+ // 3) dirname of the running node entry (server.js / cli.js)
123
+ try {
124
+ if (typeof process.argv?.[1] === "string") {
125
+ let dir = path.dirname(path.resolve(process.argv[1]));
126
+ for (let i = 0; i < 5; i++) {
127
+ candidates.push(path.join(dir, "package.json"));
128
+ const parent = path.dirname(dir);
129
+ if (parent === dir) break;
130
+ dir = parent;
131
+ }
132
+ }
133
+ } catch {
134
+ // ignore
135
+ }
136
+
137
+ const seen = new Set();
138
+ for (const file of candidates) {
139
+ const abs = path.resolve(file);
140
+ if (seen.has(abs)) continue;
141
+ seen.add(abs);
142
+ const v = readJsonVersion(abs);
143
+ if (!v) continue;
144
+ // Prefer our package only (skip random nested package.json)
145
+ try {
146
+ const name = JSON.parse(fs.readFileSync(abs, "utf8"))?.name;
147
+ if (name && name !== NPM_PACKAGE_NAME && name !== "zevairouter-cli") continue;
148
+ } catch {
149
+ // keep version anyway
150
+ }
151
+ return v;
152
+ }
153
+
154
+ // 4) Build-time fallback (webpack-inlined)
155
+ return typeof pkg?.version === "string" ? pkg.version : "0.0.0";
156
+ }
157
+
39
158
  export async function GET() {
159
+ const buildVersion = typeof pkg?.version === "string" ? pkg.version : null;
160
+ const installedVersion = resolveInstalledVersion();
161
+ // What the dashboard should treat as "this server": prefer disk install, then build
162
+ const currentVersion = installedVersion || buildVersion || "0.0.0";
163
+
40
164
  const latestVersion = await fetchLatestVersion();
41
- const currentVersion = pkg.version;
42
- const hasUpdate = latestVersion ? compareVersions(latestVersion, currentVersion) > 0 : false;
165
+ const hasUpdate = latestVersion
166
+ ? compareVersions(latestVersion, currentVersion) > 0
167
+ : false;
43
168
 
44
- return Response.json({ currentVersion, latestVersion, hasUpdate });
169
+ return Response.json(
170
+ {
171
+ currentVersion,
172
+ installedVersion,
173
+ buildVersion,
174
+ latestVersion,
175
+ hasUpdate,
176
+ },
177
+ {
178
+ headers: {
179
+ // Never let browser / proxy / Next cache a stale "please update" banner
180
+ "Cache-Control": "no-store, no-cache, must-revalidate, max-age=0",
181
+ Pragma: "no-cache",
182
+ Expires: "0",
183
+ },
184
+ },
185
+ );
45
186
  }
@@ -112,32 +112,25 @@ async function launchChromium({ proxyUrl, headless = true, windowSize = null } =
112
112
  await ensureHeadedDisplayOrThrow();
113
113
  }
114
114
 
115
+ // Prefer runtime helper first — under Next/webpack, dynamic import("playwright")
116
+ // often fails even when ~/.zevai/runtime has the package (Kiro mass-fail).
115
117
  let chromium = null;
116
118
  let importErr = null;
117
- try {
118
- chromium = await importPlaywright();
119
- } catch (err) {
120
- importErr = err;
119
+ const runtime = loadRuntimeHelper("playwrightRuntime");
120
+ if (runtime?.ensurePlaywrightRuntime) {
121
+ const ready = runtime.ensurePlaywrightRuntime({ silent: false });
122
+ if (ready.ok) {
123
+ const mod = ready.module || runtime.loadPlaywrightModule?.() || runtime.tryRequirePlaywright?.();
124
+ chromium = mod?.chromium ?? null;
125
+ } else if (ready.error) {
126
+ importErr = ready.error;
127
+ }
121
128
  }
122
-
123
129
  if (!chromium) {
124
- const runtime = loadRuntimeHelper("playwrightRuntime");
125
- if (runtime?.ensurePlaywrightRuntime) {
126
- const ready = runtime.ensurePlaywrightRuntime({ silent: false });
127
- if (ready.ok) {
128
- try {
129
- chromium = await importPlaywright();
130
- } catch (err) {
131
- importErr = err;
132
- }
133
- if (!chromium) {
134
- const mod = ready.module || runtime.loadPlaywrightModule?.();
135
- chromium = mod?.chromium ?? null;
136
- }
137
- } else if (ready.error) {
138
- if (importErr) ready.error.cause = importErr;
139
- throw ready.error;
140
- }
130
+ try {
131
+ chromium = await importPlaywright();
132
+ } catch (err) {
133
+ importErr = err;
141
134
  }
142
135
  }
143
136
 
@@ -152,8 +145,11 @@ async function launchChromium({ proxyUrl, headless = true, windowSize = null } =
152
145
 
153
146
  const width = windowSize?.width || (wantHeadless ? 1920 : 900);
154
147
  const height = windowSize?.height || (wantHeadless ? 1080 : 700);
148
+ // Force bundled Chromium — never Google Chrome channel (/opt/google/chrome),
149
+ // which is missing on most VPS and caused "distribution 'chrome' is not found".
155
150
  const options = {
156
151
  headless: wantHeadless,
152
+ channel: undefined,
157
153
  args: [
158
154
  "--disable-blink-features=AutomationControlled",
159
155
  "--disable-features=IsolateOrigins,site-per-process,AutomationControlled",
@@ -173,6 +169,14 @@ async function launchChromium({ proxyUrl, headless = true, windowSize = null } =
173
169
  ],
174
170
  ignoreDefaultArgs: ["--enable-automation"],
175
171
  };
172
+ // Explicit bundled Chromium path when it exists (avoids channel=chrome hijack)
173
+ try {
174
+ const { existsSync } = await import("node:fs");
175
+ const exePath = typeof chromium.executablePath === "function" ? chromium.executablePath() : null;
176
+ if (exePath && existsSync(exePath)) options.executablePath = exePath;
177
+ } catch {
178
+ // ignore
179
+ }
176
180
  if (proxyUrl) {
177
181
  const { parsePlaywrightProxy } = await import("./proxyUtils.js");
178
182
  options.proxy = parsePlaywrightProxy(proxyUrl) || { server: proxyUrl };
@@ -188,6 +192,18 @@ async function launchChromium({ proxyUrl, headless = true, windowSize = null } =
188
192
  const browser = await chromium.launch(options);
189
193
  return wrapBrowserWithStealth(browser);
190
194
  }
195
+ // Retry without executablePath if channel/chrome confusion remains
196
+ if (/distribution ['\"]chrome['\"]|Executable doesn't exist|chrome-headless-shell/i.test(msg)) {
197
+ try {
198
+ const retryOpts = { ...options };
199
+ delete retryOpts.channel;
200
+ delete retryOpts.executablePath;
201
+ const browser = await chromium.launch(retryOpts);
202
+ return wrapBrowserWithStealth(browser);
203
+ } catch {
204
+ // fall through
205
+ }
206
+ }
191
207
  throw error;
192
208
  }
193
209
  }
@@ -72,11 +72,14 @@ export default function Sidebar({ onClose }) {
72
72
  .catch(() => {});
73
73
  }, []);
74
74
 
75
- // Lazy check for new npm version on mount
75
+ // Lazy check for new npm version on mount (no-store: avoid sticky update banner)
76
76
  useEffect(() => {
77
- fetch("/api/version")
78
- .then(res => res.json())
79
- .then(data => { if (data.hasUpdate) setUpdateInfo(data); })
77
+ fetch("/api/version", { cache: "no-store" })
78
+ .then((res) => res.json())
79
+ .then((data) => {
80
+ if (data?.hasUpdate) setUpdateInfo(data);
81
+ else setUpdateInfo(null);
82
+ })
80
83
  .catch(() => {});
81
84
  }, []);
82
85