zevairouter 1.0.67 → 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 (319) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/cli/app/.next-cli-build/BUILD_ID +1 -1
  3. package/cli/app/.next-cli-build/app-path-routes-manifest.json +29 -29
  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 +29 -29
  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 +1 -1
  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-60b8407e95e0ae8f.js → 3702-9e52be780ed358e2.js} +1 -1
  311. 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
  312. package/cli/app/cli/hooks/playwrightRuntime.js +84 -17
  313. package/cli/app/package.json +1 -1
  314. package/cli/hooks/playwrightRuntime.js +84 -17
  315. package/cli/package.json +1 -1
  316. package/package.json +1 -1
  317. package/src/lib/oauth/services/bulkImportBrowserEngine.js +38 -22
  318. /package/cli/app/.next-cli-build/static/{iVBk105jGtR_XdrL-iFq4 → uAzRelvWR5AOBsQdc-bGC}/_buildManifest.js +0 -0
  319. /package/cli/app/.next-cli-build/static/{iVBk105jGtR_XdrL-iFq4 → uAzRelvWR5AOBsQdc-bGC}/_ssgManifest.js +0 -0
@@ -0,0 +1,163 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Minimal PTY bridge for ZevaiRouter web terminal.
4
+
5
+ stdin -> PTY master (keystrokes)
6
+ stdout <- PTY master (shell output), raw binary
7
+ stderr = control / errors (utf-8 text lines)
8
+
9
+ Optional control on a side channel is not needed: resize arrives as
10
+ OSC-like escape on stdin: \\x1b]9999;<cols>;<rows>\\x07
11
+ """
12
+ from __future__ import annotations
13
+
14
+ import errno
15
+ import fcntl
16
+ import os
17
+ import select
18
+ import signal
19
+ import struct
20
+ import sys
21
+ import termios
22
+
23
+
24
+ def set_winsize(fd: int, rows: int, cols: int) -> None:
25
+ try:
26
+ packed = struct.pack("HHHH", max(5, rows), max(20, cols), 0, 0)
27
+ fcntl.ioctl(fd, termios.TIOCSWINSZ, packed)
28
+ except Exception:
29
+ pass
30
+
31
+
32
+ def main() -> int:
33
+ cols = int(sys.argv[1]) if len(sys.argv) > 1 else 120
34
+ rows = int(sys.argv[2]) if len(sys.argv) > 2 else 40
35
+ shell = os.environ.get("SHELL") or ("/bin/bash" if os.path.exists("/bin/bash") else "/bin/sh")
36
+ cwd = os.path.expanduser("~")
37
+
38
+ pid, master = pty_fork = _fork_pty()
39
+ if pid == 0:
40
+ # child
41
+ try:
42
+ os.chdir(cwd)
43
+ except Exception:
44
+ pass
45
+ os.environ.setdefault("TERM", "xterm-256color")
46
+ os.environ.setdefault("COLORTERM", "truecolor")
47
+ os.environ.setdefault("FORCE_COLOR", "1")
48
+ try:
49
+ os.execv(shell, [shell, "-il"])
50
+ except Exception:
51
+ os.execv("/bin/sh", ["/bin/sh", "-i"])
52
+ return 1
53
+
54
+ set_winsize(master, rows, cols)
55
+
56
+ # Non-blocking master + stdin
57
+ for fd in (master, sys.stdin.fileno()):
58
+ fl = fcntl.fcntl(fd, fcntl.F_GETFL)
59
+ fcntl.fcntl(fd, fcntl.F_SETFL, fl | os.O_NONBLOCK)
60
+
61
+ # Binary stdout
62
+ stdout = sys.stdout.buffer
63
+ stdin = sys.stdin.buffer
64
+
65
+ resize_buf = b""
66
+
67
+ def handle_resize_escape(chunk: bytes) -> bytes:
68
+ """Strip and apply embedded resize escapes, return remaining bytes."""
69
+ nonlocal resize_buf
70
+ data = resize_buf + chunk
71
+ out = bytearray()
72
+ i = 0
73
+ while i < len(data):
74
+ # ESC ] 9999 ; cols ; rows BEL
75
+ if data[i] == 0x1B and data[i : i + 6] == b"\x1b]9999;":
76
+ end = data.find(b"\x07", i + 6)
77
+ if end < 0:
78
+ resize_buf = data[i:]
79
+ return bytes(out)
80
+ payload = data[i + 6 : end].decode("ascii", "ignore")
81
+ try:
82
+ c_s, r_s = payload.split(";", 1)
83
+ set_winsize(master, int(r_s), int(c_s))
84
+ except Exception:
85
+ pass
86
+ i = end + 1
87
+ resize_buf = b""
88
+ continue
89
+ out.append(data[i])
90
+ i += 1
91
+ resize_buf = b""
92
+ return bytes(out)
93
+
94
+ alive = True
95
+
96
+ def on_chld(signum, frame): # noqa: ARG001
97
+ nonlocal alive
98
+ alive = False
99
+
100
+ signal.signal(signal.SIGCHLD, on_chld)
101
+
102
+ try:
103
+ while alive:
104
+ try:
105
+ r, _, _ = select.select([master, sys.stdin.fileno()], [], [], 0.25)
106
+ except InterruptedError:
107
+ continue
108
+
109
+ if master in r:
110
+ try:
111
+ data = os.read(master, 8192)
112
+ except OSError as e:
113
+ if e.errno in (errno.EIO, errno.EAGAIN, errno.EWOULDBLOCK):
114
+ data = b""
115
+ else:
116
+ break
117
+ if not data:
118
+ # EIO often means child exited
119
+ if not alive:
120
+ break
121
+ else:
122
+ stdout.write(data)
123
+ stdout.flush()
124
+
125
+ if sys.stdin.fileno() in r:
126
+ try:
127
+ data = stdin.read(8192)
128
+ except Exception:
129
+ data = b""
130
+ if data is None:
131
+ data = b""
132
+ if data == b"" and not alive:
133
+ break
134
+ if data:
135
+ cleaned = handle_resize_escape(data)
136
+ if cleaned:
137
+ try:
138
+ os.write(master, cleaned)
139
+ except OSError:
140
+ break
141
+ finally:
142
+ try:
143
+ os.close(master)
144
+ except Exception:
145
+ pass
146
+ try:
147
+ os.waitpid(pid, 0)
148
+ except Exception:
149
+ pass
150
+ return 0
151
+
152
+
153
+ def _fork_pty():
154
+ import pty
155
+
156
+ return pty.fork()
157
+
158
+
159
+ if __name__ == "__main__":
160
+ try:
161
+ raise SystemExit(main())
162
+ except KeyboardInterrupt:
163
+ raise SystemExit(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
  };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zevairouter",
3
- "version": "1.0.67",
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,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.67",
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.67",
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"
@@ -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
  }