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.
- package/CHANGELOG.md +5 -0
- package/cli/app/.next-cli-build/BUILD_ID +1 -1
- package/cli/app/.next-cli-build/app-path-routes-manifest.json +29 -29
- package/cli/app/.next-cli-build/build-manifest.json +2 -2
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/automation/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/context/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/playground/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/terminal/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error.html +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/_not-found.html +1 -1
- package/cli/app/.next-cli-build/server/app/_not-found.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_not-found.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/api/models/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/input/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/resize/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/terminal/session/[id]/stream/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/terminal/session/route.js.nft.json +1 -1
- package/cli/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/version/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/callback.html +1 -1
- package/cli/app/.next-cli-build/server/app/callback.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/callback.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/automation.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/automation.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/combos.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/context.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/context.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard/context/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard/context.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/playground.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/playground.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard/playground/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard/playground.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/profile.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/quota.html +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/quota.rsc +6 -6
- package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +6 -6
- package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/token-saver.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/translator.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/usage.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/dashboard.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/index.html +1 -1
- package/cli/app/.next-cli-build/server/app/index.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/index.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/landing.html +1 -1
- package/cli/app/.next-cli-build/server/app/landing.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/landing.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/landing.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/login.html +1 -1
- package/cli/app/.next-cli-build/server/app/login.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/login.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app-paths-manifest.json +29 -29
- package/cli/app/.next-cli-build/server/chunks/3407.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/4746.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/5949.js +3 -3
- package/cli/app/.next-cli-build/server/chunks/6896.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/7276.js +1 -1
- package/cli/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/pages/404.html +1 -1
- package/cli/app/.next-cli-build/server/pages/500.html +1 -1
- package/cli/app/.next-cli-build/static/chunks/{3702-60b8407e95e0ae8f.js → 3702-9e52be780ed358e2.js} +1 -1
- 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
- package/cli/app/cli/hooks/playwrightRuntime.js +84 -17
- package/cli/app/package.json +1 -1
- package/cli/hooks/playwrightRuntime.js +84 -17
- package/cli/package.json +1 -1
- package/package.json +1 -1
- package/src/lib/oauth/services/bulkImportBrowserEngine.js +38 -22
- /package/cli/app/.next-cli-build/static/{iVBk105jGtR_XdrL-iFq4 → uAzRelvWR5AOBsQdc-bGC}/_buildManifest.js +0 -0
- /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
|
-
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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 =
|
|
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 {
|
|
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)
|
|
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
|
-
|
|
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
|
-
|
|
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/app/package.json
CHANGED
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
// Ensure Playwright + Chromium are usable at runtime. `npm i -g zevairouter`
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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 =
|
|
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 {
|
|
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)
|
|
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
|
-
|
|
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
|
-
|
|
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
package/package.json
CHANGED
|
@@ -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
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
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
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
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
|
}
|
|
File without changes
|
|
File without changes
|