zevairouter 1.0.146 → 1.0.148
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -0
- package/cli/app/.next-cli-build/BUILD_ID +1 -1
- package/cli/app/.next-cli-build/app-path-routes-manifest.json +8 -8
- package/cli/app/.next-cli-build/build-manifest.json +2 -2
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/automation/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/context/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/playground/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/terminal/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error.html +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/_not-found.html +1 -1
- package/cli/app/.next-cli-build/server/app/_not-found.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_not-found.segments/_index.segment.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/api/models/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/version/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
- package/cli/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/callback.html +1 -1
- package/cli/app/.next-cli-build/server/app/callback.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/callback.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/automation.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/automation.rsc +6 -6
- package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard/automation.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_full.segment.rsc +6 -6
- package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_index.segment.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/dashboard/automation.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +6 -6
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +6 -6
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_index.segment.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +6 -6
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +6 -6
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_index.segment.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/combos.rsc +6 -6
- package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +6 -6
- package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_index.segment.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/context.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/context.rsc +6 -6
- package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard/context/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard/context.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/context.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_full.segment.rsc +6 -6
- package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_index.segment.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/dashboard/context.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.rsc +6 -6
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +6 -6
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_index.segment.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +6 -6
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +6 -6
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.rsc +6 -6
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +6 -6
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_index.segment.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/playground.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/playground.rsc +6 -6
- package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard/playground/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard/playground.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_full.segment.rsc +6 -6
- package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_index.segment.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/dashboard/playground.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/profile.rsc +6 -6
- package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +6 -6
- package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_index.segment.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.rsc +6 -6
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +6 -6
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_index.segment.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers.rsc +6 -6
- package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +6 -6
- package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_index.segment.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +6 -6
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +6 -6
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.rsc +6 -6
- package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_full.segment.rsc +6 -6
- package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_index.segment.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/quota.html +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/quota.rsc +7 -7
- package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
- package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +7 -7
- package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_index.segment.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/token-saver.rsc +6 -6
- package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +6 -6
- package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_index.segment.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/translator.rsc +6 -6
- package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +6 -6
- package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_index.segment.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/usage.rsc +6 -6
- package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +6 -6
- package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_index.segment.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard.html +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard.rsc +6 -6
- package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +6 -6
- package/cli/app/.next-cli-build/server/app/dashboard.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/dashboard.segments/_index.segment.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/index.html +1 -1
- package/cli/app/.next-cli-build/server/app/index.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/index.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/landing.html +1 -1
- package/cli/app/.next-cli-build/server/app/landing.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/landing.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/landing.segments/_index.segment.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app/login.html +1 -1
- package/cli/app/.next-cli-build/server/app/login.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +5 -5
- package/cli/app/.next-cli-build/server/app/login.segments/_head.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +4 -4
- package/cli/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
- package/cli/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
- package/cli/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/app-paths-manifest.json +8 -8
- package/cli/app/.next-cli-build/server/chunks/3155.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/412.js +2 -2
- package/cli/app/.next-cli-build/server/chunks/4566.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/4746.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/5307.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/5469.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/5949.js +3 -3
- package/cli/app/.next-cli-build/server/chunks/8242.js +2 -2
- package/cli/app/.next-cli-build/server/chunks/8306.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/8371.js +1 -1
- package/cli/app/.next-cli-build/server/chunks/9621.js +1 -1
- package/cli/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
- package/cli/app/.next-cli-build/server/pages/404.html +1 -1
- package/cli/app/.next-cli-build/server/pages/500.html +1 -1
- package/cli/app/.next-cli-build/static/chunks/523-176a0660a9383518.js +3 -0
- package/cli/app/.next-cli-build/static/chunks/5497-8d0ec2995dc0a392.js +7 -0
- package/cli/app/.next-cli-build/static/chunks/{620-cc65df39cb93df1c.js → 620-16902cd352ef1d97.js} +1 -1
- package/cli/app/.next-cli-build/static/chunks/9126-7d5476f17beddfb0.js +1 -0
- package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/page-2468e6ba8d1efeec.js +1 -0
- package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/quota/page-579bf915396efc69.js +1 -0
- package/cli/app/.next-cli-build/static/css/87ffa46afc2273f4.css +1 -0
- package/cli/app/CHANGELOG.md +22 -0
- package/cli/app/cli/hooks/cloakbrowserRuntime.js +111 -4
- package/cli/app/package.json +1 -1
- package/cli/hooks/cloakbrowserRuntime.js +111 -4
- package/cli/package.json +1 -1
- package/package.json +1 -1
- package/src/app/(dashboard)/dashboard/basic-chat/BasicChatPageClient.js +91 -38
- package/src/app/(dashboard)/dashboard/endpoint/EndpointPageClient.js +45 -38
- package/src/app/(dashboard)/dashboard/providers/page.js +136 -36
- package/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/QuotaTable.js +15 -9
- package/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/index.js +188 -120
- package/src/app/(dashboard)/dashboard/usage/components/ProviderTopology.js +128 -3
- package/src/lib/oauth/services/bulkImportBrowserEngine.js +36 -0
- package/src/lib/oauth/services/codebuddyCnBulkImportManager.js +469 -172
- package/src/lib/oauth/services/codebuddyCnPhoneAutomation.js +16 -2
- package/src/lib/oauth/services/kiroBulkImportManager.js +7 -1
- package/src/shared/components/Header.js +4 -4
- package/src/shared/components/HeaderLanguage.js +2 -1
- package/src/shared/components/HeaderMenu.js +2 -1
- package/src/shared/components/Toggle.js +28 -12
- package/cli/app/.next-cli-build/static/chunks/523-078802482e95c757.js +0 -3
- package/cli/app/.next-cli-build/static/chunks/5497-7f6609cd427c6525.js +0 -7
- package/cli/app/.next-cli-build/static/chunks/9126-9e1755f122b943cd.js +0 -1
- package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/page-847b19cd29966941.js +0 -1
- package/cli/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/quota/page-6050ac2547c62b54.js +0 -1
- package/cli/app/.next-cli-build/static/css/1472cd17dfd55a13.css +0 -1
- /package/cli/app/.next-cli-build/static/{DeFI037NxtdV4EpLD2ihz → kmlfntQuBCJ_ni8__OiKd}/_buildManifest.js +0 -0
- /package/cli/app/.next-cli-build/static/{DeFI037NxtdV4EpLD2ihz → kmlfntQuBCJ_ni8__OiKd}/_ssgManifest.js +0 -0
|
@@ -95,6 +95,12 @@ function getConnectionErrorTag(connection) {
|
|
|
95
95
|
|
|
96
96
|
const PROVIDERS_DEFAULT_PAGE_SIZE = 20;
|
|
97
97
|
const PROVIDERS_FETCH_TIMEOUT_MS = 8000;
|
|
98
|
+
const PROVIDER_STATUS_FILTERS = [
|
|
99
|
+
{ value: "all", label: "All" },
|
|
100
|
+
{ value: "connected", label: "Connected" },
|
|
101
|
+
{ value: "ready", label: "Ready" },
|
|
102
|
+
{ value: "setup", label: "Needs setup" },
|
|
103
|
+
];
|
|
98
104
|
|
|
99
105
|
async function fetchJsonWithTimeout(url) {
|
|
100
106
|
const controller = new AbortController();
|
|
@@ -129,6 +135,13 @@ export default function ProvidersPage() {
|
|
|
129
135
|
useState(false);
|
|
130
136
|
const [testingMode, setTestingMode] = useState(null);
|
|
131
137
|
const [testResults, setTestResults] = useState(null);
|
|
138
|
+
const [statusFilter, setStatusFilter] = useState("all");
|
|
139
|
+
const [collapsedSections, setCollapsedSections] = useState({
|
|
140
|
+
custom: false,
|
|
141
|
+
oauth: false,
|
|
142
|
+
free: true,
|
|
143
|
+
apikey: true,
|
|
144
|
+
});
|
|
132
145
|
const notify = useNotificationStore();
|
|
133
146
|
const searchQuery = useHeaderSearchStore((s) => s.query);
|
|
134
147
|
const registerSearch = useHeaderSearchStore((s) => s.register);
|
|
@@ -142,7 +155,7 @@ export default function ProvidersPage() {
|
|
|
142
155
|
useEffect(() => {
|
|
143
156
|
// eslint-disable-next-line react-hooks/set-state-in-effect -- pagination reset: returns to page 1 when search query or page size changes
|
|
144
157
|
setApikeyPage(1);
|
|
145
|
-
}, [searchQuery, apikeyPageSize]);
|
|
158
|
+
}, [searchQuery, apikeyPageSize, statusFilter]);
|
|
146
159
|
|
|
147
160
|
const matchSearch = (name) =>
|
|
148
161
|
!searchQuery.trim() ||
|
|
@@ -158,16 +171,6 @@ export default function ProvidersPage() {
|
|
|
158
171
|
return (a.name || "").localeCompare(b.name || "");
|
|
159
172
|
});
|
|
160
173
|
|
|
161
|
-
const sortItemsByPriority = (items, authType) =>
|
|
162
|
-
[...items].sort((a, b) => {
|
|
163
|
-
const sa = getProviderStats(a.id, authType);
|
|
164
|
-
const sb = getProviderStats(b.id, authType);
|
|
165
|
-
const ca = sa.connected > 0 ? 1 : 0;
|
|
166
|
-
const cb = sb.connected > 0 ? 1 : 0;
|
|
167
|
-
if (ca !== cb) return cb - ca;
|
|
168
|
-
return (a.name || "").localeCompare(b.name || "");
|
|
169
|
-
});
|
|
170
|
-
|
|
171
174
|
useEffect(() => {
|
|
172
175
|
const fetchData = async () => {
|
|
173
176
|
try {
|
|
@@ -266,6 +269,21 @@ export default function ProvidersPage() {
|
|
|
266
269
|
return { connected, error, total, errorCode, errorTime, allDisabled };
|
|
267
270
|
};
|
|
268
271
|
|
|
272
|
+
const matchesStatusFilter = (providerId, provider, authType) => {
|
|
273
|
+
if (statusFilter === "all") return true;
|
|
274
|
+
const stats = getProviderStats(providerId, authType);
|
|
275
|
+
if (statusFilter === "connected") return stats.connected > 0;
|
|
276
|
+
if (statusFilter === "ready") return stats.connected === 0 && provider.noAuth === true;
|
|
277
|
+
return stats.connected === 0 && provider.noAuth !== true;
|
|
278
|
+
};
|
|
279
|
+
|
|
280
|
+
const toggleSection = (section) => {
|
|
281
|
+
setCollapsedSections((current) => ({
|
|
282
|
+
...current,
|
|
283
|
+
[section]: !current[section],
|
|
284
|
+
}));
|
|
285
|
+
};
|
|
286
|
+
|
|
269
287
|
// Toggle all connections for a provider on/off
|
|
270
288
|
const handleToggleProvider = async (providerId, authType, newActive) => {
|
|
271
289
|
const providerConns = connections.filter(
|
|
@@ -323,7 +341,7 @@ export default function ProvidersPage() {
|
|
|
323
341
|
textIcon: "OC",
|
|
324
342
|
apiType: node.apiType,
|
|
325
343
|
}))
|
|
326
|
-
.filter((p) => matchSearch(p.name));
|
|
344
|
+
.filter((p) => matchSearch(p.name) && matchesStatusFilter(p.id, p, "apikey"));
|
|
327
345
|
|
|
328
346
|
const anthropicCompatibleProviders = providerNodes
|
|
329
347
|
.filter((node) => node.type === "anthropic-compatible")
|
|
@@ -333,23 +351,28 @@ export default function ProvidersPage() {
|
|
|
333
351
|
color: "#D97757",
|
|
334
352
|
textIcon: "AC",
|
|
335
353
|
}))
|
|
336
|
-
.filter((p) => matchSearch(p.name));
|
|
354
|
+
.filter((p) => matchSearch(p.name) && matchesStatusFilter(p.id, p, "apikey"));
|
|
337
355
|
|
|
338
356
|
const oauthEntries = Object.entries(OAUTH_PROVIDERS).filter(
|
|
339
|
-
([, info]) => !info.hidden && matchSearch(info.name),
|
|
357
|
+
([key, info]) => !info.hidden && matchSearch(info.name) && matchesStatusFilter(key, info, "oauth"),
|
|
340
358
|
);
|
|
341
359
|
const freeEntries = Object.entries(FREE_PROVIDERS).filter(
|
|
342
|
-
([, info]) =>
|
|
360
|
+
([key, info]) => {
|
|
361
|
+
const hasApiKeyMode = Array.isArray(info?.authModes) && info.authModes.includes("apikey");
|
|
362
|
+
const authTypes = hasApiKeyMode ? ["oauth", "apikey"] : "oauth";
|
|
363
|
+
return !info.hidden && matchSearch(info.name) && matchesStatusFilter(key, info, authTypes);
|
|
364
|
+
},
|
|
343
365
|
);
|
|
344
366
|
const freeTierEntries = Object.entries(FREE_TIER_PROVIDERS).filter(
|
|
345
|
-
([, info]) => !info.hidden && matchSearch(info.name),
|
|
367
|
+
([key, info]) => !info.hidden && matchSearch(info.name) && matchesStatusFilter(key, info, "apikey"),
|
|
346
368
|
);
|
|
347
369
|
const apikeyEntries = sortByPriority(
|
|
348
370
|
Object.entries(APIKEY_PROVIDERS).filter(
|
|
349
|
-
([, info]) =>
|
|
371
|
+
([key, info]) =>
|
|
350
372
|
!info.hidden &&
|
|
351
373
|
(info.serviceKinds ?? ["llm"]).includes("llm") &&
|
|
352
|
-
matchSearch(info.name)
|
|
374
|
+
matchSearch(info.name) &&
|
|
375
|
+
matchesStatusFilter(key, info, "apikey"),
|
|
353
376
|
),
|
|
354
377
|
"apikey",
|
|
355
378
|
);
|
|
@@ -376,6 +399,10 @@ export default function ProvidersPage() {
|
|
|
376
399
|
apikeyEntries.length > 0 ||
|
|
377
400
|
compatibleProviders.length > 0 ||
|
|
378
401
|
anthropicCompatibleProviders.length > 0;
|
|
402
|
+
const showCustomSection =
|
|
403
|
+
compatibleProviders.length > 0 ||
|
|
404
|
+
anthropicCompatibleProviders.length > 0 ||
|
|
405
|
+
(statusFilter === "all" && !searchQuery.trim());
|
|
379
406
|
|
|
380
407
|
return (
|
|
381
408
|
<div className="flex min-w-0 flex-col gap-6 px-1 sm:px-0">
|
|
@@ -415,28 +442,54 @@ export default function ProvidersPage() {
|
|
|
415
442
|
</div>
|
|
416
443
|
)}
|
|
417
444
|
|
|
445
|
+
<div className="overflow-x-auto pb-0.5 [scrollbar-width:none] [&::-webkit-scrollbar]:hidden">
|
|
446
|
+
<div className="inline-flex min-w-full items-center gap-1.5 rounded-xl border border-border-subtle bg-surface/70 p-1.5 sm:min-w-0">
|
|
447
|
+
{PROVIDER_STATUS_FILTERS.map((option) => (
|
|
448
|
+
<button
|
|
449
|
+
key={option.value}
|
|
450
|
+
type="button"
|
|
451
|
+
onClick={() => {
|
|
452
|
+
setStatusFilter(option.value);
|
|
453
|
+
setApikeyPage(1);
|
|
454
|
+
setCollapsedSections({ custom: false, oauth: false, free: false, apikey: false });
|
|
455
|
+
}}
|
|
456
|
+
aria-pressed={statusFilter === option.value}
|
|
457
|
+
className={`flex h-11 flex-1 items-center justify-center whitespace-nowrap rounded-lg px-3 text-xs font-medium transition-colors sm:h-8 sm:flex-none sm:px-3 ${statusFilter === option.value ? "bg-primary text-white shadow-sm" : "text-text-muted hover:bg-black/5 hover:text-text-main dark:hover:bg-white/5"}`}
|
|
458
|
+
>
|
|
459
|
+
{option.label}
|
|
460
|
+
</button>
|
|
461
|
+
))}
|
|
462
|
+
</div>
|
|
463
|
+
</div>
|
|
464
|
+
|
|
418
465
|
{!hasAnyResult && (
|
|
419
466
|
<div className="text-center py-8 border border-dashed border-border rounded-xl">
|
|
420
467
|
<span className="material-symbols-outlined text-[32px] text-text-muted mb-2">
|
|
421
468
|
search_off
|
|
422
469
|
</span>
|
|
423
|
-
<p className="text-text-muted text-sm">
|
|
470
|
+
<p className="text-text-muted text-sm">
|
|
471
|
+
{searchQuery.trim() ? "No providers match your search" : "No providers match this filter"}
|
|
472
|
+
</p>
|
|
424
473
|
</div>
|
|
425
474
|
)}
|
|
426
475
|
|
|
427
476
|
{/* Custom Providers (OpenAI/Anthropic Compatible) — dynamic */}
|
|
477
|
+
{showCustomSection && (
|
|
428
478
|
<div className="flex flex-col gap-4">
|
|
429
479
|
<ProviderSectionHeader
|
|
430
480
|
icon="extension"
|
|
431
481
|
title="Custom Providers"
|
|
432
482
|
description="OpenAI and Anthropic-compatible endpoints"
|
|
483
|
+
count={compatibleProviders.length + anthropicCompatibleProviders.length}
|
|
484
|
+
collapsed={collapsedSections.custom && !searchQuery.trim()}
|
|
485
|
+
onToggle={() => toggleSection("custom")}
|
|
433
486
|
>
|
|
434
487
|
<div className="grid grid-cols-1 gap-2 sm:flex sm:w-auto">
|
|
435
488
|
<Button
|
|
436
489
|
size="sm"
|
|
437
490
|
icon="add"
|
|
438
491
|
onClick={() => setShowAddAnthropicCompatibleModal(true)}
|
|
439
|
-
className="w-full sm:w-auto"
|
|
492
|
+
className="min-h-11 w-full sm:min-h-0 sm:w-auto"
|
|
440
493
|
>
|
|
441
494
|
Add Anthropic Compatible
|
|
442
495
|
</Button>
|
|
@@ -445,12 +498,13 @@ export default function ProvidersPage() {
|
|
|
445
498
|
variant="secondary"
|
|
446
499
|
icon="add"
|
|
447
500
|
onClick={() => setShowAddCompatibleModal(true)}
|
|
448
|
-
className="w-full sm:w-auto"
|
|
501
|
+
className="min-h-11 w-full sm:min-h-0 sm:w-auto"
|
|
449
502
|
>
|
|
450
503
|
Add OpenAI Compatible
|
|
451
504
|
</Button>
|
|
452
505
|
</div>
|
|
453
506
|
</ProviderSectionHeader>
|
|
507
|
+
<div className={collapsedSections.custom && !searchQuery.trim() ? "hidden sm:block" : ""}>
|
|
454
508
|
{compatibleProviders.length === 0 &&
|
|
455
509
|
anthropicCompatibleProviders.length === 0 ? (
|
|
456
510
|
<div className="flex items-center gap-3 rounded-xl border border-dashed border-border bg-surface/45 px-4 py-3 text-text-muted">
|
|
@@ -477,7 +531,9 @@ export default function ProvidersPage() {
|
|
|
477
531
|
)}
|
|
478
532
|
</div>
|
|
479
533
|
)}
|
|
534
|
+
</div>
|
|
480
535
|
</div>
|
|
536
|
+
)}
|
|
481
537
|
|
|
482
538
|
{/* OAuth Providers */}
|
|
483
539
|
{oauthEntries.length > 0 && (
|
|
@@ -486,13 +542,16 @@ export default function ProvidersPage() {
|
|
|
486
542
|
icon="passkey"
|
|
487
543
|
title="OAuth Providers"
|
|
488
544
|
description="Connect existing provider accounts securely"
|
|
545
|
+
count={oauthEntries.length}
|
|
546
|
+
collapsed={collapsedSections.oauth && !searchQuery.trim()}
|
|
547
|
+
onToggle={() => toggleSection("oauth")}
|
|
489
548
|
>
|
|
490
549
|
<div className="flex w-full flex-col gap-2 sm:w-auto sm:flex-row sm:items-center">
|
|
491
550
|
<ModelAvailabilityBadge />
|
|
492
551
|
<button
|
|
493
552
|
onClick={() => handleBatchTest("oauth")}
|
|
494
553
|
disabled={!!testingMode}
|
|
495
|
-
className={`flex w-full items-center justify-center gap-1.5 rounded-
|
|
554
|
+
className={`flex h-11 w-full items-center justify-center gap-1.5 rounded-xl border px-3 text-xs font-medium transition-colors sm:h-8 sm:w-auto sm:rounded-lg ${
|
|
496
555
|
testingMode === "oauth"
|
|
497
556
|
? "bg-primary/20 border-primary/40 text-primary animate-pulse"
|
|
498
557
|
: "bg-bg border-border text-text-muted hover:text-text-main hover:border-primary/40"
|
|
@@ -509,7 +568,7 @@ export default function ProvidersPage() {
|
|
|
509
568
|
</button>
|
|
510
569
|
</div>
|
|
511
570
|
</ProviderSectionHeader>
|
|
512
|
-
<div className="grid grid-cols-1 gap-2.5 sm:grid-cols-2 sm:gap-3 lg:grid-cols-3 xl:grid-cols-4
|
|
571
|
+
<div className={`${collapsedSections.oauth && !searchQuery.trim() ? "hidden sm:grid" : "grid"} grid-cols-1 gap-2.5 sm:grid-cols-2 sm:gap-3 lg:grid-cols-3 xl:grid-cols-4`}>
|
|
513
572
|
{oauthEntries.map(([key, info]) => (
|
|
514
573
|
<ProviderCard
|
|
515
574
|
key={key}
|
|
@@ -530,11 +589,14 @@ export default function ProvidersPage() {
|
|
|
530
589
|
icon="savings"
|
|
531
590
|
title="Free Tier Providers"
|
|
532
591
|
description="Ready-to-use and free-tier routing options"
|
|
592
|
+
count={freeEntries.length + freeTierEntries.length}
|
|
593
|
+
collapsed={collapsedSections.free && !searchQuery.trim()}
|
|
594
|
+
onToggle={() => toggleSection("free")}
|
|
533
595
|
>
|
|
534
596
|
<button
|
|
535
597
|
onClick={() => handleBatchTest("free")}
|
|
536
598
|
disabled={!!testingMode}
|
|
537
|
-
className={`flex w-full items-center justify-center gap-1.5 rounded-
|
|
599
|
+
className={`flex h-11 w-full items-center justify-center gap-1.5 rounded-xl border px-3 text-xs font-medium transition-colors sm:h-8 sm:w-auto sm:rounded-lg ${
|
|
538
600
|
testingMode === "free"
|
|
539
601
|
? "bg-primary/20 border-primary/40 text-primary animate-pulse"
|
|
540
602
|
: "bg-bg border-border text-text-muted hover:text-text-main hover:border-primary/40"
|
|
@@ -550,7 +612,7 @@ export default function ProvidersPage() {
|
|
|
550
612
|
{testingMode === "free" ? "Testing..." : "Test All"}
|
|
551
613
|
</button>
|
|
552
614
|
</ProviderSectionHeader>
|
|
553
|
-
<div className="grid grid-cols-1 gap-2.5 sm:grid-cols-2 sm:gap-3 lg:grid-cols-3 xl:grid-cols-4
|
|
615
|
+
<div className={`${collapsedSections.free && !searchQuery.trim() ? "hidden sm:grid" : "grid"} grid-cols-1 gap-2.5 sm:grid-cols-2 sm:gap-3 lg:grid-cols-3 xl:grid-cols-4`}>
|
|
554
616
|
{freeEntries.map(([key, info]) => {
|
|
555
617
|
const hasApiKeyMode = Array.isArray(info?.authModes) && info.authModes.includes("apikey");
|
|
556
618
|
const statAuthTypes = hasApiKeyMode ? ["oauth", "apikey"] : "oauth";
|
|
@@ -584,11 +646,14 @@ export default function ProvidersPage() {
|
|
|
584
646
|
icon="key"
|
|
585
647
|
title="API Key Providers"
|
|
586
648
|
description="Bring your own provider credentials"
|
|
649
|
+
count={apikeyEntries.length}
|
|
650
|
+
collapsed={collapsedSections.apikey && !searchQuery.trim()}
|
|
651
|
+
onToggle={() => toggleSection("apikey")}
|
|
587
652
|
>
|
|
588
653
|
<button
|
|
589
654
|
onClick={() => handleBatchTest("apikey")}
|
|
590
655
|
disabled={!!testingMode}
|
|
591
|
-
className={`flex w-full items-center justify-center gap-1.5 rounded-
|
|
656
|
+
className={`flex h-11 w-full items-center justify-center gap-1.5 rounded-xl border px-3 text-xs font-medium transition-colors sm:h-8 sm:w-auto sm:rounded-lg ${
|
|
592
657
|
testingMode === "apikey"
|
|
593
658
|
? "bg-primary/20 border-primary/40 text-primary animate-pulse"
|
|
594
659
|
: "bg-bg border-border text-text-muted hover:text-text-main hover:border-primary/40"
|
|
@@ -604,7 +669,7 @@ export default function ProvidersPage() {
|
|
|
604
669
|
{testingMode === "apikey" ? "Testing..." : "Test All"}
|
|
605
670
|
</button>
|
|
606
671
|
</ProviderSectionHeader>
|
|
607
|
-
<div className="grid grid-cols-1 gap-2.5 sm:grid-cols-2 sm:gap-3 lg:grid-cols-3 xl:grid-cols-4
|
|
672
|
+
<div className={`${collapsedSections.apikey && !searchQuery.trim() ? "hidden sm:grid" : "grid"} grid-cols-1 gap-2.5 sm:grid-cols-2 sm:gap-3 lg:grid-cols-3 xl:grid-cols-4`}>
|
|
608
673
|
{visibleApikeyEntries.map(([key, info]) => (
|
|
609
674
|
<ApiKeyProviderCard
|
|
610
675
|
key={key}
|
|
@@ -616,6 +681,7 @@ export default function ProvidersPage() {
|
|
|
616
681
|
))}
|
|
617
682
|
</div>
|
|
618
683
|
{apikeyEntries.length > 0 && (
|
|
684
|
+
<div className={collapsedSections.apikey && !searchQuery.trim() ? "hidden sm:block" : ""}>
|
|
619
685
|
<Pagination
|
|
620
686
|
currentPage={activeApikeyPage}
|
|
621
687
|
pageSize={apikeyPageSize}
|
|
@@ -626,6 +692,7 @@ export default function ProvidersPage() {
|
|
|
626
692
|
setApikeyPage(1);
|
|
627
693
|
}}
|
|
628
694
|
/>
|
|
695
|
+
</div>
|
|
629
696
|
)}
|
|
630
697
|
</div>
|
|
631
698
|
)}
|
|
@@ -698,19 +765,47 @@ export default function ProvidersPage() {
|
|
|
698
765
|
);
|
|
699
766
|
}
|
|
700
767
|
|
|
701
|
-
function ProviderSectionHeader({
|
|
768
|
+
function ProviderSectionHeader({
|
|
769
|
+
icon,
|
|
770
|
+
title,
|
|
771
|
+
description,
|
|
772
|
+
count,
|
|
773
|
+
collapsed,
|
|
774
|
+
onToggle,
|
|
775
|
+
children,
|
|
776
|
+
}) {
|
|
702
777
|
return (
|
|
703
778
|
<div className="flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between">
|
|
704
|
-
<div className="flex min-w-0 items-center gap-2.5">
|
|
705
|
-
<
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
<
|
|
710
|
-
|
|
779
|
+
<div className="flex w-full min-w-0 items-center gap-2.5 sm:w-auto">
|
|
780
|
+
<div className="flex min-w-0 flex-1 items-center gap-2.5 sm:flex-none">
|
|
781
|
+
<span aria-hidden="true" className="material-symbols-outlined flex size-8 shrink-0 items-center justify-center rounded-lg bg-primary/[0.08] text-[17px] text-primary">
|
|
782
|
+
{icon}
|
|
783
|
+
</span>
|
|
784
|
+
<div className="min-w-0">
|
|
785
|
+
<div className="flex items-center gap-2">
|
|
786
|
+
<h2 className="truncate text-lg font-semibold leading-tight">{title}</h2>
|
|
787
|
+
<span className="rounded-full bg-surface-2 px-2 py-0.5 text-[10px] font-semibold tabular-nums text-text-muted">
|
|
788
|
+
{count}
|
|
789
|
+
</span>
|
|
790
|
+
</div>
|
|
791
|
+
<p className="mt-0.5 truncate text-[11px] text-text-muted sm:text-xs">{description}</p>
|
|
792
|
+
</div>
|
|
711
793
|
</div>
|
|
794
|
+
<button
|
|
795
|
+
type="button"
|
|
796
|
+
onClick={onToggle}
|
|
797
|
+
className="flex size-11 shrink-0 items-center justify-center rounded-xl border border-border text-text-muted transition-colors hover:border-primary/30 hover:text-primary sm:hidden"
|
|
798
|
+
aria-expanded={!collapsed}
|
|
799
|
+
aria-label={`${collapsed ? "Expand" : "Collapse"} ${title}`}
|
|
800
|
+
>
|
|
801
|
+
<span className="material-symbols-outlined text-[20px]">
|
|
802
|
+
{collapsed ? "expand_more" : "expand_less"}
|
|
803
|
+
</span>
|
|
804
|
+
</button>
|
|
712
805
|
</div>
|
|
713
|
-
{children
|
|
806
|
+
{children && (
|
|
807
|
+
<div className={collapsed ? "hidden sm:block" : "block"}>{children}</div>
|
|
808
|
+
)}
|
|
714
809
|
</div>
|
|
715
810
|
);
|
|
716
811
|
}
|
|
@@ -719,6 +814,9 @@ ProviderSectionHeader.propTypes = {
|
|
|
719
814
|
icon: PropTypes.string.isRequired,
|
|
720
815
|
title: PropTypes.string.isRequired,
|
|
721
816
|
description: PropTypes.string.isRequired,
|
|
817
|
+
count: PropTypes.number.isRequired,
|
|
818
|
+
collapsed: PropTypes.bool.isRequired,
|
|
819
|
+
onToggle: PropTypes.func.isRequired,
|
|
722
820
|
children: PropTypes.node,
|
|
723
821
|
};
|
|
724
822
|
|
|
@@ -782,6 +880,7 @@ function ProviderCard({ providerId, provider, stats, onToggle }) {
|
|
|
782
880
|
>
|
|
783
881
|
<Toggle
|
|
784
882
|
size="sm"
|
|
883
|
+
touchTarget
|
|
785
884
|
checked={!allDisabled}
|
|
786
885
|
onChange={() => {}}
|
|
787
886
|
title={allDisabled ? "Enable provider" : "Disable provider"}
|
|
@@ -900,6 +999,7 @@ function ApiKeyProviderCard({
|
|
|
900
999
|
>
|
|
901
1000
|
<Toggle
|
|
902
1001
|
size="sm"
|
|
1002
|
+
touchTarget
|
|
903
1003
|
checked={!allDisabled}
|
|
904
1004
|
onChange={() => {}}
|
|
905
1005
|
title={allDisabled ? "Enable provider" : "Disable provider"}
|
|
@@ -89,6 +89,8 @@ export default function QuotaTable({
|
|
|
89
89
|
compact = false,
|
|
90
90
|
sortMode = "default",
|
|
91
91
|
showSortLabel = false,
|
|
92
|
+
paginate = true,
|
|
93
|
+
totalCount,
|
|
92
94
|
}) {
|
|
93
95
|
const [page, setPage] = useState(1);
|
|
94
96
|
|
|
@@ -106,7 +108,9 @@ export default function QuotaTable({
|
|
|
106
108
|
[normalizedQuotas, sortMode],
|
|
107
109
|
);
|
|
108
110
|
|
|
109
|
-
const totalPages =
|
|
111
|
+
const totalPages = paginate
|
|
112
|
+
? Math.max(1, Math.ceil(sortedQuotas.length / PAGE_SIZE))
|
|
113
|
+
: 1;
|
|
110
114
|
|
|
111
115
|
useEffect(() => {
|
|
112
116
|
// eslint-disable-next-line react-hooks/set-state-in-effect -- pagination reset: returns to page 1 when sort mode or data changes
|
|
@@ -122,12 +126,14 @@ export default function QuotaTable({
|
|
|
122
126
|
return null;
|
|
123
127
|
}
|
|
124
128
|
|
|
125
|
-
const currentPageRows =
|
|
126
|
-
(page - 1) * PAGE_SIZE,
|
|
127
|
-
|
|
128
|
-
);
|
|
129
|
+
const currentPageRows = paginate
|
|
130
|
+
? sortedQuotas.slice((page - 1) * PAGE_SIZE, page * PAGE_SIZE)
|
|
131
|
+
: sortedQuotas;
|
|
129
132
|
const pageStart = sortedQuotas.length === 0 ? 0 : (page - 1) * PAGE_SIZE + 1;
|
|
130
|
-
const pageEnd =
|
|
133
|
+
const pageEnd = paginate
|
|
134
|
+
? Math.min(page * PAGE_SIZE, sortedQuotas.length)
|
|
135
|
+
: sortedQuotas.length;
|
|
136
|
+
const displayedTotal = Number.isFinite(totalCount) ? totalCount : sortedQuotas.length;
|
|
131
137
|
|
|
132
138
|
const cellPad = compact ? "py-1 px-1.5" : "py-2 px-3";
|
|
133
139
|
const nameText = compact ? "text-[11px]" : "text-sm";
|
|
@@ -139,7 +145,7 @@ export default function QuotaTable({
|
|
|
139
145
|
<div className="space-y-2">
|
|
140
146
|
<div className="flex items-center justify-between gap-2">
|
|
141
147
|
<div className="text-[10px] text-text-muted">
|
|
142
|
-
{
|
|
148
|
+
{displayedTotal} quota{displayedTotal > 1 ? "s" : ""}
|
|
143
149
|
</div>
|
|
144
150
|
{showSortLabel && (
|
|
145
151
|
<div className="rounded-md border border-black/10 bg-black/[0.02] px-2 py-1 text-[10px] text-text-muted dark:border-white/10 dark:bg-white/[0.03]">
|
|
@@ -243,7 +249,7 @@ export default function QuotaTable({
|
|
|
243
249
|
type="button"
|
|
244
250
|
onClick={() => setPage((currentPage) => Math.max(1, currentPage - 1))}
|
|
245
251
|
disabled={page === 1}
|
|
246
|
-
className="flex h-
|
|
252
|
+
className="flex h-11 items-center rounded-lg border border-black/10 px-3 text-xs text-text-primary transition-colors hover:bg-black/5 disabled:cursor-not-allowed disabled:opacity-40 dark:border-white/10 dark:hover:bg-white/5 sm:h-7 sm:rounded-md sm:px-2 sm:text-[10px]"
|
|
247
253
|
>
|
|
248
254
|
Prev
|
|
249
255
|
</button>
|
|
@@ -251,7 +257,7 @@ export default function QuotaTable({
|
|
|
251
257
|
type="button"
|
|
252
258
|
onClick={() => setPage((currentPage) => Math.min(totalPages, currentPage + 1))}
|
|
253
259
|
disabled={page === totalPages}
|
|
254
|
-
className="flex h-
|
|
260
|
+
className="flex h-11 items-center rounded-lg border border-black/10 px-3 text-xs text-text-primary transition-colors hover:bg-black/5 disabled:cursor-not-allowed disabled:opacity-40 dark:border-white/10 dark:hover:bg-white/5 sm:h-7 sm:rounded-md sm:px-2 sm:text-[10px]"
|
|
255
261
|
>
|
|
256
262
|
Next
|
|
257
263
|
</button>
|