@sifxprime/krouter 0.5.145 → 0.5.147
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/README.md +4 -4
- package/app/.next-cli-build/BUILD_ID +1 -1
- package/app/.next-cli-build/app-path-routes-manifest.json +12 -12
- package/app/.next-cli-build/build-manifest.json +2 -2
- package/app/.next-cli-build/prerender-manifest.json +19 -19
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/environment/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/presidio/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js +2 -2
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/_global-error.html +1 -1
- package/app/.next-cli-build/server/app/_global-error.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/_not-found.html +1 -1
- package/app/.next-cli-build/server/app/_not-found.rsc +4 -4
- package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/import/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
- package/app/.next-cli-build/server/app/api/pxpipe/health/route.js +2 -2
- package/app/.next-cli-build/server/app/api/pxpipe/install/route.js +2 -2
- package/app/.next-cli-build/server/app/api/pxpipe/restart/route.js +2 -2
- package/app/.next-cli-build/server/app/api/pxpipe/start/route.js +2 -2
- package/app/.next-cli-build/server/app/api/pxpipe/stats/route.js +2 -2
- package/app/.next-cli-build/server/app/api/pxpipe/status/route.js +2 -2
- package/app/.next-cli-build/server/app/api/pxpipe/stop/route.js +2 -2
- package/app/.next-cli-build/server/app/api/settings/environment/route.js +1 -1
- package/app/.next-cli-build/server/app/api/settings/presidio/route.js +1 -1
- package/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
- package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/enable/route.js +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js +1 -1
- package/app/.next-cli-build/server/app/api/version/route.js +1 -1
- package/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
- package/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
- package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/callback.html +1 -1
- package/app/.next-cli-build/server/app/callback.rsc +4 -4
- package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/combos.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/endpoint.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/environment.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/environment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/environment.segments/!KGRhc2hib2FyZCk/dashboard/environment/__PAGE__.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/environment.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/environment.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/mitm.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/presidio.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/presidio.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/presidio.segments/!KGRhc2hib2FyZCk/dashboard/presidio/__PAGE__.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/presidio.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/presidio.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/profile.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers/new.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/providers.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/pxpipe.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/pxpipe.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/quota.html +2 -2
- package/app/.next-cli-build/server/app/dashboard/quota.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +7 -7
- package/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/skills.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/skills.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/skills.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/token-saver.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/translator.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/usage.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard.html +1 -1
- package/app/.next-cli-build/server/app/dashboard.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/index.html +1 -1
- package/app/.next-cli-build/server/app/index.rsc +4 -4
- package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/landing.html +1 -1
- package/app/.next-cli-build/server/app/landing.rsc +4 -4
- package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/login.html +1 -1
- package/app/.next-cli-build/server/app/login.rsc +5 -5
- package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app-paths-manifest.json +12 -12
- package/app/.next-cli-build/server/chunks/192.js +9 -0
- package/app/.next-cli-build/server/chunks/2365.js +1 -1
- package/app/.next-cli-build/server/chunks/2722.js +1 -1
- package/app/.next-cli-build/server/chunks/412.js +2 -2
- package/app/.next-cli-build/server/chunks/4884.js +2 -2
- package/app/.next-cli-build/server/chunks/523.js +1 -0
- package/app/.next-cli-build/server/chunks/5330.js +11 -11
- package/app/.next-cli-build/server/chunks/5718.js +1 -1
- package/app/.next-cli-build/server/chunks/6182.js +4 -4
- package/app/.next-cli-build/server/chunks/6200.js +2 -2
- package/app/.next-cli-build/server/chunks/706.js +4 -3
- package/app/.next-cli-build/server/chunks/7153.js +1 -1
- package/app/.next-cli-build/server/chunks/7276.js +1 -1
- package/app/.next-cli-build/server/chunks/7833.js +9 -0
- package/app/.next-cli-build/server/chunks/8238.js +1 -1
- package/app/.next-cli-build/server/chunks/8361.js +1 -1
- package/app/.next-cli-build/server/chunks/8782.js +1 -0
- package/app/.next-cli-build/server/chunks/8895.js +2 -2
- package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
- package/app/.next-cli-build/server/middleware.js +2 -2
- package/app/.next-cli-build/server/pages/404.html +1 -1
- package/app/.next-cli-build/server/pages/500.html +1 -1
- package/app/.next-cli-build/static/chunks/{1321-2a89b5e3ef834ad0.js → 1321-59a8def10db84b86.js} +1 -1
- package/app/.next-cli-build/static/chunks/5497-d4a2fb8d25696366.js +7 -0
- package/app/.next-cli-build/static/chunks/{6069-dd3d88032deffd6b.js → 6069-db27e074bc47d5fe.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/[id]/{page-783b478197298c31.js → page-1c13f46a5c077d38.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/mitm/page-81f0e1ae55f87925.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/presidio/{page-ec483054834f55b3.js → page-99353b884e6df533.js} +4 -4
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/[id]/{page-f52892e5e4b5f25b.js → page-b92667a32e2aeffa.js} +2 -2
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/page-69f5c1cd75191fc4.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/translator/{page-97596f6b0ed5c791.js → page-719a6bedc7b221df.js} +1 -1
- package/app/.next-cli-build/static/chunks/app/dashboard/settings/pricing/page-625fde09367a7c35.js +1 -0
- package/app/.next-cli-build/static/css/{8395659349879673.css → 8e737cade791a545.css} +1 -1
- package/app/cli/package.json +1 -1
- package/app/package.json +1 -1
- package/app/src/lib/db/backup.js +35 -0
- package/app/src/mitm/server.js +1 -1
- package/cli.js +211 -106
- package/package.json +1 -1
- package/src/cli/tray/tray.ps1 +38 -14
- package/src/cli/utils/input.js +13 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/environment/page.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/presidio/page.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/_global-error/page.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/_not-found/page.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/auth/reset-password/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/cache/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/combos/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/headroom/extras/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/headroom/proxy/[...path]/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/headroom/restart/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/headroom/start/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/headroom/status/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/headroom/stop/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/health/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/import/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/init/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/keys/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/locale/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/mitm/cert/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/models/live/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/models/live-by-connection/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/models/preview/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/models/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/oauth/codex/bulk-import/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/api-key/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/providers/health/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/providers/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/providers/suggested-models/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/providers/zenith/log/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/providers/zenith/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/pxpipe/health/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/pxpipe/install/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/pxpipe/restart/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/pxpipe/start/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/pxpipe/stats/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/pxpipe/status/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/pxpipe/stop/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/settings/environment/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/settings/presidio/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/settings/proxy-test/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/settings/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/shutdown/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/tags/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/translator/console-logs/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/translator/load/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/translator/save/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/v1/audio/voices/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/v1/models/info/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/v1/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/v1/videos/[id]/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/v1/videos/edits/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/v1/videos/extensions/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/v1/videos/generations/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/v1beta/models/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/version/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/callback/page.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/favicon.ico/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/landing/page.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/login/page.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/manifest.webmanifest/route.js.nft.json +0 -1
- package/app/.next-cli-build/server/app/page.js.nft.json +0 -1
- package/app/.next-cli-build/server/chunks/4055.js +0 -9
- package/app/.next-cli-build/server/chunks/5217.js +0 -9
- package/app/.next-cli-build/static/chunks/5497-4e4fd7c69a4beed2.js +0 -7
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/mitm/page-6c89f0a1ddd99c41.js +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/page-64fc5c6c998f5551.js +0 -1
- package/app/.next-cli-build/static/chunks/app/dashboard/settings/pricing/page-016fc417daafa8c4.js +0 -1
- package/app/cli/.build-home/.krouter/db/backups/upgrade-0.5.116-to-0.5.117-0.5.117-20260718-032541/data.sqlite +0 -0
- package/app/cli/.build-home/.krouter/db/backups/upgrade-0.5.117-to-0.5.118-0.5.118-20260718-064958/data.sqlite +0 -0
- package/app/cli/.build-home/.krouter/db/backups/upgrade-0.5.118-to-0.5.143-0.5.143-20260822-000036/data.sqlite +0 -0
- package/app/cli/.build-home/.krouter/db/backups/upgrade-0.5.143-to-0.5.144-0.5.144-20260823-041706/data.sqlite +0 -0
- package/app/cli/.build-home/.krouter/db/data.sqlite +0 -0
- package/app/cli/.build-home/.krouter/jwt-secret +0 -1
- package/app/cli/.build-home/.krouter/machine-id +0 -1
- package/app/cli/.build-home/Library/Preferences/nextjs-nodejs/config.json +0 -7
- /package/app/.next-cli-build/static/{6R5ug8WrSzU_3DNeV0Nhi → hKWRNoH4_Oex2Thy4DZQc}/_buildManifest.js +0 -0
- /package/app/.next-cli-build/static/{6R5ug8WrSzU_3DNeV0Nhi → hKWRNoH4_Oex2Thy4DZQc}/_ssgManifest.js +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
"use strict";exports.id=6182,exports.ids=[6182],exports.modules={8578:(a,b,c)=>{let d=c(33873),e=c(29021),f=c(15296),{MITM_DIR:g}=c(82193),h=d.join(g,"rootCA.key"),i=d.join(g,"rootCA.crt");function j(a){try{let b=f.pki.certificateFromPem(e.readFileSync(a,"utf8")),c=new Date(Date.now()+2592e6);return b.validity.notAfter<c}catch{return!0}}a.exports={generateRootCA:async function a(){let a=e.existsSync(h)&&e.existsSync(i);if(a&&!j(i))return console.log("✅ Root CA already exists"),{key:h,cert:i};if(a){console.log("\uD83D\uDD10 Root CA expired or expiring soon — regenerating...");try{e.unlinkSync(h)}catch{}try{e.unlinkSync(i)}catch{}}e.existsSync(g)||e.mkdirSync(g,{recursive:!0}),console.log("\uD83D\uDD10 Generating Root CA certificate...");let b=f.pki.rsa.generateKeyPair(2048),c=f.pki.createCertificate();c.publicKey=b.publicKey,c.serialNumber="01",c.validity.notBefore=new Date,c.validity.notAfter=new Date,c.validity.notAfter.setFullYear(c.validity.notBefore.getFullYear()+10);let d=[{name:"commonName",value:"9Router MITM Root CA"},{name:"organizationName",value:"kRouter"},{name:"countryName",value:"US"}];c.setSubject(d),c.setIssuer(d),c.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,cRLSign:!0,critical:!0},{name:"subjectKeyIdentifier"}]),c.sign(b.privateKey,f.md.sha256.create());let k=f.pki.privateKeyToPem(b.privateKey),l=f.pki.certificateToPem(c);return e.writeFileSync(h,k),e.writeFileSync(i,l),console.log("✅ Root CA generated successfully"),{key:h,cert:i}},loadRootCA:function(){if(!e.existsSync(h)||!e.existsSync(i))throw Error("Root CA not found. Generate it first.");let a=e.readFileSync(h,"utf8"),b=e.readFileSync(i,"utf8");return{key:f.pki.privateKeyFromPem(a),cert:f.pki.certificateFromPem(b)}},generateLeafCert:function(a,b){let c=f.pki.rsa.generateKeyPair(2048),d=f.pki.createCertificate();return d.publicKey=c.publicKey,d.serialNumber=Math.floor(1e6*Math.random()).toString(),d.validity.notBefore=new Date,d.validity.notAfter=new Date,d.validity.notAfter.setFullYear(d.validity.notBefore.getFullYear()+1),d.setSubject([{name:"commonName",value:a}]),d.setIssuer(b.cert.subject.attributes),d.setExtensions([{name:"basicConstraints",cA:!1},{name:"keyUsage",digitalSignature:!0,keyEncipherment:!0},{name:"extKeyUsage",serverAuth:!0,clientAuth:!0},{name:"subjectAltName",altNames:[{type:2,value:a},{type:2,value:`*.${a}`}]}]),d.sign(b.key,f.md.sha256.create()),{key:f.pki.privateKeyToPem(c.privateKey),cert:f.pki.certificateToPem(d)}},isCertExpired:j,ROOT_CA_CERT_PATH:i,ROOT_CA_KEY_PATH:h}},9631:(a,b,c)=>{let d=c(29021),e=c(55511),{exec:f}=c(79646),{execWithPassword:g,isSudoAvailable:h}=c(66936),{runElevatedPowerShell:i,quotePs:j}=c(64809),{log:k,err:l}=c(87777),m="win32"===process.platform,n="darwin"===process.platform,o=[{dir:"/usr/local/share/ca-certificates",cmd:"update-ca-certificates"},{dir:"/etc/ca-certificates/trust-source/anchors",cmd:"update-ca-trust"},{dir:"/etc/pki/ca-trust/source/anchors",cmd:"update-ca-trust"},{dir:"/etc/pki/trust/anchors",cmd:"update-ca-certificates"}];function p(){for(let a of o)if(d.existsSync(a.dir))return a;return o[0]}let q="9Router MITM Root CA";function r(a){let b=d.readFileSync(a,"utf-8"),c=Buffer.from(b.replace(/-----[^-]+-----/g,"").replace(/\s/g,""),"base64");return e.createHash("sha1").update(c).digest("hex").toUpperCase().match(/.{2}/g).join(":")}async function s(a){var b,c;let e,g,h;return m?(b=a,new Promise(a=>{let c;try{c=r(b).replace(/:/g,"")}catch{return a(!1)}f(`certutil -store Root ${c}`,{windowsHide:!0},b=>{a(!b)})})):n?(c=a,new Promise(a=>{try{let b=r(c).replace(/:/g,"");f(`security find-certificate -a -c "${q}" -Z /Library/Keychains/System.keychain 2>/dev/null`,{windowsHide:!0},(d,e)=>{if(d||!e||!RegExp(`SHA-1 hash:\\s*${b}`,"i").test(e))return a(!1);f(`security verify-cert -c "${c}" -p ssl -k /Library/Keychains/System.keychain 2>/dev/null`,{windowsHide:!0},b=>{a(!b)})})}catch{a(!1)}})):(e=p(),g=`${e.dir}/krouter-root-ca.crt`,h=`${e.dir}/9router-root-ca.crt`,Promise.resolve(d.existsSync(g)||d.existsSync(h)))}async function
|
|
1
|
+
"use strict";exports.id=6182,exports.ids=[6182],exports.modules={8578:(a,b,c)=>{let d=c(33873),e=c(29021),f=c(15296),{MITM_DIR:g}=c(82193),h=d.join(g,"rootCA.key"),i=d.join(g,"rootCA.crt");function j(a){try{let b=f.pki.certificateFromPem(e.readFileSync(a,"utf8")),c=new Date(Date.now()+2592e6);return b.validity.notAfter<c}catch{return!0}}a.exports={generateRootCA:async function a(){let a=e.existsSync(h)&&e.existsSync(i);if(a&&!j(i))return console.log("✅ Root CA already exists"),{key:h,cert:i};if(a){console.log("\uD83D\uDD10 Root CA expired or expiring soon — regenerating...");try{e.unlinkSync(h)}catch{}try{e.unlinkSync(i)}catch{}}e.existsSync(g)||e.mkdirSync(g,{recursive:!0}),console.log("\uD83D\uDD10 Generating Root CA certificate...");let b=f.pki.rsa.generateKeyPair(2048),c=f.pki.createCertificate();c.publicKey=b.publicKey,c.serialNumber="01",c.validity.notBefore=new Date,c.validity.notAfter=new Date,c.validity.notAfter.setFullYear(c.validity.notBefore.getFullYear()+10);let d=[{name:"commonName",value:"9Router MITM Root CA"},{name:"organizationName",value:"kRouter"},{name:"countryName",value:"US"}];c.setSubject(d),c.setIssuer(d),c.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,cRLSign:!0,critical:!0},{name:"subjectKeyIdentifier"}]),c.sign(b.privateKey,f.md.sha256.create());let k=f.pki.privateKeyToPem(b.privateKey),l=f.pki.certificateToPem(c);return e.writeFileSync(h,k),e.writeFileSync(i,l),console.log("✅ Root CA generated successfully"),{key:h,cert:i}},loadRootCA:function(){if(!e.existsSync(h)||!e.existsSync(i))throw Error("Root CA not found. Generate it first.");let a=e.readFileSync(h,"utf8"),b=e.readFileSync(i,"utf8");return{key:f.pki.privateKeyFromPem(a),cert:f.pki.certificateFromPem(b)}},generateLeafCert:function(a,b){let c=f.pki.rsa.generateKeyPair(2048),d=f.pki.createCertificate();return d.publicKey=c.publicKey,d.serialNumber=Math.floor(1e6*Math.random()).toString(),d.validity.notBefore=new Date,d.validity.notAfter=new Date,d.validity.notAfter.setFullYear(d.validity.notBefore.getFullYear()+1),d.setSubject([{name:"commonName",value:a}]),d.setIssuer(b.cert.subject.attributes),d.setExtensions([{name:"basicConstraints",cA:!1},{name:"keyUsage",digitalSignature:!0,keyEncipherment:!0},{name:"extKeyUsage",serverAuth:!0,clientAuth:!0},{name:"subjectAltName",altNames:[{type:2,value:a},{type:2,value:`*.${a}`}]}]),d.sign(b.key,f.md.sha256.create()),{key:f.pki.privateKeyToPem(c.privateKey),cert:f.pki.certificateToPem(d)}},isCertExpired:j,ROOT_CA_CERT_PATH:i,ROOT_CA_KEY_PATH:h}},9631:(a,b,c)=>{let d=c(29021),e=c(55511),{exec:f}=c(79646),{execWithPassword:g,isSudoAvailable:h}=c(66936),{runElevatedPowerShell:i,quotePs:j}=c(64809),{log:k,err:l}=c(87777),m="win32"===process.platform,n="darwin"===process.platform,o=[{dir:"/usr/local/share/ca-certificates",cmd:"update-ca-certificates"},{dir:"/etc/ca-certificates/trust-source/anchors",cmd:"update-ca-trust"},{dir:"/etc/pki/ca-trust/source/anchors",cmd:"update-ca-trust"},{dir:"/etc/pki/trust/anchors",cmd:"update-ca-certificates"}];function p(){for(let a of o)if(d.existsSync(a.dir))return a;return o[0]}let q="9Router MITM Root CA";function r(a){let b=d.readFileSync(a,"utf-8"),c=Buffer.from(b.replace(/-----[^-]+-----/g,"").replace(/\s/g,""),"base64");return e.createHash("sha1").update(c).digest("hex").toUpperCase().match(/.{2}/g).join(":")}async function s(a){var b,c;let e,g,h;return m?(b=a,new Promise(a=>{let c;try{c=r(b).replace(/:/g,"")}catch{return a(!1)}f(`certutil -store Root ${c}`,{windowsHide:!0},b=>{a(!b)})})):n?(c=a,new Promise(a=>{try{let b=r(c).replace(/:/g,"");f(`security find-certificate -a -c "${q}" -Z /Library/Keychains/System.keychain 2>/dev/null`,{windowsHide:!0},(d,e)=>{if(d||!e||!RegExp(`SHA-1 hash:\\s*${b}`,"i").test(e))return a(!1);f(`security verify-cert -c "${c}" -p ssl -k /Library/Keychains/System.keychain 2>/dev/null`,{windowsHide:!0},b=>{a(!b)})})}catch{a(!1)}})):(e=p(),g=`${e.dir}/krouter-root-ca.crt`,h=`${e.dir}/9router-root-ca.crt`,Promise.resolve(d.existsSync(g)||d.existsSync(h)))}function t(a){let b=a&&a.message||"";if(/incorrect password attempt|Sorry, try again|no password was provided/i.test(b))return"Incorrect sudo password — check the password and try again";if(/canceled|cancelled/i.test(b))return"User canceled authorization";if(/not allowed to execute|not in the sudoers/i.test(b))return"This account is not permitted to use sudo, so the certificate cannot be installed system-wide";let c=b.replace(/Password:/gi,"").split("\n").map(a=>a.trim()).filter(Boolean).slice(-3).join("; ");return c?`Certificate install failed: ${c}`:"Certificate install failed"}async function u(a,b){let c=`for _ in 1 2 3 4 5; do security delete-certificate -c "${q}" /Library/Keychains/System.keychain >/dev/null 2>&1 || break; done`,d=`security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain "${b}"`;try{await g(`${c}; ${d}`,a)}catch(a){throw Error(t(a))}if(!await s(b))throw Error(`Certificate was installed but is still not trusted. Open Keychain Access, select the System keychain, and remove any older "${q}" entry, then retry.`);k("\uD83D\uDD10 Cert: ✅ installed to system keychain")}async function v(a){let b=`
|
|
2
2
|
certutil -delstore Root ${j(q)} 2>$null | Out-Null
|
|
3
3
|
$exit = & certutil -addstore Root ${j(a)} 2>&1
|
|
4
4
|
if ($LASTEXITCODE -ne 0) { throw "certutil exit $LASTEXITCODE" }
|
|
5
|
-
`;try{await i(b),k("\uD83D\uDD10 Cert: ✅ installed to Windows Root store")}catch(a){throw Error(`Failed to install certificate: ${a.message}`)}}async function
|
|
5
|
+
`;try{await i(b),k("\uD83D\uDD10 Cert: ✅ installed to Windows Root store")}catch(a){throw Error(`Failed to install certificate: ${a.message}`)}}async function w(a,b){let c=r(b).replace(/:/g,""),d=`security delete-certificate -Z "${c}" /Library/Keychains/System.keychain`;try{await g(d,a),k("\uD83D\uDD10 Cert: ✅ uninstalled from system keychain")}catch(a){throw Error("Failed to uninstall certificate")}}async function x(){let a=`certutil -delstore Root ${j(q)}`;try{await i(a),k("\uD83D\uDD10 Cert: ✅ uninstalled from Windows Root store")}catch(a){throw Error(`Failed to uninstall certificate: ${a.message}`)}}async function y(a,b="add"){let c="9Router MITM Root CA",d=`
|
|
6
6
|
if ! command -v certutil &> /dev/null; then
|
|
7
7
|
exit 0
|
|
8
8
|
fi
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
fi
|
|
37
37
|
fi
|
|
38
38
|
done
|
|
39
|
-
`;return new Promise(a=>{f(d,{shell:"/bin/bash"},()=>a())})}async function
|
|
39
|
+
`;return new Promise(a=>{f(d,{shell:"/bin/bash"},()=>a())})}async function z(a,b){if(!h()){k(`🔐 Cert: cannot install to system store without sudo — trust this file on clients: ${b}`),await y(b,"add");return}let c=p(),d=`${c.dir}/krouter-root-ca.crt`,e=`${c.dir}/9router-root-ca.crt`,f=`rm -f "${e}"; cp "${b}" "${d}" && (${c.cmd} 2>/dev/null || true)`;try{await g(f,a),await y(b,"add"),k(`🔐 Cert: ✅ installed to Linux trust store (${c.dir}) and user browser databases`)}catch(a){throw Error(`Certificate install failed: ${a.message}`)}}async function A(a){if(await y(null,"delete"),!h())return;let b=p(),c=`${b.dir}/krouter-root-ca.crt`,d=`${b.dir}/9router-root-ca.crt`,e=`rm -f "${c}" "${d}" && (${b.cmd} 2>/dev/null || true)`;try{await g(e,a),k("\uD83D\uDD10 Cert: ✅ uninstalled from Linux trust store and user browser databases")}catch(a){throw Error("Failed to uninstall certificate")}}a.exports={installCert:async function a(a,b){if(!d.existsSync(b))throw Error(`Certificate file not found: ${b}`);await s(b)?k("\uD83D\uDD10 Cert: already trusted ✅"):m?await v(b):n?await u(a,b):await z(a,b)},uninstallCert:async function a(a,b){await s(b)?m?await x():n?await w(a,b):await A(a):k("\uD83D\uDD10 Cert: not found in system store")},checkCertInstalled:s,describeSudoFailure:t}},11722:(a,b,c)=>{let d=["docker","containerd","kubepods","podman","lxc","crio"];a.exports={detectContainer:function(a){let b=a||{existsSync:c(29021).existsSync,readFileSync:c(29021).readFileSync,env:process.env,platform:process.platform},e=a=>{try{return!!b.existsSync(a)}catch{return!1}},f=b.env||{};if(f.KUBERNETES_SERVICE_HOST)return{containerized:!0,kind:"kubernetes"};if("1"===String(f.KROUTER_FORCE_MITM||"")||"linux"!==b.platform)return{containerized:!1,kind:null};if(e("/.dockerenv"))return{containerized:!0,kind:"docker"};if(e("/run/.containerenv"))return{containerized:!0,kind:"podman"};let g=(a=>{try{return String(b.readFileSync(a,"utf8")??"")}catch{return""}})("/proc/1/cgroup").toLowerCase(),h=d.find(a=>g.includes(a));return h?{containerized:!0,kind:"crio"===h?"cri-o":h}:{containerized:!1,kind:null}}}},17511:(a,b,c)=>{let d=c(29021),e=(()=>{if("win32"===process.platform)return null;for(let a of["/usr/sbin/lsof","/usr/bin/lsof","/sbin/lsof"])try{return d.accessSync(a,d.constants.X_OK),a}catch{}return"lsof"})(),f={antigravity:[":generateContent",":streamGenerateContent"],copilot:["/chat/completions","/v1/messages","/responses"],kiro:["/generateAssistantResponse"],cursor:["/BidiAppend","/RunSSE","/RunPoll","/Run"],claude:["/v1/messages"]};a.exports={IS_DEV:!1,LSOF_BIN:e,TARGET_HOSTS:["daily-cloudcode-pa.googleapis.com","cloudcode-pa.googleapis.com","api.individual.githubcopilot.com","q.us-east-1.amazonaws.com","codewhisperer.us-east-1.amazonaws.com","runtime.us-east-1.kiro.dev","api2.cursor.sh","api.anthropic.com"],URL_PATTERNS:f,MODEL_SYNONYMS:{antigravity:{"gemini-default":"gemini-3.5-flash-low","gemini-3.5-flash-high":"gemini-3-flash-agent","gemini-3.5-flash-medium":"gemini-3.5-flash-low","gemini-3.5-flash-extra-low":"gemini-3.5-flash-extra-low","gemini-3.1-pro-high":"gemini-pro-agent","gemini-3-pro-high":"gemini-pro-agent","gemini-3-pro-low":"gemini-3.1-pro-low"}},MODEL_PATTERNS:{antigravity:[{match:/flash.*extra.*low|extra.*low.*flash|flash.*low|low.*flash/i,alias:"gemini-3.5-flash-extra-low"},{match:/flash.*medium|medium.*flash/i,alias:"gemini-3.5-flash-low"},{match:/flash.*agent|agent.*flash|flash/i,alias:"gemini-3-flash-agent"},{match:/pro.*low|low.*pro/i,alias:"gemini-3.1-pro-low"},{match:/gemini.*pro|pro.*gemini/i,alias:"gemini-pro-agent"},{match:/opus/i,alias:"claude-opus-4-6-thinking"},{match:/sonnet|claude/i,alias:"claude-sonnet-4-6"},{match:/gpt.*oss|oss/i,alias:"gpt-oss-120b-medium"}]},MODEL_NO_MAP:{antigravity:[/^tab[_-]/i]},LOG_BLACKLIST_URL_PARTS:["recordCodeAssistMetrics","recordTrajectoryAnalytics","fetchAdminControls","listExperiments","fetchUserInfo"],getToolForHost:function(a){let b=(a||"").split(":")[0];return"api.individual.githubcopilot.com"===b?"copilot":"daily-cloudcode-pa.googleapis.com"===b||"cloudcode-pa.googleapis.com"===b?"antigravity":"q.us-east-1.amazonaws.com"===b||"codewhisperer.us-east-1.amazonaws.com"===b||"runtime.us-east-1.kiro.dev"===b?"kiro":"api2.cursor.sh"===b?"cursor":"api.anthropic.com"===b?"claude":null},isChatRequest:function(a,b){return!!(f[a]||[]).some(a=>(b.url||"").includes(a))||"kiro"===a&&String(b.headers?.["x-amz-target"]||"").includes("GenerateAssistantResponse")}}},26033:(a,b,c)=>{c(33873),c(29021);let{MITM_DIR:d}=c(82193),{generateRootCA:e,loadRootCA:f,generateLeafCert:g}=c(8578);a.exports={generateCert:async function a(){return await e()},getCertForDomain:function(a){try{let b=f(),c=g(a,b);return{key:c.key,cert:c.cert}}catch(b){return console.error(`Failed to generate cert for ${a}:`,b.message),null}}}},26444:(a,b,c)=>{let d=c(29021),e=c(33873),f=c(21820),{log:g}=c(87777),h="# >>> krouter NODE_EXTRA_CA_CERTS >>>",i="# <<< krouter NODE_EXTRA_CA_CERTS <<<",j=[".profile",".bash_profile",".bashrc",".zshrc"],k=".config/environment.d/95-krouter.conf",l=".pam_environment";function m(a){return a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function n(a){if(!a.includes(h))return{contents:a,changed:!1};let b=RegExp(`\\n?${m(h)}[\\s\\S]*?${m(i)}\\n?`,"g"),c=a.replace(b,"");return{contents:c,changed:c!==a}}a.exports={setLinuxNodeExtraCaCerts:function(a){if("linux"!==process.platform||!a||"string"!=typeof a)return[];let b=f.homedir(),c=`${h}
|
|
40
40
|
# Auto-managed by kRouter — DO NOT EDIT. Set/unset via the kRouter MITM panel.
|
|
41
41
|
# Tells Node.js + Electron apps to trust the kRouter MITM root CA.
|
|
42
42
|
export NODE_EXTRA_CA_CERTS="${a}"
|
|
@@ -54,7 +54,7 @@ NODE_EXTRA_CA_CERTS=${b}
|
|
|
54
54
|
'-WindowStyle','Hidden','-EncodedCommand','${b}'
|
|
55
55
|
) -Verb RunAs -Wait -PassThru -WindowStyle Hidden;
|
|
56
56
|
if ($proc.ExitCode -ne 0) { throw "Elevated command exited with code $($proc.ExitCode)" }
|
|
57
|
-
`;return new Promise((a,b)=>{d(`powershell -NoProfile -NonInteractive -ExecutionPolicy Bypass -Command ${h(c)}`,{windowsHide:!0},(c,d,e)=>{if(c){let a=e||c.message;a.includes("canceled by the user")||a.includes("operation was canceled")?b(Error("User canceled UAC prompt")):b(Error(a))}else a(d)})})},quotePs:h}},66936:(a,b,c)=>{let{exec:d,spawn:e,execSync:f}=c(79646),g=c(29021),h=c(33873);c(21820);let{log:i,err:j}=c(87777),{TOOL_HOSTS:k}=c(85341),{runElevatedPowerShell:l,isAdmin:m}=c(64809);function n(a,b,c){let d=`${a}.krouter.new`,e=`${a}.krouter.bak`;try{g.writeFileSync(d,c,"utf8");try{g.unlinkSync(e)}catch{}g.renameSync(a,e);try{g.renameSync(d,a)}catch(c){try{g.renameSync(e,a)}catch{g.writeFileSync(a,b,"utf8")}throw c}try{g.unlinkSync(e)}catch{}}finally{try{g.unlinkSync(d)}catch{}}}let o="win32"===process.platform,p="darwin"===process.platform,q=o?h.join(process.env.SystemRoot||"C:\\Windows","System32","drivers","etc","hosts"):"/etc/hosts";function r(){if(o)return!1;try{return f("command -v sudo",{stdio:"ignore",windowsHide:!0}),!0}catch{return!1}}function s(){if(o||!r())return!0;try{return f("sudo -n true",{stdio:"ignore",windowsHide:!0}),!0}catch{return!1}}function t(a,b){return new Promise((c,d)=>{let f=r(),g=f?e("sudo",["-S","sh","-c",a],{stdio:["pipe","pipe","pipe"],windowsHide:!0}):e("sh",["-c",a],{stdio:["ignore","pipe","pipe"],windowsHide:!0}),h="",i="";g.stdout.on("data",a=>{h+=a}),g.stderr.on("data",a=>{i+=a}),g.on("close",a=>{0===a?c(h):d(Error(i||`Exit code ${a}`))}),f&&(g.stdin.write(`${b}
|
|
57
|
+
`;return new Promise((a,b)=>{d(`powershell -NoProfile -NonInteractive -ExecutionPolicy Bypass -Command ${h(c)}`,{windowsHide:!0},(c,d,e)=>{if(c){let a=e||c.message;a.includes("canceled by the user")||a.includes("operation was canceled")?b(Error("User canceled UAC prompt")):b(Error(a))}else a(d)})})},quotePs:h}},66936:(a,b,c)=>{let{exec:d,spawn:e,execSync:f}=c(79646),g=c(29021),h=c(33873);c(21820);let{log:i,err:j}=c(87777),{TOOL_HOSTS:k}=c(85341),{runElevatedPowerShell:l,isAdmin:m}=c(64809);function n(a,b,c){let d=`${a}.krouter.new`,e=`${a}.krouter.bak`;try{g.writeFileSync(d,c,"utf8");try{g.unlinkSync(e)}catch{}g.renameSync(a,e);try{g.renameSync(d,a)}catch(c){try{g.renameSync(e,a)}catch{g.writeFileSync(a,b,"utf8")}throw c}try{g.unlinkSync(e)}catch{}}finally{try{g.unlinkSync(d)}catch{}}}let o="win32"===process.platform,p="darwin"===process.platform,q=o?h.join(process.env.SystemRoot||"C:\\Windows","System32","drivers","etc","hosts"):"/etc/hosts";function r(){if(o)return!1;try{return f("command -v sudo",{stdio:"ignore",windowsHide:!0}),!0}catch{return!1}}function s(){if(o||!r())return!0;try{return f("sudo -n true",{stdio:"ignore",windowsHide:!0}),!0}catch{return!1}}function t(a,b){return new Promise((c,d)=>{let f=r(),g=f?e("sudo",["-S","-p","","sh","-c",a],{stdio:["pipe","pipe","pipe"],windowsHide:!0}):e("sh",["-c",a],{stdio:["ignore","pipe","pipe"],windowsHide:!0}),h="",i="";g.stdout.on("data",a=>{h+=a}),g.stderr.on("data",a=>{i+=a}),g.on("close",a=>{0===a?c(h):d(Error(i||`Exit code ${a}`))}),f&&(g.stdin.write(`${b}
|
|
58
58
|
`),g.stdin.end())})}async function u(a){o||(p?await t("dscacheutil -flushcache && killall -HUP mDNSResponder",a):await t("resolvectl flush-caches 2>/dev/null || true",a))}function v(a=null){try{let b=g.readFileSync(q,"utf8");if(a)return b.includes(a);return k.antigravity.every(a=>b.includes(a))}catch{return!1}}async function w(a,b){let c=k[a];if(!c)throw Error(`Unknown tool: ${a}`);let d=c.filter(a=>!v(a));if(0===d.length)return void i(`🌐 DNS ${a}: already active`);try{if(o){let a=g.readFileSync(q,"utf8"),b=a.replace(/[\r\n\s]+$/g,""),c=d.map(a=>`127.0.0.1 ${a}`).join("\r\n"),e=`${b}\r
|
|
59
59
|
${c}\r
|
|
60
60
|
`;n(q,a,e),await l("ipconfig /flushdns | Out-Null")}else{let a=g.readFileSync(q,"utf8").replace(/[\r\n\s]+$/g,""),c=d.map(a=>`127.0.0.1 ${a}`).join("\n"),e=`${a}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
"use strict";exports.id=6200,exports.ids=[6200],exports.modules={9999:(a,b,c)=>{c.d(b,{$S:()=>l,$T:()=>m,QS:()=>n,e3:()=>o});var d=c(77598),e=c.n(d);let f=globalThis;f.__krouterResponseCache||(f.__krouterResponseCache=new Map,f.__krouterResponseCacheStats={hits:0,misses:0,skipped:0,bytesSaved:0,tokensSaved:0,lastResetAt:Date.now()});let g=f.__krouterResponseCache,h=f.__krouterResponseCacheStats;function i({model:a,body:b}){let c=JSON.stringify({model:a,system:b?.system??null,instructions:b?.instructions??null,messages:b?.messages??null,input:b?.input??null,contents:b?.contents??null,temperature:b?.temperature??null,max_tokens:b?.max_tokens??b?.max_output_tokens??null,tools:b?.tools??null,tool_choice:b?.tool_choice??null,response_format:b?.response_format??null});return e().createHash("sha256").update(c).digest("hex")}let j=new Set(["antigravity","ag","gemini","gemini-cli","gc"]);function k(a,b=null){if(!a||"object"!=typeof a||!0===a.stream||"number"==typeof a.temperature&&a.temperature>.3||"required"===a.tool_choice)return!1;let c=function(a){if("string"!=typeof a)return null;let b=a.indexOf("/");return b>0?a.slice(0,b):null}(b);if(c&&j.has(c))return!1;let d=a.max_tokens??a.max_output_tokens??null;return"number"!=typeof d||!(d<32)}function l({model:a,body:b}){if(!k(b,a))return h.skipped++,null;let c=i({model:a,body:b}),d=g.get(c);return d?d.expiresAt<Date.now()?(g.delete(c),h.misses++,null):(g.delete(c),g.set(c,d),h.hits++,h.bytesSaved+=d.bodyBytes||0,h.tokensSaved+=d.estimatedTokens||0,d):(h.misses++,null)}function m({model:a,body:b,status:c,contentType:d,responseBody:e,estimatedTokens:f=0,ttlMs:h=3e5,maxEntries:j=500}){if(!k(b,a)||200!==c||!e||"string"==typeof e&&e.length<100)return!1;let l=i({model:a,body:b}),n="string"==typeof e?e:JSON.stringify(e),o={key:l,status:c,contentType:d||"application/json",body:n,bodyBytes:Buffer.byteLength(n,"utf-8"),estimatedTokens:f,expiresAt:Date.now()+h,storedAt:Date.now(),model:a};for(g.set(l,o);g.size>j;){let a=g.keys().next().value;if(void 0===a)break;g.delete(a)}return!0}function n(){let a=h.hits+h.misses;return{enabled:!0,entries:g.size,hits:h.hits,misses:h.misses,skipped:h.skipped,hitRate:a>0?h.hits/a:0,bytesSaved:h.bytesSaved,tokensSaved:h.tokensSaved,lastResetAt:h.lastResetAt}}function o(){g.clear(),h.hits=0,h.misses=0,h.skipped=0,h.bytesSaved=0,h.tokensSaved=0,h.lastResetAt=Date.now()}},17603:(a,b,c)=>{c.d(b,{R8:()=>j,ar:()=>l,vB:()=>h});var d=c(66306);let e=["vision","pdf","audioInput","videoInput"],f=new Set(e);function g(a,b){var c;let d=Array.isArray(c=b?.capacityAdapter?.[a])?{enabled:!0,roundRobin:!1,models:c.map(a=>a?.model||a).filter(Boolean)}:c&&"object"==typeof c?{enabled:!1!==c.enabled,roundRobin:!!c.roundRobin,models:Array.isArray(c.models)?c.models.filter(Boolean):[]}:{enabled:!1,roundRobin:!1,models:[]};return d.enabled&&0===d.models.length?{...d,models:["mmf/mimo-auto"]}:d}function h(a,b){for(let c of[...a||[]].filter(a=>f.has(a))){let{enabled:a,models:d}=g(c,b);if(a&&0!==d.length)return function(a,b){let{enabled:c,roundRobin:d}=g(a,b);return c&&d?"round-robin":"fallback"}(c,b)}return"fallback"}function i(a,b){let c=a.indexOf("/"),e=c>0?a.slice(0,c):"",f=c>0?a.slice(c+1):a,g=(0,d.nl)(e,f);return b.every(a=>!0===g[a])}function j(a,b,c){let d=[...b||[]].filter(a=>f.has(a));if(0===d.length||!Array.isArray(a)||0===a.length||a.some(a=>i(a,d)))return a;let h=(function(a){let b=new Set,c=[];for(let d of e){let{enabled:e,models:f}=g(d,a);if(e)for(let a of f)b.has(a)||(b.add(a),c.push(a))}return c})(c).filter(b=>!a.includes(b)&&i(b,d));return 0===h.length?a:[...h,...a]}function k(a){return"string"==typeof a?a.length:Array.isArray(a)?a.reduce((a,b)=>a+("string"==typeof b?.text?b.text.length:50),0):0}function l(a,b){let c=new Set(b);return 0===c.size?a:(b,e,...f)=>{if(c.has(e)){let a=e.indexOf("/"),c=a>0?e.slice(0,a):"",f=a>0?e.slice(a+1):e,{contextWindow:g}=(0,d.nl)(c,f);b=function(a,b){let c=Array.isArray(a.messages)?"messages":Array.isArray(a.input)?"input":Array.isArray(a.contents)?"contents":null;if(!c)return a;let d=a[c];if(!d||0===d.length)return a;let e=a=>"system"===a||"developer"===a,f=d.filter(a=>e(a?.role)),g=d.filter(a=>!e(a?.role));if(0===g.length)return a;let h=a=>"assistant"===a||"model"===a,i=g.length-1;for(;i>=0&&!h(g[i]?.role);)i--;let j=g.slice(i+1),l=g.slice(0,i+1);if(0===l.length)return a;let m=a=>a.content??a.parts,n=.8*(b||2e5)*4,o=l.slice(0,6),p=f.concat(o,j).reduce((a,b)=>a+k(m(b)),0);for(;p>n&&o.length>0;)p-=k(m(o.pop()));return o.length===l.length?a:{...a,[c]:[...f,...o,...j]}}(b,g)}return a(b,e,...f)}}},24253:(a,b,c)=>{c.d(b,{I6:()=>n,Mo:()=>i,RG:()=>m,V:()=>j,Y8:()=>l,xl:()=>o});var d=c(1932),e=c(87155);let f=null,g=null,h=null;function i(){return g?{loaded:!0,version:g.version,loadedAt:g.loadedAt}:{loaded:!1}}async function j(){return g||h||(h=k().finally(()=>{h=null}))}async function k(){let a=(0,e.S1)();if(!a.installed){let a=Error("PXPIPE is not installed");throw a.code="NOT_INSTALLED",a}let b=`${(0,d.pathToFileURL)((0,e.CG)()).href}?v=${encodeURIComponent(a.version||"0")}`,c=await import(b);if("function"!=typeof c.transformAnthropicMessages)throw Error("installed pxpipe package does not export transformAnthropicMessages");return g={module:c,version:a.version,loadedAt:Date.now()}}function l(){let a=!!g;return g=null,a}async function m({autoLoad:a=!0}={}){try{if(!g&&!a)return null;let{module:b}=await j();return b.transformAnthropicMessages}catch{return null}}async function n(a){let b=Array.isArray(a)?a.map(a=>String(a).trim()).filter(Boolean):[],c=b.slice().sort().join(",");if(c!==f)try{if(!(0,e.S1)().installed)return;let a=await import((0,d.pathToFileURL)((0,e.kC)()).href);"function"==typeof a.setAllowedModelBases&&(a.setAllowedModelBases(b.length?b:null),f=c)}catch{}}async function o(){let a=Date.now(),{module:b}=await j(),c=new TextEncoder().encode(JSON.stringify({model:"claude-fable-5",max_tokens:16,messages:[{role:"user",content:"ping"}]})),d=await b.transformAnthropicMessages({body:c,model:"claude-fable-5"});if(!d||"boolean"!=typeof d.applied||!(d.body instanceof Uint8Array))throw Error("transform returned an unexpected shape");return{ok:!0,reason:d.reason,durationMs:Date.now()-a}}},25772:(a,b,c)=>{c.d(b,{Io:()=>h,WV:()=>f});let d=null,e=0;function f(a={}){let{sidecarUrl:b=process.env.SIDECAR_URL||"http://presidio-sidecar:5001/redact",timeout:h=Number(process.env.REDACTION_TIMEOUT_MS)||15e3,enabled:i="false"!==process.env.REDACTION_ENABLED,failOpen:j="true"===process.env.REDACTION_FAIL_OPEN}=a;return async function(a,f){if(!i)return f(a);if(Date.now()-e>1e4)try{let{getSettings:a}=await Promise.resolve().then(c.bind(c,42655)),b=await a();d=!!(b.presidioEnabled&&b.presidioPiiRedaction),e=Date.now()}catch(b){if(console.error("[Redaction Middleware] Failed to read settings:",b),!0===d&&!j)return new Response(JSON.stringify({error:{message:"Unable to verify redaction settings",code:"SETTINGS_ERROR",type:"settings_error"}}),{status:500,headers:{"Content-Type":"application/json"}});return f(a)}if(!d||"POST"!==a.method)return f(a);try{let c=await a.clone().json(),d=[],e=[];if(Array.isArray(c.messages))for(let a=0;a<c.messages.length;a++){let b=c.messages[a],f=b?.content;if(f){if("string"==typeof f)d.push(f),e.push({type:"string",index:a});else if(Array.isArray(f))for(let b=0;b<f.length;b++){let c=f[b];c?.type==="text"&&"string"==typeof c?.text&&(d.push(c.text),e.push({type:"array",msgIndex:a,blockIndex:b}))}}}if("string"==typeof c.system)d.push(c.system),e.push({type:"system-string"});else if(Array.isArray(c.system))for(let a=0;a<c.system.length;a++){let b=c.system[a];b?.type==="text"&&"string"==typeof b?.text&&(d.push(b.text),e.push({type:"system-block",blockIndex:a}))}if("string"==typeof c.instructions&&(d.push(c.instructions),e.push({type:"instructions"})),"string"==typeof c.input)d.push(c.input),e.push({type:"input-string"});else if(Array.isArray(c.input))for(let a=0;a<c.input.length;a++){let b=c.input[a],f=b?.content;if("string"==typeof f)d.push(f),e.push({type:"input-item-string",index:a});else if(Array.isArray(f))for(let b=0;b<f.length;b++){let c=f[b];(c?.type==="input_text"||c?.type==="output_text"||c?.type==="text")&&"string"==typeof c?.text&&(d.push(c.text),e.push({type:"input-item-block",itemIndex:a,blockIndex:b}))}}if(Array.isArray(c.messages))for(let a=0;a<c.messages.length;a++){let b=c.messages[a];if(b?.role==="tool"&&"string"==typeof b.content&&(d.push(b.content),e.push({type:"tool-message",index:a})),Array.isArray(b?.tool_calls))for(let c=0;c<b.tool_calls.length;c++){let f=b.tool_calls[c]?.function?.arguments;"string"==typeof f&&f.length>0&&(d.push(f),e.push({type:"tool-call-args",msgIndex:a,callIndex:c}))}if(Array.isArray(b?.content))for(let c=0;c<b.content.length;c++){let f=b.content[c];if(f?.type==="tool_result"){if("string"==typeof f.content)d.push(f.content),e.push({type:"tool-result-string",msgIndex:a,blockIndex:c});else if(Array.isArray(f.content))for(let b=0;b<f.content.length;b++){let g=f.content[b];g?.type==="text"&&"string"==typeof g.text&&(d.push(g.text),e.push({type:"tool-result-block",msgIndex:a,blockIndex:c,innerIndex:b}))}}}}if(Array.isArray(c.tools))for(let a=0;a<c.tools.length;a++){let b=c.tools[a];"string"==typeof b?.description&&b.description.length>0?(d.push(b.description),e.push({type:"tool-desc",index:a})):"string"==typeof b?.function?.description&&b.function.description.length>0&&(d.push(b.function.description),e.push({type:"tool-fn-desc",index:a}))}if(0===d.length)return f(a);let i=await g(b,d,{timeout:h}),j=0;for(let a of e){if("string"===a.type)c.messages[a.index].content=i[j];else if("array"===a.type)c.messages[a.msgIndex].content[a.blockIndex].text=i[j];else if("system-string"===a.type)c.system=i[j];else if("system-block"===a.type)c.system[a.blockIndex].text=i[j];else if("instructions"===a.type)c.instructions=i[j];else if("input-string"===a.type)c.input=i[j];else if("input-item-string"===a.type)c.input[a.index].content=i[j];else if("input-item-block"===a.type)c.input[a.itemIndex].content[a.blockIndex].text=i[j];else if("tool-message"===a.type)c.messages[a.index].content=i[j];else if("tool-call-args"===a.type){let b=i[j],d=!1;try{JSON.parse(b),d=!0}catch{d=!1}d?c.messages[a.msgIndex].tool_calls[a.callIndex].function.arguments=b:console.warn("[Redaction Middleware] Skipped tool_call arguments: redaction produced invalid JSON")}else"tool-result-string"===a.type?c.messages[a.msgIndex].content[a.blockIndex].content=i[j]:"tool-result-block"===a.type?c.messages[a.msgIndex].content[a.blockIndex].content[a.innerIndex].text=i[j]:"tool-desc"===a.type?c.tools[a.index].description=i[j]:"tool-fn-desc"===a.type&&(c.tools[a.index].function.description=i[j]);j++}let k=new Request(a.url,{method:a.method,headers:a.headers,body:JSON.stringify(c)});return f(k)}catch(e){if(console.error(`[Redaction Middleware] Error: ${e.message}`),j)return console.warn("[Redaction Middleware] Fail-open enabled - proceeding with original request"),f(a);let b=500,c="internal_error",d="Request processing failed";return"AbortError"===e.name||e.message.includes("timeout")||e.message.includes("TIMEOUT")?(b=503,c="redaction_timeout",d="PII redaction service unavailable. Please try again later."):e.message.includes("fetch")||e.message.includes("ECONNREFUSED")||e.message.includes("ENOTFOUND")||e.message.includes("ECONNRESET")||"TypeError"===e.name&&e.message.includes("fetch")?(b=503,c="redaction_service_unavailable",d="PII redaction service unavailable. Please try again later."):e.message.includes("redact")||e.message.includes("sidecar")||e.message.includes("HTTP 5")?(b=502,c="redaction_service_error",d="PII redaction service error. Please try again later."):(e.message.includes("Invalid")||e.message.includes("format"))&&(b=400,c="invalid_request",d="Invalid request format."),console.error(JSON.stringify({timestamp:new Date().toISOString(),event:"redaction_failure",errorType:c,errorMessage:e.message,statusCode:b,path:new URL(a.url).pathname,method:a.method})),new Response(JSON.stringify({error:{message:d,code:c.toUpperCase(),type:c,requestId:a.headers.get("x-request-id")||void 0}}),{status:b,headers:{"Content-Type":"application/json","X-Redaction-Failed":"true"}})}}}async function g(a,b,{timeout:c=2e3}={}){let d=new AbortController,e=setTimeout(()=>d.abort(),c);try{let c=await fetch(a,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({texts:b}),signal:d.signal});if(!c.ok)throw Error(`Sidecar redaction service error: HTTP ${c.status}`);let e=await c.json();if(!e.redacted_texts||!Array.isArray(e.redacted_texts))throw Error("Sidecar redaction service returned invalid response");if(e.redacted_texts.length!==b.length)throw Error("Sidecar redaction service returned wrong number of redacted texts");return e.redacted_texts}finally{clearTimeout(e)}}function h(a,b={}){let c=f(b);return async function(b,...d){return c(b,b=>a(b,...d))}}},38775:(a,b,c)=>{c.d(b,{d_:()=>k,mA:()=>j});var d=c(89718),e=c(40669),f=c(35024),g=c(44404);let h={xmtp:"xiaomi-tokenplan","xiaomi-tokenplan":"xiaomi-tokenplan"},i=new Set([...Object.keys(h),...Object.keys(f.xq),...Object.keys(g.Xg),...Object.values(g.Xg)]);async function j(a){let b,c=(b=(0,e.Xh)(a),b?.providerAlias&&h[b.providerAlias]?{...b,provider:h[b.providerAlias]}:b);if(!c.isAlias){if(!i.has(c.providerAlias)){let a=(await (0,d.Fh)({type:"openai-compatible"})).find(a=>a.prefix===c.providerAlias);if(a)return{provider:a.id,model:c.model};let b=(await (0,d.Fh)({type:"anthropic-compatible"})).find(a=>a.prefix===c.providerAlias);if(b)return{provider:b.id,model:c.model};let e=(await (0,d.Fh)({type:"custom-embedding"})).find(a=>a.prefix===c.providerAlias);if(e)return{provider:e.id,model:c.model}}return{provider:c.provider,model:c.model}}return await (0,d.Dj)(c.model)?{provider:null,model:c.model}:(0,e.js)(a,d.OM)}async function k(a){if(a.includes("/"))return null;let b=await (0,d.Dj)(a);return b&&b.models&&b.models.length>0?b.models:null}},54413:(a,b,c)=>{c.d(b,{D:()=>e});let d={"qwen3.6-plus-free":{replacement:"qwen3.6-plus",tier:"opencode-go (API key)",reason:"OpenCode discontinued its free tier"},"minimax-m2.5-free":{replacement:"minimax-m2.5",tier:"opencode-go (API key)",reason:"OpenCode discontinued its free tier"},"nemotron-3-super-free":{replacement:null,tier:"opencode-go (API key)",reason:"OpenCode discontinued its free tier"},"trinity-large-preview-free":{replacement:null,tier:"opencode-go (API key)",reason:"OpenCode discontinued its free tier"},"big-pickle":{replacement:null,tier:"opencode-go (API key)",reason:"OpenCode discontinued its free tier"}};function e(a){if(!a||"string"!=typeof a)return null;let b=a.includes("/")?a.slice(a.lastIndexOf("/")+1):a,c=d[b];if(!c)return null;let e=c.replacement?`Use "${c.replacement}" on the ${c.tier} instead.`:`No direct replacement — pick a live model on the ${c.tier}.`;return`Model "${b}" has been retired (${c.reason}). ${e}`}},74388:(a,b,c)=>{c.d(b,{Az:()=>l,SP:()=>o,T0:()=>k});var d=c(29021),e=c.n(d),f=c(33873),g=c.n(f),h=c(87155);let i=g().join(h.XF,"events.jsonl"),j=g().join(h.XF,"events.jsonl.1");function k(a){try{e().existsSync(h.XF)||e().mkdirSync(h.XF,{recursive:!0});try{e().statSync(i).size>5242880&&e().renameSync(i,j)}catch{}e().appendFile(i,JSON.stringify({ts:Date.now(),...a})+"\n",()=>{})}catch{}}function l({sinceMs:a=null,limit:b=null}={}){let c=[];for(let b of[j,i])try{if(!e().existsSync(b))continue;for(let d of e().readFileSync(b,"utf8").split("\n"))if(d)try{let b=JSON.parse(d);if(a&&b.ts<a)continue;c.push(b)}catch{}}catch{}return c.sort((a,b)=>a.ts-b.ts),b?c.slice(-b):c}function m(){return{requests:0,compressed:0,bypassed:0,errors:0,tokensBeforeEst:0,tokensAfterEst:0,tokensSavedEst:0,savedPct:0,imagesGenerated:0,compressionTimeMs:0,avgCompressionMs:0}}function n(a,b){a.requests++,b.applied?(a.compressed++,a.tokensBeforeEst+=b.tokensBeforeEst||0,a.tokensAfterEst+=b.tokensAfterEst||0,a.tokensSavedEst+=b.tokensSavedEst||0,a.imagesGenerated+=b.imageCount||0,a.compressionTimeMs+=b.durationMs||0):"transform_error"===b.reason||"timeout"===b.reason?a.errors++:a.bypassed++}function o({timelineDays:a=30,recentLimit:b=100}={}){let c=l(),d=Date.now(),e=new Date(new Date(d).setHours(0,0,0,0)).getTime(),f={all:m(),today:m(),yesterday:m(),last7d:m(),last30d:m()},g=new Map;for(let b=a-1;b>=0;b--){let a=new Date(e-864e5*b);g.set(a.toISOString().slice(0,10),{date:a.toISOString().slice(0,10),tokensSavedEst:0,compressed:0,requests:0})}for(let a of c){n(f.all,a),a.ts>=e?n(f.today,a):a.ts>=e-864e5&&n(f.yesterday,a),a.ts>=d-6048e5&&n(f.last7d,a),a.ts>=d-2592e6&&n(f.last30d,a);let b=new Date(a.ts).toISOString().slice(0,10),c=g.get(b);c&&(c.requests++,a.applied&&(c.compressed++,c.tokensSavedEst+=a.tokensSavedEst||0))}for(let a of Object.values(f))a.savedPct=a.tokensBeforeEst>0?+(a.tokensSavedEst/a.tokensBeforeEst*100).toFixed(2):0,a.avgCompressionMs=a.compressed>0?Math.round(a.compressionTimeMs/a.compressed):0;return{windows:f,timeline:[...g.values()],recent:c.slice(-b).reverse()}}},79489:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{P:()=>B});var e=c(48895),f=c(80238),g=c(89718),h=c(38775),i=c(92500),j=c(43659),k=c(54413),l=c(8864),m=c(38962),n=c(17603),o=c(27349),p=c(24253),q=c(74388),r=c(9999),s=c(41004),t=c(53258),u=c(14170),v=c(7803),w=c(67828),x=c(38160),y=c(29385),z=a([e,i]);async function A(a){return a?.pxpipeEnabled?(await (0,p.I6)(a.pxpipeModels),(0,p.RG)()):null}async function B(a,b=null){let d;try{d=await a.json()}catch{return v.warn("CHAT","Invalid JSON body"),(0,j.yj)(s.gx.BAD_REQUEST,"Invalid JSON body")}b||(b={endpoint:new URL(a.url).pathname,body:d,headers:Object.fromEntries(a.headers.entries())});let e=new URL(a.url),i=d.model,k=d.messages?.length||d.input?.length||0,l=d.tools?.length||0,p=d.reasoning_effort||d.reasoning?.effort||null;v.request("POST",`${e.pathname} | ${i} | ${k} msgs${l?` | ${l} tools`:""}${p?` | effort=${p}`:""}`);let q=a.headers.get("Authorization"),t=(0,f.Tr)(a);if(q&&t){let a=v.maskKey(t);v.debug("AUTH",`API Key: ${a}`)}else v.debug("AUTH","No API key provided (local mode)");let u=await (0,g.mt)();if(u.requireApiKey){if(!t)return v.warn("AUTH","Missing API key (requireApiKey=true)"),(0,j.yj)(s.gx.UNAUTHORIZED,"Missing API key");if(!await (0,f.kI)(t))return v.warn("AUTH","Invalid API key (requireApiKey=true)"),(0,j.yj)(s.gx.UNAUTHORIZED,"Invalid API key")}if(!i)return v.warn("CHAT","Missing model"),(0,j.yj)(s.gx.BAD_REQUEST,"Missing model");try{let{classifyPromptIntent:a}=await c.e(9849).then(c.bind(c,49849)),{classifyRequestComplexity:b}=await c.e(3523).then(c.bind(c,23523)),e=(d?.messages||[]).find(a=>a?.role==="user"),f="string"==typeof e?.content?e.content:Array.isArray(e?.content)&&e.content.find(a=>a?.text)?.text||"",g=(d?.messages||[]).find(a=>a?.role==="system"),h="string"==typeof g?.content?g.content:"",i=a(f,h),j=b(d);v.debug("ROUTING",`intent=${i} | complexity=${j.level} score=${j.score} tier=${j.recommendedTier}${j.hasToolUse?" tools=yes":""}`)}catch(a){v.debug("ROUTING",`classify failed: ${a?.message}`)}let w=a?.headers?.get("user-agent")||"",x=(0,o.c)(d,i,w,!!u.ccFilterNaming);if(x)return x.response||x;if(u.responseCacheEnabled){let a=(0,r.$S)({model:i,body:d});if(a)return v.info("CHAT",`[CACHE HIT] ${i} (${a.bodyBytes}B saved)`),new Response(a.body,{status:a.status,headers:{"Content-Type":a.contentType,"X-Cache":"HIT","X-Cache-Age-Ms":String(Date.now()-a.storedAt)}})}let y=(0,m.t8)(d),z=await (0,h.d_)(i);if(z){let c=u.comboStrategies||{},e=c[i]?.fallbackStrategy||u.comboStrategy||"fallback",f=(0,n.R8)(z,y,u),g=f.filter(a=>!z.includes(a));if("fusion"===e)return v.info("CHAT",`Combo "${i}" with ${z.length} models (strategy: fusion)`),(0,m.vt)({body:d,models:z,handleSingleModel:(c,d)=>C(c,d,b,a,t,u,1),log:v,comboName:i,judgeModel:c[i]?.judgeModel,tuning:c[i]?.fusionTuning});let h=u.comboStickyRoundRobinLimit;return v.info("CHAT",`Combo "${i}" with ${f.length} models (strategy: ${e}, sticky: ${h})`),(0,m.Pr)({body:d,models:f,handleSingleModel:(0,n.ar)((c,d)=>C(c,d,b,a,t,u,1),g),log:v,comboName:i,comboStrategy:e,comboStickyLimit:h})}let A=(0,n.R8)([i],y,u);if(A.length>1){let c=A.filter(a=>a!==i);return v.info("CHAT",`Capacity adapter for [${[...y].join(",")}] on "${i}" → trying ${A.join(", ")}`),(0,m.Pr)({body:d,models:A,handleSingleModel:(0,n.ar)((c,d)=>C(c,d,b,a,t,u,1),c),log:v,comboName:i,comboStrategy:(0,n.vB)(y,u)})}return C(d,i,b,a,t,u,0)}async function C(a,b,c=null,d=null,e=null,n=null,o=0){n||(n=await (0,g.mt)());let p=await (0,h.mA)(b);if(!p.provider){let f=await (0,h.d_)(b);if(f){if(o>=3)return v.warn("CHAT",`Combo recursion limit hit for "${b}" at depth ${o} — refusing to dispatch`),(0,j.yj)(s.gx.BAD_REQUEST,`Combo recursion limit (3) exceeded for "${b}"`);let g=n.comboStrategies||{},h=g[b]?.fallbackStrategy||n.comboStrategy||"fallback";if("fusion"===h)return v.info("CHAT",`Combo "${b}" with ${f.length} models (strategy: fusion, depth: ${o})`),(0,m.vt)({body:a,models:f,handleSingleModel:(a,b)=>C(a,b,c,d,e,n,o+1),log:v,comboName:b,judgeModel:g[b]?.judgeModel,tuning:g[b]?.fusionTuning});let i=n.comboStickyRoundRobinLimit;return v.info("CHAT",`Combo "${b}" with ${f.length} models (strategy: ${h}, sticky: ${i}, depth: ${o})`),(0,m.Pr)({body:a,models:f,handleSingleModel:(a,b)=>C(a,b,c,d,e,n,o+1),log:v,comboName:b,comboStrategy:h,comboStickyLimit:i})}return v.warn("CHAT","Invalid model format",{model:b}),(0,j.yj)(s.gx.BAD_REQUEST,"Invalid model format")}let{provider:z,model:B}=p,D=(0,k.D)(B);if(D)return v.warn("CHAT",`Retired model "${B}" requested → ${D}`),(0,j.yj)(s.gx.BAD_REQUEST,D);b!==`${z}/${B}`?v.info("ROUTING",`${b} → ${z}/${B}`):v.info("ROUTING",`Provider: ${z}, Model: ${B}`);let E=d?.headers?.get("user-agent")||"",F=d?.headers?.get("x-bypass-modellock")==="1",G=new Set,H=null,I=null,J="round-robin"===(0,l.z)(n,z),K=(0,y.bI)(a,{provider:z}),L=!J&&K?(0,y.Wq)(K):null;for(;;){let g=await (0,f.c1)(z,G,B,{bypassModelLock:F,preferredConnectionId:L&&!G.has(L)?L:null});if(!g||g.allRateLimited){if(g?.allRateLimited){let a=H||g.lastError||"Unavailable",b=I||Number(g.lastErrorCode)||s.gx.SERVICE_UNAVAILABLE;return v.warn("CHAT",`[${z}/${B}] ${a} (${g.retryAfterHuman})`),(0,j.wO)(b,`[${z}/${B}] ${a}`,g.retryAfter,g.retryAfterHuman)}if(0===G.size)return v.warn("AUTH",`No active credentials for provider: ${z}`),(0,j.yj)(s.gx.SERVICE_UNAVAILABLE,`No active credentials for provider: ${z}`);return v.warn("CHAT","No more accounts available",{provider:z}),(0,j.yj)(I||s.gx.SERVICE_UNAVAILABLE,H||"All accounts unavailable")}v.info("AUTH",`\x1b[32mUsing ${z} account: ${g.connectionName}\x1b[0m`);let h=await (0,w.eU)(z,g);if(("antigravity"===z||"gemini-cli"===z)&&!h.projectId){let a=await (0,x.eG)(g.connectionId,h.accessToken,z);a&&(h.projectId=a,(0,w.vN)(g.connectionId,{projectId:a}).catch(()=>{}))}let k=(n.providerThinking||{})[z]||null,l=Date.now(),m=await (0,i.wk)({body:{...a,model:`${z}/${B}`},modelInfo:{provider:z,model:B},credentials:h,log:v,clientRawRequest:c,connectionId:g.connectionId,userAgent:E,apiKey:e,ccFilterNaming:!!n.ccFilterNaming,rtkEnabled:!!n.rtkEnabled,headroomEnabled:!!n.headroomEnabled,headroomUrl:n.headroomUrl||"http://localhost:8787",headroomCompressUserMessages:!!n.headroomCompressUserMessages,cavemanEnabled:!!n.cavemanEnabled,cavemanLevel:n.cavemanLevel||"full",ponytailEnabled:!!n.ponytailEnabled,ponytailLevel:n.ponytailLevel||"full",pxpipeEnabled:!!n.pxpipeEnabled,pxpipeMinChars:n.pxpipeMinChars,pxpipeTimeoutMs:n.pxpipeTimeoutMs,pxpipeTransform:await A(n),onPxpipeEvent:q.T0,providerThinking:k,settings:n,sourceFormatOverride:d?.url?(0,u.t)(new URL(d.url).pathname,a):null,onCredentialsRefreshed:async a=>{await (0,w.vN)(g.connectionId,{...a,existingProviderSpecificData:g.providerSpecificData,testStatus:"active"})},onRequestSuccess:async()=>{await (0,f.Pt)(g.connectionId,g,B)}});if((0,t.Up)(g.connectionId,!!m.success,Date.now()-l,{provider:z,model:B,strategy:"zenith"}),m.success){if(!J&&K&&g.connectionId&&(0,y.BO)(K,g.connectionId),n.responseCacheEnabled&&!0!==a.stream)try{let c=m.response.clone(),d=c.headers.get("content-type")||"application/json";c.text().then(e=>{(0,r.$T)({model:b,body:a,status:c.status,contentType:d,responseBody:e,estimatedTokens:Math.ceil(e.length/4),ttlMs:1e3*(n.responseCacheTtlSec||300)})}).catch(()=>{})}catch{}return m.response}if(m.emergencyFallback&&!a.__emergencyFallbackUsed){let b=m.emergencyFallback;v.info("EMERGENCY",`${z}/${B} → ${b.provider}/${b.model} (${b.reason})`);try{let g=await (0,f.c1)(b.provider,new Set,b.model);if(g&&!g.allRateLimited){let f={...a,__emergencyFallbackUsed:!0,model:`${b.provider}/${b.model}`};b.maxOutputTokens&&(f.max_tokens=Math.min(f.max_tokens||b.maxOutputTokens,b.maxOutputTokens));let h=await (0,i.wk)({body:f,modelInfo:{provider:b.provider,model:b.model},credentials:g,log:v,clientRawRequest:c,userAgent:E,apiKey:e,connectionId:g.connectionId,ccFilterNaming:!!n.ccFilterNaming,rtkEnabled:!!n.rtkEnabled,headroomEnabled:!!n.headroomEnabled,headroomUrl:n.headroomUrl||"http://localhost:8787",headroomCompressUserMessages:!!n.headroomCompressUserMessages,cavemanEnabled:!!n.cavemanEnabled,cavemanLevel:n.cavemanLevel||"full",ponytailEnabled:!!n.ponytailEnabled,ponytailLevel:n.ponytailLevel||"full",pxpipeEnabled:!!n.pxpipeEnabled,pxpipeMinChars:n.pxpipeMinChars,pxpipeTimeoutMs:n.pxpipeTimeoutMs,pxpipeTransform:await A(n),onPxpipeEvent:q.T0,providerThinking:(n.providerThinking||{})[b.provider]||null,sourceFormatOverride:d?.url?(0,u.t)(new URL(d.url).pathname,a):null,settings:n});if(h.success)return h.response;v.warn("EMERGENCY",`fallback ${b.provider}/${b.model} also failed: ${h.status}`)}else v.warn("EMERGENCY",`no credentials for fallback ${b.provider}, skipping`)}catch(a){v.warn("EMERGENCY",`fallback path threw: ${a.message}`)}}let{shouldFallback:o}=await (0,f.vk)(g.connectionId,m.status,m.error,z,B,m.resetsAtMs);if(o){v.warn("AUTH",`Account ${g.connectionName} unavailable (${m.status}), trying fallback`),G.add(g.connectionId),H=m.error,I=m.status;continue}return m.response}}[e,i]=z.then?(await z)():z,d()}catch(a){d(a)}})},87155:(a,b,c)=>{c.d(b,{CG:()=>q,ED:()=>v,S1:()=>t,XF:()=>j,_g:()=>u,kC:()=>r,no:()=>s,sW:()=>x});var d=c(29021),e=c.n(d),f=c(33873),g=c.n(f),h=c(79646),i=c(49120);let j=g().join(i.n,"pxpipe"),k="pxpipe-proxy",l=g().join(j,"install.log"),m="win32"===process.platform,n=[...m?[`${process.env.ProgramFiles||""}\\nodejs`,`${process.env.APPDATA||""}\\npm`]:["/usr/local/bin","/opt/homebrew/bin",`${process.env.HOME||""}/.local/bin`,"/usr/bin","/bin"],process.env.PATH||""].filter(Boolean).join(g().delimiter),o=null;function p(){return g().join(j,"node_modules",k)}function q(){return g().join(p(),"dist","core","library.js")}function r(){return g().join(p(),"dist","core","applicability.js")}function s(){try{let a=(0,h.execSync)(`${m?"where":"which"} npm`,{stdio:["ignore","pipe","ignore"],windowsHide:!0,env:{...process.env,PATH:n}}).toString().trim();return a?a.split(/\r?\n/)[0].trim():null}catch{return null}}function t(){try{let a=g().join(p(),"package.json");if(!e().existsSync(a)||!e().existsSync(q()))return{installed:!1,version:null,path:null};let b=JSON.parse(e().readFileSync(a,"utf8"));return{installed:!0,version:b.version||null,path:p()}}catch{return{installed:!1,version:null,path:null}}}function u(){return null!==o}function v(){return o||(o=w().finally(()=>{o=null}))}async function w(){let a=s();if(!a){let a=Error("npm not found on PATH — Node.js/npm is required to install PXPIPE");throw a.code="NPM_NOT_FOUND",a}e().existsSync(j)||e().mkdirSync(j,{recursive:!0});let b=g().join(j,"package.json");e().existsSync(b)||e().writeFileSync(b,JSON.stringify({name:"9router-pxpipe-host",private:!0},null,2));let c=e().openSync(l,"a");e().writeSync(c,`
|
|
1
|
+
"use strict";exports.id=6200,exports.ids=[6200],exports.modules={9999:(a,b,c)=>{c.d(b,{$S:()=>l,$T:()=>m,QS:()=>n,e3:()=>o});var d=c(77598),e=c.n(d);let f=globalThis;f.__krouterResponseCache||(f.__krouterResponseCache=new Map,f.__krouterResponseCacheStats={hits:0,misses:0,skipped:0,bytesSaved:0,tokensSaved:0,lastResetAt:Date.now()});let g=f.__krouterResponseCache,h=f.__krouterResponseCacheStats;function i({model:a,body:b}){let c=JSON.stringify({model:a,system:b?.system??null,instructions:b?.instructions??null,messages:b?.messages??null,input:b?.input??null,contents:b?.contents??null,temperature:b?.temperature??null,max_tokens:b?.max_tokens??b?.max_output_tokens??null,tools:b?.tools??null,tool_choice:b?.tool_choice??null,response_format:b?.response_format??null});return e().createHash("sha256").update(c).digest("hex")}let j=new Set(["antigravity","ag","gemini","gemini-cli","gc"]);function k(a,b=null){if(!a||"object"!=typeof a||!0===a.stream||"number"==typeof a.temperature&&a.temperature>.3||"required"===a.tool_choice)return!1;let c=function(a){if("string"!=typeof a)return null;let b=a.indexOf("/");return b>0?a.slice(0,b):null}(b);if(c&&j.has(c))return!1;let d=a.max_tokens??a.max_output_tokens??null;return"number"!=typeof d||!(d<32)}function l({model:a,body:b}){if(!k(b,a))return h.skipped++,null;let c=i({model:a,body:b}),d=g.get(c);return d?d.expiresAt<Date.now()?(g.delete(c),h.misses++,null):(g.delete(c),g.set(c,d),h.hits++,h.bytesSaved+=d.bodyBytes||0,h.tokensSaved+=d.estimatedTokens||0,d):(h.misses++,null)}function m({model:a,body:b,status:c,contentType:d,responseBody:e,estimatedTokens:f=0,ttlMs:h=3e5,maxEntries:j=500}){if(!k(b,a)||200!==c||!e||"string"==typeof e&&e.length<100)return!1;let l=i({model:a,body:b}),n="string"==typeof e?e:JSON.stringify(e),o={key:l,status:c,contentType:d||"application/json",body:n,bodyBytes:Buffer.byteLength(n,"utf-8"),estimatedTokens:f,expiresAt:Date.now()+h,storedAt:Date.now(),model:a};for(g.set(l,o);g.size>j;){let a=g.keys().next().value;if(void 0===a)break;g.delete(a)}return!0}function n(){let a=h.hits+h.misses;return{enabled:!0,entries:g.size,hits:h.hits,misses:h.misses,skipped:h.skipped,hitRate:a>0?h.hits/a:0,bytesSaved:h.bytesSaved,tokensSaved:h.tokensSaved,lastResetAt:h.lastResetAt}}function o(){g.clear(),h.hits=0,h.misses=0,h.skipped=0,h.bytesSaved=0,h.tokensSaved=0,h.lastResetAt=Date.now()}},17603:(a,b,c)=>{c.d(b,{R8:()=>j,ar:()=>l,vB:()=>h});var d=c(66306);let e=["vision","pdf","audioInput","videoInput"],f=new Set(e);function g(a,b){var c;let d=Array.isArray(c=b?.capacityAdapter?.[a])?{enabled:!0,roundRobin:!1,models:c.map(a=>a?.model||a).filter(Boolean)}:c&&"object"==typeof c?{enabled:!1!==c.enabled,roundRobin:!!c.roundRobin,models:Array.isArray(c.models)?c.models.filter(Boolean):[]}:{enabled:!1,roundRobin:!1,models:[]};return d.enabled&&0===d.models.length?{...d,models:["mmf/mimo-auto"]}:d}function h(a,b){for(let c of[...a||[]].filter(a=>f.has(a))){let{enabled:a,models:d}=g(c,b);if(a&&0!==d.length)return function(a,b){let{enabled:c,roundRobin:d}=g(a,b);return c&&d?"round-robin":"fallback"}(c,b)}return"fallback"}function i(a,b){let c=a.indexOf("/"),e=c>0?a.slice(0,c):"",f=c>0?a.slice(c+1):a,g=(0,d.nl)(e,f);return b.every(a=>!0===g[a])}function j(a,b,c){let d=[...b||[]].filter(a=>f.has(a));if(0===d.length||!Array.isArray(a)||0===a.length||a.some(a=>i(a,d)))return a;let h=(function(a){let b=new Set,c=[];for(let d of e){let{enabled:e,models:f}=g(d,a);if(e)for(let a of f)b.has(a)||(b.add(a),c.push(a))}return c})(c).filter(b=>!a.includes(b)&&i(b,d));return 0===h.length?a:[...h,...a]}function k(a){return"string"==typeof a?a.length:Array.isArray(a)?a.reduce((a,b)=>a+("string"==typeof b?.text?b.text.length:50),0):0}function l(a,b){let c=new Set(b);return 0===c.size?a:(b,e,...f)=>{if(c.has(e)){let a=e.indexOf("/"),c=a>0?e.slice(0,a):"",f=a>0?e.slice(a+1):e,{contextWindow:g}=(0,d.nl)(c,f);b=function(a,b){let c=Array.isArray(a.messages)?"messages":Array.isArray(a.input)?"input":Array.isArray(a.contents)?"contents":null;if(!c)return a;let d=a[c];if(!d||0===d.length)return a;let e=a=>"system"===a||"developer"===a,f=d.filter(a=>e(a?.role)),g=d.filter(a=>!e(a?.role));if(0===g.length)return a;let h=a=>"assistant"===a||"model"===a,i=g.length-1;for(;i>=0&&!h(g[i]?.role);)i--;let j=g.slice(i+1),l=g.slice(0,i+1);if(0===l.length)return a;let m=a=>a.content??a.parts,n=.8*(b||2e5)*4,o=l.slice(0,6),p=f.concat(o,j).reduce((a,b)=>a+k(m(b)),0);for(;p>n&&o.length>0;)p-=k(m(o.pop()));return o.length===l.length?a:{...a,[c]:[...f,...o,...j]}}(b,g)}return a(b,e,...f)}}},24253:(a,b,c)=>{c.d(b,{I6:()=>n,Mo:()=>i,RG:()=>m,V:()=>j,Y8:()=>l,xl:()=>o});var d=c(1932),e=c(87155);let f=null,g=null,h=null;function i(){return g?{loaded:!0,version:g.version,loadedAt:g.loadedAt}:{loaded:!1}}async function j(){return g||h||(h=k().finally(()=>{h=null}))}async function k(){let a=(0,e.S1)();if(!a.installed){let a=Error("PXPIPE is not installed");throw a.code="NOT_INSTALLED",a}let b=`${(0,d.pathToFileURL)((0,e.CG)()).href}?v=${encodeURIComponent(a.version||"0")}`,c=await import(b);if("function"!=typeof c.transformAnthropicMessages)throw Error("installed pxpipe package does not export transformAnthropicMessages");return g={module:c,version:a.version,loadedAt:Date.now()}}function l(){let a=!!g;return g=null,a}async function m({autoLoad:a=!0}={}){try{if(!g&&!a)return null;let{module:b}=await j();return b.transformAnthropicMessages}catch{return null}}async function n(a){let b=Array.isArray(a)?a.map(a=>String(a).trim()).filter(Boolean):[],c=b.slice().sort().join(",");if(c!==f)try{if(!(0,e.S1)().installed)return;let a=await import((0,d.pathToFileURL)((0,e.kC)()).href);"function"==typeof a.setAllowedModelBases&&(a.setAllowedModelBases(b.length?b:null),f=c)}catch{}}async function o(){let a=Date.now(),{module:b}=await j(),c=new TextEncoder().encode(JSON.stringify({model:"claude-fable-5",max_tokens:16,messages:[{role:"user",content:"ping"}]})),d=await b.transformAnthropicMessages({body:c,model:"claude-fable-5"});if(!d||"boolean"!=typeof d.applied||!(d.body instanceof Uint8Array))throw Error("transform returned an unexpected shape");return{ok:!0,reason:d.reason,durationMs:Date.now()-a}}},25772:(a,b,c)=>{c.d(b,{Io:()=>h,WV:()=>f});let d=null,e=0;function f(a={}){let{sidecarUrl:b=process.env.SIDECAR_URL||"http://127.0.0.1:5001/redact",timeout:h=Number(process.env.REDACTION_TIMEOUT_MS)||15e3,enabled:i="false"!==process.env.REDACTION_ENABLED,failOpen:j="true"===process.env.REDACTION_FAIL_OPEN}=a;return async function(a,f){if(!i)return f(a);if(Date.now()-e>1e4)try{let{getSettings:a}=await Promise.resolve().then(c.bind(c,42655)),b=await a();d=!!(b.presidioEnabled&&b.presidioPiiRedaction),e=Date.now()}catch(b){if(console.error("[Redaction Middleware] Failed to read settings:",b),!0===d&&!j)return new Response(JSON.stringify({error:{message:"Unable to verify redaction settings",code:"SETTINGS_ERROR",type:"settings_error"}}),{status:500,headers:{"Content-Type":"application/json"}});return f(a)}if(!d||"POST"!==a.method)return f(a);try{let c=await a.clone().json(),d=[],e=[];if(Array.isArray(c.messages))for(let a=0;a<c.messages.length;a++){let b=c.messages[a],f=b?.content;if(f){if("string"==typeof f)d.push(f),e.push({type:"string",index:a});else if(Array.isArray(f))for(let b=0;b<f.length;b++){let c=f[b];c?.type==="text"&&"string"==typeof c?.text&&(d.push(c.text),e.push({type:"array",msgIndex:a,blockIndex:b}))}}}if("string"==typeof c.system)d.push(c.system),e.push({type:"system-string"});else if(Array.isArray(c.system))for(let a=0;a<c.system.length;a++){let b=c.system[a];b?.type==="text"&&"string"==typeof b?.text&&(d.push(b.text),e.push({type:"system-block",blockIndex:a}))}if("string"==typeof c.instructions&&(d.push(c.instructions),e.push({type:"instructions"})),"string"==typeof c.input)d.push(c.input),e.push({type:"input-string"});else if(Array.isArray(c.input))for(let a=0;a<c.input.length;a++){let b=c.input[a],f=b?.content;if("string"==typeof f)d.push(f),e.push({type:"input-item-string",index:a});else if(Array.isArray(f))for(let b=0;b<f.length;b++){let c=f[b];(c?.type==="input_text"||c?.type==="output_text"||c?.type==="text")&&"string"==typeof c?.text&&(d.push(c.text),e.push({type:"input-item-block",itemIndex:a,blockIndex:b}))}}if(Array.isArray(c.messages))for(let a=0;a<c.messages.length;a++){let b=c.messages[a];if(b?.role==="tool"&&"string"==typeof b.content&&(d.push(b.content),e.push({type:"tool-message",index:a})),Array.isArray(b?.tool_calls))for(let c=0;c<b.tool_calls.length;c++){let f=b.tool_calls[c]?.function?.arguments;"string"==typeof f&&f.length>0&&(d.push(f),e.push({type:"tool-call-args",msgIndex:a,callIndex:c}))}if(Array.isArray(b?.content))for(let c=0;c<b.content.length;c++){let f=b.content[c];if(f?.type==="tool_result"){if("string"==typeof f.content)d.push(f.content),e.push({type:"tool-result-string",msgIndex:a,blockIndex:c});else if(Array.isArray(f.content))for(let b=0;b<f.content.length;b++){let g=f.content[b];g?.type==="text"&&"string"==typeof g.text&&(d.push(g.text),e.push({type:"tool-result-block",msgIndex:a,blockIndex:c,innerIndex:b}))}}}}if(Array.isArray(c.tools))for(let a=0;a<c.tools.length;a++){let b=c.tools[a];"string"==typeof b?.description&&b.description.length>0?(d.push(b.description),e.push({type:"tool-desc",index:a})):"string"==typeof b?.function?.description&&b.function.description.length>0&&(d.push(b.function.description),e.push({type:"tool-fn-desc",index:a}))}if(0===d.length)return f(a);let i=await g(b,d,{timeout:h}),j=0;for(let a of e){if("string"===a.type)c.messages[a.index].content=i[j];else if("array"===a.type)c.messages[a.msgIndex].content[a.blockIndex].text=i[j];else if("system-string"===a.type)c.system=i[j];else if("system-block"===a.type)c.system[a.blockIndex].text=i[j];else if("instructions"===a.type)c.instructions=i[j];else if("input-string"===a.type)c.input=i[j];else if("input-item-string"===a.type)c.input[a.index].content=i[j];else if("input-item-block"===a.type)c.input[a.itemIndex].content[a.blockIndex].text=i[j];else if("tool-message"===a.type)c.messages[a.index].content=i[j];else if("tool-call-args"===a.type){let b=i[j],d=!1;try{JSON.parse(b),d=!0}catch{d=!1}d?c.messages[a.msgIndex].tool_calls[a.callIndex].function.arguments=b:console.warn("[Redaction Middleware] Skipped tool_call arguments: redaction produced invalid JSON")}else"tool-result-string"===a.type?c.messages[a.msgIndex].content[a.blockIndex].content=i[j]:"tool-result-block"===a.type?c.messages[a.msgIndex].content[a.blockIndex].content[a.innerIndex].text=i[j]:"tool-desc"===a.type?c.tools[a.index].description=i[j]:"tool-fn-desc"===a.type&&(c.tools[a.index].function.description=i[j]);j++}let k=new Request(a.url,{method:a.method,headers:a.headers,body:JSON.stringify(c)});return f(k)}catch(e){if(console.error(`[Redaction Middleware] Error: ${e.message}`),j)return console.warn("[Redaction Middleware] Fail-open enabled - proceeding with original request"),f(a);let b=500,c="internal_error",d="Request processing failed";return"AbortError"===e.name||e.message.includes("timeout")||e.message.includes("TIMEOUT")?(b=503,c="redaction_timeout",d="PII redaction service unavailable. Please try again later."):e.message.includes("fetch")||e.message.includes("ECONNREFUSED")||e.message.includes("ENOTFOUND")||e.message.includes("ECONNRESET")||"TypeError"===e.name&&e.message.includes("fetch")?(b=503,c="redaction_service_unavailable",d="PII redaction service unavailable. Please try again later."):e.message.includes("redact")||e.message.includes("sidecar")||e.message.includes("HTTP 5")?(b=502,c="redaction_service_error",d="PII redaction service error. Please try again later."):(e.message.includes("Invalid")||e.message.includes("format"))&&(b=400,c="invalid_request",d="Invalid request format."),console.error(JSON.stringify({timestamp:new Date().toISOString(),event:"redaction_failure",errorType:c,errorMessage:e.message,statusCode:b,path:new URL(a.url).pathname,method:a.method})),new Response(JSON.stringify({error:{message:d,code:c.toUpperCase(),type:c,requestId:a.headers.get("x-request-id")||void 0}}),{status:b,headers:{"Content-Type":"application/json","X-Redaction-Failed":"true"}})}}}async function g(a,b,{timeout:c=2e3}={}){let d=new AbortController,e=setTimeout(()=>d.abort(),c);try{let c=await fetch(a,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({texts:b}),signal:d.signal});if(!c.ok)throw Error(`Sidecar redaction service error: HTTP ${c.status}`);let e=await c.json();if(!e.redacted_texts||!Array.isArray(e.redacted_texts))throw Error("Sidecar redaction service returned invalid response");if(e.redacted_texts.length!==b.length)throw Error("Sidecar redaction service returned wrong number of redacted texts");return e.redacted_texts}finally{clearTimeout(e)}}function h(a,b={}){let c=f(b);return async function(b,...d){return c(b,b=>a(b,...d))}}},38775:(a,b,c)=>{c.d(b,{d_:()=>k,mA:()=>j});var d=c(89718),e=c(40669),f=c(35024),g=c(44404);let h={xmtp:"xiaomi-tokenplan","xiaomi-tokenplan":"xiaomi-tokenplan"},i=new Set([...Object.keys(h),...Object.keys(f.xq),...Object.keys(g.Xg),...Object.values(g.Xg)]);async function j(a){let b,c=(b=(0,e.Xh)(a),b?.providerAlias&&h[b.providerAlias]?{...b,provider:h[b.providerAlias]}:b);if(!c.isAlias){if(!i.has(c.providerAlias)){let a=(await (0,d.Fh)({type:"openai-compatible"})).find(a=>a.prefix===c.providerAlias);if(a)return{provider:a.id,model:c.model};let b=(await (0,d.Fh)({type:"anthropic-compatible"})).find(a=>a.prefix===c.providerAlias);if(b)return{provider:b.id,model:c.model};let e=(await (0,d.Fh)({type:"custom-embedding"})).find(a=>a.prefix===c.providerAlias);if(e)return{provider:e.id,model:c.model}}return{provider:c.provider,model:c.model}}return await (0,d.Dj)(c.model)?{provider:null,model:c.model}:(0,e.js)(a,d.OM)}async function k(a){if(a.includes("/"))return null;let b=await (0,d.Dj)(a);return b&&b.models&&b.models.length>0?b.models:null}},54413:(a,b,c)=>{c.d(b,{D:()=>e});let d={"qwen3.6-plus-free":{replacement:"qwen3.6-plus",tier:"opencode-go (API key)",reason:"OpenCode discontinued its free tier"},"minimax-m2.5-free":{replacement:"minimax-m2.5",tier:"opencode-go (API key)",reason:"OpenCode discontinued its free tier"},"nemotron-3-super-free":{replacement:null,tier:"opencode-go (API key)",reason:"OpenCode discontinued its free tier"},"trinity-large-preview-free":{replacement:null,tier:"opencode-go (API key)",reason:"OpenCode discontinued its free tier"},"big-pickle":{replacement:null,tier:"opencode-go (API key)",reason:"OpenCode discontinued its free tier"}};function e(a){if(!a||"string"!=typeof a)return null;let b=a.includes("/")?a.slice(a.lastIndexOf("/")+1):a,c=d[b];if(!c)return null;let e=c.replacement?`Use "${c.replacement}" on the ${c.tier} instead.`:`No direct replacement — pick a live model on the ${c.tier}.`;return`Model "${b}" has been retired (${c.reason}). ${e}`}},74388:(a,b,c)=>{c.d(b,{Az:()=>l,SP:()=>o,T0:()=>k});var d=c(29021),e=c.n(d),f=c(33873),g=c.n(f),h=c(87155);let i=g().join(h.XF,"events.jsonl"),j=g().join(h.XF,"events.jsonl.1");function k(a){try{e().existsSync(h.XF)||e().mkdirSync(h.XF,{recursive:!0});try{e().statSync(i).size>5242880&&e().renameSync(i,j)}catch{}e().appendFile(i,JSON.stringify({ts:Date.now(),...a})+"\n",()=>{})}catch{}}function l({sinceMs:a=null,limit:b=null}={}){let c=[];for(let b of[j,i])try{if(!e().existsSync(b))continue;for(let d of e().readFileSync(b,"utf8").split("\n"))if(d)try{let b=JSON.parse(d);if(a&&b.ts<a)continue;c.push(b)}catch{}}catch{}return c.sort((a,b)=>a.ts-b.ts),b?c.slice(-b):c}function m(){return{requests:0,compressed:0,bypassed:0,errors:0,tokensBeforeEst:0,tokensAfterEst:0,tokensSavedEst:0,savedPct:0,imagesGenerated:0,compressionTimeMs:0,avgCompressionMs:0}}function n(a,b){a.requests++,b.applied?(a.compressed++,a.tokensBeforeEst+=b.tokensBeforeEst||0,a.tokensAfterEst+=b.tokensAfterEst||0,a.tokensSavedEst+=b.tokensSavedEst||0,a.imagesGenerated+=b.imageCount||0,a.compressionTimeMs+=b.durationMs||0):"transform_error"===b.reason||"timeout"===b.reason?a.errors++:a.bypassed++}function o({timelineDays:a=30,recentLimit:b=100}={}){let c=l(),d=Date.now(),e=new Date(new Date(d).setHours(0,0,0,0)).getTime(),f={all:m(),today:m(),yesterday:m(),last7d:m(),last30d:m()},g=new Map;for(let b=a-1;b>=0;b--){let a=new Date(e-864e5*b);g.set(a.toISOString().slice(0,10),{date:a.toISOString().slice(0,10),tokensSavedEst:0,compressed:0,requests:0})}for(let a of c){n(f.all,a),a.ts>=e?n(f.today,a):a.ts>=e-864e5&&n(f.yesterday,a),a.ts>=d-6048e5&&n(f.last7d,a),a.ts>=d-2592e6&&n(f.last30d,a);let b=new Date(a.ts).toISOString().slice(0,10),c=g.get(b);c&&(c.requests++,a.applied&&(c.compressed++,c.tokensSavedEst+=a.tokensSavedEst||0))}for(let a of Object.values(f))a.savedPct=a.tokensBeforeEst>0?+(a.tokensSavedEst/a.tokensBeforeEst*100).toFixed(2):0,a.avgCompressionMs=a.compressed>0?Math.round(a.compressionTimeMs/a.compressed):0;return{windows:f,timeline:[...g.values()],recent:c.slice(-b).reverse()}}},79489:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{P:()=>B});var e=c(48895),f=c(80238),g=c(89718),h=c(38775),i=c(92500),j=c(43659),k=c(54413),l=c(8864),m=c(38962),n=c(17603),o=c(27349),p=c(24253),q=c(74388),r=c(9999),s=c(41004),t=c(53258),u=c(14170),v=c(7803),w=c(67828),x=c(38160),y=c(29385),z=a([e,i]);async function A(a){return a?.pxpipeEnabled?(await (0,p.I6)(a.pxpipeModels),(0,p.RG)()):null}async function B(a,b=null){let d;try{d=await a.json()}catch{return v.warn("CHAT","Invalid JSON body"),(0,j.yj)(s.gx.BAD_REQUEST,"Invalid JSON body")}b||(b={endpoint:new URL(a.url).pathname,body:d,headers:Object.fromEntries(a.headers.entries())});let e=new URL(a.url),i=d.model,k=d.messages?.length||d.input?.length||0,l=d.tools?.length||0,p=d.reasoning_effort||d.reasoning?.effort||null;v.request("POST",`${e.pathname} | ${i} | ${k} msgs${l?` | ${l} tools`:""}${p?` | effort=${p}`:""}`);let q=a.headers.get("Authorization"),t=(0,f.Tr)(a);if(q&&t){let a=v.maskKey(t);v.debug("AUTH",`API Key: ${a}`)}else v.debug("AUTH","No API key provided (local mode)");let u=await (0,g.mt)();if(u.requireApiKey){if(!t)return v.warn("AUTH","Missing API key (requireApiKey=true)"),(0,j.yj)(s.gx.UNAUTHORIZED,"Missing API key");if(!await (0,f.kI)(t))return v.warn("AUTH","Invalid API key (requireApiKey=true)"),(0,j.yj)(s.gx.UNAUTHORIZED,"Invalid API key")}if(!i)return v.warn("CHAT","Missing model"),(0,j.yj)(s.gx.BAD_REQUEST,"Missing model");try{let{classifyPromptIntent:a}=await c.e(9849).then(c.bind(c,49849)),{classifyRequestComplexity:b}=await c.e(3523).then(c.bind(c,23523)),e=(d?.messages||[]).find(a=>a?.role==="user"),f="string"==typeof e?.content?e.content:Array.isArray(e?.content)&&e.content.find(a=>a?.text)?.text||"",g=(d?.messages||[]).find(a=>a?.role==="system"),h="string"==typeof g?.content?g.content:"",i=a(f,h),j=b(d);v.debug("ROUTING",`intent=${i} | complexity=${j.level} score=${j.score} tier=${j.recommendedTier}${j.hasToolUse?" tools=yes":""}`)}catch(a){v.debug("ROUTING",`classify failed: ${a?.message}`)}let w=a?.headers?.get("user-agent")||"",x=(0,o.c)(d,i,w,!!u.ccFilterNaming);if(x)return x.response||x;if(u.responseCacheEnabled){let a=(0,r.$S)({model:i,body:d});if(a)return v.info("CHAT",`[CACHE HIT] ${i} (${a.bodyBytes}B saved)`),new Response(a.body,{status:a.status,headers:{"Content-Type":a.contentType,"X-Cache":"HIT","X-Cache-Age-Ms":String(Date.now()-a.storedAt)}})}let y=(0,m.t8)(d),z=await (0,h.d_)(i);if(z){let c=u.comboStrategies||{},e=c[i]?.fallbackStrategy||u.comboStrategy||"fallback",f=(0,n.R8)(z,y,u),g=f.filter(a=>!z.includes(a));if("fusion"===e)return v.info("CHAT",`Combo "${i}" with ${z.length} models (strategy: fusion)`),(0,m.vt)({body:d,models:z,handleSingleModel:(c,d)=>C(c,d,b,a,t,u,1),log:v,comboName:i,judgeModel:c[i]?.judgeModel,tuning:c[i]?.fusionTuning});let h=u.comboStickyRoundRobinLimit;return v.info("CHAT",`Combo "${i}" with ${f.length} models (strategy: ${e}, sticky: ${h})`),(0,m.Pr)({body:d,models:f,handleSingleModel:(0,n.ar)((c,d)=>C(c,d,b,a,t,u,1),g),log:v,comboName:i,comboStrategy:e,comboStickyLimit:h})}let A=(0,n.R8)([i],y,u);if(A.length>1){let c=A.filter(a=>a!==i);return v.info("CHAT",`Capacity adapter for [${[...y].join(",")}] on "${i}" → trying ${A.join(", ")}`),(0,m.Pr)({body:d,models:A,handleSingleModel:(0,n.ar)((c,d)=>C(c,d,b,a,t,u,1),c),log:v,comboName:i,comboStrategy:(0,n.vB)(y,u)})}return C(d,i,b,a,t,u,0)}async function C(a,b,c=null,d=null,e=null,n=null,o=0){n||(n=await (0,g.mt)());let p=await (0,h.mA)(b);if(!p.provider){let f=await (0,h.d_)(b);if(f){if(o>=3)return v.warn("CHAT",`Combo recursion limit hit for "${b}" at depth ${o} — refusing to dispatch`),(0,j.yj)(s.gx.BAD_REQUEST,`Combo recursion limit (3) exceeded for "${b}"`);let g=n.comboStrategies||{},h=g[b]?.fallbackStrategy||n.comboStrategy||"fallback";if("fusion"===h)return v.info("CHAT",`Combo "${b}" with ${f.length} models (strategy: fusion, depth: ${o})`),(0,m.vt)({body:a,models:f,handleSingleModel:(a,b)=>C(a,b,c,d,e,n,o+1),log:v,comboName:b,judgeModel:g[b]?.judgeModel,tuning:g[b]?.fusionTuning});let i=n.comboStickyRoundRobinLimit;return v.info("CHAT",`Combo "${b}" with ${f.length} models (strategy: ${h}, sticky: ${i}, depth: ${o})`),(0,m.Pr)({body:a,models:f,handleSingleModel:(a,b)=>C(a,b,c,d,e,n,o+1),log:v,comboName:b,comboStrategy:h,comboStickyLimit:i})}return v.warn("CHAT","Invalid model format",{model:b}),(0,j.yj)(s.gx.BAD_REQUEST,"Invalid model format")}let{provider:z,model:B}=p,D=(0,k.D)(B);if(D)return v.warn("CHAT",`Retired model "${B}" requested → ${D}`),(0,j.yj)(s.gx.BAD_REQUEST,D);b!==`${z}/${B}`?v.info("ROUTING",`${b} → ${z}/${B}`):v.info("ROUTING",`Provider: ${z}, Model: ${B}`);let E=d?.headers?.get("user-agent")||"",F=d?.headers?.get("x-bypass-modellock")==="1",G=new Set,H=null,I=null,J="round-robin"===(0,l.z)(n,z),K=(0,y.bI)(a,{provider:z}),L=!J&&K?(0,y.Wq)(K):null;for(;;){let g=await (0,f.c1)(z,G,B,{bypassModelLock:F,preferredConnectionId:L&&!G.has(L)?L:null});if(!g||g.allRateLimited){if(g?.allRateLimited){let a=H||g.lastError||"Unavailable",b=I||Number(g.lastErrorCode)||s.gx.SERVICE_UNAVAILABLE;return v.warn("CHAT",`[${z}/${B}] ${a} (${g.retryAfterHuman})`),(0,j.wO)(b,`[${z}/${B}] ${a}`,g.retryAfter,g.retryAfterHuman)}if(0===G.size)return v.warn("AUTH",`No active credentials for provider: ${z}`),(0,j.yj)(s.gx.SERVICE_UNAVAILABLE,`No active credentials for provider: ${z}`);return v.warn("CHAT","No more accounts available",{provider:z}),(0,j.yj)(I||s.gx.SERVICE_UNAVAILABLE,H||"All accounts unavailable")}v.info("AUTH",`\x1b[32mUsing ${z} account: ${g.connectionName}\x1b[0m`);let h=await (0,w.eU)(z,g);if(("antigravity"===z||"gemini-cli"===z)&&!h.projectId){let a=await (0,x.eG)(g.connectionId,h.accessToken,z);a&&(h.projectId=a,(0,w.vN)(g.connectionId,{projectId:a}).catch(()=>{}))}let k=(n.providerThinking||{})[z]||null,l=Date.now(),m=await (0,i.wk)({body:{...a,model:`${z}/${B}`},modelInfo:{provider:z,model:B},credentials:h,log:v,clientRawRequest:c,connectionId:g.connectionId,userAgent:E,apiKey:e,ccFilterNaming:!!n.ccFilterNaming,rtkEnabled:!!n.rtkEnabled,headroomEnabled:!!n.headroomEnabled,headroomUrl:n.headroomUrl||"http://localhost:8787",headroomCompressUserMessages:!!n.headroomCompressUserMessages,cavemanEnabled:!!n.cavemanEnabled,cavemanLevel:n.cavemanLevel||"full",ponytailEnabled:!!n.ponytailEnabled,ponytailLevel:n.ponytailLevel||"full",pxpipeEnabled:!!n.pxpipeEnabled,pxpipeMinChars:n.pxpipeMinChars,pxpipeTimeoutMs:n.pxpipeTimeoutMs,pxpipeTransform:await A(n),onPxpipeEvent:q.T0,providerThinking:k,settings:n,sourceFormatOverride:d?.url?(0,u.t)(new URL(d.url).pathname,a):null,onCredentialsRefreshed:async a=>{await (0,w.vN)(g.connectionId,{...a,existingProviderSpecificData:g.providerSpecificData,testStatus:"active"})},onRequestSuccess:async()=>{await (0,f.Pt)(g.connectionId,g,B)}});if((0,t.Up)(g.connectionId,!!m.success,Date.now()-l,{provider:z,model:B,strategy:"zenith"}),m.success){if(!J&&K&&g.connectionId&&(0,y.BO)(K,g.connectionId),n.responseCacheEnabled&&!0!==a.stream)try{let c=m.response.clone(),d=c.headers.get("content-type")||"application/json";c.text().then(e=>{(0,r.$T)({model:b,body:a,status:c.status,contentType:d,responseBody:e,estimatedTokens:Math.ceil(e.length/4),ttlMs:1e3*(n.responseCacheTtlSec||300)})}).catch(()=>{})}catch{}return m.response}if(m.emergencyFallback&&!a.__emergencyFallbackUsed){let b=m.emergencyFallback;v.info("EMERGENCY",`${z}/${B} → ${b.provider}/${b.model} (${b.reason})`);try{let g=await (0,f.c1)(b.provider,new Set,b.model);if(g&&!g.allRateLimited){let f={...a,__emergencyFallbackUsed:!0,model:`${b.provider}/${b.model}`};b.maxOutputTokens&&(f.max_tokens=Math.min(f.max_tokens||b.maxOutputTokens,b.maxOutputTokens));let h=await (0,i.wk)({body:f,modelInfo:{provider:b.provider,model:b.model},credentials:g,log:v,clientRawRequest:c,userAgent:E,apiKey:e,connectionId:g.connectionId,ccFilterNaming:!!n.ccFilterNaming,rtkEnabled:!!n.rtkEnabled,headroomEnabled:!!n.headroomEnabled,headroomUrl:n.headroomUrl||"http://localhost:8787",headroomCompressUserMessages:!!n.headroomCompressUserMessages,cavemanEnabled:!!n.cavemanEnabled,cavemanLevel:n.cavemanLevel||"full",ponytailEnabled:!!n.ponytailEnabled,ponytailLevel:n.ponytailLevel||"full",pxpipeEnabled:!!n.pxpipeEnabled,pxpipeMinChars:n.pxpipeMinChars,pxpipeTimeoutMs:n.pxpipeTimeoutMs,pxpipeTransform:await A(n),onPxpipeEvent:q.T0,providerThinking:(n.providerThinking||{})[b.provider]||null,sourceFormatOverride:d?.url?(0,u.t)(new URL(d.url).pathname,a):null,settings:n});if(h.success)return h.response;v.warn("EMERGENCY",`fallback ${b.provider}/${b.model} also failed: ${h.status}`)}else v.warn("EMERGENCY",`no credentials for fallback ${b.provider}, skipping`)}catch(a){v.warn("EMERGENCY",`fallback path threw: ${a.message}`)}}let{shouldFallback:o}=await (0,f.vk)(g.connectionId,m.status,m.error,z,B,m.resetsAtMs);if(o){v.warn("AUTH",`Account ${g.connectionName} unavailable (${m.status}), trying fallback`),G.add(g.connectionId),H=m.error,I=m.status;continue}return m.response}}[e,i]=z.then?(await z)():z,d()}catch(a){d(a)}})},87155:(a,b,c)=>{c.d(b,{CG:()=>r,ED:()=>w,S1:()=>u,XF:()=>j,_g:()=>v,kC:()=>s,no:()=>t,sW:()=>y});var d=c(29021),e=c.n(d),f=c(33873),g=c.n(f),h=c(79646),i=c(49120);let j=g().join(i.n,"pxpipe"),k="pxpipe-proxy",l=g().join(j,"install.log"),m="win32"===process.platform,n=m?"npm.cmd":"npm",o=[...m?[`${process.env.ProgramFiles||""}\\nodejs`,`${process.env.APPDATA||""}\\npm`]:["/usr/local/bin","/opt/homebrew/bin",`${process.env.HOME||""}/.local/bin`,"/usr/bin","/bin"],process.env.PATH||""].filter(Boolean).join(g().delimiter),p=null;function q(){return g().join(j,"node_modules",k)}function r(){return g().join(q(),"dist","core","library.js")}function s(){return g().join(q(),"dist","core","applicability.js")}function t(){try{let a=(0,h.execSync)(`${m?"where":"which"} npm`,{stdio:["ignore","pipe","ignore"],windowsHide:!0,env:{...process.env,PATH:o}}).toString().trim();return a?a.split(/\r?\n/)[0].trim():null}catch{return null}}function u(){try{let a=g().join(q(),"package.json");if(!e().existsSync(a)||!e().existsSync(r()))return{installed:!1,version:null,path:null};let b=JSON.parse(e().readFileSync(a,"utf8"));return{installed:!0,version:b.version||null,path:q()}}catch{return{installed:!1,version:null,path:null}}}function v(){return null!==p}function w(){return p||(p=x().finally(()=>{p=null}))}async function x(){let a=t();if(!a){let a=Error("npm not found on PATH — Node.js/npm is required to install PXPIPE");throw a.code="NPM_NOT_FOUND",a}e().existsSync(j)||e().mkdirSync(j,{recursive:!0});let b=g().join(j,"package.json");e().existsSync(b)||e().writeFileSync(b,JSON.stringify({name:"9router-pxpipe-host",private:!0},null,2));let c=e().openSync(l,"a");e().writeSync(c,`
|
|
2
2
|
[${new Date().toISOString()}] npm install ${k}@latest
|
|
3
|
-
`),await new Promise((b,d)=>{let e=(0,h.spawn)(a,["install",`${k}@latest`,"--no-audit","--no-fund","--omit=dev"],{cwd:j,stdio:["ignore",c,c],windowsHide:!0,env:{...process.env,PATH:
|
|
3
|
+
`),await new Promise((b,d)=>{let e=(0,h.spawn)(m?n:a,["install",`${k}@latest`,"--no-audit","--no-fund","--omit=dev"],{cwd:j,stdio:["ignore",c,c],windowsHide:!0,shell:m,env:{...process.env,PATH:o}}),f=setTimeout(()=>{e.kill("SIGKILL"),d(Error("npm install timed out after 5 minutes — see install.log"))},3e5);e.once("error",a=>{clearTimeout(f),d(a)}),e.once("exit",a=>{clearTimeout(f),0===a?b():d(Error(`npm install exited with code ${a} — see install.log`))})}).finally(()=>e().closeSync(c));let d=u();if(!d.installed)throw Error("install finished but package is missing — see install.log");return d}function y(a=200){try{if(!e().existsSync(l))return"";return e().readFileSync(l,"utf8").split(/\r?\n/).filter(Boolean).slice(-a).join("\n")}catch{return""}}}};
|