zevairouter 1.0.67 → 1.0.69

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 (323) 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 +31 -31
  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 +31 -31
  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/chunks/8157.js +1 -1
  308. package/cli/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  309. package/cli/app/.next-cli-build/server/pages/404.html +1 -1
  310. package/cli/app/.next-cli-build/server/pages/500.html +1 -1
  311. package/cli/app/.next-cli-build/static/chunks/{3702-60b8407e95e0ae8f.js → 3702-cf53f29a22776f08.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/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/cli/app/src/lib/terminal/ptyBridge.py +163 -0
  314. package/cli/app/cli/hooks/playwrightRuntime.js +84 -17
  315. package/cli/app/package.json +1 -1
  316. package/cli/hooks/playwrightRuntime.js +84 -17
  317. package/cli/package.json +1 -1
  318. package/package.json +1 -1
  319. package/src/lib/oauth/services/bulkImportBrowserEngine.js +38 -22
  320. package/src/lib/oauth/services/kiroBulkImportManager.js +38 -8
  321. package/src/lib/oauth/services/kiroGoogleAutomation.js +16 -0
  322. /package/cli/app/.next-cli-build/static/{iVBk105jGtR_XdrL-iFq4 → ieCl7ScziCIxUyr4Zck3E}/_buildManifest.js +0 -0
  323. /package/cli/app/.next-cli-build/static/{iVBk105jGtR_XdrL-iFq4 → ieCl7ScziCIxUyr4Zck3E}/_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.67",
3
+ "version": "1.0.69",
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.69",
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
  }
