omniroute 0.2.0 → 0.4.0
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 +36 -1139
- package/app/.next/BUILD_ID +1 -1
- package/app/.next/app-path-routes-manifest.json +42 -25
- package/app/.next/build-manifest.json +3 -3
- package/app/.next/prerender-manifest.json +75 -3
- package/app/.next/routes-manifest.json +104 -0
- package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/combos/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/endpoint/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/health/page.js +2 -0
- package/app/.next/server/app/(dashboard)/dashboard/health/page.js.nft.json +1 -0
- package/app/.next/server/app/(dashboard)/dashboard/health/page_client-reference-manifest.js +1 -0
- package/app/.next/server/app/(dashboard)/dashboard/onboarding/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/onboarding/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/onboarding/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/profile/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/new/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/settings/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/settings/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/settings/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/translator/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/usage/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/_global-error/page.js +3 -3
- package/app/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/app/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/_global-error.html +2 -2
- package/app/.next/server/app/_global-error.rsc +10 -9
- package/app/.next/server/app/_global-error.segments/_full.segment.rsc +10 -9
- package/app/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_index.segment.rsc +2 -1
- package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/app/.next/server/app/_not-found/page.js +2 -2
- package/app/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/_not-found.html +1 -1
- package/app/.next/server/app/_not-found.rsc +16 -12
- package/app/.next/server/app/_not-found.segments/_full.segment.rsc +16 -12
- package/app/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/_not-found.segments/_index.segment.rsc +4 -3
- package/app/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +8 -4
- package/app/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/app/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/api/auth/login/route.js +1 -1
- package/app/.next/server/app/api/auth/login/route.js.nft.json +1 -1
- package/app/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cache/route.js +2 -0
- package/app/.next/server/app/api/cache/route.js.nft.json +1 -0
- package/app/.next/server/app/api/cache/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/cache/stats/route.js +1 -0
- package/app/.next/server/app/api/cache/stats/route.js.nft.json +1 -0
- package/app/.next/server/app/api/cache/stats/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -157
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/backups/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/backups/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/claude-settings/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/claude-settings/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/cline-settings/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/cline-settings/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/codex-profiles/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/codex-profiles/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/codex-settings/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/codex-settings/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/droid-settings/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/droid-settings/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/guide-settings/[toolId]/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/kilo-settings/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/kilo-settings/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/openclaw-settings/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/openclaw-settings/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/runtime/[toolId]/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/runtime/[toolId]/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cloud/auth/route.js +1 -156
- package/app/.next/server/app/api/cloud/auth/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cloud/auth/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cloud/credentials/update/route.js +1 -156
- package/app/.next/server/app/api/cloud/credentials/update/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cloud/credentials/update/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cloud/model/resolve/route.js +1 -156
- package/app/.next/server/app/api/cloud/model/resolve/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cloud/model/resolve/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cloud/models/alias/route.js +1 -1
- package/app/.next/server/app/api/cloud/models/alias/route.js.nft.json +1 -1
- package/app/.next/server/app/api/cloud/models/alias/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/combos/[id]/route.js +1 -1
- package/app/.next/server/app/api/combos/[id]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/combos/[id]/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/combos/metrics/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/combos/route.js +1 -1
- package/app/.next/server/app/api/combos/route.js.nft.json +1 -1
- package/app/.next/server/app/api/combos/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/combos/test/route.js +1 -156
- package/app/.next/server/app/api/combos/test/route.js.nft.json +1 -1
- package/app/.next/server/app/api/combos/test/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/compliance/audit-log/route.js +1 -0
- package/app/.next/server/app/api/compliance/audit-log/route.js.nft.json +1 -0
- package/app/.next/server/app/api/compliance/audit-log/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/db-backups/route.js +1 -156
- package/app/.next/server/app/api/db-backups/route.js.nft.json +1 -1
- package/app/.next/server/app/api/db-backups/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/evals/[suiteId]/route.js +1 -0
- package/app/.next/server/app/api/evals/[suiteId]/route.js.nft.json +1 -0
- package/app/.next/server/app/api/evals/[suiteId]/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/evals/route.js +1 -0
- package/app/.next/server/app/api/evals/route.js.nft.json +1 -0
- package/app/.next/server/app/api/evals/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/fallback/chains/route.js +3 -0
- package/app/.next/server/app/api/fallback/chains/route.js.nft.json +1 -0
- package/app/.next/server/app/api/fallback/chains/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/init/route.js +1 -1
- package/app/.next/server/app/api/init/route.js.nft.json +1 -1
- package/app/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/keys/[id]/route.js +1 -1
- package/app/.next/server/app/api/keys/[id]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/keys/[id]/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/keys/route.js +1 -1
- package/app/.next/server/app/api/keys/route.js.nft.json +1 -1
- package/app/.next/server/app/api/keys/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/models/alias/route.js +1 -1
- package/app/.next/server/app/api/models/alias/route.js.nft.json +1 -1
- package/app/.next/server/app/api/models/alias/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/models/availability/route.js +1 -0
- package/app/.next/server/app/api/models/availability/route.js.nft.json +1 -0
- package/app/.next/server/app/api/models/availability/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/models/catalog/route.js +2 -1
- package/app/.next/server/app/api/models/catalog/route.js.nft.json +1 -1
- package/app/.next/server/app/api/models/catalog/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/models/route.js +2 -156
- package/app/.next/server/app/api/models/route.js.nft.json +1 -1
- package/app/.next/server/app/api/models/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/monitoring/health/route.js +2 -0
- package/app/.next/server/app/api/monitoring/health/route.js.nft.json +1 -0
- package/app/.next/server/app/api/monitoring/health/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/oauth/[provider]/[action]/route.js +2 -2
- package/app/.next/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/oauth/[provider]/[action]/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/oauth/cursor/auto-import/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/oauth/cursor/import/route.js +1 -1
- package/app/.next/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
- package/app/.next/server/app/api/oauth/cursor/import/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/oauth/kiro/auto-import/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/oauth/kiro/import/route.js +1 -1
- package/app/.next/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
- package/app/.next/server/app/api/oauth/kiro/import/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/oauth/kiro/social-authorize/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/oauth/kiro/social-exchange/route.js +1 -1
- package/app/.next/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
- package/app/.next/server/app/api/oauth/kiro/social-exchange/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/policies/route.js +3 -0
- package/app/.next/server/app/api/policies/route.js.nft.json +1 -0
- package/app/.next/server/app/api/policies/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/pricing/defaults/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/pricing/models/route.js +1 -156
- package/app/.next/server/app/api/pricing/models/route.js.nft.json +1 -1
- package/app/.next/server/app/api/pricing/models/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/pricing/route.js +1 -156
- package/app/.next/server/app/api/pricing/route.js.nft.json +1 -1
- package/app/.next/server/app/api/pricing/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/provider-models/route.js +1 -156
- package/app/.next/server/app/api/provider-models/route.js.nft.json +1 -1
- package/app/.next/server/app/api/provider-models/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/provider-nodes/[id]/route.js +1 -156
- package/app/.next/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/provider-nodes/[id]/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/provider-nodes/route.js +2 -156
- package/app/.next/server/app/api/provider-nodes/route.js.nft.json +1 -1
- package/app/.next/server/app/api/provider-nodes/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/provider-nodes/validate/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/providers/[id]/models/route.js +2 -156
- package/app/.next/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/[id]/models/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/providers/[id]/route.js +1 -1
- package/app/.next/server/app/api/providers/[id]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/[id]/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/providers/[id]/test/route.js +1 -1
- package/app/.next/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/[id]/test/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/providers/client/route.js +1 -156
- package/app/.next/server/app/api/providers/client/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/client/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/providers/route.js +2 -1
- package/app/.next/server/app/api/providers/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/providers/test-batch/route.js +2 -156
- package/app/.next/server/app/api/providers/test-batch/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/test-batch/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/providers/validate/route.js +1 -156
- package/app/.next/server/app/api/providers/validate/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/validate/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/rate-limit/route.js +1 -156
- package/app/.next/server/app/api/rate-limit/route.js.nft.json +1 -1
- package/app/.next/server/app/api/rate-limit/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/rate-limits/route.js +1 -1
- package/app/.next/server/app/api/rate-limits/route.js.nft.json +1 -1
- package/app/.next/server/app/api/rate-limits/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/resilience/reset/route.js +1 -0
- package/app/.next/server/app/api/resilience/reset/route.js.nft.json +1 -0
- package/app/.next/server/app/api/resilience/reset/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/resilience/route.js +1 -0
- package/app/.next/server/app/api/resilience/route.js.nft.json +1 -0
- package/app/.next/server/app/api/resilience/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/sessions/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/settings/combo-defaults/route.js +1 -156
- package/app/.next/server/app/api/settings/combo-defaults/route.js.nft.json +1 -1
- package/app/.next/server/app/api/settings/combo-defaults/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/settings/ip-filter/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/settings/proxy/route.js +1 -156
- package/app/.next/server/app/api/settings/proxy/route.js.nft.json +1 -1
- package/app/.next/server/app/api/settings/proxy/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/settings/proxy/test/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/settings/require-login/route.js +1 -156
- package/app/.next/server/app/api/settings/require-login/route.js.nft.json +1 -1
- package/app/.next/server/app/api/settings/require-login/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/settings/route.js +1 -1
- package/app/.next/server/app/api/settings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/settings/system-prompt/route.js +1 -156
- package/app/.next/server/app/api/settings/system-prompt/route.js.nft.json +1 -1
- package/app/.next/server/app/api/settings/system-prompt/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/settings/thinking-budget/route.js +1 -156
- package/app/.next/server/app/api/settings/thinking-budget/route.js.nft.json +1 -1
- package/app/.next/server/app/api/settings/thinking-budget/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/storage/health/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/sync/cloud/route.js +1 -1
- package/app/.next/server/app/api/sync/cloud/route.js.nft.json +1 -1
- package/app/.next/server/app/api/sync/cloud/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/sync/initialize/route.js +1 -1
- package/app/.next/server/app/api/sync/initialize/route.js.nft.json +1 -1
- package/app/.next/server/app/api/sync/initialize/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/tags/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/telemetry/summary/route.js +1 -0
- package/app/.next/server/app/api/telemetry/summary/route.js.nft.json +1 -0
- package/app/.next/server/app/api/telemetry/summary/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/token-health/route.js +1 -0
- package/app/.next/server/app/api/token-health/route.js.nft.json +1 -0
- package/app/.next/server/app/api/token-health/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/translator/detect/route.js +1 -1
- package/app/.next/server/app/api/translator/detect/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/translator/history/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/translator/load/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/translator/save/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/translator/send/route.js +1 -156
- package/app/.next/server/app/api/translator/send/route.js.nft.json +1 -1
- package/app/.next/server/app/api/translator/send/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/translator/translate/route.js +1 -156
- package/app/.next/server/app/api/translator/translate/route.js.nft.json +1 -1
- package/app/.next/server/app/api/translator/translate/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/usage/[connectionId]/route.js +1 -1
- package/app/.next/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/[connectionId]/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/usage/analytics/route.js +1 -156
- package/app/.next/server/app/api/usage/analytics/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/analytics/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/usage/budget/route.js +3 -0
- package/app/.next/server/app/api/usage/budget/route.js.nft.json +1 -0
- package/app/.next/server/app/api/usage/budget/route_client-reference-manifest.js +1 -0
- package/app/.next/server/app/api/usage/call-logs/[id]/route.js +1 -156
- package/app/.next/server/app/api/usage/call-logs/[id]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/call-logs/[id]/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/usage/call-logs/route.js +1 -156
- package/app/.next/server/app/api/usage/call-logs/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/call-logs/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/usage/history/route.js +1 -156
- package/app/.next/server/app/api/usage/history/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/history/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/usage/logs/route.js +1 -156
- package/app/.next/server/app/api/usage/logs/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/logs/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/usage/proxy-logs/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/usage/request-logs/route.js +1 -156
- package/app/.next/server/app/api/usage/request-logs/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/request-logs/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/api/chat/route.js +1 -156
- package/app/.next/server/app/api/v1/api/chat/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/api/chat/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/audio/speech/route.js +1 -156
- package/app/.next/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/audio/speech/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/audio/transcriptions/route.js +1 -156
- package/app/.next/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/audio/transcriptions/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/chat/completions/route.js +1 -1
- package/app/.next/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/chat/completions/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/embeddings/route.js +1 -1
- package/app/.next/server/app/api/v1/embeddings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/embeddings/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/images/generations/route.js +1 -1
- package/app/.next/server/app/api/v1/images/generations/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/images/generations/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/messages/count_tokens/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/messages/route.js +1 -156
- package/app/.next/server/app/api/v1/messages/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/messages/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/models/route.js +2 -1
- package/app/.next/server/app/api/v1/models/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/models/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/moderations/route.js +1 -156
- package/app/.next/server/app/api/v1/moderations/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/moderations/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/providers/[provider]/chat/completions/route.js +1 -156
- package/app/.next/server/app/api/v1/providers/[provider]/chat/completions/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/providers/[provider]/chat/completions/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/providers/[provider]/embeddings/route.js +1 -1
- package/app/.next/server/app/api/v1/providers/[provider]/embeddings/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/providers/[provider]/embeddings/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/providers/[provider]/images/generations/route.js +1 -1
- package/app/.next/server/app/api/v1/providers/[provider]/images/generations/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/providers/[provider]/images/generations/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/rerank/route.js +1 -156
- package/app/.next/server/app/api/v1/rerank/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/rerank/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/responses/route.js +1 -156
- package/app/.next/server/app/api/v1/responses/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/responses/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1beta/models/[...path]/route.js +1 -156
- package/app/.next/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1beta/models/[...path]/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1beta/models/route.js +2 -1
- package/app/.next/server/app/api/v1beta/models/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1beta/models/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/callback/page.js +2 -2
- package/app/.next/server/app/callback/page.js.nft.json +1 -1
- package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/callback.html +1 -1
- package/app/.next/server/app/callback.rsc +17 -16
- package/app/.next/server/app/callback.segments/_full.segment.rsc +17 -16
- package/app/.next/server/app/callback.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/callback.segments/_index.segment.rsc +4 -3
- package/app/.next/server/app/callback.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/callback.segments/callback.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/cli-tools.html +1 -1
- package/app/.next/server/app/dashboard/cli-tools.rsc +16 -15
- package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/cli-tools.segments/_full.segment.rsc +16 -15
- package/app/.next/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/cli-tools.segments/_index.segment.rsc +4 -3
- package/app/.next/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/combos.html +1 -1
- package/app/.next/server/app/dashboard/combos.rsc +18 -17
- package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/combos.segments/_full.segment.rsc +18 -17
- package/app/.next/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/combos.segments/_index.segment.rsc +4 -3
- package/app/.next/server/app/dashboard/combos.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/endpoint.html +1 -1
- package/app/.next/server/app/dashboard/endpoint.rsc +16 -15
- package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/endpoint.segments/_full.segment.rsc +16 -15
- package/app/.next/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/endpoint.segments/_index.segment.rsc +4 -3
- package/app/.next/server/app/dashboard/endpoint.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/health.html +1 -0
- package/app/.next/server/app/dashboard/health.meta +17 -0
- package/app/.next/server/app/dashboard/health.rsc +24 -0
- package/app/.next/server/app/dashboard/health.segments/!KGRhc2hib2FyZCk/dashboard/health/__PAGE__.segment.rsc +9 -0
- package/app/.next/server/app/dashboard/health.segments/!KGRhc2hib2FyZCk/dashboard/health.segment.rsc +4 -0
- package/app/.next/server/app/dashboard/health.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +4 -0
- package/app/.next/server/app/dashboard/health.segments/!KGRhc2hib2FyZCk.segment.rsc +5 -0
- package/app/.next/server/app/dashboard/health.segments/_full.segment.rsc +24 -0
- package/app/.next/server/app/dashboard/health.segments/_head.segment.rsc +6 -0
- package/app/.next/server/app/dashboard/health.segments/_index.segment.rsc +9 -0
- package/app/.next/server/app/dashboard/health.segments/_tree.segment.rsc +5 -0
- package/app/.next/server/app/dashboard/onboarding.html +1 -1
- package/app/.next/server/app/dashboard/onboarding.rsc +18 -17
- package/app/.next/server/app/dashboard/onboarding.segments/!KGRhc2hib2FyZCk/dashboard/onboarding/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/onboarding.segments/!KGRhc2hib2FyZCk/dashboard/onboarding.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/onboarding.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/onboarding.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/onboarding.segments/_full.segment.rsc +18 -17
- package/app/.next/server/app/dashboard/onboarding.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/onboarding.segments/_index.segment.rsc +4 -3
- package/app/.next/server/app/dashboard/onboarding.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/profile.html +1 -1
- package/app/.next/server/app/dashboard/profile.rsc +15 -14
- package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/profile.segments/_full.segment.rsc +15 -14
- package/app/.next/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/profile.segments/_index.segment.rsc +4 -3
- package/app/.next/server/app/dashboard/profile.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/providers/new.html +1 -1
- package/app/.next/server/app/dashboard/providers/new.rsc +18 -17
- package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/providers/new.segments/_full.segment.rsc +18 -17
- package/app/.next/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers/new.segments/_index.segment.rsc +4 -3
- package/app/.next/server/app/dashboard/providers/new.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/providers.html +1 -1
- package/app/.next/server/app/dashboard/providers.rsc +18 -17
- package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/providers.segments/_full.segment.rsc +18 -17
- package/app/.next/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/providers.segments/_index.segment.rsc +4 -3
- package/app/.next/server/app/dashboard/providers.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/settings/pricing.html +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.rsc +18 -17
- package/app/.next/server/app/dashboard/settings/pricing.segments/!KGRhc2hib2FyZCk/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.segments/!KGRhc2hib2FyZCk/dashboard/settings/pricing.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.segments/!KGRhc2hib2FyZCk/dashboard/settings.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +18 -17
- package/app/.next/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +4 -3
- package/app/.next/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/settings.html +1 -1
- package/app/.next/server/app/dashboard/settings.rsc +18 -17
- package/app/.next/server/app/dashboard/settings.segments/!KGRhc2hib2FyZCk/dashboard/settings/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/settings.segments/!KGRhc2hib2FyZCk/dashboard/settings.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/settings.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/settings.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/settings.segments/_full.segment.rsc +18 -17
- package/app/.next/server/app/dashboard/settings.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/settings.segments/_index.segment.rsc +4 -3
- package/app/.next/server/app/dashboard/settings.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/translator.html +2 -2
- package/app/.next/server/app/dashboard/translator.rsc +15 -14
- package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/translator.segments/_full.segment.rsc +15 -14
- package/app/.next/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/translator.segments/_index.segment.rsc +4 -3
- package/app/.next/server/app/dashboard/translator.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/usage.html +2 -1
- package/app/.next/server/app/dashboard/usage.rsc +18 -17
- package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
- package/app/.next/server/app/dashboard/usage.segments/_full.segment.rsc +18 -17
- package/app/.next/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/dashboard/usage.segments/_index.segment.rsc +4 -3
- package/app/.next/server/app/dashboard/usage.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/docs/page.js +3 -2
- package/app/.next/server/app/docs/page.js.nft.json +1 -1
- package/app/.next/server/app/docs/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/docs.html +1 -1
- package/app/.next/server/app/docs.rsc +22 -24
- package/app/.next/server/app/docs.segments/_full.segment.rsc +22 -24
- package/app/.next/server/app/docs.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/docs.segments/_index.segment.rsc +4 -3
- package/app/.next/server/app/docs.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/docs.segments/docs/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/docs.segments/docs.segment.rsc +1 -1
- package/app/.next/server/app/forbidden/page.js +2 -0
- package/app/.next/server/app/forbidden/page.js.nft.json +1 -0
- package/app/.next/server/app/forbidden/page_client-reference-manifest.js +1 -0
- package/app/.next/server/app/forbidden.html +1 -0
- package/app/.next/server/app/forbidden.meta +15 -0
- package/app/.next/server/app/forbidden.rsc +23 -0
- package/app/.next/server/app/forbidden.segments/_full.segment.rsc +23 -0
- package/app/.next/server/app/forbidden.segments/_head.segment.rsc +6 -0
- package/app/.next/server/app/forbidden.segments/_index.segment.rsc +9 -0
- package/app/.next/server/app/forbidden.segments/_tree.segment.rsc +5 -0
- package/app/.next/server/app/forbidden.segments/forbidden/__PAGE__.segment.rsc +9 -0
- package/app/.next/server/app/forbidden.segments/forbidden.segment.rsc +4 -0
- package/app/.next/server/app/forgot-password/page.js +2 -0
- package/app/.next/server/app/forgot-password/page.js.nft.json +1 -0
- package/app/.next/server/app/forgot-password/page_client-reference-manifest.js +1 -0
- package/app/.next/server/app/forgot-password.html +1 -0
- package/app/.next/server/app/forgot-password.meta +15 -0
- package/app/.next/server/app/forgot-password.rsc +23 -0
- package/app/.next/server/app/forgot-password.segments/_full.segment.rsc +23 -0
- package/app/.next/server/app/forgot-password.segments/_head.segment.rsc +6 -0
- package/app/.next/server/app/forgot-password.segments/_index.segment.rsc +9 -0
- package/app/.next/server/app/forgot-password.segments/_tree.segment.rsc +5 -0
- package/app/.next/server/app/forgot-password.segments/forgot-password/__PAGE__.segment.rsc +9 -0
- package/app/.next/server/app/forgot-password.segments/forgot-password.segment.rsc +4 -0
- package/app/.next/server/app/index.html +1 -1
- package/app/.next/server/app/index.rsc +14 -13
- package/app/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/index.segments/_full.segment.rsc +14 -13
- package/app/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/index.segments/_index.segment.rsc +4 -3
- package/app/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/landing/page.js +2 -2
- package/app/.next/server/app/landing/page.js.nft.json +1 -1
- package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/landing.html +1 -1
- package/app/.next/server/app/landing.rsc +17 -16
- package/app/.next/server/app/landing.segments/_full.segment.rsc +17 -16
- package/app/.next/server/app/landing.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/landing.segments/_index.segment.rsc +4 -3
- package/app/.next/server/app/landing.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/landing.segments/landing.segment.rsc +1 -1
- package/app/.next/server/app/login/page.js +2 -2
- package/app/.next/server/app/login/page.js.nft.json +1 -1
- package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/login.html +1 -1
- package/app/.next/server/app/login.rsc +17 -16
- package/app/.next/server/app/login.segments/_full.segment.rsc +17 -16
- package/app/.next/server/app/login.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/login.segments/_index.segment.rsc +4 -3
- package/app/.next/server/app/login.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/login.segments/login.segment.rsc +1 -1
- package/app/.next/server/app/page.js +2 -2
- package/app/.next/server/app/page.js.nft.json +1 -1
- package/app/.next/server/app/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/privacy/page.js +2 -2
- package/app/.next/server/app/privacy/page.js.nft.json +1 -1
- package/app/.next/server/app/privacy/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/privacy.html +1 -1
- package/app/.next/server/app/privacy.rsc +21 -23
- package/app/.next/server/app/privacy.segments/_full.segment.rsc +21 -23
- package/app/.next/server/app/privacy.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/privacy.segments/_index.segment.rsc +4 -3
- package/app/.next/server/app/privacy.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/privacy.segments/privacy/__PAGE__.segment.rsc +2 -2
- package/app/.next/server/app/privacy.segments/privacy.segment.rsc +1 -1
- package/app/.next/server/app/terms/page.js +2 -2
- package/app/.next/server/app/terms/page.js.nft.json +1 -1
- package/app/.next/server/app/terms/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/terms.html +1 -1
- package/app/.next/server/app/terms.rsc +22 -20
- package/app/.next/server/app/terms.segments/_full.segment.rsc +22 -20
- package/app/.next/server/app/terms.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/terms.segments/_index.segment.rsc +4 -3
- package/app/.next/server/app/terms.segments/_tree.segment.rsc +2 -2
- package/app/.next/server/app/terms.segments/terms/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/terms.segments/terms.segment.rsc +1 -1
- package/app/.next/server/app-paths-manifest.json +42 -25
- package/app/.next/server/chunks/1228.js +3 -0
- package/app/.next/server/chunks/1362.js +1 -1
- package/app/.next/server/chunks/152.js +1 -0
- package/app/.next/server/chunks/1746.js +1 -0
- package/app/.next/server/chunks/216.js +37 -0
- package/app/.next/server/chunks/2399.js +1 -1
- package/app/.next/server/chunks/3676.js +2 -0
- package/app/.next/server/chunks/4004.js +1 -0
- package/app/.next/server/chunks/4352.js +46 -0
- package/app/.next/server/chunks/4436.js +1 -1
- package/app/.next/server/chunks/4443.js +1 -1
- package/app/.next/server/chunks/{8259.js → 4469.js} +52 -2
- package/app/.next/server/chunks/4755.js +16 -2
- package/app/.next/server/chunks/{7132.js → 4832.js} +3 -3
- package/app/.next/server/chunks/5040.js +1 -0
- package/app/.next/server/chunks/5727.js +1 -0
- package/app/.next/server/chunks/7093.js +2 -0
- package/app/.next/server/chunks/7271.js +1 -0
- package/app/.next/server/chunks/7615.js +9 -2
- package/app/.next/server/chunks/7763.js +1 -0
- package/app/.next/server/chunks/7802.js +1 -0
- package/app/.next/server/chunks/7968.js +3 -1
- package/app/.next/server/chunks/8020.js +13 -0
- package/app/.next/server/chunks/8108.js +1 -1
- package/app/.next/server/chunks/8392.js +1 -0
- package/app/.next/server/chunks/8400.js +1 -1
- package/app/.next/server/chunks/8847.js +3 -0
- package/app/.next/server/chunks/9263.js +1 -0
- package/app/.next/server/middleware-build-manifest.js +1 -1
- package/app/.next/server/middleware.js +207 -2
- package/app/.next/server/pages/404.html +1 -1
- package/app/.next/server/pages/500.html +2 -2
- package/app/.next/server/server-reference-manifest.js +1 -1
- package/app/.next/server/server-reference-manifest.json +1 -1
- package/app/.next/static/H6LKncewEoggilnvYL9Ff/_buildManifest.js +1 -0
- package/app/.next/static/chunks/1525-ec661e96acc6574e.js +21 -0
- package/app/.next/static/chunks/3191-0bbb8ebd1bd32d1d.js +1 -0
- package/app/.next/static/chunks/{6941-0643e7aebf5ed645.js → 6941-77ce2b3be7709b94.js} +1 -1
- package/app/.next/static/chunks/7896-6e5648294ec51150.js +2 -0
- package/app/.next/static/chunks/9751-3a35163d337d54ea.js +37 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/{page-148b0ad18f6bec86.js → page-4cec40aa933b932e.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/combos/page-962f1e2bfe0d0b8d.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/endpoint/page-5caaa75c0ab78bc1.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/health/page-81352b2272952085.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/page-3d3dabe4363d421d.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/profile/page-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-57279ed20b5399be.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/new/{page-4bd8ea64f2e8008b.js → page-9667287d75830fd5.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/page-d08547fcb1031577.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/settings/page-26179a630baa2686.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/translator/{page-c891465a1a2938d2.js → page-6190920e7526556c.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/usage/page-d1066b6c4c28fe46.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/layout-b6fc79d0628b97e3.js +1 -0
- package/app/.next/static/chunks/app/_global-error/page-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/_not-found/page-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/auth/login/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/auth/logout/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/cache/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/cache/stats/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/backups/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/claude-settings/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/cline-settings/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/codex-profiles/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/codex-settings/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/droid-settings/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/guide-settings/[toolId]/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/kilo-settings/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/runtime/[toolId]/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/cloud/auth/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/cloud/credentials/update/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/cloud/model/resolve/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/cloud/models/alias/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/combos/[id]/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/combos/metrics/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/combos/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/combos/test/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/compliance/audit-log/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/db-backups/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/evals/[suiteId]/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/evals/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/fallback/chains/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/init/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/keys/[id]/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/keys/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/models/alias/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/models/availability/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/models/catalog/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/models/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/monitoring/health/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/[provider]/[action]/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/cursor/auto-import/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/cursor/import/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/kiro/auto-import/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/kiro/import/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/kiro/social-authorize/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/kiro/social-exchange/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/policies/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/pricing/defaults/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/pricing/models/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/pricing/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/provider-models/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/provider-nodes/[id]/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/provider-nodes/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/provider-nodes/validate/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/providers/[id]/models/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/providers/[id]/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/providers/[id]/test/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/providers/client/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/providers/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/providers/test-batch/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/providers/validate/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/rate-limit/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/rate-limits/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/resilience/reset/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/resilience/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/restart/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/sessions/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/settings/combo-defaults/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/settings/ip-filter/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/settings/proxy/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/settings/proxy/test/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/settings/require-login/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/settings/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/settings/system-prompt/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/settings/thinking-budget/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/shutdown/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/storage/health/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/sync/cloud/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/sync/initialize/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/tags/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/telemetry/summary/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/token-health/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/translator/detect/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/translator/history/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/translator/load/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/translator/save/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/translator/send/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/translator/translate/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/usage/[connectionId]/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/usage/analytics/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/usage/budget/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/usage/call-logs/[id]/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/usage/call-logs/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/usage/history/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/usage/logs/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/usage/proxy-logs/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/usage/request-logs/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/v1/api/chat/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/v1/audio/speech/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/v1/audio/transcriptions/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/v1/chat/completions/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/v1/embeddings/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/v1/images/generations/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/v1/messages/count_tokens/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/v1/messages/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/v1/models/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/v1/moderations/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/v1/providers/[provider]/chat/completions/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/v1/providers/[provider]/embeddings/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/v1/providers/[provider]/images/generations/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/v1/rerank/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/v1/responses/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/v1/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/v1beta/models/[...path]/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/api/v1beta/models/route-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/app/forbidden/page-6806872971c364f0.js +1 -0
- package/app/.next/static/chunks/app/forgot-password/page-9c116a597f3df4d1.js +1 -0
- package/app/.next/static/chunks/app/global-error-6abc2976016d7bd1.js +1 -0
- package/app/.next/static/chunks/app/layout-6504ce60623b0a41.js +1 -0
- package/app/.next/static/chunks/app/login/{page-e99ed6a85e91ae7c.js → page-93ac51059ef434b7.js} +1 -1
- package/app/.next/static/chunks/app/not-found-e1af8b9c5785b71b.js +1 -0
- package/app/.next/static/chunks/app/page-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/main-app-c9da11a8061df107.js +1 -0
- package/app/.next/static/chunks/next/dist/client/components/builtin/app-error-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/next/dist/client/components/builtin/forbidden-c02303813bcb9777.js +1 -0
- package/app/.next/static/chunks/next/dist/client/components/builtin/unauthorized-c02303813bcb9777.js +1 -0
- package/app/.next/static/css/2ecfad7c4409b17e.css +1 -0
- package/app/package.json +9 -5
- package/app/src/shared/utils/apiKey.js +5 -1
- package/bin/reset-password.mjs +116 -0
- package/package.json +9 -5
- package/app/.next/server/chunks/1483.js +0 -156
- package/app/.next/server/chunks/21.js +0 -46
- package/app/.next/server/chunks/2116.js +0 -1
- package/app/.next/server/chunks/2250.js +0 -1
- package/app/.next/server/chunks/3919.js +0 -1
- package/app/.next/server/chunks/481.js +0 -156
- package/app/.next/server/chunks/5640.js +0 -1
- package/app/.next/server/chunks/6194.js +0 -1
- package/app/.next/server/chunks/6937.js +0 -156
- package/app/.next/server/chunks/7471.js +0 -13
- package/app/.next/server/chunks/9188.js +0 -1
- package/app/.next/static/XnNWFvV2IXZ4xuX0F1Skg/_buildManifest.js +0 -1
- package/app/.next/static/chunks/1525-8aaae9ffdaa67144.js +0 -7
- package/app/.next/static/chunks/7896-4e519429f67f381e.js +0 -1
- package/app/.next/static/chunks/8013-04b90e92e614b5d9.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/combos/page-49caa7328acff82d.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/endpoint/page-ab8b870377087bc7.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/page-bc5764734a448526.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/profile/page-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-fb1fa9ae8a3af8c8.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/page-4140db5a52fc7323.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/settings/page-70619a1bafdc9c4c.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/usage/page-9ee5997edb778414.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/layout-0ee92d902ee7a39c.js +0 -1
- package/app/.next/static/chunks/app/_global-error/page-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/_not-found/page-a99a85b5268f1c54.js +0 -1
- package/app/.next/static/chunks/app/api/auth/login/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/auth/logout/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/backups/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/claude-settings/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/cline-settings/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/codex-profiles/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/codex-settings/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/droid-settings/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/guide-settings/[toolId]/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/kilo-settings/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/runtime/[toolId]/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/cloud/auth/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/cloud/credentials/update/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/cloud/model/resolve/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/cloud/models/alias/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/combos/[id]/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/combos/metrics/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/combos/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/combos/test/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/db-backups/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/init/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/keys/[id]/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/keys/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/models/alias/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/models/catalog/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/models/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/[provider]/[action]/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/cursor/auto-import/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/cursor/import/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/kiro/auto-import/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/kiro/import/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/kiro/social-authorize/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/kiro/social-exchange/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/pricing/defaults/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/pricing/models/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/pricing/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/provider-models/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/provider-nodes/[id]/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/provider-nodes/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/provider-nodes/validate/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/models/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/test/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/providers/client/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/providers/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/providers/test-batch/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/providers/validate/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/rate-limit/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/rate-limits/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/restart/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/sessions/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/settings/combo-defaults/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/settings/ip-filter/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/settings/proxy/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/settings/proxy/test/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/settings/require-login/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/settings/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/settings/system-prompt/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/settings/thinking-budget/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/shutdown/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/storage/health/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/sync/cloud/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/sync/initialize/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/tags/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/translator/detect/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/translator/history/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/translator/load/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/translator/save/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/translator/send/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/translator/translate/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/usage/[connectionId]/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/usage/analytics/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/usage/call-logs/[id]/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/usage/call-logs/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/usage/history/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/usage/logs/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/usage/proxy-logs/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/usage/request-logs/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/v1/api/chat/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/v1/audio/speech/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/v1/audio/transcriptions/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/v1/chat/completions/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/v1/embeddings/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/v1/images/generations/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/v1/messages/count_tokens/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/v1/messages/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/v1/models/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/v1/moderations/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/v1/providers/[provider]/chat/completions/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/v1/providers/[provider]/embeddings/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/v1/providers/[provider]/images/generations/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/v1/rerank/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/v1/responses/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/v1/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/v1beta/models/[...path]/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/api/v1beta/models/route-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/app/layout-485b011f69e6ed37.js +0 -1
- package/app/.next/static/chunks/app/page-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/main-app-fbc16f70c595b197.js +0 -1
- package/app/.next/static/chunks/next/dist/client/components/builtin/app-error-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/next/dist/client/components/builtin/forbidden-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/next/dist/client/components/builtin/global-error-d91548a7b6ba5970.js +0 -1
- package/app/.next/static/chunks/next/dist/client/components/builtin/not-found-c452284fb77ecee0.js +0 -1
- package/app/.next/static/chunks/next/dist/client/components/builtin/unauthorized-c452284fb77ecee0.js +0 -1
- package/app/.next/static/css/5309860f6e486620.css +0 -1
- /package/app/.next/static/{XnNWFvV2IXZ4xuX0F1Skg → H6LKncewEoggilnvYL9Ff}/_ssgManifest.js +0 -0
package/README.md
CHANGED
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
[](https://www.npmjs.com/package/omniroute)
|
|
19
19
|
[](https://github.com/diegosouzapw/OmniRoute/blob/main/LICENSE)
|
|
20
20
|
|
|
21
|
-
[🚀 Quick Start](#-quick-start) • [💡 Features](#-key-features) • [📖
|
|
21
|
+
[🚀 Quick Start](#-quick-start) • [💡 Features](#-key-features) • [📖 Docs](#-documentation)
|
|
22
22
|
</div>
|
|
23
23
|
|
|
24
24
|
---
|
|
@@ -81,17 +81,14 @@ omniroute
|
|
|
81
81
|
|
|
82
82
|
🎉 Dashboard opens at `http://localhost:20128`
|
|
83
83
|
|
|
84
|
-
**CLI Options:**
|
|
85
|
-
|
|
86
84
|
| Command | Description |
|
|
87
85
|
| ----------------------- | --------------------------------- |
|
|
88
86
|
| `omniroute` | Start server (default port 20128) |
|
|
89
87
|
| `omniroute --port 3000` | Use custom port |
|
|
90
88
|
| `omniroute --no-open` | Don't auto-open browser |
|
|
91
89
|
| `omniroute --help` | Show help |
|
|
92
|
-
| `omniroute --version` | Show version |
|
|
93
90
|
|
|
94
|
-
**2. Connect a FREE provider
|
|
91
|
+
**2. Connect a FREE provider:**
|
|
95
92
|
|
|
96
93
|
Dashboard → Providers → Connect **Claude Code** or **Antigravity** → OAuth login → Done!
|
|
97
94
|
|
|
@@ -106,7 +103,7 @@ Claude Code/Codex/Gemini CLI/OpenClaw/Cursor/Cline Settings:
|
|
|
106
103
|
|
|
107
104
|
**That's it!** Start coding with FREE AI models.
|
|
108
105
|
|
|
109
|
-
**Alternative
|
|
106
|
+
**Alternative — run from source:**
|
|
110
107
|
|
|
111
108
|
```bash
|
|
112
109
|
cp .env.example .env
|
|
@@ -114,1143 +111,55 @@ npm install
|
|
|
114
111
|
PORT=20128 NEXT_PUBLIC_BASE_URL=http://localhost:20128 npm run dev
|
|
115
112
|
```
|
|
116
113
|
|
|
117
|
-
Production mode:
|
|
118
|
-
|
|
119
|
-
```bash
|
|
120
|
-
npm run build
|
|
121
|
-
PORT=20128 HOSTNAME=0.0.0.0 NEXT_PUBLIC_BASE_URL=http://localhost:20128 npm run start
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
Default URLs:
|
|
125
|
-
|
|
126
|
-
- Dashboard: `http://localhost:20128/dashboard`
|
|
127
|
-
- OpenAI-compatible API: `http://localhost:20128/v1`
|
|
128
|
-
|
|
129
114
|
---
|
|
130
115
|
|
|
131
116
|
## 💡 Key Features
|
|
132
117
|
|
|
133
|
-
| Feature
|
|
134
|
-
|
|
|
135
|
-
| 🎯 **Smart 3-Tier Fallback**
|
|
136
|
-
| 📊 **Real-Time Quota Tracking**
|
|
137
|
-
| 🔄 **Format Translation**
|
|
138
|
-
| 👥 **Multi-Account Support**
|
|
139
|
-
| 🔄 **Auto Token Refresh**
|
|
140
|
-
| 🎨 **Custom Combos**
|
|
141
|
-
| 🧩 **Custom Models**
|
|
142
|
-
|
|
|
143
|
-
|
|
|
144
|
-
|
|
|
145
|
-
|
|
|
146
|
-
|
|
|
147
|
-
|
|
|
148
|
-
|
|
|
149
|
-
|
|
|
150
|
-
|
|
|
151
|
-
| 💬 **System Prompt Injection** | Global system prompt for all requests | Consistent behavior across models |
|
|
152
|
-
| 📊 **Session Tracking** | Track active sessions with fingerprinting | Monitor connected clients |
|
|
153
|
-
| ⚡ **Rate Limiting** | Per-account request rate management | Prevent abuse and quota waste |
|
|
154
|
-
| 💰 **Model Pricing** | Per-model cost tracking and calculation | Precise usage cost analytics |
|
|
155
|
-
|
|
156
|
-
<details>
|
|
157
|
-
<summary><b>📖 Feature Details</b></summary>
|
|
158
|
-
|
|
159
|
-
### 🎯 Smart 3-Tier Fallback
|
|
160
|
-
|
|
161
|
-
Create combos with automatic fallback:
|
|
162
|
-
|
|
163
|
-
```
|
|
164
|
-
Combo: "my-coding-stack"
|
|
165
|
-
1. cc/claude-opus-4-6 (your subscription)
|
|
166
|
-
2. glm/glm-4.7 (cheap backup, $0.6/1M)
|
|
167
|
-
3. if/kimi-k2-thinking (free fallback)
|
|
168
|
-
|
|
169
|
-
→ Auto switches when quota runs out or errors occur
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
### 📊 Real-Time Quota Tracking
|
|
173
|
-
|
|
174
|
-
- Token consumption per provider
|
|
175
|
-
- Reset countdown (5-hour, daily, weekly)
|
|
176
|
-
- Cost estimation for paid tiers
|
|
177
|
-
- Monthly spending reports
|
|
178
|
-
|
|
179
|
-
### 🔄 Format Translation
|
|
180
|
-
|
|
181
|
-
Seamless translation between formats:
|
|
182
|
-
|
|
183
|
-
- **OpenAI** ↔ **Claude** ↔ **Gemini** ↔ **OpenAI Responses**
|
|
184
|
-
- Your CLI tool sends OpenAI format → OmniRoute translates → Provider receives native format
|
|
185
|
-
- Works with any tool that supports custom OpenAI endpoints
|
|
186
|
-
|
|
187
|
-
### 👥 Multi-Account Support
|
|
188
|
-
|
|
189
|
-
- Add multiple accounts per provider
|
|
190
|
-
- Auto round-robin or priority-based routing
|
|
191
|
-
- Fallback to next account when one hits quota
|
|
192
|
-
|
|
193
|
-
### 🔄 Auto Token Refresh
|
|
194
|
-
|
|
195
|
-
- OAuth tokens automatically refresh before expiration
|
|
196
|
-
- No manual re-authentication needed
|
|
197
|
-
- Seamless experience across all providers
|
|
198
|
-
|
|
199
|
-
### 🎨 Custom Combos
|
|
200
|
-
|
|
201
|
-
- Create unlimited model combinations
|
|
202
|
-
- Mix subscription, cheap, and free tiers
|
|
203
|
-
- Name your combos for easy access
|
|
204
|
-
- Share combos across devices with Cloud Sync
|
|
205
|
-
|
|
206
|
-
### 📝 Request Logging
|
|
207
|
-
|
|
208
|
-
- Enable debug mode for full request/response logs
|
|
209
|
-
- Track API calls, headers, and payloads
|
|
210
|
-
- Troubleshoot integration issues
|
|
211
|
-
- Export logs for analysis
|
|
212
|
-
|
|
213
|
-
### 💾 Cloud Sync
|
|
214
|
-
|
|
215
|
-
- Sync providers, combos, and settings across devices
|
|
216
|
-
- Automatic background sync
|
|
217
|
-
- Secure encrypted storage
|
|
218
|
-
- Access your setup from anywhere
|
|
219
|
-
|
|
220
|
-
#### Cloud Runtime Notes
|
|
221
|
-
|
|
222
|
-
- Prefer server-side cloud variables in production:
|
|
223
|
-
- `BASE_URL` (internal callback URL used by sync scheduler)
|
|
224
|
-
- `CLOUD_URL` (cloud sync endpoint base)
|
|
225
|
-
- `NEXT_PUBLIC_BASE_URL` and `NEXT_PUBLIC_CLOUD_URL` are still supported for compatibility/UI, but server runtime now prioritizes `BASE_URL`/`CLOUD_URL`.
|
|
226
|
-
- Cloud sync requests now use timeout + fail-fast behavior to avoid UI hanging when cloud DNS/network is unavailable.
|
|
227
|
-
|
|
228
|
-
### 📊 Usage Analytics
|
|
229
|
-
|
|
230
|
-
- Track token usage per provider and model
|
|
231
|
-
- Cost estimation and spending trends
|
|
232
|
-
- Monthly reports and insights
|
|
233
|
-
- Optimize your AI spending
|
|
234
|
-
|
|
235
|
-
### 🌐 Deploy Anywhere
|
|
236
|
-
|
|
237
|
-
- 💻 **Localhost** - Default, works offline
|
|
238
|
-
- ☁️ **VPS/Cloud** - Share across devices
|
|
239
|
-
- 🐳 **Docker** - One-command deployment
|
|
240
|
-
- 🚀 **Cloudflare Workers** - Global edge network
|
|
241
|
-
|
|
242
|
-
</details>
|
|
243
|
-
|
|
244
|
-
---
|
|
245
|
-
|
|
246
|
-
## 💰 Pricing at a Glance
|
|
247
|
-
|
|
248
|
-
| Tier | Provider | Cost | Quota Reset | Best For |
|
|
249
|
-
| ------------------- | ----------------- | ----------- | ---------------- | -------------------- |
|
|
250
|
-
| **💳 SUBSCRIPTION** | Claude Code (Pro) | $20/mo | 5h + weekly | Already subscribed |
|
|
251
|
-
| | Codex (Plus/Pro) | $20-200/mo | 5h + weekly | OpenAI users |
|
|
252
|
-
| | Gemini CLI | **FREE** | 180K/mo + 1K/day | Everyone! |
|
|
253
|
-
| | GitHub Copilot | $10-19/mo | Monthly | GitHub users |
|
|
254
|
-
| **🔑 API KEY** | DeepSeek | Pay per use | None | Cheap reasoning |
|
|
255
|
-
| | Groq | Pay per use | None | Ultra-fast inference |
|
|
256
|
-
| | xAI (Grok) | Pay per use | None | Grok 4 reasoning |
|
|
257
|
-
| | Mistral | Pay per use | None | EU-hosted models |
|
|
258
|
-
| | Perplexity | Pay per use | None | Search-augmented |
|
|
259
|
-
| | Together AI | Pay per use | None | Open-source models |
|
|
260
|
-
| | Fireworks AI | Pay per use | None | Fast FLUX images |
|
|
261
|
-
| | Cerebras | Pay per use | None | Wafer-scale speed |
|
|
262
|
-
| | Cohere | Pay per use | None | Command R+ RAG |
|
|
263
|
-
| | NVIDIA NIM | Pay per use | None | Enterprise models |
|
|
264
|
-
| **💰 CHEAP** | GLM-4.7 | $0.6/1M | Daily 10AM | Budget backup |
|
|
265
|
-
| | MiniMax M2.1 | $0.2/1M | 5-hour rolling | Cheapest option |
|
|
266
|
-
| | Kimi K2 | $9/mo flat | 10M tokens/mo | Predictable cost |
|
|
267
|
-
| **🆓 FREE** | iFlow | $0 | Unlimited | 8 models free |
|
|
268
|
-
| | Qwen | $0 | Unlimited | 3 models free |
|
|
269
|
-
| | Kiro | $0 | Unlimited | Claude free |
|
|
270
|
-
|
|
271
|
-
**💡 Pro Tip:** Start with Gemini CLI (180K free/month) + iFlow (unlimited free) combo = $0 cost!
|
|
272
|
-
|
|
273
|
-
---
|
|
274
|
-
|
|
275
|
-
## 🎯 Use Cases
|
|
276
|
-
|
|
277
|
-
### Case 1: "I have Claude Pro subscription"
|
|
278
|
-
|
|
279
|
-
**Problem:** Quota expires unused, rate limits during heavy coding
|
|
280
|
-
|
|
281
|
-
**Solution:**
|
|
282
|
-
|
|
283
|
-
```
|
|
284
|
-
Combo: "maximize-claude"
|
|
285
|
-
1. cc/claude-opus-4-6 (use subscription fully)
|
|
286
|
-
2. glm/glm-4.7 (cheap backup when quota out)
|
|
287
|
-
3. if/kimi-k2-thinking (free emergency fallback)
|
|
288
|
-
|
|
289
|
-
Monthly cost: $20 (subscription) + ~$5 (backup) = $25 total
|
|
290
|
-
vs. $20 + hitting limits = frustration
|
|
291
|
-
```
|
|
292
|
-
|
|
293
|
-
### Case 2: "I want zero cost"
|
|
294
|
-
|
|
295
|
-
**Problem:** Can't afford subscriptions, need reliable AI coding
|
|
296
|
-
|
|
297
|
-
**Solution:**
|
|
298
|
-
|
|
299
|
-
```
|
|
300
|
-
Combo: "free-forever"
|
|
301
|
-
1. gc/gemini-3-flash (180K free/month)
|
|
302
|
-
2. if/kimi-k2-thinking (unlimited free)
|
|
303
|
-
3. qw/qwen3-coder-plus (unlimited free)
|
|
304
|
-
|
|
305
|
-
Monthly cost: $0
|
|
306
|
-
Quality: Production-ready models
|
|
307
|
-
```
|
|
308
|
-
|
|
309
|
-
### Case 3: "I need 24/7 coding, no interruptions"
|
|
310
|
-
|
|
311
|
-
**Problem:** Deadlines, can't afford downtime
|
|
312
|
-
|
|
313
|
-
**Solution:**
|
|
314
|
-
|
|
315
|
-
```
|
|
316
|
-
Combo: "always-on"
|
|
317
|
-
1. cc/claude-opus-4-6 (best quality)
|
|
318
|
-
2. cx/gpt-5.2-codex (second subscription)
|
|
319
|
-
3. glm/glm-4.7 (cheap, resets daily)
|
|
320
|
-
4. minimax/MiniMax-M2.1 (cheapest, 5h reset)
|
|
321
|
-
5. if/kimi-k2-thinking (free unlimited)
|
|
322
|
-
|
|
323
|
-
Result: 5 layers of fallback = zero downtime
|
|
324
|
-
Monthly cost: $20-200 (subscriptions) + $10-20 (backup)
|
|
325
|
-
```
|
|
326
|
-
|
|
327
|
-
### Case 4: "I want FREE AI in OpenClaw"
|
|
328
|
-
|
|
329
|
-
**Problem:** Need AI assistant in messaging apps (WhatsApp, Telegram, Slack...), completely free
|
|
330
|
-
|
|
331
|
-
**Solution:**
|
|
332
|
-
|
|
333
|
-
```
|
|
334
|
-
Combo: "openclaw-free"
|
|
335
|
-
1. if/glm-4.7 (unlimited free)
|
|
336
|
-
2. if/minimax-m2.1 (unlimited free)
|
|
337
|
-
3. if/kimi-k2-thinking (unlimited free)
|
|
338
|
-
|
|
339
|
-
Monthly cost: $0
|
|
340
|
-
Access via: WhatsApp, Telegram, Slack, Discord, iMessage, Signal...
|
|
341
|
-
```
|
|
342
|
-
|
|
343
|
-
---
|
|
344
|
-
|
|
345
|
-
## 📖 Setup Guide
|
|
346
|
-
|
|
347
|
-
<details>
|
|
348
|
-
<summary><b>🔐 Subscription Providers (Maximize Value)</b></summary>
|
|
349
|
-
|
|
350
|
-
### Claude Code (Pro/Max)
|
|
351
|
-
|
|
352
|
-
```bash
|
|
353
|
-
Dashboard → Providers → Connect Claude Code
|
|
354
|
-
→ OAuth login → Auto token refresh
|
|
355
|
-
→ 5-hour + weekly quota tracking
|
|
356
|
-
|
|
357
|
-
Models:
|
|
358
|
-
cc/claude-opus-4-6
|
|
359
|
-
cc/claude-sonnet-4-5-20250929
|
|
360
|
-
cc/claude-haiku-4-5-20251001
|
|
361
|
-
```
|
|
362
|
-
|
|
363
|
-
**Pro Tip:** Use Opus for complex tasks, Sonnet for speed. OmniRoute tracks quota per model!
|
|
364
|
-
|
|
365
|
-
### OpenAI Codex (Plus/Pro)
|
|
366
|
-
|
|
367
|
-
```bash
|
|
368
|
-
Dashboard → Providers → Connect Codex
|
|
369
|
-
→ OAuth login (port 1455)
|
|
370
|
-
→ 5-hour + weekly reset
|
|
371
|
-
|
|
372
|
-
Models:
|
|
373
|
-
cx/gpt-5.2-codex
|
|
374
|
-
cx/gpt-5.1-codex-max
|
|
375
|
-
```
|
|
376
|
-
|
|
377
|
-
### Gemini CLI (FREE 180K/month!)
|
|
378
|
-
|
|
379
|
-
```bash
|
|
380
|
-
Dashboard → Providers → Connect Gemini CLI
|
|
381
|
-
→ Google OAuth
|
|
382
|
-
→ 180K completions/month + 1K/day
|
|
383
|
-
|
|
384
|
-
Models:
|
|
385
|
-
gc/gemini-3-flash-preview
|
|
386
|
-
gc/gemini-2.5-pro
|
|
387
|
-
```
|
|
388
|
-
|
|
389
|
-
**Best Value:** Huge free tier! Use this before paid tiers.
|
|
390
|
-
|
|
391
|
-
### GitHub Copilot
|
|
392
|
-
|
|
393
|
-
```bash
|
|
394
|
-
Dashboard → Providers → Connect GitHub
|
|
395
|
-
→ OAuth via GitHub
|
|
396
|
-
→ Monthly reset (1st of month)
|
|
397
|
-
|
|
398
|
-
Models:
|
|
399
|
-
gh/gpt-5
|
|
400
|
-
gh/claude-4.5-sonnet
|
|
401
|
-
gh/gemini-3-pro
|
|
402
|
-
```
|
|
403
|
-
|
|
404
|
-
</details>
|
|
405
|
-
|
|
406
|
-
<details>
|
|
407
|
-
<summary><b>💰 Cheap Providers (Backup)</b></summary>
|
|
408
|
-
|
|
409
|
-
### GLM-4.7 (Daily reset, $0.6/1M)
|
|
410
|
-
|
|
411
|
-
1. Sign up: [Zhipu AI](https://open.bigmodel.cn/)
|
|
412
|
-
2. Get API key from Coding Plan
|
|
413
|
-
3. Dashboard → Add API Key:
|
|
414
|
-
- Provider: `glm`
|
|
415
|
-
- API Key: `your-key`
|
|
416
|
-
|
|
417
|
-
**Use:** `glm/glm-4.7`
|
|
418
|
-
|
|
419
|
-
**Pro Tip:** Coding Plan offers 3× quota at 1/7 cost! Reset daily 10:00 AM.
|
|
420
|
-
|
|
421
|
-
### MiniMax M2.1 (5h reset, $0.20/1M)
|
|
422
|
-
|
|
423
|
-
1. Sign up: [MiniMax](https://www.minimax.io/)
|
|
424
|
-
2. Get API key
|
|
425
|
-
3. Dashboard → Add API Key
|
|
426
|
-
|
|
427
|
-
**Use:** `minimax/MiniMax-M2.1`
|
|
428
|
-
|
|
429
|
-
**Pro Tip:** Cheapest option for long context (1M tokens)!
|
|
430
|
-
|
|
431
|
-
### Kimi K2 ($9/month flat)
|
|
432
|
-
|
|
433
|
-
1. Subscribe: [Moonshot AI](https://platform.moonshot.ai/)
|
|
434
|
-
2. Get API key
|
|
435
|
-
3. Dashboard → Add API Key
|
|
436
|
-
|
|
437
|
-
**Use:** `kimi/kimi-latest`
|
|
438
|
-
|
|
439
|
-
**Pro Tip:** Fixed $9/month for 10M tokens = $0.90/1M effective cost!
|
|
440
|
-
|
|
441
|
-
</details>
|
|
442
|
-
|
|
443
|
-
<details>
|
|
444
|
-
<summary><b>🆓 FREE Providers (Emergency Backup)</b></summary>
|
|
445
|
-
|
|
446
|
-
### iFlow (8 FREE models)
|
|
447
|
-
|
|
448
|
-
```bash
|
|
449
|
-
Dashboard → Connect iFlow
|
|
450
|
-
→ iFlow OAuth login
|
|
451
|
-
→ Unlimited usage
|
|
452
|
-
|
|
453
|
-
Models:
|
|
454
|
-
if/kimi-k2-thinking
|
|
455
|
-
if/qwen3-coder-plus
|
|
456
|
-
if/glm-4.7
|
|
457
|
-
if/minimax-m2
|
|
458
|
-
if/deepseek-r1
|
|
459
|
-
```
|
|
460
|
-
|
|
461
|
-
### Qwen (3 FREE models)
|
|
462
|
-
|
|
463
|
-
```bash
|
|
464
|
-
Dashboard → Connect Qwen
|
|
465
|
-
→ Device code authorization
|
|
466
|
-
→ Unlimited usage
|
|
467
|
-
|
|
468
|
-
Models:
|
|
469
|
-
qw/qwen3-coder-plus
|
|
470
|
-
qw/qwen3-coder-flash
|
|
471
|
-
```
|
|
472
|
-
|
|
473
|
-
### Kiro (Claude FREE)
|
|
474
|
-
|
|
475
|
-
```bash
|
|
476
|
-
Dashboard → Connect Kiro
|
|
477
|
-
→ AWS Builder ID or Google/GitHub
|
|
478
|
-
→ Unlimited usage
|
|
479
|
-
|
|
480
|
-
Models:
|
|
481
|
-
kr/claude-sonnet-4.5
|
|
482
|
-
kr/claude-haiku-4.5
|
|
483
|
-
```
|
|
484
|
-
|
|
485
|
-
</details>
|
|
486
|
-
|
|
487
|
-
<details>
|
|
488
|
-
<summary><b>🎨 Create Combos</b></summary>
|
|
489
|
-
|
|
490
|
-
### Example 1: Maximize Subscription → Cheap Backup
|
|
491
|
-
|
|
492
|
-
```
|
|
493
|
-
Dashboard → Combos → Create New
|
|
494
|
-
|
|
495
|
-
Name: premium-coding
|
|
496
|
-
Models:
|
|
497
|
-
1. cc/claude-opus-4-6 (Subscription primary)
|
|
498
|
-
2. glm/glm-4.7 (Cheap backup, $0.6/1M)
|
|
499
|
-
3. minimax/MiniMax-M2.1 (Cheapest fallback, $0.20/1M)
|
|
500
|
-
|
|
501
|
-
Use in CLI: premium-coding
|
|
502
|
-
|
|
503
|
-
Monthly cost example (100M tokens):
|
|
504
|
-
80M via Claude (subscription): $0 extra
|
|
505
|
-
15M via GLM: $9
|
|
506
|
-
5M via MiniMax: $1
|
|
507
|
-
Total: $10 + your subscription
|
|
508
|
-
```
|
|
509
|
-
|
|
510
|
-
### Example 2: Free-Only (Zero Cost)
|
|
511
|
-
|
|
512
|
-
```
|
|
513
|
-
Name: free-combo
|
|
514
|
-
Models:
|
|
515
|
-
1. gc/gemini-3-flash-preview (180K free/month)
|
|
516
|
-
2. if/kimi-k2-thinking (unlimited)
|
|
517
|
-
3. qw/qwen3-coder-plus (unlimited)
|
|
518
|
-
|
|
519
|
-
Cost: $0 forever!
|
|
520
|
-
```
|
|
521
|
-
|
|
522
|
-
</details>
|
|
523
|
-
|
|
524
|
-
<details>
|
|
525
|
-
<summary><b>🔧 CLI Integration</b></summary>
|
|
526
|
-
|
|
527
|
-
### Cursor IDE
|
|
528
|
-
|
|
529
|
-
```
|
|
530
|
-
Settings → Models → Advanced:
|
|
531
|
-
OpenAI API Base URL: http://localhost:20128/v1
|
|
532
|
-
OpenAI API Key: [from omniroute dashboard]
|
|
533
|
-
Model: cc/claude-opus-4-6
|
|
534
|
-
```
|
|
535
|
-
|
|
536
|
-
Or use combo: `premium-coding`
|
|
537
|
-
|
|
538
|
-
### Claude Code
|
|
539
|
-
|
|
540
|
-
Edit `~/.claude/config.json`:
|
|
541
|
-
|
|
542
|
-
```json
|
|
543
|
-
{
|
|
544
|
-
"anthropic_api_base": "http://localhost:20128/v1",
|
|
545
|
-
"anthropic_api_key": "your-omniroute-api-key"
|
|
546
|
-
}
|
|
547
|
-
```
|
|
548
|
-
|
|
549
|
-
### Codex CLI
|
|
550
|
-
|
|
551
|
-
```bash
|
|
552
|
-
export OPENAI_BASE_URL="http://localhost:20128"
|
|
553
|
-
export OPENAI_API_KEY="your-omniroute-api-key"
|
|
554
|
-
|
|
555
|
-
codex "your prompt"
|
|
556
|
-
```
|
|
557
|
-
|
|
558
|
-
### OpenClaw
|
|
559
|
-
|
|
560
|
-
Edit `~/.openclaw/openclaw.json`:
|
|
561
|
-
|
|
562
|
-
```json
|
|
563
|
-
{
|
|
564
|
-
"agents": {
|
|
565
|
-
"defaults": {
|
|
566
|
-
"model": {
|
|
567
|
-
"primary": "omniroute/if/glm-4.7"
|
|
568
|
-
}
|
|
569
|
-
}
|
|
570
|
-
},
|
|
571
|
-
"models": {
|
|
572
|
-
"providers": {
|
|
573
|
-
"omniroute": {
|
|
574
|
-
"baseUrl": "http://localhost:20128/v1",
|
|
575
|
-
"apiKey": "your-omniroute-api-key",
|
|
576
|
-
"api": "openai-completions",
|
|
577
|
-
"models": [
|
|
578
|
-
{
|
|
579
|
-
"id": "if/glm-4.7",
|
|
580
|
-
"name": "glm-4.7"
|
|
581
|
-
}
|
|
582
|
-
]
|
|
583
|
-
}
|
|
584
|
-
}
|
|
585
|
-
}
|
|
586
|
-
}
|
|
587
|
-
```
|
|
588
|
-
|
|
589
|
-
**Or use Dashboard:** CLI Tools → OpenClaw → Auto-config
|
|
590
|
-
|
|
591
|
-
### Cline / Continue / RooCode
|
|
592
|
-
|
|
593
|
-
```
|
|
594
|
-
Provider: OpenAI Compatible
|
|
595
|
-
Base URL: http://localhost:20128/v1
|
|
596
|
-
API Key: [from dashboard]
|
|
597
|
-
Model: cc/claude-opus-4-6
|
|
598
|
-
```
|
|
599
|
-
|
|
600
|
-
</details>
|
|
601
|
-
|
|
602
|
-
<details>
|
|
603
|
-
<summary><b>🚀 Deployment</b></summary>
|
|
604
|
-
|
|
605
|
-
### VPS Deployment
|
|
606
|
-
|
|
607
|
-
```bash
|
|
608
|
-
# Clone and install
|
|
609
|
-
git clone https://github.com/diegosouzapw/OmniRoute.git
|
|
610
|
-
cd OmniRoute
|
|
611
|
-
npm install
|
|
612
|
-
npm run build
|
|
613
|
-
|
|
614
|
-
# Configure
|
|
615
|
-
export JWT_SECRET="your-secure-secret-change-this"
|
|
616
|
-
export INITIAL_PASSWORD="your-password"
|
|
617
|
-
export DATA_DIR="/var/lib/omniroute"
|
|
618
|
-
export PORT="20128"
|
|
619
|
-
export HOSTNAME="0.0.0.0"
|
|
620
|
-
export NODE_ENV="production"
|
|
621
|
-
export NEXT_PUBLIC_BASE_URL="http://localhost:20128"
|
|
622
|
-
export NEXT_PUBLIC_CLOUD_URL="https://omniroute.dev"
|
|
623
|
-
export API_KEY_SECRET="endpoint-proxy-api-key-secret"
|
|
624
|
-
export MACHINE_ID_SALT="endpoint-proxy-salt"
|
|
625
|
-
|
|
626
|
-
# Start
|
|
627
|
-
npm run start
|
|
628
|
-
|
|
629
|
-
# Or use PM2
|
|
630
|
-
npm install -g pm2
|
|
631
|
-
pm2 start npm --name omniroute -- start
|
|
632
|
-
pm2 save
|
|
633
|
-
pm2 startup
|
|
634
|
-
```
|
|
635
|
-
|
|
636
|
-
### Docker
|
|
637
|
-
|
|
638
|
-
```bash
|
|
639
|
-
# Build image (default target = runner-cli with codex/claude/droid preinstalled)
|
|
640
|
-
docker build -t omniroute:cli .
|
|
641
|
-
|
|
642
|
-
# Build minimal image without bundled CLIs
|
|
643
|
-
docker build --target runner-base -t omniroute:base .
|
|
644
|
-
|
|
645
|
-
# Build explicit CLI profile
|
|
646
|
-
docker build --target runner-cli -t omniroute:cli .
|
|
647
|
-
```
|
|
648
|
-
|
|
649
|
-
Portable mode (recommended for Docker Desktop and generic hosts):
|
|
650
|
-
|
|
651
|
-
```bash
|
|
652
|
-
docker run -d \
|
|
653
|
-
--name omniroute \
|
|
654
|
-
-p 20128:20128 \
|
|
655
|
-
--env-file ./.env \
|
|
656
|
-
-v omniroute-data:/app/data \
|
|
657
|
-
omniroute:cli
|
|
658
|
-
```
|
|
659
|
-
|
|
660
|
-
Host-integrated mode (Linux-first; use host mounts for CLI bins/configs):
|
|
661
|
-
|
|
662
|
-
Host prerequisites example (real host binaries):
|
|
663
|
-
|
|
664
|
-
```bash
|
|
665
|
-
# Install host CLIs (example)
|
|
666
|
-
npm install -g @openai/codex @anthropic-ai/claude-code droid openclaw@latest cline @continuedev/cli
|
|
667
|
-
```
|
|
668
|
-
|
|
669
|
-
Run using host-mounted CLIs (`codex` from host tool dir + npm global CLIs from Node root):
|
|
670
|
-
|
|
671
|
-
```bash
|
|
672
|
-
docker run -d \
|
|
673
|
-
--name omniroute \
|
|
674
|
-
-p 20128:20128 \
|
|
675
|
-
--env-file ./.env \
|
|
676
|
-
-e CLI_MODE=host \
|
|
677
|
-
-e CLI_EXTRA_PATHS=/host-local/bin:/host-node/bin:/host-codex \
|
|
678
|
-
-e CLI_CURSOR_BIN=agent \
|
|
679
|
-
-e CLI_CLINE_BIN=cline \
|
|
680
|
-
-e CLI_CONTINUE_BIN=cn \
|
|
681
|
-
-e CLI_CONFIG_HOME=/host-home \
|
|
682
|
-
-e CLI_ALLOW_CONFIG_WRITES=true \
|
|
683
|
-
-v ~/.local/bin:/host-local/bin:ro \
|
|
684
|
-
-v ~/.nvm/versions/node/v22.16.0:/host-node:ro \
|
|
685
|
-
-v /path/to/host/codex/bin:/host-codex:ro \
|
|
686
|
-
-v ~/.codex:/host-home/.codex:rw \
|
|
687
|
-
-v ~/.claude:/host-home/.claude:rw \
|
|
688
|
-
-v ~/.factory:/host-home/.factory:rw \
|
|
689
|
-
-v ~/.openclaw:/host-home/.openclaw:rw \
|
|
690
|
-
-v ~/.cursor:/host-home/.cursor:rw \
|
|
691
|
-
-v ~/.config/cursor:/host-home/.config/cursor:rw \
|
|
692
|
-
-v omniroute-data:/app/data \
|
|
693
|
-
omniroute:base
|
|
694
|
-
```
|
|
695
|
-
|
|
696
|
-
Notes:
|
|
697
|
-
|
|
698
|
-
- `runner-cli` currently bundles `@openai/codex`, `@anthropic-ai/claude-code`, `droid`, and `openclaw@latest`.
|
|
699
|
-
- `runner-cli` uses Node 22 Debian slim to satisfy OpenClaw runtime requirements.
|
|
700
|
-
- Host CLI mount mode is Linux-first. On Docker Desktop (Mac/Windows), prefer `runner-cli`.
|
|
701
|
-
- `Continue CLI` executable is usually `cn`, so set `CLI_CONTINUE_BIN=cn` in host mode.
|
|
702
|
-
- `Cursor Agent` executable is commonly `agent` in `~/.local/bin`, so set `CLI_CURSOR_BIN=agent` and include that directory in `CLI_EXTRA_PATHS`.
|
|
703
|
-
- Cursor auth/config typically live in `~/.config/cursor` and `~/.cursor`; mount both for host-integrated mode.
|
|
704
|
-
|
|
705
|
-
Quick runtime validation:
|
|
706
|
-
|
|
707
|
-
```bash
|
|
708
|
-
curl -s http://localhost:20128/api/cli-tools/codex-settings | jq '{installed,runnable,commandPath,runtimeMode,reason}'
|
|
709
|
-
curl -s http://localhost:20128/api/cli-tools/claude-settings | jq '{installed,runnable,commandPath,runtimeMode,reason}'
|
|
710
|
-
curl -s http://localhost:20128/api/cli-tools/openclaw-settings | jq '{installed,runnable,commandPath,runtimeMode,reason}'
|
|
711
|
-
curl -s http://localhost:20128/api/cli-tools/runtime/cursor | jq '{installed,runnable,command,commandPath,configPath,runtimeMode,reason}'
|
|
712
|
-
curl -s http://localhost:20128/api/cli-tools/runtime/cline | jq '{installed,runnable,commandPath,runtimeMode,reason}'
|
|
713
|
-
curl -s http://localhost:20128/api/cli-tools/runtime/continue | jq '{installed,runnable,commandPath,runtimeMode,reason}'
|
|
714
|
-
```
|
|
715
|
-
|
|
716
|
-
Container defaults:
|
|
717
|
-
|
|
718
|
-
- `PORT=20128`
|
|
719
|
-
- `HOSTNAME=0.0.0.0`
|
|
720
|
-
|
|
721
|
-
Useful commands:
|
|
722
|
-
|
|
723
|
-
```bash
|
|
724
|
-
docker logs -f omniroute
|
|
725
|
-
docker restart omniroute
|
|
726
|
-
docker stop omniroute && docker rm omniroute
|
|
727
|
-
```
|
|
728
|
-
|
|
729
|
-
### Environment Variables
|
|
730
|
-
|
|
731
|
-
| Variable | Default | Description |
|
|
732
|
-
| ---------------------------------------------------- | ------------------------------------ | ---------------------------------------------------------------------------------------- |
|
|
733
|
-
| `JWT_SECRET` | `omniroute-default-secret-change-me` | JWT signing secret for dashboard auth cookie (**change in production**) |
|
|
734
|
-
| `INITIAL_PASSWORD` | `123456` | First login password when no saved hash exists |
|
|
735
|
-
| `DATA_DIR` | `~/.omniroute` | Primary data directory (`db.json`, `usage.json`, `log.txt`, `call_logs/`) |
|
|
736
|
-
| `XDG_CONFIG_HOME` | unset | Optional base dir on Linux/macOS when `DATA_DIR` is unset (`$XDG_CONFIG_HOME/omniroute`) |
|
|
737
|
-
| `PORT` | framework default | Service port (`20128` in examples) |
|
|
738
|
-
| `HOSTNAME` | framework default | Bind host (Docker defaults to `0.0.0.0`) |
|
|
739
|
-
| `NODE_ENV` | runtime default | Set `production` for deploy |
|
|
740
|
-
| `BASE_URL` | `http://localhost:20128` | Server-side internal base URL used by cloud sync jobs |
|
|
741
|
-
| `CLOUD_URL` | `https://omniroute.dev` | Server-side cloud sync endpoint base URL |
|
|
742
|
-
| `NEXT_PUBLIC_BASE_URL` | `http://localhost:3000` | Backward-compatible/public base URL (prefer `BASE_URL` for server runtime) |
|
|
743
|
-
| `NEXT_PUBLIC_CLOUD_URL` | `https://omniroute.dev` | Backward-compatible/public cloud URL (prefer `CLOUD_URL` for server runtime) |
|
|
744
|
-
| `API_KEY_SECRET` | `endpoint-proxy-api-key-secret` | HMAC secret for generated API keys |
|
|
745
|
-
| `MACHINE_ID_SALT` | `endpoint-proxy-salt` | Salt for stable machine ID hashing |
|
|
746
|
-
| `ENABLE_REQUEST_LOGS` | `false` | Enables request/response logs under `logs/` |
|
|
747
|
-
| `AUTH_COOKIE_SECURE` | `false` | Force `Secure` auth cookie (set `true` behind HTTPS reverse proxy) |
|
|
748
|
-
| `REQUIRE_API_KEY` | `false` | Enforce Bearer API key on `/v1/*` routes (recommended for internet-exposed deploys) |
|
|
749
|
-
| `ENABLE_SOCKS5_PROXY` | `false` | Enables backend/runtime SOCKS5 support for outbound proxy |
|
|
750
|
-
| `NEXT_PUBLIC_ENABLE_SOCKS5_PROXY` | `false` | Shows SOCKS5 option in dashboard proxy UI |
|
|
751
|
-
| `ALLOW_MULTI_CONNECTIONS_PER_COMPAT_NODE` | `false` | Allow multiple connections for each OpenAI/Anthropic-compatible custom node |
|
|
752
|
-
| `CLI_MODE` | `auto` | CLI runtime profile: `auto`, `host`, or `container` |
|
|
753
|
-
| `CLI_EXTRA_PATHS` | empty | Extra `PATH` entries used for CLI detection/healthcheck (split by `:` on Linux) |
|
|
754
|
-
| `CLI_CONFIG_HOME` | runtime home (`os.homedir`) | Base directory used to read/write CLI config files |
|
|
755
|
-
| `CLI_ALLOW_CONFIG_WRITES` | `true` | If `false`, `/api/cli-tools/*` `POST`/`DELETE` return `403` |
|
|
756
|
-
| `CLI_CLAUDE_BIN` | `claude` | Override command/path used for Claude CLI detection |
|
|
757
|
-
| `CLI_CODEX_BIN` | `codex` | Override command/path used for Codex CLI detection |
|
|
758
|
-
| `CLI_DROID_BIN` | `droid` | Override command/path used for Droid CLI detection |
|
|
759
|
-
| `CLI_OPENCLAW_BIN` | `openclaw` | Override command/path used for OpenClaw CLI detection |
|
|
760
|
-
| `CLI_CURSOR_BIN` | `agent` | Override command/path used for Cursor Agent detection (`agent`, fallback `cursor`) |
|
|
761
|
-
| `CLI_CLINE_BIN` | empty | Optional override for Cline runtime detection (set `cline` if you have local CLI) |
|
|
762
|
-
| `CLI_ROO_BIN` | empty | Optional override for Roo runtime detection |
|
|
763
|
-
| `CLI_CONTINUE_BIN` | empty | Optional override for Continue runtime detection (commonly `cn`) |
|
|
764
|
-
| `HTTP_PROXY`, `HTTPS_PROXY`, `ALL_PROXY`, `NO_PROXY` | empty | Optional outbound proxy for upstream provider calls |
|
|
765
|
-
|
|
766
|
-
Notes:
|
|
767
|
-
|
|
768
|
-
- Lowercase proxy variables are also supported: `http_proxy`, `https_proxy`, `all_proxy`, `no_proxy`.
|
|
769
|
-
- `.env` is not baked into Docker image (`.dockerignore`); inject runtime config with `--env-file` or `-e`.
|
|
770
|
-
- On Windows, `APPDATA` can be used for local storage path resolution.
|
|
771
|
-
- `CLI_EXTRA_PATHS` uses the platform delimiter (`:` on Linux/macOS, `;` on Windows).
|
|
772
|
-
- `INSTANCE_NAME` appears in older docs/env templates, but is currently not used at runtime.
|
|
773
|
-
|
|
774
|
-
### Runtime Files and Storage
|
|
775
|
-
|
|
776
|
-
- Main app state: `${DATA_DIR}/db.json` (providers, combos, aliases, keys, settings), managed by `src/lib/localDb.js`.
|
|
777
|
-
- Usage history and logs: `${DATA_DIR}/usage.json`, `${DATA_DIR}/log.txt`, `${DATA_DIR}/call_logs/`, managed by `src/lib/usageDb.js`.
|
|
778
|
-
- Optional request/translator logs: `<repo>/logs/...` when `ENABLE_REQUEST_LOGS=true`.
|
|
779
|
-
- Legacy files under `~/.omniroute` are migrated automatically when `DATA_DIR` (or `XDG_CONFIG_HOME`) points to a different location.
|
|
780
|
-
|
|
781
|
-
</details>
|
|
782
|
-
|
|
783
|
-
---
|
|
784
|
-
|
|
785
|
-
## 📊 Available Models
|
|
786
|
-
|
|
787
|
-
<details>
|
|
788
|
-
<summary><b>View all available models</b></summary>
|
|
789
|
-
|
|
790
|
-
**Claude Code (`cc/`)** - Pro/Max:
|
|
791
|
-
|
|
792
|
-
- `cc/claude-opus-4-6`
|
|
793
|
-
- `cc/claude-sonnet-4-5-20250929`
|
|
794
|
-
- `cc/claude-haiku-4-5-20251001`
|
|
795
|
-
|
|
796
|
-
**Codex (`cx/`)** - Plus/Pro:
|
|
797
|
-
|
|
798
|
-
- `cx/gpt-5.2-codex`
|
|
799
|
-
- `cx/gpt-5.1-codex-max`
|
|
800
|
-
|
|
801
|
-
**Gemini CLI (`gc/`)** - FREE:
|
|
802
|
-
|
|
803
|
-
- `gc/gemini-3-flash-preview`
|
|
804
|
-
- `gc/gemini-2.5-pro`
|
|
805
|
-
|
|
806
|
-
**GitHub Copilot (`gh/`)**:
|
|
807
|
-
|
|
808
|
-
- `gh/gpt-5`
|
|
809
|
-
- `gh/claude-4.5-sonnet`
|
|
810
|
-
|
|
811
|
-
**GLM (`glm/`)** - $0.6/1M:
|
|
812
|
-
|
|
813
|
-
- `glm/glm-4.7`
|
|
814
|
-
|
|
815
|
-
**MiniMax (`minimax/`)** - $0.2/1M:
|
|
816
|
-
|
|
817
|
-
- `minimax/MiniMax-M2.1`
|
|
818
|
-
|
|
819
|
-
**iFlow (`if/`)** - FREE:
|
|
820
|
-
|
|
821
|
-
- `if/kimi-k2-thinking`
|
|
822
|
-
- `if/qwen3-coder-plus`
|
|
823
|
-
- `if/deepseek-r1`
|
|
824
|
-
|
|
825
|
-
**Qwen (`qw/`)** - FREE:
|
|
826
|
-
|
|
827
|
-
- `qw/qwen3-coder-plus`
|
|
828
|
-
- `qw/qwen3-coder-flash`
|
|
829
|
-
|
|
830
|
-
**Kiro (`kr/`)** - FREE:
|
|
831
|
-
|
|
832
|
-
- `kr/claude-sonnet-4.5`
|
|
833
|
-
- `kr/claude-haiku-4.5`
|
|
834
|
-
|
|
835
|
-
**DeepSeek (`ds/`)** - API Key:
|
|
836
|
-
|
|
837
|
-
- `ds/deepseek-chat`
|
|
838
|
-
- `ds/deepseek-reasoner`
|
|
839
|
-
|
|
840
|
-
**Groq (`groq/`)** - API Key:
|
|
841
|
-
|
|
842
|
-
- `groq/llama-3.3-70b-versatile`
|
|
843
|
-
- `groq/llama-4-maverick-17b-128e-instruct`
|
|
844
|
-
- `groq/qwen-qwq-32b`
|
|
845
|
-
- `groq/gpt-oss-120b`
|
|
846
|
-
|
|
847
|
-
**xAI (`xai/`)** - API Key:
|
|
848
|
-
|
|
849
|
-
- `xai/grok-4`
|
|
850
|
-
- `xai/grok-4-0709-fast-reasoning`
|
|
851
|
-
- `xai/grok-code-mini`
|
|
852
|
-
- `xai/grok-3-beta`
|
|
853
|
-
|
|
854
|
-
**Mistral (`mistral/`)** - API Key:
|
|
855
|
-
|
|
856
|
-
- `mistral/mistral-large-2501`
|
|
857
|
-
- `mistral/codestral-2501`
|
|
858
|
-
- `mistral/mistral-medium-2505`
|
|
859
|
-
|
|
860
|
-
**Perplexity (`pplx/`)** - API Key:
|
|
861
|
-
|
|
862
|
-
- `pplx/sonar-pro`
|
|
863
|
-
- `pplx/sonar`
|
|
864
|
-
|
|
865
|
-
**Together AI (`together/`)** - API Key:
|
|
866
|
-
|
|
867
|
-
- `together/meta-llama/Llama-3.3-70B-Instruct-Turbo`
|
|
868
|
-
- `together/deepseek-ai/DeepSeek-R1`
|
|
869
|
-
- `together/Qwen/Qwen3-235B-A22B`
|
|
870
|
-
|
|
871
|
-
**Fireworks AI (`fireworks/`)** - API Key:
|
|
872
|
-
|
|
873
|
-
- `fireworks/accounts/fireworks/models/deepseek-v3p1`
|
|
874
|
-
- `fireworks/accounts/fireworks/models/llama-v3p3-70b-instruct`
|
|
875
|
-
|
|
876
|
-
**Cerebras (`cerebras/`)** - API Key:
|
|
877
|
-
|
|
878
|
-
- `cerebras/llama-3.3-70b`
|
|
879
|
-
- `cerebras/llama-4-scout-17b-16e-instruct`
|
|
880
|
-
- `cerebras/qwen-3-32b`
|
|
881
|
-
|
|
882
|
-
**Cohere (`cohere/`)** - API Key:
|
|
883
|
-
|
|
884
|
-
- `cohere/command-r-plus-08-2024`
|
|
885
|
-
- `cohere/command-a-03-2025`
|
|
886
|
-
|
|
887
|
-
**NVIDIA NIM (`nvidia/`)** - API Key:
|
|
888
|
-
|
|
889
|
-
- `nvidia/nvidia/llama-3.3-70b-instruct`
|
|
890
|
-
- `nvidia/deepseek/deepseek-r1`
|
|
891
|
-
|
|
892
|
-
</details>
|
|
893
|
-
|
|
894
|
-
---
|
|
895
|
-
|
|
896
|
-
## 🧩 Advanced Features
|
|
897
|
-
|
|
898
|
-
<details>
|
|
899
|
-
<summary><b>Custom Models</b></summary>
|
|
900
|
-
|
|
901
|
-
Add any model ID to any provider without waiting for an app update:
|
|
902
|
-
|
|
903
|
-
```bash
|
|
904
|
-
# Via API
|
|
905
|
-
curl -X POST http://localhost:20128/api/provider-models \
|
|
906
|
-
-H "Content-Type: application/json" \
|
|
907
|
-
-d '{"provider": "openai", "modelId": "gpt-4.5-preview", "modelName": "GPT-4.5 Preview"}'
|
|
908
|
-
|
|
909
|
-
# List custom models
|
|
910
|
-
curl http://localhost:20128/api/provider-models?provider=openai
|
|
911
|
-
|
|
912
|
-
# Remove
|
|
913
|
-
curl -X DELETE "http://localhost:20128/api/provider-models?provider=openai&model=gpt-4.5-preview"
|
|
914
|
-
```
|
|
915
|
-
|
|
916
|
-
Or use the Dashboard: **Providers → [Provider] → Custom Models** section.
|
|
917
|
-
|
|
918
|
-
Custom models appear in `/v1/models` with `custom: true` flag.
|
|
919
|
-
|
|
920
|
-
</details>
|
|
921
|
-
|
|
922
|
-
<details>
|
|
923
|
-
<summary><b>Dedicated Provider Routes</b></summary>
|
|
924
|
-
|
|
925
|
-
Route requests directly to a specific provider with model validation:
|
|
926
|
-
|
|
927
|
-
```bash
|
|
928
|
-
# Chat completions for a specific provider
|
|
929
|
-
curl -X POST http://localhost:20128/v1/providers/openai/chat/completions \
|
|
930
|
-
-H "Content-Type: application/json" \
|
|
931
|
-
-d '{"model": "gpt-4o", "messages": [{"role": "user", "content": "Hello"}]}'
|
|
932
|
-
|
|
933
|
-
# Embeddings for a specific provider
|
|
934
|
-
curl -X POST http://localhost:20128/v1/providers/openai/embeddings \
|
|
935
|
-
-H "Content-Type: application/json" \
|
|
936
|
-
-d '{"model": "text-embedding-3-small", "input": "Hello world"}'
|
|
937
|
-
|
|
938
|
-
# Image generation for a specific provider
|
|
939
|
-
curl -X POST http://localhost:20128/v1/providers/fireworks/images/generations \
|
|
940
|
-
-H "Content-Type: application/json" \
|
|
941
|
-
-d '{"model": "flux-1-schnell", "prompt": "A sunset over the ocean"}'
|
|
942
|
-
```
|
|
943
|
-
|
|
944
|
-
The provider prefix is auto-added if missing. Mismatched models return `400`.
|
|
945
|
-
|
|
946
|
-
</details>
|
|
947
|
-
|
|
948
|
-
<details>
|
|
949
|
-
<summary><b>Network Proxy Configuration</b></summary>
|
|
950
|
-
|
|
951
|
-
Configure outbound proxies globally, or per-provider via structured proxy objects:
|
|
952
|
-
|
|
953
|
-
```bash
|
|
954
|
-
# Set global proxy
|
|
955
|
-
curl -X PUT http://localhost:20128/api/settings/proxy \
|
|
956
|
-
-H "Content-Type: application/json" \
|
|
957
|
-
-d '{"global": {"type":"http","host":"proxy.example.com","port":"8080"}}'
|
|
958
|
-
|
|
959
|
-
# Set per-provider proxy
|
|
960
|
-
curl -X PUT http://localhost:20128/api/settings/proxy \
|
|
961
|
-
-H "Content-Type: application/json" \
|
|
962
|
-
-d '{"providers": {"openai": {"type":"socks5","host":"proxy.example.com","port":"1080"}}}'
|
|
963
|
-
|
|
964
|
-
# Test a proxy before saving
|
|
965
|
-
curl -X POST http://localhost:20128/api/settings/proxy/test \
|
|
966
|
-
-H "Content-Type: application/json" \
|
|
967
|
-
-d '{"proxy":{"type":"socks5","host":"proxy.example.com","port":"1080"}}'
|
|
968
|
-
|
|
969
|
-
# Get current config
|
|
970
|
-
curl http://localhost:20128/api/settings/proxy
|
|
971
|
-
```
|
|
972
|
-
|
|
973
|
-
Notes:
|
|
974
|
-
|
|
975
|
-
- SOCKS5 is feature-flagged. Enable backend/runtime with `ENABLE_SOCKS5_PROXY=true`.
|
|
976
|
-
- To display SOCKS5 in the dashboard UI, also set `NEXT_PUBLIC_ENABLE_SOCKS5_PROXY=true`.
|
|
977
|
-
- Requests are fail-closed when a configured proxy fails (no direct-connection fallback).
|
|
978
|
-
|
|
979
|
-
**Precedence:** Key-specific → Combo-specific → Provider-specific → Global → Environment (`HTTPS_PROXY`/`HTTP_PROXY`/`ALL_PROXY`).
|
|
980
|
-
|
|
981
|
-
</details>
|
|
982
|
-
|
|
983
|
-
<details>
|
|
984
|
-
<summary><b>Model Catalog API</b></summary>
|
|
985
|
-
|
|
986
|
-
Get all available models grouped by provider with type metadata:
|
|
987
|
-
|
|
988
|
-
```bash
|
|
989
|
-
curl http://localhost:20128/api/models/catalog
|
|
990
|
-
```
|
|
991
|
-
|
|
992
|
-
Returns:
|
|
993
|
-
|
|
994
|
-
```json
|
|
995
|
-
{
|
|
996
|
-
"catalog": {
|
|
997
|
-
"openai": {
|
|
998
|
-
"provider": "OpenAI",
|
|
999
|
-
"active": true,
|
|
1000
|
-
"models": [
|
|
1001
|
-
{
|
|
1002
|
-
"id": "openai/gpt-4o",
|
|
1003
|
-
"name": "GPT-4o",
|
|
1004
|
-
"type": "chat",
|
|
1005
|
-
"custom": false
|
|
1006
|
-
},
|
|
1007
|
-
{
|
|
1008
|
-
"id": "openai/text-embedding-3-small",
|
|
1009
|
-
"type": "embedding",
|
|
1010
|
-
"custom": false
|
|
1011
|
-
}
|
|
1012
|
-
]
|
|
1013
|
-
}
|
|
1014
|
-
}
|
|
1015
|
-
}
|
|
1016
|
-
```
|
|
1017
|
-
|
|
1018
|
-
Types: `chat`, `embedding`, `image`. Custom models are flagged with `custom: true`.
|
|
1019
|
-
|
|
1020
|
-
</details>
|
|
1021
|
-
|
|
1022
|
-
---
|
|
1023
|
-
|
|
1024
|
-
## 🐛 Troubleshooting
|
|
1025
|
-
|
|
1026
|
-
**"Language model did not provide messages"**
|
|
1027
|
-
|
|
1028
|
-
- Provider quota exhausted → Check dashboard quota tracker
|
|
1029
|
-
- Solution: Use combo fallback or switch to cheaper tier
|
|
1030
|
-
|
|
1031
|
-
**Rate limiting**
|
|
1032
|
-
|
|
1033
|
-
- Subscription quota out → Fallback to GLM/MiniMax
|
|
1034
|
-
- Add combo: `cc/claude-opus-4-6 → glm/glm-4.7 → if/kimi-k2-thinking`
|
|
1035
|
-
|
|
1036
|
-
**OAuth token expired**
|
|
1037
|
-
|
|
1038
|
-
- Auto-refreshed by OmniRoute
|
|
1039
|
-
- If issues persist: Dashboard → Provider → Reconnect
|
|
1040
|
-
|
|
1041
|
-
**High costs**
|
|
1042
|
-
|
|
1043
|
-
- Check usage stats in Dashboard
|
|
1044
|
-
- Switch primary model to GLM/MiniMax
|
|
1045
|
-
- Use free tier (Gemini CLI, iFlow) for non-critical tasks
|
|
1046
|
-
|
|
1047
|
-
**Dashboard opens on wrong port**
|
|
1048
|
-
|
|
1049
|
-
- Set `PORT=20128` and `NEXT_PUBLIC_BASE_URL=http://localhost:20128`
|
|
1050
|
-
|
|
1051
|
-
**Cloud sync errors**
|
|
1052
|
-
|
|
1053
|
-
- Verify `BASE_URL` points to your running instance (example: `http://localhost:20128`)
|
|
1054
|
-
- Verify `CLOUD_URL` points to your expected cloud endpoint (example: `https://omniroute.dev`)
|
|
1055
|
-
- Keep `NEXT_PUBLIC_*` values aligned with server-side values when possible.
|
|
1056
|
-
|
|
1057
|
-
**Cloud endpoint `stream=false` returns 500 (`Unexpected token 'd'...`)**
|
|
1058
|
-
|
|
1059
|
-
- Symptom usually appears on public cloud endpoint (`https://omniroute.dev/v1`) for non-streaming calls.
|
|
1060
|
-
- Root cause: upstream returns SSE payload (`data: ...`) while client expects JSON.
|
|
1061
|
-
- Workaround: use `stream=true` for cloud direct calls.
|
|
1062
|
-
- Local OmniRoute runtime includes SSE→JSON fallback for non-streaming calls when upstream returns `text/event-stream`.
|
|
1063
|
-
|
|
1064
|
-
**Cloud says connected, but request still fails with `Invalid API key`**
|
|
1065
|
-
|
|
1066
|
-
- Create a fresh key from local dashboard (`/api/keys`) and run cloud sync (`Enable Cloud` then `Sync Now`).
|
|
1067
|
-
- Old/non-synced keys can still return `401` on cloud even if local endpoint works.
|
|
1068
|
-
|
|
1069
|
-
**CLI tool shows not installed inside Docker**
|
|
1070
|
-
|
|
1071
|
-
- Check runtime fields from `/api/cli-tools/*` (`installed`, `runnable`, `reason`, `commandPath`).
|
|
1072
|
-
- For portable mode, use image target `runner-cli` (bundled `codex`/`claude`/`droid`).
|
|
1073
|
-
- For host mount mode, set `CLI_EXTRA_PATHS` and mount host bin directory as read-only.
|
|
1074
|
-
- If `installed=true` and `runnable=false`, binary was found but failed healthcheck.
|
|
1075
|
-
|
|
1076
|
-
**First login not working**
|
|
1077
|
-
|
|
1078
|
-
- Check `INITIAL_PASSWORD` in `.env`
|
|
1079
|
-
- If unset, fallback password is `123456`
|
|
1080
|
-
|
|
1081
|
-
**No request logs under `logs/`**
|
|
1082
|
-
|
|
1083
|
-
- Set `ENABLE_REQUEST_LOGS=true`
|
|
118
|
+
| Feature | What It Does |
|
|
119
|
+
| ------------------------------- | --------------------------------------------- |
|
|
120
|
+
| 🎯 **Smart 3-Tier Fallback** | Auto-route: Subscription → Cheap → Free |
|
|
121
|
+
| 📊 **Real-Time Quota Tracking** | Live token count + reset countdown |
|
|
122
|
+
| 🔄 **Format Translation** | OpenAI ↔ Claude ↔ Gemini seamless |
|
|
123
|
+
| 👥 **Multi-Account Support** | Multiple accounts per provider |
|
|
124
|
+
| 🔄 **Auto Token Refresh** | OAuth tokens refresh automatically |
|
|
125
|
+
| 🎨 **Custom Combos** | Create unlimited model combinations |
|
|
126
|
+
| 🧩 **Custom Models** | Add any model ID to any provider |
|
|
127
|
+
| 📝 **Request Logging** | Debug mode with full request/response logs |
|
|
128
|
+
| 💾 **Cloud Sync** | Sync config across devices |
|
|
129
|
+
| 📊 **Usage Analytics** | Track tokens, cost, trends over time |
|
|
130
|
+
| 🌐 **Deploy Anywhere** | Localhost, VPS, Docker, Cloudflare Workers |
|
|
131
|
+
| 🔌 **Circuit Breaker** | Auto-open/close per-provider with cooldowns |
|
|
132
|
+
| 🛡️ **Anti-Thundering Herd** | Mutex + auto rate-limit for API key providers |
|
|
133
|
+
| 🧠 **Semantic Cache** | Two-tier cache reduces cost & latency |
|
|
134
|
+
| ⚡ **Request Idempotency** | 5s dedup window for duplicate requests |
|
|
135
|
+
| 📈 **Progress Tracking** | Opt-in SSE progress events for streaming |
|
|
1084
136
|
|
|
1085
137
|
---
|
|
1086
138
|
|
|
1087
139
|
## 🛠️ Tech Stack
|
|
1088
140
|
|
|
1089
141
|
- **Runtime**: Node.js 20+
|
|
1090
|
-
- **Framework**: Next.js 16
|
|
1091
|
-
- **
|
|
1092
|
-
- **Charts**: Recharts (SVG, accessible)
|
|
1093
|
-
- **Database**: LowDB (JSON file-based)
|
|
142
|
+
- **Framework**: Next.js 16 + React 19 + Tailwind CSS 4
|
|
143
|
+
- **Database**: LowDB (JSON) + SQLite (domain state)
|
|
1094
144
|
- **Streaming**: Server-Sent Events (SSE)
|
|
1095
145
|
- **Auth**: OAuth 2.0 (PKCE) + JWT + API Keys
|
|
1096
|
-
- **Testing**:
|
|
1097
|
-
- **
|
|
1098
|
-
- **CI/CD**: GitHub Actions (auto npm publish on release) + Dependabot
|
|
146
|
+
- **Testing**: Node.js test runner (320+ unit tests)
|
|
147
|
+
- **CI/CD**: GitHub Actions (auto npm publish on release)
|
|
1099
148
|
- **Package**: [npmjs.com/package/omniroute](https://www.npmjs.com/package/omniroute)
|
|
1100
|
-
- **
|
|
149
|
+
- **Resilience**: Circuit breaker, exponential backoff, anti-thundering herd
|
|
1101
150
|
|
|
1102
151
|
---
|
|
1103
152
|
|
|
1104
|
-
##
|
|
153
|
+
## 📖 Documentation
|
|
1105
154
|
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
"model": "cc/claude-opus-4-6",
|
|
1115
|
-
"messages": [
|
|
1116
|
-
{"role": "user", "content": "Write a function to..."}
|
|
1117
|
-
],
|
|
1118
|
-
"stream": true
|
|
1119
|
-
}
|
|
1120
|
-
```
|
|
1121
|
-
|
|
1122
|
-
### Embeddings
|
|
1123
|
-
|
|
1124
|
-
```bash
|
|
1125
|
-
POST http://localhost:20128/v1/embeddings
|
|
1126
|
-
Authorization: Bearer your-api-key
|
|
1127
|
-
Content-Type: application/json
|
|
1128
|
-
|
|
1129
|
-
{
|
|
1130
|
-
"model": "nebius/Qwen/Qwen3-Embedding-8B",
|
|
1131
|
-
"input": "The food was delicious"
|
|
1132
|
-
}
|
|
1133
|
-
```
|
|
1134
|
-
|
|
1135
|
-
Available embedding providers: Nebius, OpenAI, Mistral, Together AI, Fireworks, NVIDIA.
|
|
1136
|
-
|
|
1137
|
-
```bash
|
|
1138
|
-
# List all embedding models
|
|
1139
|
-
GET http://localhost:20128/v1/embeddings
|
|
1140
|
-
```
|
|
1141
|
-
|
|
1142
|
-
### Image Generation
|
|
1143
|
-
|
|
1144
|
-
```bash
|
|
1145
|
-
POST http://localhost:20128/v1/images/generations
|
|
1146
|
-
Authorization: Bearer your-api-key
|
|
1147
|
-
Content-Type: application/json
|
|
1148
|
-
|
|
1149
|
-
{
|
|
1150
|
-
"model": "openai/dall-e-3",
|
|
1151
|
-
"prompt": "A beautiful sunset over mountains",
|
|
1152
|
-
"size": "1024x1024"
|
|
1153
|
-
}
|
|
1154
|
-
```
|
|
1155
|
-
|
|
1156
|
-
Available image providers: OpenAI (DALL-E), xAI (Grok Image), Together AI (FLUX), Fireworks AI.
|
|
1157
|
-
|
|
1158
|
-
```bash
|
|
1159
|
-
# List all image models
|
|
1160
|
-
GET http://localhost:20128/v1/images/generations
|
|
1161
|
-
```
|
|
1162
|
-
|
|
1163
|
-
### List Models
|
|
1164
|
-
|
|
1165
|
-
```bash
|
|
1166
|
-
GET http://localhost:20128/v1/models
|
|
1167
|
-
Authorization: Bearer your-api-key
|
|
1168
|
-
|
|
1169
|
-
→ Returns all chat, embedding, and image models + combos in OpenAI format
|
|
1170
|
-
```
|
|
1171
|
-
|
|
1172
|
-
### Compatibility Endpoints
|
|
1173
|
-
|
|
1174
|
-
- `POST /v1/chat/completions`
|
|
1175
|
-
- `POST /v1/messages`
|
|
1176
|
-
- `POST /v1/responses`
|
|
1177
|
-
- `POST /v1/embeddings` (**NEW**)
|
|
1178
|
-
- `POST /v1/images/generations` (**NEW**)
|
|
1179
|
-
- `GET /v1/models` (chat + embedding + image)
|
|
1180
|
-
- `POST /v1/messages/count_tokens`
|
|
1181
|
-
- `GET /v1beta/models`
|
|
1182
|
-
- `POST /v1beta/models/{...path}` (Gemini-style `generateContent`)
|
|
1183
|
-
- `POST /v1/api/chat` (Ollama-style transform path)
|
|
1184
|
-
|
|
1185
|
-
### Cloud Validation Scripts
|
|
1186
|
-
|
|
1187
|
-
Added test scripts under `tester/security/`:
|
|
1188
|
-
|
|
1189
|
-
- `tester/security/test-docker-hardening.sh`
|
|
1190
|
-
- Builds Docker image and validates hardening checks (`/api/cloud/auth` auth guard, `REQUIRE_API_KEY`, secure auth cookie behavior).
|
|
1191
|
-
- `tester/security/test-cloud-openai-compatible.sh`
|
|
1192
|
-
- Sends a direct OpenAI-compatible request to cloud endpoint (`https://omniroute.dev/v1/chat/completions`) with provided model/key.
|
|
1193
|
-
- `tester/security/test-cloud-sync-and-call.sh`
|
|
1194
|
-
- End-to-end flow: create local key -> enable/sync cloud -> call cloud endpoint with retry.
|
|
1195
|
-
- Includes fallback check with `stream=true` to distinguish auth errors from non-streaming parse issues.
|
|
1196
|
-
- `tester/security/test-cli-runtime.sh`
|
|
1197
|
-
- Validates Docker CLI runtime profiles (`runner-base`, `runner-cli`, host mount mode, write policy, non-executable regression).
|
|
1198
|
-
|
|
1199
|
-
Security note for cloud test scripts:
|
|
1200
|
-
|
|
1201
|
-
- Never hardcode real API keys in scripts/commits.
|
|
1202
|
-
- Provide keys only via environment variables:
|
|
1203
|
-
- `API_KEY`, `CLOUD_API_KEY`, or `OPENAI_API_KEY` (supported by `test-cloud-openai-compatible.sh`)
|
|
1204
|
-
- Example:
|
|
1205
|
-
|
|
1206
|
-
```bash
|
|
1207
|
-
OPENAI_API_KEY="your-cloud-key" bash tester/security/test-cloud-openai-compatible.sh
|
|
1208
|
-
```
|
|
1209
|
-
|
|
1210
|
-
Expected behavior from recent validation:
|
|
1211
|
-
|
|
1212
|
-
- Local runtime (`http://127.0.0.1:20128/v1/chat/completions`): works with `stream=false` and `stream=true`.
|
|
1213
|
-
- Docker runtime (same API path exposed by container): hardening checks pass, cloud auth guard works, strict API key mode works when enabled.
|
|
1214
|
-
- Public cloud endpoint (`https://omniroute.dev/v1/chat/completions`):
|
|
1215
|
-
- `stream=true`: expected to succeed (SSE chunks returned).
|
|
1216
|
-
- `stream=false`: may fail with `500` + parse error (`Unexpected token 'd'`) when upstream returns SSE content to a non-streaming client path.
|
|
1217
|
-
|
|
1218
|
-
### Dashboard and Management API
|
|
1219
|
-
|
|
1220
|
-
- Auth/settings: `/api/auth/login`, `/api/auth/logout`, `/api/settings`, `/api/settings/require-login`
|
|
1221
|
-
- Provider management: `/api/providers`, `/api/providers/[id]`, `/api/providers/[id]/test`, `/api/providers/[id]/models`, `/api/providers/validate`, `/api/provider-nodes*`
|
|
1222
|
-
- OAuth flows: `/api/oauth/[provider]/[action]` (+ provider-specific imports like Cursor/Kiro)
|
|
1223
|
-
- Routing config: `/api/models/alias`, `/api/combos*`, `/api/keys*`, `/api/pricing`
|
|
1224
|
-
- Usage/logs: `/api/usage/history`, `/api/usage/logs`, `/api/usage/request-logs`, `/api/usage/[connectionId]`
|
|
1225
|
-
- Cloud sync: `/api/sync/cloud`, `/api/sync/initialize`, `/api/cloud/*`
|
|
1226
|
-
- IP filter: `/api/settings/ip-filter` (GET/PUT) — Allowlist/blocklist management
|
|
1227
|
-
- Thinking budget: `/api/settings/thinking-budget` (GET/PUT) — Reasoning token budget config
|
|
1228
|
-
- System prompt: `/api/settings/system-prompt` (GET/PUT) — Global system prompt injection
|
|
1229
|
-
- Sessions: `/api/sessions` (GET) — Active session tracking
|
|
1230
|
-
- Rate limits: `/api/rate-limits` (GET) — Per-account rate limit status
|
|
1231
|
-
- CLI helpers: `/api/cli-tools/claude-settings`, `/api/cli-tools/codex-settings`, `/api/cli-tools/droid-settings`, `/api/cli-tools/openclaw-settings`
|
|
1232
|
-
- Generic runtime status: `/api/cli-tools/runtime/[toolId]` (covers `claude`, `codex`, `droid`, `openclaw`, `cursor`, `cline`, `roo`, `continue`)
|
|
1233
|
-
- CLI `GET` responses expose runtime fields: `installed`, `runnable`, `command`, `commandPath`, `runtimeMode`, `reason`
|
|
1234
|
-
|
|
1235
|
-
### Authentication Behavior
|
|
1236
|
-
|
|
1237
|
-
- Dashboard routes (`/dashboard/*`) use `auth_token` cookie protection.
|
|
1238
|
-
- Login uses saved password hash when present; otherwise it falls back to `INITIAL_PASSWORD`.
|
|
1239
|
-
- `requireLogin` can be toggled via `/api/settings/require-login`.
|
|
1240
|
-
|
|
1241
|
-
### Request Processing (High Level)
|
|
1242
|
-
|
|
1243
|
-
1. Client sends request to `/v1/*`.
|
|
1244
|
-
2. Route handler calls `handleChat` (`src/sse/handlers/chat.js`), `handleEmbedding`, or `handleImageGeneration`.
|
|
1245
|
-
3. Model is resolved (direct provider/model or alias/combo resolution).
|
|
1246
|
-
4. Credentials are selected from local DB with account availability filtering.
|
|
1247
|
-
5. For chat: `handleChatCore` detects format and translates request. For embeddings/images: handler proxies directly to upstream.
|
|
1248
|
-
6. Provider executor sends upstream request.
|
|
1249
|
-
7. Stream is translated back to client format when needed (chat). Embeddings and images return JSON.
|
|
1250
|
-
8. Usage/logging is recorded (`src/lib/usageDb.js`).
|
|
1251
|
-
9. Fallback applies on provider/account/model errors according to combo rules.
|
|
1252
|
-
|
|
1253
|
-
Full architecture reference: [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md)
|
|
155
|
+
| Document | Description |
|
|
156
|
+
| ------------------------------------------ | ---------------------------------------------- |
|
|
157
|
+
| [User Guide](docs/USER_GUIDE.md) | Providers, combos, CLI integration, deployment |
|
|
158
|
+
| [API Reference](docs/API_REFERENCE.md) | All endpoints with examples |
|
|
159
|
+
| [Troubleshooting](docs/TROUBLESHOOTING.md) | Common problems and solutions |
|
|
160
|
+
| [Architecture](docs/ARCHITECTURE.md) | System architecture and internals |
|
|
161
|
+
| [Contributing](CONTRIBUTING.md) | Development setup and guidelines |
|
|
162
|
+
| [OpenAPI Spec](docs/openapi.yaml) | OpenAPI 3.0 specification |
|
|
1254
163
|
|
|
1255
164
|
---
|
|
1256
165
|
|
|
@@ -1264,16 +173,8 @@ Full architecture reference: [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md)
|
|
|
1264
173
|
|
|
1265
174
|
## 👥 Contributors
|
|
1266
175
|
|
|
1267
|
-
Thanks to all contributors who helped make OmniRoute better!
|
|
1268
|
-
|
|
1269
176
|
[](https://github.com/diegosouzapw/OmniRoute/graphs/contributors)
|
|
1270
177
|
|
|
1271
|
-
---
|
|
1272
|
-
|
|
1273
|
-
## 📊 Star Chart
|
|
1274
|
-
|
|
1275
|
-
[](https://starchart.cc/diegosouzapw/OmniRoute)
|
|
1276
|
-
|
|
1277
178
|
### How to Contribute
|
|
1278
179
|
|
|
1279
180
|
1. Fork the repository
|
|
@@ -1286,15 +187,11 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for detailed guidelines.
|
|
|
1286
187
|
|
|
1287
188
|
### Releasing a New Version
|
|
1288
189
|
|
|
1289
|
-
When a new GitHub Release is created (e.g. `v0.2.0`), the package is **automatically published to npm** via GitHub Actions:
|
|
1290
|
-
|
|
1291
190
|
```bash
|
|
1292
191
|
# Create a release — npm publish happens automatically
|
|
1293
|
-
gh release create v0.
|
|
192
|
+
gh release create v0.4.0 --title "v0.4.0" --generate-notes
|
|
1294
193
|
```
|
|
1295
194
|
|
|
1296
|
-
The workflow syncs the version from the release tag, builds the standalone app, and publishes to npm.
|
|
1297
|
-
|
|
1298
195
|
---
|
|
1299
196
|
|
|
1300
197
|
## 🙏 Acknowledgments
|