@@ -830,23 +830,47 @@ export class KiroBulkImportManager {
830
830
  if (!job) return readJsonFile(getJobFile(jobId, this.storageDir));
831
831
 
832
832
  job.cancelRequested = true;
833
- if (job.status === "queued") {
834
- job.status = "cancelled";
835
- job.finishedAt = nowIso();
836
- job.accounts.forEach((account) => {
837
- if (account.status === "queued") account.status = "cancelled";
838
- });
833
+
834
+ // Immediately terminalize ALL open accounts — including needs_manual.
835
+ // Previously cancel only flipped "queued" jobs and closed the browser, so
836
+ // needs_manual followups waited on a dead callback promise forever and the
837
+ // UI stayed "running" / Cancel did nothing.
838
+ for (const account of job.accounts || []) {
839
+ if (
840
+ account.status === "queued"
841
+ || account.status === "running"
842
+ || account.status === "needs_manual"
843
+ ) {
844
+ const ms = account.manualSession;
845
+ const rs = account.runtimeSession;
846
+ const ctx = ms?.context || rs?.context || null;
847
+ const headed = ms?.headedBrowser || null;
848
+ if (ctx) void ctx.close().catch(() => null);
849
+ if (headed) void headed.close().catch(() => null);
850
+ account.manualSession = null;
851
+ account.runtimeSession = null;
852
+ this.finalizeAccount(account, "cancelled", {
853
+ error: "Job cancelled",
854
+ step: "cancelled",
855
+ message: "Job cancelled by user",
856
+ });
857
+ }
839
858
  }
840
859
 
841
860
  if (job.browser) {
842
861
  const browser = job.browser;
843
862
  job.browser = null;
844
- // Prefer force-close: stuck proxy/nav can make browser.close() hang forever.
845
863
  void import("./bulkImportBrowserEngine.js")
846
864
  .then(({ forceCloseBrowser }) => forceCloseBrowser(browser))
847
865
  .catch(() => browser.close().catch(() => null));
848
866
  }
849
867
 
868
+ // Mark job cancelled immediately so UI unlocks; runJob finally still cleans up.
869
+ if (job.status === "queued" || job.status === "running") {
870
+ job.status = "cancelled";
871
+ job.finishedAt = job.finishedAt || nowIso();
872
+ }
873
+
850
874
  void this.persistJobSnapshot(job, { forcePreview: true });
851
875
 
852
876
  return sanitizeJob(job);
@@ -1173,7 +1197,11 @@ export class KiroBulkImportManager {
1173
1197
  if (job.cancelRequested) {
1174
1198
  job.status = "cancelled";
1175
1199
  job.accounts.forEach((account) => {
1176
- if (account.status === "queued" || account.status === "running") {
1200
+ if (
1201
+ account.status === "queued"
1202
+ || account.status === "running"
1203
+ || account.status === "needs_manual"
1204
+ ) {
1177
1205
  this.finalizeAccount(account, "cancelled", {
1178
1206
  error: "Job cancelled",
1179
1207
  step: "cancelled",
@@ -1182,6 +1210,8 @@ export class KiroBulkImportManager {
1182
1210
  }
1183
1211
  });
1184
1212
  } else {
1213
+ // If only needs_manual left and user never cancelled, still complete the job
1214
+ // once followups settle — do not leave status stuck on "running".
1185
1215
  job.status = "completed";
1186
1216
  }
1187
1217
  await this.persistJobSnapshot(job, { forcePreview: true });
@@ -1222,12 +1222,17 @@ export function createKiroCallbackMonitor(context, page, timeoutMs = DEFAULT_MAN
1222
1222
  const parsed = parseCallbackUrl(trackedPage.url?.() || "");
1223
1223
  if (parsed) settle(parsed);
1224
1224
  };
1225
+ const onClose = () => {
1226
+ // Cancel/force-close: unblock manual followup instead of hanging 15 min
1227
+ settle(null, new Error("Browser session closed while waiting for Kiro callback"));
1228
+ };
1225
1229
 
1226
1230
  trackedPage.on("framenavigated", onFrame);
1227
1231
  trackedPage.on("request", onRequest);
1228
1232
  trackedPage.on("requestfailed", onRequestFailed);
1229
1233
  trackedPage.on("domcontentloaded", onLoadState);
1230
1234
  trackedPage.on("load", onLoadState);
1235
+ trackedPage.on("close", onClose);
1231
1236
 
1232
1237
  ownerCleanups.push(() => {
1233
1238
  trackedPage.off("framenavigated", onFrame);
@@ -1235,6 +1240,7 @@ export function createKiroCallbackMonitor(context, page, timeoutMs = DEFAULT_MAN
1235
1240
  trackedPage.off("requestfailed", onRequestFailed);
1236
1241
  trackedPage.off("domcontentloaded", onLoadState);
1237
1242
  trackedPage.off("load", onLoadState);
1243
+ trackedPage.off("close", onClose);
1238
1244
  });
1239
1245
 
1240
1246
  const current = parseCallbackUrl(trackedPage.url?.() || "");
@@ -1248,8 +1254,13 @@ export function createKiroCallbackMonitor(context, page, timeoutMs = DEFAULT_MAN
1248
1254
  contextCleanups.set(ctx, cleanups);
1249
1255
 
1250
1256
  const onPage = (newPage) => registerPage(newPage, cleanups);
1257
+ const onClose = () => {
1258
+ settle(null, new Error("Browser context closed while waiting for Kiro callback"));
1259
+ };
1251
1260
  ctx.on("page", onPage);
1261
+ ctx.on("close", onClose);
1252
1262
  cleanups.push(() => ctx.off("page", onPage));
1263
+ cleanups.push(() => ctx.off("close", onClose));
1253
1264
 
1254
1265
  if (pg) registerPage(pg, cleanups);
1255
1266
  }
@@ -1260,6 +1271,11 @@ export function createKiroCallbackMonitor(context, page, timeoutMs = DEFAULT_MAN
1260
1271
  if (newContext) bind(newContext, newPage);
1261
1272
  };
1262
1273
 
1274
+ // Allow cancel path to force-reject without waiting for timeout
1275
+ promise.abort = (reason = "Job cancelled") => {
1276
+ settle(null, new Error(reason));
1277
+ };
1278
+
1263
1279
  return promise;
1264
1280
  }
1265
1281