switchboard-router 0.9.10 → 0.9.11
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/app/.next/static/Gpu8irTBATTeQnftVm3kL/_buildManifest.js +1 -0
- package/app/.next/static/chunks/1321-cdb7f44691303560.js +1 -0
- package/app/.next/static/chunks/1330-a43190104575ffe5.js +7 -0
- package/app/.next/static/chunks/3378-277dccfa153c2c15.js +73 -0
- package/app/.next/static/chunks/4707-8ea6ba647d0a40c9.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/agent-library/page-fa24110e606e19b6.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/basic-chat/page-7b00fb83303d1d11.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/[toolId]/page-5743f3aa5bc106d4.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/page-3f393136e502e1c0.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/combos/page-aaae06cada500532.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/combos/routing/page-ef491ec5a2ccecfb.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/console-log/page-eefda4a8f32e649e.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/endpoint/page-51f788f35bc5325f.js +16 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page-e6fc3a5c25ce1247.js +59 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/page-078eb5d8bfc3f4d1.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/media-providers/combo/[id]/page-7dfde081613f35f3.js +4 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/media-providers/page-1d63cfd88010b65f.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/media-providers/web/page-281c93713fd1e960.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/mitm/page-14c65f14d73bdfa7.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/page-88fc3c530d1ce735.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/profile/page-0e0047609d5634c9.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-cb9292ca42b61d7d.js +10 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/new/page-604dae851964c441.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/page-e1c9f4ce8466e3ad.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/pxpipe/page-6ca234b58c5e9feb.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/quota/page-40db6db68022a0cc.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/skills/[id]/page-ea262b6192d5a92c.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/skills/page-36d107b083ad3a43.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/token-saver/page-14e5599c720c645b.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/translator/page-687e09f904b04cea.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/usage/page-195bdcbea10136e1.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/layout-6dfa9d7deb27d461.js +1 -0
- package/app/.next/static/chunks/app/_global-error/page-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/agent-library/catalog/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/agent-library/doctor/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/agent-library/export/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/agent-library/mcp/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/agent-library/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/agent-library/skills/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/agent-library/sync/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/agent-library/updates/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/auth/status/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/aider-settings/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/all-statuses/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/claude-full-catalog/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/claude-picker-labels/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/claude-settings/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/cline-settings/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/codex-settings/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/cowork-settings/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/deepseek-tui-settings/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/droid-settings/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/gemini-cli-settings/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/grok-settings/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/hermes-settings/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/jcode-settings/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/kilo-settings/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/opencode-settings/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/pi-settings/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/cli-tools/picker-labels/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/combos/[id]/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/combos/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/headroom/extras/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/headroom/proxy/[...path]/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/headroom/restart/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/headroom/start/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/headroom/status/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/headroom/stop/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/health/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/keys/[id]/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/keys/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/locale/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/mcp/[plugin]/message/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/mcp/[plugin]/sse/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/media-providers/tts/deepgram/voices/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/media-providers/tts/inworld/voices/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/media-providers/tts/minimax/voices/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/media-providers/tts/voices/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/mgmt/v1/combos/[id]/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/mgmt/v1/combos/[id]/strategy/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/mgmt/v1/combos/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/mgmt/v1/health/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/mgmt/v1/metrics/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/mgmt/v1/providers/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/mgmt/v1/routing/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/mgmt/v1/usage/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/mgmt/v1/version/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/models/alias/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/models/availability/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/models/custom/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/models/disabled/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/models/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/models/test/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/[provider]/[action]/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/codex/bulk-import/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/codex/import-token/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/cursor/auto-import/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/cursor/import/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/gitlab/pat/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/iflow/cookie/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/kiro/api-key/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/kiro/auto-import/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/kiro/import/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/kiro/import-cli-proxy/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/kiro/social-authorize/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/oauth/kiro/social-exchange/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/pricing/defaults/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/pricing/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/provider-nodes/[id]/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/provider-nodes/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/provider-nodes/validate/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/providers/[id]/model-probes/batch/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/providers/[id]/model-probes/cache/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/providers/[id]/model-probes/prepare/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/providers/[id]/model-probes/remove-unavailable/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/providers/[id]/model-probes/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/providers/[id]/model-probes/verify/cancel/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/providers/[id]/model-probes/verify/start/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/providers/[id]/model-probes/verify/status/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/providers/[id]/models/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/providers/[id]/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/providers/[id]/test/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/providers/[id]/test-models/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/providers/client/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/providers/kilo/free-models/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/providers/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/providers/suggested-models/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/providers/test-batch/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/providers/validate/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/pxpipe/health/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/pxpipe/install/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/pxpipe/logs/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/pxpipe/restart/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/pxpipe/start/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/pxpipe/stats/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/pxpipe/status/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/pxpipe/stop/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/routing/feedback/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/routing/insights/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/routing/learn/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/routing/stats/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/routing/versions/promote/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/routing/versions/rollback/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/settings/database/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/settings/proxy-test/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/settings/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/shutdown/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/skills/[id]/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/tags/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/token-saver/vault-stats/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/translator/console-logs/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/translator/console-logs/stream/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/translator/load/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/translator/save/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/translator/send/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/translator/translate/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/usage/[connectionId]/codex-reset-credits/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/usage/[connectionId]/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/usage/chart/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/usage/history/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/usage/logs/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/usage/providers/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/usage/request-details/[id]/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/usage/request-details/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/usage/request-logs/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/usage/stats/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/usage/stream/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/v1/api/chat/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/v1/audio/speech/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/v1/audio/transcriptions/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/v1/audio/voices/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/v1/chat/completions/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/v1/embeddings/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/v1/images/generations/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/v1/messages/count_tokens/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/v1/messages/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/v1/models/[kind]/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/v1/models/info/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/v1/models/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/v1/responses/compact/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/v1/responses/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/v1/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/v1/search/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/v1/videos/[id]/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/v1/videos/edits/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/v1/videos/extensions/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/v1/videos/generations/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/v1/web/fetch/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/v1beta/models/[...path]/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/v1beta/models/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/version/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/version/shutdown/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/api/version/update/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/landing/page-b2d84fd7a580e623.js +1 -0
- package/app/.next/static/chunks/app/login/page-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/manifest.webmanifest/route-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/app/page-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/next/dist/client/components/builtin/app-error-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/next/dist/client/components/builtin/forbidden-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/next/dist/client/components/builtin/not-found-d23122546cc60c2d.js +1 -0
- package/app/.next/static/chunks/next/dist/client/components/builtin/unauthorized-d23122546cc60c2d.js +1 -0
- package/app/.next/static/css/ec805e65297c40c7.css +1 -0
- package/app/.next/static/media/catalog.fb7b1b70.json +1722 -0
- package/app/.next-cli-build/BUILD_ID +1 -1
- package/app/.next-cli-build/app-path-routes-manifest.json +17 -15
- package/app/.next-cli-build/build-manifest.json +2 -2
- package/app/.next-cli-build/prerender-manifest.json +3 -3
- package/app/.next-cli-build/routes-manifest.json +14 -0
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/agent-library/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/agent-library/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/agent-library/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/routing/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/routing/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/routing/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js +3 -3
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js +9 -9
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js +3 -3
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js +2 -2
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/[id]/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/[id]/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/_global-error/page.js +2 -2
- package/app/.next-cli-build/server/app/_global-error/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/_global-error.html +1 -1
- package/app/.next-cli-build/server/app/_global-error.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_not-found/page.js +1 -1
- package/app/.next-cli-build/server/app/_not-found/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/_not-found.html +1 -1
- package/app/.next-cli-build/server/app/_not-found.rsc +4 -4
- package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/api/agent-library/catalog/route.js +1 -1
- package/app/.next-cli-build/server/app/api/agent-library/catalog/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/agent-library/doctor/route.js +1 -1
- package/app/.next-cli-build/server/app/api/agent-library/doctor/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/agent-library/export/route.js +1 -1
- package/app/.next-cli-build/server/app/api/agent-library/export/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/agent-library/mcp/route.js +1 -1
- package/app/.next-cli-build/server/app/api/agent-library/mcp/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/agent-library/route.js +1 -1
- package/app/.next-cli-build/server/app/api/agent-library/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/agent-library/skills/route.js +1 -1
- package/app/.next-cli-build/server/app/api/agent-library/skills/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/agent-library/sync/route.js +1 -1
- package/app/.next-cli-build/server/app/api/agent-library/sync/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/agent-library/updates/route.js +1 -1
- package/app/.next-cli-build/server/app/api/agent-library/updates/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/status/route.js +1 -1
- package/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/aider-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/aider-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js +5 -5
- package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/claude-full-catalog/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/claude-full-catalog/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/claude-picker-labels/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/claude-picker-labels/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/gemini-cli-settings/route.js +3 -3
- package/app/.next-cli-build/server/app/api/cli-tools/gemini-cli-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/grok-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/grok-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js +3 -3
- package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js +2 -2
- package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/pi-settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/pi-settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/picker-labels/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/picker-labels/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/combos/[id]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/combos/route.js +1 -1
- package/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/headroom/extras/route.js +1 -1
- package/app/.next-cli-build/server/app/api/headroom/extras/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/headroom/proxy/[...path]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/headroom/proxy/[...path]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/headroom/restart/route.js +1 -1
- package/app/.next-cli-build/server/app/api/headroom/restart/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/headroom/start/route.js +1 -1
- package/app/.next-cli-build/server/app/api/headroom/start/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/headroom/status/route.js +1 -1
- package/app/.next-cli-build/server/app/api/headroom/status/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/headroom/stop/route.js +1 -1
- package/app/.next-cli-build/server/app/api/headroom/stop/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/health/route.js +1 -1
- package/app/.next-cli-build/server/app/api/health/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/keys/[id]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/keys/route.js +1 -1
- package/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/locale/route.js +1 -1
- package/app/.next-cli-build/server/app/api/locale/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js +2 -2
- package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js +1 -1
- package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js +1 -1
- package/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/mgmt/v1/combos/[id]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/mgmt/v1/combos/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/mgmt/v1/combos/[id]/strategy/route.js +1 -1
- package/app/.next-cli-build/server/app/api/mgmt/v1/combos/[id]/strategy/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/mgmt/v1/combos/route.js +1 -1
- package/app/.next-cli-build/server/app/api/mgmt/v1/combos/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/mgmt/v1/health/route.js +1 -1
- package/app/.next-cli-build/server/app/api/mgmt/v1/health/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/mgmt/v1/metrics/route.js +1 -1
- package/app/.next-cli-build/server/app/api/mgmt/v1/metrics/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/mgmt/v1/providers/route.js +1 -1
- package/app/.next-cli-build/server/app/api/mgmt/v1/providers/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/mgmt/v1/routing/route.js +1 -1
- package/app/.next-cli-build/server/app/api/mgmt/v1/routing/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/mgmt/v1/usage/route.js +1 -1
- package/app/.next-cli-build/server/app/api/mgmt/v1/usage/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/mgmt/v1/version/route.js +1 -1
- package/app/.next-cli-build/server/app/api/mgmt/v1/version/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/alias/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/availability/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/custom/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/disabled/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
- package/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/codex/bulk-import/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/codex/bulk-import/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js +2 -2
- package/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/api-key/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/api-key/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/import-cli-proxy/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/import-cli-proxy/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js +1 -1
- package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/pricing/defaults/route.js +1 -0
- package/app/.next-cli-build/server/app/api/pricing/defaults/route.js.nft.json +1 -0
- package/app/.next-cli-build/server/app/api/pricing/defaults/route_client-reference-manifest.js +1 -0
- package/app/.next-cli-build/server/app/api/pricing/route.js +1 -1
- package/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/route.js +1 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js +1 -1
- package/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/model-probes/batch/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/model-probes/batch/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/model-probes/cache/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/model-probes/cache/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/model-probes/prepare/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/model-probes/prepare/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/model-probes/remove-unavailable/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/model-probes/remove-unavailable/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/model-probes/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/model-probes/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/model-probes/verify/cancel/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/model-probes/verify/cancel/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/model-probes/verify/start/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/model-probes/verify/start/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/model-probes/verify/status/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/model-probes/verify/status/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/client/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/suggested-models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/suggested-models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/test-batch/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
- package/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/pxpipe/health/route.js +2 -2
- package/app/.next-cli-build/server/app/api/pxpipe/health/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/pxpipe/install/route.js +2 -2
- package/app/.next-cli-build/server/app/api/pxpipe/install/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/pxpipe/logs/route.js +2 -2
- package/app/.next-cli-build/server/app/api/pxpipe/logs/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/pxpipe/restart/route.js +2 -2
- package/app/.next-cli-build/server/app/api/pxpipe/restart/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/pxpipe/start/route.js +2 -2
- package/app/.next-cli-build/server/app/api/pxpipe/start/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/pxpipe/stats/route.js +2 -2
- package/app/.next-cli-build/server/app/api/pxpipe/stats/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/pxpipe/status/route.js +2 -2
- package/app/.next-cli-build/server/app/api/pxpipe/status/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/pxpipe/stop/route.js +1 -1
- package/app/.next-cli-build/server/app/api/pxpipe/stop/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/routing/feedback/route.js +1 -1
- package/app/.next-cli-build/server/app/api/routing/feedback/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/routing/insights/route.js +1 -1
- package/app/.next-cli-build/server/app/api/routing/insights/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/routing/learn/route.js +1 -1
- package/app/.next-cli-build/server/app/api/routing/learn/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/routing/stats/route.js +1 -1
- package/app/.next-cli-build/server/app/api/routing/stats/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/routing/versions/promote/route.js +1 -1
- package/app/.next-cli-build/server/app/api/routing/versions/promote/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/routing/versions/rollback/route.js +1 -1
- package/app/.next-cli-build/server/app/api/routing/versions/rollback/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/settings/database/route.js +1 -1
- package/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/settings/proxy-test/route.js +1 -1
- package/app/.next-cli-build/server/app/api/settings/proxy-test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/settings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/shutdown/route.js +1 -1
- package/app/.next-cli-build/server/app/api/shutdown/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/skills/[id]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/skills/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tags/route.js +1 -1
- package/app/.next-cli-build/server/app/api/tags/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/token-saver/vault-stats/route.js +1 -1
- package/app/.next-cli-build/server/app/api/token-saver/vault-stats/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
- package/app/.next-cli-build/server/app/api/translator/console-logs/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +2 -2
- package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/translator/load/route.js +1 -1
- package/app/.next-cli-build/server/app/api/translator/load/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/translator/save/route.js +1 -1
- package/app/.next-cli-build/server/app/api/translator/save/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/translator/send/route.js +1 -1
- package/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/translator/translate/route.js +1 -1
- package/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/[connectionId]/codex-reset-credits/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/[connectionId]/codex-reset-credits/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/chart/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/history/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/logs/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/logs/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/providers/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/request-details/[id]/route.js +1 -0
- package/app/.next-cli-build/server/app/api/usage/request-details/[id]/route.js.nft.json +1 -0
- package/app/.next-cli-build/server/app/api/usage/request-details/[id]/route_client-reference-manifest.js +1 -0
- package/app/.next-cli-build/server/app/api/usage/request-details/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/request-logs/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/stats/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/stream/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/api/chat/route.js +2 -1
- package/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/voices/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/audio/voices/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/embeddings/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/images/generations/route.js +2 -2
- package/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/messages/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/info/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/info/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/responses/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/search/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/videos/[id]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/videos/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/videos/edits/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/videos/edits/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/videos/extensions/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/videos/extensions/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/videos/generations/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/videos/generations/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1beta/models/route.js +1 -1
- package/app/.next-cli-build/server/app/api/v1beta/models/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/version/route.js +1 -1
- package/app/.next-cli-build/server/app/api/version/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
- package/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
- package/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/callback/page.js +1 -1
- package/app/.next-cli-build/server/app/callback/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/callback.html +1 -1
- package/app/.next-cli-build/server/app/callback.rsc +4 -4
- package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/favicon.ico/route.js +1 -1
- package/app/.next-cli-build/server/app/favicon.ico/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/index.html +1 -1
- package/app/.next-cli-build/server/app/index.rsc +4 -4
- package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/landing/page.js +1 -1
- package/app/.next-cli-build/server/app/landing/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/landing.html +1 -1
- package/app/.next-cli-build/server/app/landing.rsc +5 -5
- package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/login/page.js +1 -1
- package/app/.next-cli-build/server/app/login/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/login.html +1 -1
- package/app/.next-cli-build/server/app/login.rsc +4 -4
- package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +4 -4
- package/app/.next-cli-build/server/app/manifest.webmanifest/route.js +2 -2
- package/app/.next-cli-build/server/app/manifest.webmanifest/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/page.js +1 -1
- package/app/.next-cli-build/server/app/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app-paths-manifest.json +17 -15
- package/app/.next-cli-build/server/chunks/1158.js +1 -1
- package/app/.next-cli-build/server/chunks/1294.js +3 -3
- package/app/.next-cli-build/server/chunks/1351.js +1 -1
- package/app/.next-cli-build/server/chunks/1792.js +2 -2
- package/app/.next-cli-build/server/chunks/2524.js +1 -1
- package/app/.next-cli-build/server/chunks/3423.js +1 -1
- package/app/.next-cli-build/server/chunks/3593.js +1 -1
- package/app/.next-cli-build/server/chunks/369.js +9 -9
- package/app/.next-cli-build/server/chunks/3787.js +1 -1
- package/app/.next-cli-build/server/chunks/4176.js +1 -1
- package/app/.next-cli-build/server/chunks/4330.js +3 -3
- package/app/.next-cli-build/server/chunks/4646.js +1 -1
- package/app/.next-cli-build/server/chunks/4739.js +1 -1
- package/app/.next-cli-build/server/chunks/4780.js +1 -1
- package/app/.next-cli-build/server/chunks/4803.js +1 -1
- package/app/.next-cli-build/server/chunks/507.js +1 -1
- package/app/.next-cli-build/server/chunks/5139.js +1 -0
- package/app/.next-cli-build/server/chunks/519.js +1 -1
- package/app/.next-cli-build/server/chunks/5258.js +1 -1
- package/app/.next-cli-build/server/chunks/5565.js +73 -0
- package/app/.next-cli-build/server/chunks/5717.js +4 -4
- package/app/.next-cli-build/server/chunks/5920.js +2 -2
- package/app/.next-cli-build/server/chunks/6194.js +1 -1
- package/app/.next-cli-build/server/chunks/6252.js +1 -1
- package/app/.next-cli-build/server/chunks/6406.js +3 -1
- package/app/.next-cli-build/server/chunks/646.js +15 -15
- package/app/.next-cli-build/server/chunks/698.js +1 -1
- package/app/.next-cli-build/server/chunks/7454.js +1 -1
- package/app/.next-cli-build/server/chunks/7662.js +1 -1
- package/app/.next-cli-build/server/chunks/7757.js +1 -1
- package/app/.next-cli-build/server/chunks/7774.js +3 -3
- package/app/.next-cli-build/server/chunks/7880.js +2 -2
- package/app/.next-cli-build/server/chunks/7965.js +1 -1
- package/app/.next-cli-build/server/chunks/8027.js +2 -2
- package/app/.next-cli-build/server/chunks/8062.js +1 -1
- package/app/.next-cli-build/server/chunks/8400.js +8 -6
- package/app/.next-cli-build/server/chunks/8469.js +1 -1
- package/app/.next-cli-build/server/chunks/8520.js +1 -1
- package/app/.next-cli-build/server/chunks/869.js +1 -1
- package/app/.next-cli-build/server/chunks/8789.js +1 -1
- package/app/.next-cli-build/server/chunks/8998.js +46 -31
- package/app/.next-cli-build/server/chunks/9261.js +29 -18
- package/app/.next-cli-build/server/chunks/9264.js +1 -1
- package/app/.next-cli-build/server/chunks/static/media/catalog.fb7b1b70.json +1722 -0
- package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
- package/app/.next-cli-build/server/middleware.js +5 -5
- package/app/.next-cli-build/server/pages/404.html +1 -1
- package/app/.next-cli-build/server/pages/500.html +1 -1
- package/app/.next-cli-build/server/server-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/server-reference-manifest.json +1 -1
- package/app/.next-cli-build/static/Gpu8irTBATTeQnftVm3kL/_buildManifest.js +1 -0
- package/app/.next-cli-build/static/chunks/1321-cdb7f44691303560.js +1 -0
- package/app/.next-cli-build/static/chunks/1330-a43190104575ffe5.js +7 -0
- package/app/.next-cli-build/static/chunks/3378-277dccfa153c2c15.js +73 -0
- package/app/.next-cli-build/static/chunks/4707-8ea6ba647d0a40c9.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/agent-library/page-fa24110e606e19b6.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/basic-chat/page-7b00fb83303d1d11.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/cli-tools/[toolId]/page-5743f3aa5bc106d4.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/cli-tools/page-3f393136e502e1c0.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/combos/page-aaae06cada500532.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/combos/routing/page-ef491ec5a2ccecfb.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/console-log/page-eefda4a8f32e649e.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/endpoint/page-51f788f35bc5325f.js +16 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page-e6fc3a5c25ce1247.js +59 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/page-078eb5d8bfc3f4d1.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/media-providers/combo/[id]/page-7dfde081613f35f3.js +4 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/media-providers/page-1d63cfd88010b65f.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/media-providers/web/page-281c93713fd1e960.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/mitm/page-14c65f14d73bdfa7.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/page-88fc3c530d1ce735.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/profile/page-0e0047609d5634c9.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-cb9292ca42b61d7d.js +10 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/new/page-604dae851964c441.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/page-e1c9f4ce8466e3ad.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/pxpipe/page-6ca234b58c5e9feb.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/quota/page-40db6db68022a0cc.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/skills/[id]/page-ea262b6192d5a92c.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/skills/page-36d107b083ad3a43.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/token-saver/page-14e5599c720c645b.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/translator/page-687e09f904b04cea.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/usage/page-195bdcbea10136e1.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/layout-6dfa9d7deb27d461.js +1 -0
- package/app/.next-cli-build/static/chunks/app/_global-error/page-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/agent-library/catalog/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/agent-library/doctor/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/agent-library/export/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/agent-library/mcp/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/agent-library/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/agent-library/skills/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/agent-library/sync/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/agent-library/updates/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/auth/status/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/aider-settings/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/all-statuses/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/claude-full-catalog/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/claude-picker-labels/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/claude-settings/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/cline-settings/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/codex-settings/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-settings/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/deepseek-tui-settings/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/droid-settings/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/gemini-cli-settings/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/grok-settings/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/hermes-settings/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/jcode-settings/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/kilo-settings/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/openclaw-settings/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/opencode-settings/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/pi-settings/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/picker-labels/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/combos/[id]/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/combos/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/headroom/extras/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/headroom/proxy/[...path]/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/headroom/restart/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/headroom/start/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/headroom/status/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/headroom/stop/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/health/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/keys/[id]/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/keys/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/locale/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/mcp/[plugin]/message/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/mcp/[plugin]/sse/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/deepgram/voices/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/inworld/voices/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/minimax/voices/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/voices/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/mgmt/v1/combos/[id]/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/mgmt/v1/combos/[id]/strategy/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/mgmt/v1/combos/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/mgmt/v1/health/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/mgmt/v1/metrics/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/mgmt/v1/providers/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/mgmt/v1/routing/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/mgmt/v1/usage/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/mgmt/v1/version/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/models/alias/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/models/availability/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/models/custom/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/models/disabled/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/models/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/models/test/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/[provider]/[action]/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/codex/bulk-import/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/codex/import-token/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/cursor/auto-import/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/cursor/import/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/gitlab/pat/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/iflow/cookie/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/api-key/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/auto-import/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/import/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/import-cli-proxy/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/social-authorize/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/social-exchange/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/pricing/defaults/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/pricing/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/provider-nodes/[id]/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/provider-nodes/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/provider-nodes/validate/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/model-probes/batch/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/model-probes/cache/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/model-probes/prepare/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/model-probes/remove-unavailable/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/model-probes/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/model-probes/verify/cancel/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/model-probes/verify/start/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/model-probes/verify/status/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/models/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/test/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/test-models/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/client/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/kilo/free-models/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/suggested-models/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/test-batch/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/providers/validate/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/pxpipe/health/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/pxpipe/install/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/pxpipe/logs/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/pxpipe/restart/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/pxpipe/start/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/pxpipe/stats/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/pxpipe/status/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/pxpipe/stop/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/routing/feedback/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/routing/insights/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/routing/learn/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/routing/stats/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/routing/versions/promote/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/routing/versions/rollback/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/settings/database/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/settings/proxy-test/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/settings/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/shutdown/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/skills/[id]/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/tags/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/token-saver/vault-stats/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/translator/console-logs/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/translator/console-logs/stream/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/translator/load/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/translator/save/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/translator/send/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/translator/translate/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/[connectionId]/codex-reset-credits/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/[connectionId]/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/chart/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/history/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/logs/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/providers/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/request-details/[id]/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/request-details/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/request-logs/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/stats/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/usage/stream/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/api/chat/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/audio/speech/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/audio/transcriptions/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/audio/voices/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/chat/completions/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/embeddings/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/images/generations/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/messages/count_tokens/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/messages/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/models/[kind]/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/models/info/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/models/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/responses/compact/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/responses/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/search/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/videos/[id]/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/videos/edits/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/videos/extensions/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/videos/generations/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1/web/fetch/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1beta/models/[...path]/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/v1beta/models/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/version/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/version/shutdown/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/api/version/update/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/landing/page-b2d84fd7a580e623.js +1 -0
- package/app/.next-cli-build/static/chunks/app/login/page-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/manifest.webmanifest/route-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/page-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/app-error-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/forbidden-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/not-found-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/unauthorized-d23122546cc60c2d.js +1 -0
- package/app/.next-cli-build/static/css/ec805e65297c40c7.css +1 -0
- package/app/.next-cli-build/static/media/catalog.fb7b1b70.json +1722 -0
- package/app/open-sse/identity/tls/bin/darwin/arm64/switchboard-claude-tls +0 -0
- package/app/open-sse/identity/tls/bin/darwin/x64/switchboard-claude-tls +0 -0
- package/app/open-sse/identity/tls/bin/linux/arm64/switchboard-claude-tls +0 -0
- package/app/open-sse/identity/tls/bin/linux/x64/switchboard-claude-tls +0 -0
- package/app/open-sse/identity/tls/bin/win32/arm64/switchboard-claude-tls.exe +0 -0
- package/app/open-sse/identity/tls/bin/win32/x64/switchboard-claude-tls.exe +0 -0
- package/app/open-sse/providers/generated/catalog.json +143 -131
- package/app/package.json +1 -1
- package/app/src/lib/db/adapters/betterSqliteAdapter.js +2 -2
- package/app/src/lib/db/adapters/sqljsAdapter.js +5 -4
- package/app/src/mitm/server.js +34 -34
- package/cli.js +5 -3
- package/package.json +1 -1
- package/src/cli/commands/xaiVideo.js +31 -8
- package/src/cli/interfaceMenu.js +12 -1
- package/src/cli/tray/trayWin.js +23 -3
- package/app/.next/static/chunks/1321-a73f95036c368bd4.js +0 -1
- package/app/.next/static/chunks/1330-846d6a9e1497295e.js +0 -7
- package/app/.next/static/chunks/3531-eb5d385c954b3765.js +0 -68
- package/app/.next/static/chunks/4707-1ec0b2edbb07f455.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/agent-library/page-65e302b698beee56.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/basic-chat/page-0e1d54e59ac767a1.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/[toolId]/page-af0d85c06970853b.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/page-2cfc2352bc42d9b8.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/combos/page-62cd36ee99eaa630.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/combos/routing/page-0b02e9a2f1cc6e43.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/console-log/page-ded6ec41e583b3b3.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/endpoint/page-337881fe6c0cc77a.js +0 -16
- package/app/.next/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page-efb20dd903e0dc94.js +0 -59
- package/app/.next/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/page-d1654fba27199492.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/media-providers/combo/[id]/page-03290d1edb08623a.js +0 -4
- package/app/.next/static/chunks/app/(dashboard)/dashboard/media-providers/page-919f3eec8dfc9b6e.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/media-providers/web/page-db19da41661d630b.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/mitm/page-309b09a142a2995d.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/page-9bcd63bfeeac87c6.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/profile/page-ae6cf9ce7ac84eb7.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-ca71683d9d850162.js +0 -10
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/new/page-413b59dd764a1563.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/page-31212a5a4a9825b0.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/pxpipe/page-c5c37fbce431369b.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/quota/page-798a65a8c4d2708a.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/skills/[id]/page-aba614778bfe50ad.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/skills/page-b582299fa61407d9.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/token-saver/page-1711a424a8dcad0e.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/translator/page-0c7b901caf8614b9.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/usage/page-b085086e6c5b9387.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/layout-59baac68c7aedd25.js +0 -1
- package/app/.next/static/chunks/app/_global-error/page-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/agent-library/catalog/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/agent-library/doctor/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/agent-library/export/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/agent-library/mcp/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/agent-library/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/agent-library/skills/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/agent-library/sync/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/agent-library/updates/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/auth/status/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/aider-settings/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/all-statuses/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/claude-full-catalog/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/claude-picker-labels/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/claude-settings/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/cline-settings/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/codex-settings/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/cowork-settings/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/deepseek-tui-settings/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/droid-settings/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/gemini-cli-settings/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/grok-settings/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/hermes-settings/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/jcode-settings/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/kilo-settings/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/opencode-settings/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/pi-settings/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/cli-tools/picker-labels/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/combos/[id]/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/combos/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/headroom/extras/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/headroom/proxy/[...path]/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/headroom/restart/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/headroom/start/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/headroom/status/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/headroom/stop/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/health/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/keys/[id]/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/keys/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/locale/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/mcp/[plugin]/message/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/mcp/[plugin]/sse/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/media-providers/tts/deepgram/voices/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/media-providers/tts/inworld/voices/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/media-providers/tts/minimax/voices/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/media-providers/tts/voices/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/mgmt/v1/combos/[id]/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/mgmt/v1/combos/[id]/strategy/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/mgmt/v1/combos/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/mgmt/v1/health/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/mgmt/v1/metrics/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/mgmt/v1/providers/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/mgmt/v1/routing/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/mgmt/v1/usage/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/mgmt/v1/version/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/models/alias/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/models/availability/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/models/custom/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/models/disabled/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/models/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/models/test/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/[provider]/[action]/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/codex/bulk-import/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/codex/import-token/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/cursor/auto-import/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/cursor/import/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/gitlab/pat/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/iflow/cookie/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/kiro/api-key/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/kiro/auto-import/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/kiro/import/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/kiro/import-cli-proxy/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/kiro/social-authorize/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/oauth/kiro/social-exchange/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/pricing/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/provider-nodes/[id]/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/provider-nodes/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/provider-nodes/validate/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/model-probes/batch/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/model-probes/cache/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/model-probes/prepare/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/model-probes/remove-unavailable/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/model-probes/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/model-probes/verify/cancel/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/model-probes/verify/start/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/model-probes/verify/status/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/models/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/test/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/providers/[id]/test-models/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/providers/client/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/providers/kilo/free-models/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/providers/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/providers/suggested-models/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/providers/test-batch/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/providers/validate/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/pxpipe/health/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/pxpipe/install/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/pxpipe/logs/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/pxpipe/restart/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/pxpipe/start/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/pxpipe/stats/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/pxpipe/status/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/pxpipe/stop/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/routing/feedback/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/routing/insights/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/routing/learn/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/routing/stats/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/routing/versions/promote/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/routing/versions/rollback/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/settings/database/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/settings/proxy-test/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/settings/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/shutdown/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/skills/[id]/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/tags/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/token-saver/vault-stats/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/translator/console-logs/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/translator/console-logs/stream/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/translator/load/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/translator/save/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/translator/send/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/translator/translate/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/usage/[connectionId]/codex-reset-credits/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/usage/[connectionId]/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/usage/chart/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/usage/history/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/usage/logs/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/usage/providers/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/usage/request-details/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/usage/request-logs/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/usage/stats/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/usage/stream/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/v1/api/chat/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/v1/audio/speech/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/v1/audio/transcriptions/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/v1/audio/voices/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/v1/chat/completions/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/v1/embeddings/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/v1/images/generations/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/v1/messages/count_tokens/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/v1/messages/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/v1/models/[kind]/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/v1/models/info/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/v1/models/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/v1/responses/compact/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/v1/responses/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/v1/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/v1/search/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/v1/videos/[id]/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/v1/videos/edits/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/v1/videos/extensions/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/v1/videos/generations/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/v1/web/fetch/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/v1beta/models/[...path]/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/v1beta/models/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/version/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/version/shutdown/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/api/version/update/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/landing/page-9e06d57d9b215fd7.js +0 -1
- package/app/.next/static/chunks/app/login/page-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/manifest.webmanifest/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/app/page-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/next/dist/client/components/builtin/app-error-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/next/dist/client/components/builtin/forbidden-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/next/dist/client/components/builtin/not-found-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/chunks/next/dist/client/components/builtin/unauthorized-e5f03432dd0bcd61.js +0 -1
- package/app/.next/static/css/92ffae29025c5847.css +0 -1
- package/app/.next/static/media/catalog.e7ada387.json +0 -1710
- package/app/.next/static/pVi5nGAVrNaYdEp0c24Nk/_buildManifest.js +0 -1
- package/app/.next-cli-build/server/chunks/5573.js +0 -1
- package/app/.next-cli-build/server/chunks/6395.js +0 -68
- package/app/.next-cli-build/server/chunks/6985.js +0 -1
- package/app/.next-cli-build/server/chunks/static/media/catalog.e7ada387.json +0 -1710
- package/app/.next-cli-build/static/chunks/1321-a73f95036c368bd4.js +0 -1
- package/app/.next-cli-build/static/chunks/1330-846d6a9e1497295e.js +0 -7
- package/app/.next-cli-build/static/chunks/3531-eb5d385c954b3765.js +0 -68
- package/app/.next-cli-build/static/chunks/4707-1ec0b2edbb07f455.js +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/agent-library/page-65e302b698beee56.js +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/basic-chat/page-0e1d54e59ac767a1.js +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/cli-tools/[toolId]/page-af0d85c06970853b.js +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/cli-tools/page-2cfc2352bc42d9b8.js +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/combos/page-62cd36ee99eaa630.js +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/combos/routing/page-0b02e9a2f1cc6e43.js +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/console-log/page-ded6ec41e583b3b3.js +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/endpoint/page-337881fe6c0cc77a.js +0 -16
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page-efb20dd903e0dc94.js +0 -59
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/page-d1654fba27199492.js +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/media-providers/combo/[id]/page-03290d1edb08623a.js +0 -4
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/media-providers/page-919f3eec8dfc9b6e.js +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/media-providers/web/page-db19da41661d630b.js +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/mitm/page-309b09a142a2995d.js +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/page-9bcd63bfeeac87c6.js +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/profile/page-ae6cf9ce7ac84eb7.js +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-ca71683d9d850162.js +0 -10
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/new/page-413b59dd764a1563.js +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/page-31212a5a4a9825b0.js +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/pxpipe/page-c5c37fbce431369b.js +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/quota/page-798a65a8c4d2708a.js +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/skills/[id]/page-aba614778bfe50ad.js +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/skills/page-b582299fa61407d9.js +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/token-saver/page-1711a424a8dcad0e.js +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/translator/page-0c7b901caf8614b9.js +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/usage/page-b085086e6c5b9387.js +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/layout-59baac68c7aedd25.js +0 -1
- package/app/.next-cli-build/static/chunks/app/_global-error/page-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/agent-library/catalog/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/agent-library/doctor/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/agent-library/export/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/agent-library/mcp/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/agent-library/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/agent-library/skills/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/agent-library/sync/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/agent-library/updates/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/auth/status/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/aider-settings/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/all-statuses/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/claude-full-catalog/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/claude-picker-labels/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/claude-settings/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/cline-settings/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/codex-settings/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-settings/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/deepseek-tui-settings/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/droid-settings/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/gemini-cli-settings/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/grok-settings/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/hermes-settings/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/jcode-settings/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/kilo-settings/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/openclaw-settings/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/opencode-settings/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/pi-settings/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/cli-tools/picker-labels/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/combos/[id]/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/combos/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/headroom/extras/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/headroom/proxy/[...path]/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/headroom/restart/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/headroom/start/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/headroom/status/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/headroom/stop/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/health/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/keys/[id]/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/keys/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/locale/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/mcp/[plugin]/message/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/mcp/[plugin]/sse/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/deepgram/voices/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/inworld/voices/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/minimax/voices/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/voices/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/mgmt/v1/combos/[id]/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/mgmt/v1/combos/[id]/strategy/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/mgmt/v1/combos/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/mgmt/v1/health/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/mgmt/v1/metrics/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/mgmt/v1/providers/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/mgmt/v1/routing/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/mgmt/v1/usage/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/mgmt/v1/version/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/models/alias/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/models/availability/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/models/custom/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/models/disabled/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/models/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/models/test/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/[provider]/[action]/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/codex/bulk-import/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/codex/import-token/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/cursor/auto-import/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/cursor/import/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/gitlab/pat/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/iflow/cookie/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/api-key/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/auto-import/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/import/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/import-cli-proxy/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/social-authorize/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/social-exchange/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/pricing/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/provider-nodes/[id]/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/provider-nodes/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/provider-nodes/validate/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/model-probes/batch/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/model-probes/cache/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/model-probes/prepare/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/model-probes/remove-unavailable/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/model-probes/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/model-probes/verify/cancel/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/model-probes/verify/start/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/model-probes/verify/status/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/models/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/test/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/[id]/test-models/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/client/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/kilo/free-models/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/suggested-models/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/test-batch/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/providers/validate/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/pxpipe/health/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/pxpipe/install/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/pxpipe/logs/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/pxpipe/restart/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/pxpipe/start/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/pxpipe/stats/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/pxpipe/status/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/pxpipe/stop/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/routing/feedback/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/routing/insights/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/routing/learn/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/routing/stats/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/routing/versions/promote/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/routing/versions/rollback/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/settings/database/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/settings/proxy-test/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/settings/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/shutdown/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/skills/[id]/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/tags/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/token-saver/vault-stats/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/translator/console-logs/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/translator/console-logs/stream/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/translator/load/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/translator/save/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/translator/send/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/translator/translate/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/[connectionId]/codex-reset-credits/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/[connectionId]/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/chart/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/history/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/logs/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/providers/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/request-details/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/request-logs/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/stats/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/usage/stream/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/api/chat/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/audio/speech/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/audio/transcriptions/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/audio/voices/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/chat/completions/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/embeddings/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/images/generations/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/messages/count_tokens/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/messages/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/models/[kind]/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/models/info/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/models/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/responses/compact/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/responses/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/search/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/videos/[id]/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/videos/edits/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/videos/extensions/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/videos/generations/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1/web/fetch/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1beta/models/[...path]/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/v1beta/models/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/version/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/version/shutdown/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/api/version/update/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/landing/page-9e06d57d9b215fd7.js +0 -1
- package/app/.next-cli-build/static/chunks/app/login/page-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/manifest.webmanifest/route-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/app/page-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/app-error-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/forbidden-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/not-found-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/unauthorized-e5f03432dd0bcd61.js +0 -1
- package/app/.next-cli-build/static/css/92ffae29025c5847.css +0 -1
- package/app/.next-cli-build/static/media/catalog.e7ada387.json +0 -1710
- package/app/.next-cli-build/static/pVi5nGAVrNaYdEp0c24Nk/_buildManifest.js +0 -1
- /package/app/.next/static/{pVi5nGAVrNaYdEp0c24Nk → Gpu8irTBATTeQnftVm3kL}/_ssgManifest.js +0 -0
- /package/app/.next-cli-build/static/{pVi5nGAVrNaYdEp0c24Nk → Gpu8irTBATTeQnftVm3kL}/_ssgManifest.js +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4707],{31474:(e,t,n)=>{n.d(t,{cn:()=>c});function c(...e){return e.filter(Boolean).join(" ").replace(/\s+/g," ").trim()}},34131:(e,t,n)=>{n.d(t,{sp:()=>o});var c=n(12115);let i=[];function a(e){return e&&"function"==typeof e.querySelectorAll?Array.from(e.querySelectorAll("a[href],area[href],button:not([disabled]),input:not([disabled]):not([type='hidden']),select:not([disabled]),textarea:not([disabled]),iframe,[contenteditable='true'],[tabindex]:not([tabindex='-1'])")).filter(e=>!(e.hasAttribute&&e.hasAttribute("hidden"))&&("function"!=typeof e.checkVisibility||e.checkVisibility())):[]}function o({isOpen:e,onClose:t}){let n=(0,c.useRef)(null),r=(0,c.useRef)(t);return(0,c.useEffect)(()=>{r.current=t}),(0,c.useEffect)(()=>{if(!e)return;let t=n.current;if(!t)return;i.push(t);let c=document.activeElement;t.contains(c)||(a(t)[0]||t).focus();let o=e=>{if(i[i.length-1]===t){if("Escape"===e.key){e.preventDefault(),r.current?.();return}if("Tab"===e.key){let n=a(t);if(!n.length){e.preventDefault(),t.focus();return}let c=function(e,t,n){if(!e.length)return null;let c=e.indexOf(t);return -1===c?n?e[e.length-1]:e[0]:n?0===c?e[e.length-1]:null:c===e.length-1?e[0]:null}(n,document.activeElement,e.shiftKey);c&&(e.preventDefault(),c.focus())}}};document.addEventListener("keydown",o);let u=document.body.style.overflow;return document.body.style.overflow="hidden",()=>{document.removeEventListener("keydown",o);let e=i.indexOf(t);-1!==e&&i.splice(e,1),i.length||(document.body.style.overflow=u),c&&c.isConnected&&"function"==typeof c.focus&&c.focus()}},[e]),n}},34591:(e,t,n)=>{let c;n.d(t,{KN:()=>s,uV:()=>d});var i=n(41463);let a={pricing:{},capabilities:{}};function o(e,t){if(!e)throw Error(t)}let r=!1;function u(e){if(void 0===i)return null;if("function"!=typeof i.getBuiltinModule)return!r&&i.versions?.node&&(r=!0,console.warn(`[switchboard] generated model catalog disabled: process.getBuiltinModule requires Node >= 20.12 (running ${i.versions.node}); falling back to hand-maintained data only`)),null;try{return i.getBuiltinModule(e)}catch{return null}}function p(){return void 0===c&&(c=function(){let e=u("node:fs");if(!e)return a;for(let t of function(){let e=[],t=u("node:path");if(t&&"function"==typeof i.cwd)try{e.push(t.join(i.cwd(),"open-sse","providers","generated","catalog.json"))}catch{}let c=u("node:url");if(c)try{e.push(c.fileURLToPath(new n.U(n(42209))))}catch{}return e}())if("string"==typeof t)try{return function(e){let t=JSON.parse(e);return null===t||"object"!=typeof t?a:{pricing:t.pricing&&"object"==typeof t.pricing?t.pricing:{},capabilities:t.capabilities&&"object"==typeof t.capabilities?t.capabilities:{}}}(e.readFileSync(t,"utf8"))}catch{}return a}()),c}function h(e,t){if(!t)return null;o("string"==typeof t,"model must be a string");let n=t.includes("/")?t.split("/").pop():t;return o("string"==typeof n,"model base must be a string"),e[n]||e[t]||null}function s(e){return h(p().pricing,e)}function d(e){return h(p().capabilities,e)}},42209:(e,t,n)=>{e.exports=n.p+"static/media/catalog.e7ada387.json"},47224:(e,t,n)=>{n.d(t,{PS:()=>u,ad:()=>p,gH:()=>r});var c=n(34591);let i={"claude-opus-4-6":{input:5,output:25,cached:.5,reasoning:25,cache_creation:6.25},"claude-opus-4-5-20251101":{input:5,output:25,cached:.5,reasoning:25,cache_creation:6.25},"claude-sonnet-4-6":{input:3,output:15,cached:.3,reasoning:15,cache_creation:3.75},"claude-sonnet-4-5-20250929":{input:3,output:15,cached:.3,reasoning:15,cache_creation:3.75},"claude-haiku-4-5-20251001":{input:1,output:5,cached:.1,reasoning:5,cache_creation:1.25},"claude-sonnet-4-20250514":{input:3,output:15,cached:1.5,reasoning:15,cache_creation:3},"claude-opus-4-20250514":{input:15,output:25,cached:7.5,reasoning:112.5,cache_creation:15},"claude-3-5-sonnet-20241022":{input:3,output:15,cached:1.5,reasoning:15,cache_creation:3},"claude-haiku-4.5":{input:.5,output:2.5,cached:.05,reasoning:3.75,cache_creation:.5},"claude-opus-4.1":{input:5,output:25,cached:.5,reasoning:37.5,cache_creation:5},"claude-opus-4.5":{input:5,output:25,cached:.5,reasoning:37.5,cache_creation:5},"claude-opus-4.6":{input:5,output:25,cached:.5,reasoning:37.5,cache_creation:5},"claude-sonnet-4":{input:3,output:15,cached:.3,reasoning:22.5,cache_creation:3},"claude-sonnet-4.5":{input:3,output:15,cached:.3,reasoning:22.5,cache_creation:3},"claude-sonnet-4.6":{input:3,output:15,cached:.3,reasoning:22.5,cache_creation:3},"claude-opus-4-5-thinking":{input:5,output:25,cached:.5,reasoning:37.5,cache_creation:5},"claude-opus-4-6-thinking":{input:5,output:25,cached:.5,reasoning:37.5,cache_creation:5},"gpt-3.5-turbo":{input:.5,output:1.5,cached:.25,reasoning:2.25,cache_creation:.5},"gpt-4":{input:2.5,output:10,cached:1.25,reasoning:15,cache_creation:2.5},"gpt-4-turbo":{input:10,output:30,cached:5,reasoning:45,cache_creation:10},"gpt-4o":{input:2.5,output:10,cached:1.25,reasoning:15,cache_creation:2.5},"gpt-4o-mini":{input:.15,output:.6,cached:.075,reasoning:.9,cache_creation:.15},"gpt-4.1":{input:2.5,output:10,cached:1.25,reasoning:15,cache_creation:2.5},"gpt-5":{input:3,output:12,cached:1.5,reasoning:18,cache_creation:3},"gpt-5-mini":{input:.75,output:3,cached:.375,reasoning:4.5,cache_creation:.75},"gpt-5-codex":{input:3,output:12,cached:1.5,reasoning:18,cache_creation:3},"gpt-5.1":{input:4,output:16,cached:2,reasoning:24,cache_creation:4},"gpt-5.1-codex":{input:4,output:16,cached:2,reasoning:24,cache_creation:4},"gpt-5.1-codex-mini":{input:1.5,output:6,cached:.75,reasoning:9,cache_creation:1.5},"gpt-5.1-codex-mini-high":{input:2,output:8,cached:1,reasoning:12,cache_creation:2},"gpt-5.1-codex-max":{input:8,output:32,cached:4,reasoning:48,cache_creation:8},"gpt-5.2":{input:5,output:20,cached:2.5,reasoning:30,cache_creation:5},"gpt-5.2-codex":{input:5,output:20,cached:2.5,reasoning:30,cache_creation:5},"gpt-5.3-codex":{input:6,output:24,cached:3,reasoning:36,cache_creation:6},"gpt-5.3-codex-spark":{input:3,output:12,cached:.3,reasoning:12,cache_creation:3},o1:{input:15,output:60,cached:7.5,reasoning:90,cache_creation:15},"o1-mini":{input:3,output:12,cached:1.5,reasoning:18,cache_creation:3},"gemini-3-flash-preview":{input:.5,output:3,cached:.03,reasoning:4.5,cache_creation:.5},"gemini-3-pro-preview":{input:2,output:12,cached:.25,reasoning:18,cache_creation:2},"gemini-3.1-pro-low":{input:2,output:12,cached:.25,reasoning:18,cache_creation:2},"gemini-3.1-pro-high":{input:4,output:18,cached:.5,reasoning:27,cache_creation:4},"gemini-pro-agent":{input:4,output:18,cached:.5,reasoning:27,cache_creation:4},"gemini-3-flash-agent":{input:.5,output:3,cached:.03,reasoning:4.5,cache_creation:.5},"gemini-3.5-flash-low":{input:.5,output:3,cached:.03,reasoning:4.5,cache_creation:.5},"gemini-3.5-flash-extra-low":{input:.5,output:3,cached:.03,reasoning:4.5,cache_creation:.5},"gemini-3-flash":{input:.5,output:3,cached:.03,reasoning:4.5,cache_creation:.5},"gemini-2.5-pro":{input:2,output:12,cached:.25,reasoning:18,cache_creation:2},"gemini-2.5-flash":{input:.3,output:2.5,cached:.03,reasoning:3.75,cache_creation:.3},"gemini-2.5-flash-lite":{input:.15,output:1.25,cached:.015,reasoning:1.875,cache_creation:.15},"qwen3-coder-plus":{input:1,output:4,cached:.5,reasoning:6,cache_creation:1},"qwen3-coder-flash":{input:.5,output:2,cached:.25,reasoning:3,cache_creation:.5},"kimi-k2":{input:1,output:4,cached:.5,reasoning:6,cache_creation:1},"kimi-k2-thinking":{input:1.5,output:6,cached:.75,reasoning:9,cache_creation:1.5},"kimi-k2.5":{input:1.2,output:4.8,cached:.6,reasoning:7.2,cache_creation:1.2},"kimi-k2.5-thinking":{input:1.8,output:7.2,cached:.9,reasoning:10.8,cache_creation:1.8},"kimi-latest":{input:1,output:4,cached:.5,reasoning:6,cache_creation:1},"deepseek-chat":{input:.14,output:.28,cached:.0028,reasoning:.28,cache_creation:.14},"deepseek-reasoner":{input:.14,output:.28,cached:.0028,reasoning:.28,cache_creation:.14},"deepseek-r1":{input:.14,output:.28,cached:.0028,reasoning:.28,cache_creation:.14},"deepseek-v3.2-chat":{input:.14,output:.28,cached:.0028,reasoning:.28,cache_creation:.14},"deepseek-v3.2-reasoner":{input:.14,output:.28,cached:.0028,reasoning:.28,cache_creation:.14},"deepseek-v4-flash":{input:.14,output:.28,cached:.0028,reasoning:.28,cache_creation:.14},"deepseek-v4-pro":{input:.435,output:.87,cached:.003625,reasoning:.87,cache_creation:.435},"glm-4.6":{input:.5,output:2,cached:.25,reasoning:3,cache_creation:.5},"glm-4.6v":{input:.75,output:3,cached:.375,reasoning:4.5,cache_creation:.75},"glm-4.7":{input:.75,output:3,cached:.375,reasoning:4.5,cache_creation:.75},"glm-5":{input:1,output:4,cached:.5,reasoning:6,cache_creation:1},"MiniMax-M3":{input:.3,output:1.2,cached:.06,reasoning:1.8,cache_creation:.3},"MiniMax-M2.1":{input:.5,output:2,cached:.25,reasoning:3,cache_creation:.5},"MiniMax-M2.5":{input:.5,output:2,cached:.25,reasoning:3,cache_creation:.5},"MiniMax-M2.7":{input:.5,output:2,cached:.25,reasoning:3,cache_creation:.5},"minimax-m2.1":{input:.5,output:2,cached:.25,reasoning:3,cache_creation:.5},"minimax-m2.5":{input:.6,output:2.4,cached:.3,reasoning:3.6,cache_creation:.6},"grok-code-fast-1":{input:.5,output:2,cached:.25,reasoning:3,cache_creation:.5},auto:{input:2,output:8,cached:1,reasoning:12,cache_creation:2},"oswe-vscode-prime":{input:1,output:4,cached:.5,reasoning:6,cache_creation:1},"gpt-oss-120b-medium":{input:.5,output:2,cached:.25,reasoning:3,cache_creation:.5},"vision-model":{input:1.5,output:6,cached:.75,reasoning:9,cache_creation:1.5},"coder-model":{input:1.5,output:6,cached:.75,reasoning:9,cache_creation:1.5}},a={gh:{"gpt-5.3-codex":{input:1.75,output:14,cached:.175,reasoning:14,cache_creation:1.75}}},o=[{pattern:"*-codex-xhigh",pricing:{input:10,output:40,cached:5,reasoning:60,cache_creation:10}},{pattern:"*-codex-high",pricing:{input:8,output:32,cached:4,reasoning:48,cache_creation:8}},{pattern:"*-codex-max",pricing:{input:8,output:32,cached:4,reasoning:48,cache_creation:8}},{pattern:"*-codex-mini-*",pricing:{input:1.5,output:6,cached:.75,reasoning:9,cache_creation:1.5}},{pattern:"*-codex-mini",pricing:{input:1.5,output:6,cached:.75,reasoning:9,cache_creation:1.5}},{pattern:"*-codex-low",pricing:{input:4,output:16,cached:2,reasoning:24,cache_creation:4}},{pattern:"*-codex-none",pricing:{input:3,output:12,cached:1.5,reasoning:18,cache_creation:3}},{pattern:"*-codex-spark",pricing:{input:3,output:12,cached:.3,reasoning:12,cache_creation:3}},{pattern:"codex-*",pricing:{input:3,output:12,cached:1.5,reasoning:18,cache_creation:3}},{pattern:"*-codex",pricing:{input:3,output:12,cached:1.5,reasoning:18,cache_creation:3}},{pattern:"claude-opus-*",pricing:{input:5,output:25,cached:.5,reasoning:25,cache_creation:6.25}},{pattern:"claude-sonnet-*",pricing:{input:3,output:15,cached:.3,reasoning:15,cache_creation:3.75}},{pattern:"claude-haiku-*",pricing:{input:1,output:5,cached:.1,reasoning:5,cache_creation:1.25}},{pattern:"claude-*",pricing:{input:3,output:15,cached:.3,reasoning:15,cache_creation:3.75}},{pattern:"gemini-*-flash-lite",pricing:{input:.15,output:1.25,cached:.015,reasoning:1.875,cache_creation:.15}},{pattern:"gemini-*-flash",pricing:{input:.3,output:2.5,cached:.03,reasoning:3.75,cache_creation:.3}},{pattern:"gemini-*-pro",pricing:{input:2,output:12,cached:.25,reasoning:18,cache_creation:2}},{pattern:"gemini-3-*",pricing:{input:.5,output:3,cached:.03,reasoning:4.5,cache_creation:.5}},{pattern:"gemini-2.5-*",pricing:{input:.3,output:2.5,cached:.03,reasoning:3.75,cache_creation:.3}},{pattern:"gemini-*",pricing:{input:.5,output:3,cached:.03,reasoning:4.5,cache_creation:.5}},{pattern:"gpt-5.3-*",pricing:{input:6,output:24,cached:3,reasoning:36,cache_creation:6}},{pattern:"gpt-5.2-*",pricing:{input:5,output:20,cached:2.5,reasoning:30,cache_creation:5}},{pattern:"gpt-5.1-*",pricing:{input:4,output:16,cached:2,reasoning:24,cache_creation:4}},{pattern:"gpt-5-*",pricing:{input:3,output:12,cached:1.5,reasoning:18,cache_creation:3}},{pattern:"gpt-5*",pricing:{input:3,output:12,cached:1.5,reasoning:18,cache_creation:3}},{pattern:"gpt-4o-*",pricing:{input:.15,output:.6,cached:.075,reasoning:.9,cache_creation:.15}},{pattern:"gpt-4o",pricing:{input:2.5,output:10,cached:1.25,reasoning:15,cache_creation:2.5}},{pattern:"gpt-4*",pricing:{input:2.5,output:10,cached:1.25,reasoning:15,cache_creation:2.5}},{pattern:"o1-*",pricing:{input:3,output:12,cached:1.5,reasoning:18,cache_creation:3}},{pattern:"o1",pricing:{input:15,output:60,cached:7.5,reasoning:90,cache_creation:15}},{pattern:"o3-*",pricing:{input:10,output:40,cached:5,reasoning:60,cache_creation:10}},{pattern:"o4-*",pricing:{input:2,output:8,cached:1,reasoning:12,cache_creation:2}},{pattern:"qwen3-coder-*",pricing:{input:1,output:4,cached:.5,reasoning:6,cache_creation:1}},{pattern:"qwen*-coder-*",pricing:{input:1,output:4,cached:.5,reasoning:6,cache_creation:1}},{pattern:"qwen*",pricing:{input:.5,output:2,cached:.25,reasoning:3,cache_creation:.5}},{pattern:"kimi-*-thinking",pricing:{input:1.8,output:7.2,cached:.9,reasoning:10.8,cache_creation:1.8}},{pattern:"kimi-k2*",pricing:{input:1.2,output:4.8,cached:.6,reasoning:7.2,cache_creation:1.2}},{pattern:"kimi-*",pricing:{input:1,output:4,cached:.5,reasoning:6,cache_creation:1}},{pattern:"deepseek-*reasoner*",pricing:{input:.14,output:.28,cached:.0028,reasoning:.28,cache_creation:.14}},{pattern:"deepseek-r*",pricing:{input:.14,output:.28,cached:.0028,reasoning:.28,cache_creation:.14}},{pattern:"deepseek-v*",pricing:{input:.14,output:.28,cached:.0028,reasoning:.28,cache_creation:.14}},{pattern:"deepseek-*",pricing:{input:.14,output:.28,cached:.0028,reasoning:.28,cache_creation:.14}},{pattern:"glm-5*",pricing:{input:1,output:4,cached:.5,reasoning:6,cache_creation:1}},{pattern:"glm-4*",pricing:{input:.75,output:3,cached:.375,reasoning:4.5,cache_creation:.75}},{pattern:"glm-*",pricing:{input:.5,output:2,cached:.25,reasoning:3,cache_creation:.5}},{pattern:"MiniMax-*",pricing:{input:.5,output:2,cached:.25,reasoning:3,cache_creation:.5}},{pattern:"minimax-*",pricing:{input:.5,output:2,cached:.25,reasoning:3,cache_creation:.5}},{pattern:"grok-code-*",pricing:{input:.5,output:2,cached:.25,reasoning:3,cache_creation:.5}},{pattern:"grok-*",pricing:{input:.5,output:2,cached:.25,reasoning:3,cache_creation:.5}}];function r(e,t){return RegExp("^"+e.split("*").map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join(".*")+"$","i").test(t)}function u(e,t){if(!t)return null;if(e&&a[e]?.[t])return a[e][t];let n=(0,c.KN)(t),u=function(e){let t=e.includes("/")?e.split("/").pop():e;if(i[t]||i[e])return i[t]||i[e];for(let{pattern:n,pricing:c}of o)if(r(n,t||e))return c;return null}(t);return n&&u?{...u,...n}:n||u}function p(){return a}},77251:(e,t,n)=>{n.d(t,{I:()=>a,l:()=>o});var c=n(1934);let i=null,a=(0,c.v)(e=>({request:null,open:(t,n)=>{i&&i(!1),i=n,e({request:t})},settle:t=>{let n=i;i=null,e({request:null}),n?.(t)}}));function o(e){return new Promise(t=>{a.getState().open(e,t)})}},84588:(e,t,n)=>{n.d(t,{default:()=>a});var c=n(95155),i=n(31474);function a({children:e,title:t,subtitle:n,icon:o,action:r,padding:u="md",hover:p=!1,elev:h=!1,className:s,...d}){return(0,c.jsxs)("div",{className:(0,i.cn)("bg-surface border border-border","rounded-[12px]",p&&"hover:border-brand-500/40 transition-all cursor-pointer",{none:"",xs:"p-3",sm:"p-4",md:"p-6",lg:"p-8"}[u],s),...d,children:[(t||r)&&(0,c.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,c.jsxs)("div",{className:"flex items-center gap-3",children:[o&&(0,c.jsx)("div",{className:"p-2 rounded-[10px] bg-bg text-text-muted",children:(0,c.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:o})}),(0,c.jsxs)("div",{children:[t&&(0,c.jsx)("h3",{className:"text-text-main font-semibold",children:t}),n&&(0,c.jsx)("p",{className:"text-sm text-text-muted",children:n})]})]}),r]}),e]})}a.Section=function({children:e,className:t,...n}){return(0,c.jsx)("div",{className:(0,i.cn)("p-4 rounded-[10px]","bg-bg border border-border-subtle",t),...n,children:e})},a.Row=function({children:e,className:t,...n}){return(0,c.jsx)("div",{className:(0,i.cn)("p-3 -mx-3 px-3 transition-colors","border-b border-border-subtle last:border-b-0","hover:bg-surface-2/50",t),...n,children:e})},a.ListItem=function({children:e,actions:t,className:n,...a}){return(0,c.jsxs)("div",{className:(0,i.cn)("group flex items-center justify-between p-3 -mx-3 px-3","border-b border-border-subtle last:border-b-0","hover:bg-surface-2/50 transition-colors",n),...a,children:[(0,c.jsx)("div",{className:"flex-1 min-w-0",children:e}),t&&(0,c.jsx)("div",{className:"flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity",children:t})]})}}}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6897],{5194:(e,s,t)=>{Promise.resolve().then(t.bind(t,94091))},35497:(e,s,t)=>{"use strict";t.d(s,{x0:()=>N.default,Ex:()=>o.default,$n:()=>a.default,nh:()=>$.default,Zp:()=>i.default,Qv:()=>d.CardSkeleton,CK:()=>h.default,uo:()=>n.ConfirmModal,G9:()=>y.default,wI:()=>w.default,vj:()=>v.default,vE:()=>j.default,pd:()=>r.default,Mh:()=>f.default,uR:()=>p.default,Nf:()=>u.default,aF:()=>n.default,rq:()=>x.default,gw:()=>k.default,LF:()=>m.default,Wx:()=>P.default,gM:()=>g.default,Iz:()=>C.default,l6:()=>l.default,lM:()=>c.default,m_:()=>S.default,jK:()=>b.default});var a=t(92542),r=t(11910),l=t(98),i=t(84588),n=t(81127),d=t(25086);t(56319);var o=t(56061),c=t(98542);t(38587),t(21110),t(92622),t(8823),t(92173);var m=t(90882),x=t(72908),p=t(28815),h=t(45455),u=t(28058),b=t(4809);t(21931),t(80752),t(40197);var g=t(23615);t(44736);var f=t(62899);t(94230);var y=t(30815),j=t(23936),v=t(95088),w=t(73579),N=t(96748),k=t(4823),C=t(28067),S=t(97677),P=t(51825),$=t(29366);t(76361),t(91450)},94091:(e,s,t)=>{"use strict";t.r(s),t.d(s,{default:()=>d});var a=t(95155),r=t(12115),l=t(35497),i=t(77251),n=t(65921);function d(){let e,s,[t,d]=(0,r.useState)(null),[c,m]=(0,r.useState)(!0),[x,p]=(0,r.useState)(""),h=(0,n.i)(),[u,b]=(0,r.useState)(null),[g,f]=(0,r.useState)(null),[y,j]=(0,r.useState)("overview");(0,r.useEffect)(()=>{{let e=new URLSearchParams(window.location.search).get("tab");e&&["overview","skills","mcp","catalog","advanced"].includes(e)&&j(e)}},[]);let[v,w]=(0,r.useState)({id:"",name:"",transport:"stdio",command:"npx",args:"-y @modelcontextprotocol/server-filesystem .",url:"",notes:""}),[N,k]=(0,r.useState)([]),[C,S]=(0,r.useState)([]),[P,$]=(0,r.useState)(""),[E,I]=(0,r.useState)([]),[O,T]=(0,r.useState)(""),[M,z]=(0,r.useState)(""),[A,L]=(0,r.useState)(""),[U,R]=(0,r.useState)(""),[Z,D]=(0,r.useState)(!1),[J,G]=(0,r.useState)(""),[_,F]=(0,r.useState)(""),[H,K]=(0,r.useState)({}),[Q,W]=(0,r.useState)(null),[B,q]=(0,r.useState)(!1),[Y,V]=(0,r.useState)(""),X=(0,r.useCallback)(async()=>{m(!0);try{let e=await fetch("/api/agent-library",{cache:"no-store"}),s=await e.json();if(!e.ok)throw Error(s.error||"Load failed");d(s)}catch(e){h.error(e.message)}finally{m(!1)}},[]),ee=(0,r.useCallback)(async()=>{try{let e=await fetch("/api/agent-library/updates",{cache:"no-store"}),s=await e.json();if(!e.ok)return;let t={};for(let e of s.results||[])t[e.id]=e;K(t)}catch{}},[]);(0,r.useEffect)(()=>{X(),ee(),fetch("/api/agent-library/catalog").then(e=>e.json()).then(e=>{k(e.presets||[]),S(e.mcpPresets||[])}).catch(()=>{})},[X,ee]);let es=t?.settings||{},et=t?.agents||{};async function ea(e){p("settings");try{let s=await fetch("/api/agent-library",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),t=await s.json();if(!s.ok)throw Error(t.error||"Save failed");h.success("Settings saved"),await X()}catch(e){h.error(e.message)}finally{p("")}}async function er(e){p(e),f(null);try{let s=await fetch("/api/agent-library/sync",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:e,confirm:"clean"===e||void 0})}),t=await s.json();if(!s.ok)throw Error(t.error||t.message||"Sync failed");f(t);let a="dry-run"===e?`Dry-run: ${t.summary?.skillsSynced??0} skill ops, ${t.summary?.mcpOk??0} MCP ok, ${t.conflictCount||0} conflicts`:"clean"===e?"Removed Switchboard-managed projections only":`Applied: ${t.summary?.skillsSynced??0} skills synced, ${t.conflictCount||0} conflicts protected`;t.conflictCount?h.warning(a):h.success(a),await X()}catch(e){h.error(e.message)}finally{p("")}}async function el(){p("doctor");try{let e=await fetch("/api/agent-library/doctor",{cache:"no-store"}),s=await e.json();if(!e.ok)throw Error(s.error||"Doctor failed");b(s),s.ok?h.success("Doctor: no blocking errors"):h.warning(`Doctor: ${s.issues?.filter(e=>"error"===e.severity).length||0} errors`)}catch(e){h.error(e.message)}finally{p("")}}async function ei(e){e?.preventDefault?.(),p("mcp");try{let e=v.args?v.args.split(/\s+/).filter(Boolean):[],s=await fetch("/api/agent-library/mcp",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:v.id,name:v.name||v.id,transport:v.transport,command:"stdio"===v.transport?v.command:void 0,args:"stdio"===v.transport?e:void 0,url:"stdio"!==v.transport?v.url:void 0,notes:v.notes})}),t=await s.json();if(!s.ok)throw Error(t.error||"MCP save failed");t.warnings?.length?h.warning(t.warnings.join(" \xb7 ")):h.success(`MCP ${t.server?.id} saved (Apply to project)`),w({id:"",name:"",transport:"stdio",command:"npx",args:"",url:"",notes:""}),await X()}catch(e){h.error(e.message)}finally{p("")}}async function en(e){p(`mcp-preset-${e.id}`);try{let s=await fetch("/api/agent-library/mcp",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:e.id,name:e.name||e.id,transport:e.transport||"stdio",command:e.command,args:e.args,url:e.url,env:e.env,notes:e.notes})}),t=await s.json();if(!s.ok)throw Error(t.error||"MCP preset save failed");h.success(`MCP ${t.server?.id||e.id} saved to library. Click Apply sync to project to agents.`),await X()}catch(e){h.error(e.message)}finally{p("")}}function ed(e){w({id:e.id,name:e.name||e.id,transport:e.transport||"stdio",command:e.command||"npx",args:(e.args||[]).join(" "),url:e.url||"",notes:e.notes||""}),h.success(`Loaded ${e.name} into form below. Edit parameters as needed and click Save.`)}async function eo(e){if(await (0,i.l)({message:`Remove MCP ${e} from library? (targets updated on next Apply)`,confirmText:"Continue"})){p("mcp-del");try{let s=await fetch(`/api/agent-library/mcp?id=${encodeURIComponent(e)}`,{method:"DELETE"}),t=await s.json();if(!s.ok)throw Error(t.error);h.success("MCP removed from library"),await X()}catch(e){h.error(e.message)}finally{p("")}}}async function ec(e){if(await (0,i.l)({message:`Remove skill ${e} from library?`,confirmText:"Continue"})){p("skill-del");try{let s=await fetch(`/api/agent-library/skills?id=${encodeURIComponent(e)}`,{method:"DELETE"}),t=await s.json();if(!s.ok)throw Error(t.error);h.success("Skill removed from library"),await X(),await ee()}catch(e){h.error(e.message)}finally{p("")}}}async function em(){p("skill-add");try{let e=await fetch("/api/agent-library/skills",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:J,markdown:_,source:"manual"})}),s=await e.json();if(!e.ok)throw Error(s.error);h.success(`Skill ${s.id} installed in library`),G(""),F(""),await X()}catch(e){h.error(e.message)}finally{p("")}}async function ex(e){p("upd-preview"),q(!1);try{let s=await fetch("/api/agent-library/updates",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"preview",skillId:e})}),t=await s.json();if(!s.ok||!t.ok)throw Error(t.message||t.error||"Preview failed");W({id:e,markdown:t.markdown,contentHash:t.contentHash})}catch(e){h.error(e.message)}finally{p("")}}async function ep(){if(Q){p("upd-apply");try{let e=await fetch("/api/agent-library/updates",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"update",skillId:Q.id,confirmed:B,expectedHash:Q.contentHash})}),s=await e.json();if(!e.ok||!s.ok)throw Error(s.message||s.error||"Update failed");h.success(s.warning||`Updated ${s.id}`),W(null),q(!1),await X(),await ee()}catch(e){h.error(e.message)}finally{p("")}}}async function eh(e){if(e?.preventDefault?.(),P.trim()){p("resolve"),T("");try{let e=await fetch("/api/agent-library/catalog",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"resolve",input:P.trim()})}),s=await e.json();if(!e.ok||!s.ok)throw Error(s.message||s.error||"Resolution failed");let t=s.skills||[];I(t),1===t.length?(L(t[0].skillId),z(t[0].rawUrl),R(t[0].preview||""),D(!1),h.success(`Resolved skill: ${t[0].skillId}`)):t.length>1&&(L(""),z(""),R(""),D(!1),h.success(`Found ${t.length} skills in ${s.repo||"repository"}. Select one below.`))}catch(e){h.error(e.message)}finally{p("")}}}async function eu(e){p("preview");try{let s=await fetch("/api/agent-library/catalog",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"preview",url:e})}),t=await s.json();if(!s.ok||!t.ok)throw Error(t.error||"Preview failed");R(t.preview||""),h.success(`Preview loaded (${t.bytes} bytes)`)}catch(e){h.error(e.message)}finally{p("")}}async function eb(){p("catalog");try{let e=await fetch("/api/agent-library/catalog",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"install",skillId:A,url:M,confirmed:Z})}),s=await e.json();if(!e.ok)throw Error(s.message||s.error||"Install failed");T(s.id||A),h.success(s.warning||`Installed ${s.id}`),D(!1),await X(),await ee()}catch(e){h.error(e.message)}finally{p("")}}async function eg(){p("export");try{let e=await fetch("/api/agent-library/export",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({destPath:Y||void 0})}),s=await e.json();if(!e.ok)throw Error(s.message||s.error||"Export failed");h.success(`Exported AgentSync layout to ${s.path}`)}catch(e){h.error(e.message)}finally{p("")}}return(0,a.jsxs)("div",{className:"max-w-5xl mx-auto space-y-5 pb-12",children:[(0,a.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,a.jsx)("h1",{className:"text-[17px] font-semibold text-text-main",children:"Agent library"}),(0,a.jsxs)("p",{className:"text-xs text-text-muted leading-relaxed max-w-2xl",children:["One Switchboard-owned library of ",(0,a.jsx)("strong",{className:"text-text-main",children:"skills"})," and"," ",(0,a.jsx)("strong",{className:"text-text-main",children:"MCP servers"}),", projected into Claude Code, Codex, OpenCode, Gemini CLI, and Cursor. Managed entries use the"," ",(0,a.jsx)("code",{className:"text-[11px] font-mono",children:"sb-"})," namespace so we never overwrite your existing skills or MCP keys."]})]}),(0,a.jsxs)(l.Zp,{padding:"md",children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[(0,a.jsxs)("label",{className:"flex items-center gap-2 text-sm text-text-main cursor-pointer",children:[(0,a.jsx)("input",{type:"checkbox",className:"accent-[var(--color-primary)]","aria-label":"Sync enabled",checked:!1!==es.enabled,disabled:!!x,onChange:e=>ea({enabled:e.target.checked})}),"Sync enabled"]}),(0,a.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,a.jsx)(l.$n,{size:"sm",variant:"secondary",disabled:!!x||!1===es.enabled,loading:"dry-run"===x,onClick:()=>er("dry-run"),children:"Dry-run"}),(0,a.jsx)(l.$n,{size:"sm",disabled:!!x||!1===es.enabled,loading:"apply"===x,onClick:()=>er("apply"),children:"Apply sync"}),(0,a.jsx)(l.$n,{size:"sm",variant:"outline",disabled:!!x,loading:"doctor"===x,onClick:el,children:"Doctor"})]})]}),(0,a.jsxs)("p",{className:"text-[11px] text-text-subtle mt-2 font-mono break-all",children:["Library: ",t?.libraryRoot||"…",es.linkMode?` \xb7 mode=${es.linkMode}`:"",es.scope?` \xb7 scope=${es.scope}`:""]})]}),(0,a.jsx)("div",{className:"flex flex-wrap gap-1 border-b border-border pb-0",children:[{id:"overview",label:"Overview"},{id:"skills",label:"Skills"},{id:"mcp",label:"MCP"},{id:"catalog",label:"Catalog"},{id:"advanced",label:"Advanced"}].map(e=>(0,a.jsx)("button",{type:"button",onClick:()=>{j(e.id);try{window.history.replaceState(null,"",`?tab=${e.id}`)}catch{}},className:`px-3 py-2 text-xs font-medium rounded-t-md transition-colors ${y===e.id?"bg-surface border border-border border-b-surface text-primary -mb-px":"text-text-muted hover:text-text-main"}`,children:e.label},e.id))}),c&&(0,a.jsxs)("p",{className:"text-sm text-text-muted flex items-center gap-2",children:[(0,a.jsx)("span",{className:"material-symbols-outlined animate-spin text-[18px]",children:"progress_activity"}),"Loading…"]}),!c&&"overview"===y&&(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)(l.Zp,{padding:"md",children:[(0,a.jsx)("h2",{className:"text-sm font-semibold text-text-main mb-2",children:"How it works"}),(0,a.jsxs)("ol",{className:"text-xs text-text-muted space-y-1.5 list-decimal pl-4 leading-relaxed",children:[(0,a.jsxs)("li",{children:["Skills and MCP servers live only in Switchboard's library (",(0,a.jsx)("code",{className:"font-mono",children:"~/.switchboard/agent-library"}),")."]}),(0,a.jsxs)("li",{children:[(0,a.jsx)("strong",{className:"text-text-main",children:"Apply sync"})," projects them into each enabled agent under namespaced paths/keys (",(0,a.jsx)("code",{className:"font-mono",children:"sb-*"}),")."]}),(0,a.jsxs)("li",{children:["If a path already exists and is ",(0,a.jsx)("em",{children:"not"})," marked managed, we"," ",(0,a.jsx)("strong",{className:"text-text-main",children:"skip"})," it (never overwrite)."]}),(0,a.jsx)("li",{children:"Turn individual agents or skills/MCP off with the toggles below."})]})]}),(0,a.jsxs)(l.Zp,{padding:"md",children:[(0,a.jsx)("h2",{className:"text-sm font-semibold text-text-main mb-3",children:"Targets"}),(0,a.jsx)("div",{className:"space-y-2",children:Object.values(et).map(e=>{let s=es.targets?.[e.id]||{skills:!0,mcp:!0};return(0,a.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2 py-2 border-b border-border-subtle last:border-0",children:[(0,a.jsx)("span",{className:"text-sm text-text-main",children:e.label}),(0,a.jsxs)("div",{className:"flex gap-4 text-xs text-text-muted",children:[(0,a.jsxs)("label",{className:"flex items-center gap-1.5 cursor-pointer",children:[(0,a.jsx)("input",{type:"checkbox","aria-label":`${e.label} skills projection`,checked:!1!==s.skills,disabled:!e.supportsSkills||!!x,onChange:t=>ea({targets:{...es.targets,[e.id]:{...s,skills:t.target.checked}}})}),"Skills"]}),(0,a.jsxs)("label",{className:"flex items-center gap-1.5 cursor-pointer",children:[(0,a.jsx)("input",{type:"checkbox","aria-label":`${e.label} MCP projection`,checked:!1!==s.mcp,disabled:!e.supportsMcp||!!x,onChange:t=>ea({targets:{...es.targets,[e.id]:{...s,mcp:t.target.checked}}})}),"MCP"]})]})]},e.id)})})]}),(0,a.jsxs)(l.Zp,{padding:"md",children:[(0,a.jsx)("h2",{className:"text-sm font-semibold text-text-main mb-3",children:"Safety & link mode"}),(0,a.jsxs)("div",{className:"grid gap-3 sm:grid-cols-2 text-xs",children:[(0,a.jsxs)("label",{className:"flex flex-col gap-1",children:[(0,a.jsx)("span",{className:"text-text-muted",children:"Link mode"}),(0,a.jsxs)("select",{className:"bg-surface border border-border rounded-md px-2 py-1.5 text-text-main",value:es.linkMode||"copy",disabled:!!x,onChange:e=>ea({linkMode:e.target.value}),children:[(0,a.jsx)("option",{value:"copy",children:"Copy (safe default on Windows)"}),(0,a.jsx)("option",{value:"symlink",children:"Symlink (instant updates; may need privileges on Windows)"})]})]}),(0,a.jsxs)("label",{className:"flex flex-col gap-1",children:[(0,a.jsx)("span",{className:"text-text-muted",children:"Scope"}),(0,a.jsxs)("select",{className:"bg-surface border border-border rounded-md px-2 py-1.5 text-text-main",value:es.scope||"global",disabled:!!x,onChange:e=>ea({scope:e.target.value,projectPath:"project"===e.target.value?es.projectPath||"":null}),children:[(0,a.jsx)("option",{value:"global",children:"Global (user home agents)"}),(0,a.jsx)("option",{value:"project",children:"Project (paths under project folder)"})]})]}),"project"===es.scope&&(0,a.jsxs)("label",{className:"flex flex-col gap-1 sm:col-span-2",children:[(0,a.jsx)("span",{className:"text-text-muted",children:"Project path (absolute)"}),(0,a.jsx)("input",{className:"bg-surface border border-border rounded-md px-2 py-1.5 font-mono text-text-main",value:es.projectPath||"",placeholder:"/Users/you/my-app",disabled:!!x,onChange:e=>ea({projectPath:e.target.value})})]}),(0,a.jsxs)("label",{className:"flex items-start gap-2 sm:col-span-2 cursor-pointer",children:[(0,a.jsx)("input",{type:"checkbox",className:"mt-0.5","aria-label":"Never overwrite user-owned files",checked:!1!==es.neverOverwriteUser,disabled:!!x,onChange:async e=>{e.target.checked?ea({neverOverwriteUser:!0}):await (0,i.l)({message:"Allow overwriting paths that are NOT Switchboard-managed? This can replace your personal skills/MCP. Continue?",confirmText:"Continue"})&&ea({neverOverwriteUser:!1,confirmAllowOverwrite:!0})}}),(0,a.jsxs)("span",{className:"text-text-muted leading-relaxed",children:[(0,a.jsx)("strong",{className:"text-text-main",children:"Never overwrite user-owned files"})," ","(recommended). Only touch ",(0,a.jsx)("code",{className:"font-mono",children:"sb-*"})," managed entries."]})]}),(0,a.jsxs)("label",{className:"flex items-center gap-2 cursor-pointer",children:[(0,a.jsx)("input",{type:"checkbox","aria-label":"Auto-include Switchboard product skills",checked:!1!==es.includeProductSkills,disabled:!!x,onChange:e=>ea({includeProductSkills:e.target.checked})}),(0,a.jsx)("span",{className:"text-text-muted",children:"Auto-include Switchboard product skills (entry + chat)"})]})]})]}),(0,a.jsx)(l.Zp,{padding:"md",className:"border-primary/20 bg-primary/5",children:(0,a.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[(0,a.jsxs)("div",{className:"space-y-1 max-w-xl",children:[(0,a.jsxs)("div",{className:"text-xs font-semibold text-text-main flex items-center gap-1.5",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px] text-primary",children:"hub"}),"Featured: Executor.sh Tool Gateway & MCP Presets"]}),(0,a.jsxs)("p",{className:"text-[11px] text-text-muted leading-relaxed",children:["Connect your AI agents to OpenAPI, GraphQL, MCP servers, and custom JavaScript functions via ",(0,a.jsx)("strong",{children:"Executor.sh"})," (",(0,a.jsx)("code",{className:"font-mono text-primary",children:"npx -y executor mcp"}),")."]})]}),(0,a.jsx)(l.$n,{size:"sm",variant:"primary",onClick:()=>j("mcp"),children:"Manage MCP Gateways"})]})}),(0,a.jsxs)("div",{className:"grid sm:grid-cols-3 gap-3",children:[(0,a.jsx)(o,{label:"Skills in library",value:String(t?.skills?.length??0)}),(0,a.jsx)(o,{label:"MCP servers",value:String(t?.mcpServers?.length??0)}),(0,a.jsx)(o,{label:"Last sync",value:t?.state?.lastSync?.at?new Date(t.state.lastSync.at).toLocaleString():"—"})]}),g&&(0,a.jsxs)(l.Zp,{padding:"md",children:[(0,a.jsx)("h2",{className:"text-sm font-semibold text-text-main mb-2",children:"Last sync detail"}),(0,a.jsx)("pre",{className:"text-[11px] font-mono text-text-muted overflow-x-auto max-h-48 bg-surface-2 p-2 rounded",children:JSON.stringify(g.summary||g,null,2)}),g.skills?.filter(e=>"conflict"===e.action).length>0&&(0,a.jsxs)("div",{className:"mt-2 text-xs text-amber-600 dark:text-amber-400",children:["Conflicts (protected):",(0,a.jsx)("ul",{className:"list-disc pl-4 mt-1",children:g.skills.filter(e=>"conflict"===e.action).map((e,s)=>(0,a.jsxs)("li",{children:[e.agent,"/",e.skillId,": ",e.message||e.reason]},s))})]})]}),u&&(0,a.jsxs)(l.Zp,{padding:"md",children:[(0,a.jsx)("h2",{className:"text-sm font-semibold text-text-main mb-2",children:"Doctor"}),u.issues?.length===0?(0,a.jsx)("p",{className:"text-xs text-green-600",children:"No issues"}):(0,a.jsx)("ul",{className:"text-xs space-y-1",children:u.issues?.map((e,s)=>(0,a.jsxs)("li",{className:"error"===e.severity?"text-red-500":"text-amber-600 dark:text-amber-400",children:["[",e.severity,"] ",e.message]},s))})]})]}),!c&&"skills"===y&&(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)(l.Zp,{padding:"md",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between mb-3",children:[(0,a.jsx)("h2",{className:"text-sm font-semibold text-text-main",children:"Library skills"}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(l.$n,{size:"sm",variant:"ghost",disabled:!!x,onClick:async()=>{p("upd-check");try{await ee(),h.success("Update check complete")}finally{p("")}},children:"Check updates"}),(0,a.jsx)(l.$n,{size:"sm",variant:"secondary",disabled:!!x,onClick:async()=>{p("ensure");try{await fetch("/api/agent-library/skills",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"ensure_product"})}),await X(),h.success("Product skills ensured")}finally{p("")}},children:"Refresh product skills"})]})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(t?.skills||[]).map(e=>(0,a.jsxs)("div",{className:"flex items-start justify-between gap-2 p-3 rounded-lg border border-border-subtle bg-surface-2/50",children:[(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("span",{className:"text-sm font-medium text-text-main",children:e.title||e.id}),(0,a.jsx)(l.Ex,{size:"sm",variant:"default",children:(0,a.jsxs)("code",{className:"text-[10px]",children:["sb-",e.id]})}),H[e.id]?.status==="update"&&(0,a.jsx)(l.Ex,{size:"sm",variant:"warning",children:"update available"}),H[e.id]?.status==="error"&&(0,a.jsx)("span",{className:"text-[10px] text-text-subtle",title:H[e.id]?.message||"check failed",children:"check failed"})]}),(0,a.jsx)("p",{className:"text-[11px] text-text-muted mt-0.5 line-clamp-2",children:e.description||"—"})]}),(0,a.jsxs)("div",{className:"flex gap-1 shrink-0",children:[H[e.id]?.status==="update"&&(0,a.jsx)(l.$n,{size:"sm",variant:"secondary",disabled:!!x,loading:"upd-preview"===x&&Q?.id!==e.id,onClick:()=>ex(e.id),children:"Update"}),(0,a.jsx)(l.$n,{size:"sm",variant:"ghost",disabled:!!x,onClick:()=>ec(e.id),children:"Remove"})]})]},e.id)),!t?.skills?.length&&(0,a.jsx)("p",{className:"text-xs text-text-muted",children:"No skills yet. Enable product skills or add manually."})]})]}),(0,a.jsxs)(l.Zp,{padding:"md",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between mb-1",children:[(0,a.jsx)("h2",{className:"text-sm font-semibold text-text-main",children:"Detected on this machine"}),(0,a.jsx)(l.Ex,{size:"sm",variant:"default",children:"read-only"})]}),(0,a.jsxs)("p",{className:"text-[11px] text-text-muted mb-3 leading-relaxed",children:["Skills already present in agent tool dirs (e.g. ",(0,a.jsx)("code",{className:"font-mono",children:"~/.claude/skills"}),","," ",(0,a.jsx)("code",{className:"font-mono",children:"~/.agents/skills"}),"), installed by other tooling. Switchboard does not manage them — import via the Catalog tab to manage them here."]}),(0,a.jsxs)("div",{className:"space-y-2 max-h-72 overflow-auto",children:[(t?.detectedSkills||[]).map(e=>(0,a.jsx)("div",{className:"flex items-start justify-between gap-2 p-3 rounded-lg border border-border-subtle bg-surface-2/50",children:(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2 flex-wrap",children:[(0,a.jsx)("span",{className:"text-sm font-medium text-text-main",children:e.title||e.id}),e.managedBySwitchboard&&(0,a.jsx)(l.Ex,{size:"sm",variant:"primary",children:"sb-managed"}),(e.agents||[]).map(e=>(0,a.jsx)(l.Ex,{size:"sm",variant:"default",children:e},e))]}),(0,a.jsx)("p",{className:"text-[11px] text-text-muted mt-0.5 line-clamp-2",children:e.description||"—"})]})},e.id)),!t?.detectedSkills?.length&&(0,a.jsx)("p",{className:"text-xs text-text-muted",children:"No skills found in agent tool directories."})]})]}),Q&&(0,a.jsxs)(l.Zp,{padding:"md",children:[(0,a.jsxs)("h2",{className:"text-sm font-semibold text-text-main mb-2",children:["Update preview — ",(0,a.jsx)("code",{className:"text-[12px]",children:Q.id})]}),(0,a.jsx)("p",{className:"text-[11px] text-text-subtle mb-2",children:"Full incoming SKILL.md shown below. Exactly these bytes are installed on confirm — if upstream changes in between, the update is refused and you preview again."}),(0,a.jsx)("pre",{className:"text-[10px] font-mono max-h-64 overflow-auto bg-surface-2 p-2 rounded border border-border-subtle whitespace-pre-wrap",children:Q.markdown}),(0,a.jsxs)("label",{className:"flex items-start gap-2 text-xs text-text-muted cursor-pointer mt-2",children:[(0,a.jsx)("input",{type:"checkbox","aria-label":"I reviewed this skill update and understand it may instruct agents to run tools or shell commands",checked:B,onChange:e=>q(e.target.checked)}),"I reviewed this skill and understand it may instruct agents to run tools/shell commands."]}),(0,a.jsxs)("div",{className:"flex gap-2 mt-2",children:[(0,a.jsx)(l.$n,{size:"sm",disabled:!B||!!x,loading:"upd-apply"===x,onClick:ep,children:"Apply update"}),(0,a.jsx)(l.$n,{size:"sm",variant:"ghost",disabled:!!x,onClick:()=>{W(null),q(!1)},children:"Cancel"})]})]}),(0,a.jsxs)(l.Zp,{padding:"md",children:[(0,a.jsx)("h2",{className:"text-sm font-semibold text-text-main mb-2",children:"Add skill (paste SKILL.md)"}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)("input",{className:"w-full bg-surface border border-border rounded-md px-2 py-1.5 text-xs font-mono",placeholder:"skill-id (e.g. my-review)",value:J,onChange:e=>G(e.target.value)}),(0,a.jsx)("textarea",{className:"w-full h-40 bg-surface border border-border rounded-md px-2 py-1.5 text-xs font-mono",placeholder:"---\nname: my-skill\ndescription: ...\n---\n\n# ...",value:_,onChange:e=>F(e.target.value)}),(0,a.jsx)(l.$n,{size:"sm",disabled:!J||!_||!!x,loading:"skill-add"===x,onClick:em,children:"Add to library"})]})]})]}),!c&&"mcp"===y&&(0,a.jsxs)("div",{className:"space-y-4",children:[(e=C.find(e=>"executor"===e.id)||{id:"executor",name:"Executor.sh (Tool Gateway)",description:"Unified MCP tool gateway for OpenAPI, GraphQL, MCP servers & sandboxed JavaScript functions (executor.sh)",transport:"stdio",command:"npx",args:["-y","executor","mcp"],notes:"Executor.sh tool execution gateway (https://executor.sh)",docsUrl:"https://executor.sh"},s=(t?.mcpServers||[]).some(e=>"executor"===e.id||"sb-executor"===e.id),(0,a.jsx)(l.Zp,{padding:"md",className:"border-primary/30 bg-primary/5",children:(0,a.jsxs)("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[(0,a.jsxs)("div",{className:"space-y-1 max-w-xl",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-primary text-[20px]",children:"hub"}),(0,a.jsx)("h2",{className:"text-sm font-semibold text-text-main",children:"Executor.sh Tool Gateway"}),(0,a.jsx)(l.Ex,{variant:"primary",size:"sm",children:"FEATURED GATEWAY"}),s&&(0,a.jsx)(l.Ex,{variant:"default",size:"sm",children:"Installed in Library"})]}),(0,a.jsx)("p",{className:"text-xs text-text-muted leading-relaxed",children:"Connect your AI agents to OpenAPI, GraphQL, MCP servers, and custom JavaScript functions through a single managed endpoint with local-first credential management."}),(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-3 pt-1 text-[11px] font-mono text-text-subtle",children:[(0,a.jsxs)("span",{children:["Command: ",(0,a.jsx)("code",{className:"text-text-main",children:"npx -y executor mcp"})]}),(0,a.jsx)("span",{children:"\xb7"}),(0,a.jsxs)("a",{href:"https://executor.sh",target:"_blank",rel:"noopener noreferrer",className:"text-primary hover:underline inline-flex items-center gap-0.5",children:["executor.sh docs",(0,a.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:"open_in_new"})]})]})]}),(0,a.jsxs)("div",{className:"flex flex-wrap gap-2 shrink-0",children:[(0,a.jsx)(l.$n,{size:"sm",variant:s?"outline":"primary",disabled:s||!!x,loading:"mcp-preset-executor"===x,onClick:()=>en(e),children:s?"Installed":"Add Executor Gateway"}),(0,a.jsx)(l.$n,{size:"sm",variant:"secondary",disabled:!!x,onClick:()=>ed(e),children:"Customize"})]})]})})),C.filter(e=>"executor"!==e.id).length>0&&(0,a.jsxs)(l.Zp,{padding:"md",children:[(0,a.jsx)("h2",{className:"text-sm font-semibold text-text-main mb-1",children:"Popular MCP Server Presets"}),(0,a.jsx)("p",{className:"text-[11px] text-text-subtle mb-3",children:"1-click presets for common Model Context Protocol servers."}),(0,a.jsx)("div",{className:"grid gap-2 sm:grid-cols-3",children:C.filter(e=>"executor"!==e.id).map(e=>{let s=(t?.mcpServers||[]).some(s=>s.id===e.id||s.id===`sb-${e.id}`);return(0,a.jsxs)("div",{className:"p-3 rounded-lg border border-border-subtle bg-surface-2/40 hover:bg-surface-2/70 flex flex-col justify-between gap-2",children:[(0,a.jsxs)("div",{children:[(0,a.jsxs)("div",{className:"flex items-center justify-between gap-1",children:[(0,a.jsx)("span",{className:"text-xs font-semibold text-text-main",children:e.name}),s&&(0,a.jsx)(l.Ex,{size:"sm",variant:"default",children:"Installed"})]}),(0,a.jsx)("p",{className:"text-[11px] text-text-muted mt-1 line-clamp-2",children:e.description})]}),(0,a.jsxs)("div",{className:"flex gap-1.5 pt-1",children:[(0,a.jsx)(l.$n,{size:"sm",variant:"secondary",disabled:s||!!x,loading:x===`mcp-preset-${e.id}`,onClick:()=>en(e),children:s?"Installed":"Add"}),(0,a.jsx)(l.$n,{size:"sm",variant:"ghost",disabled:!!x,onClick:()=>ed(e),children:"Customize"})]})]},e.id)})})]}),(0,a.jsxs)(l.Zp,{padding:"md",children:[(0,a.jsx)("h2",{className:"text-sm font-semibold text-text-main mb-1",children:"MCP servers in library"}),(0,a.jsxs)("p",{className:"text-[11px] text-text-subtle mb-3",children:["Prefer ",(0,a.jsxs)("code",{className:"font-mono",children:["$","{GITHUB_TOKEN}"]})," style env values — do not paste raw API keys if you can avoid it. Keys are projected as"," ",(0,a.jsx)("code",{className:"font-mono",children:"sb-*"})," only."]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(t?.mcpServers||[]).map(e=>(0,a.jsxs)("div",{className:"flex items-start justify-between gap-2 p-3 rounded-lg border border-border-subtle",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:"text-sm text-text-main font-medium",children:e.name}),(0,a.jsx)("code",{className:"text-[10px] text-text-subtle",children:e.id}),(0,a.jsxs)("div",{className:"text-[11px] text-text-muted mt-1",children:[e.transport||"stdio"," \xb7"," ",e.command?`${e.command} ${(e.args||[]).join(" ")}`:e.url]})]}),(0,a.jsx)(l.$n,{size:"sm",variant:"ghost",onClick:()=>eo(e.id),children:"Remove"})]},e.id)),!t?.mcpServers?.length&&(0,a.jsx)("p",{className:"text-xs text-text-muted",children:"No MCP servers in library yet. Add Executor.sh or another preset above."})]})]}),(0,a.jsxs)(l.Zp,{padding:"md",children:[(0,a.jsx)("h2",{className:"text-sm font-semibold text-text-main mb-3",children:"Add Custom MCP server"}),(0,a.jsxs)("form",{className:"grid gap-2 sm:grid-cols-2",onSubmit:ei,children:[(0,a.jsx)("input",{required:!0,className:"bg-surface border border-border rounded-md px-2 py-1.5 text-xs font-mono",placeholder:"id (e.g. filesystem)",value:v.id,onChange:e=>w({...v,id:e.target.value})}),(0,a.jsx)("input",{className:"bg-surface border border-border rounded-md px-2 py-1.5 text-xs",placeholder:"Display name",value:v.name,onChange:e=>w({...v,name:e.target.value})}),(0,a.jsxs)("select",{className:"bg-surface border border-border rounded-md px-2 py-1.5 text-xs",value:v.transport,onChange:e=>w({...v,transport:e.target.value}),children:[(0,a.jsx)("option",{value:"stdio",children:"stdio (command)"}),(0,a.jsx)("option",{value:"http",children:"http (url)"}),(0,a.jsx)("option",{value:"sse",children:"sse (url)"})]}),"stdio"===v.transport?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("input",{className:"bg-surface border border-border rounded-md px-2 py-1.5 text-xs font-mono",placeholder:"command",value:v.command,onChange:e=>w({...v,command:e.target.value})}),(0,a.jsx)("input",{className:"sm:col-span-2 bg-surface border border-border rounded-md px-2 py-1.5 text-xs font-mono",placeholder:"args (space-separated)",value:v.args,onChange:e=>w({...v,args:e.target.value})})]}):(0,a.jsx)("input",{className:"sm:col-span-1 bg-surface border border-border rounded-md px-2 py-1.5 text-xs font-mono",placeholder:"https://...",value:v.url,onChange:e=>w({...v,url:e.target.value})}),(0,a.jsx)("div",{className:"sm:col-span-2",children:(0,a.jsx)(l.$n,{size:"sm",type:"submit",loading:"mcp"===x,disabled:!!x,children:"Save to library"})})]})]})]}),!c&&"catalog"===y&&(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)(l.Zp,{padding:"md",children:[(0,a.jsx)("h2",{className:"text-sm font-semibold text-text-main mb-1",children:"Smart Import (Command, Repo, or URL)"}),(0,a.jsxs)("p",{className:"text-[11px] text-text-subtle mb-3",children:["Paste CLI commands like ",(0,a.jsx)("code",{className:"font-mono text-primary",children:"npx skills add citrolabs/ego-lite"}),", GitHub repositories like ",(0,a.jsx)("code",{className:"font-mono text-primary",children:"citrolabs/ego-lite"}),", or direct ",(0,a.jsx)("code",{className:"font-mono text-primary",children:"SKILL.md"})," URLs."]}),(0,a.jsxs)("form",{onSubmit:eh,className:"space-y-2.5",children:[(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)("input",{className:"flex-1 bg-surface border border-border rounded-md px-2.5 py-1.5 text-xs font-mono text-text-main placeholder:text-text-subtle",placeholder:"e.g. npx skills add citrolabs/ego-lite, anthropics/skills, or https://github.com/...",value:P,disabled:!!x,onChange:e=>{$(e.target.value),T("")}}),(0,a.jsx)(l.$n,{size:"sm",type:"submit",disabled:!P.trim()||!!x,loading:"resolve"===x,children:"Resolve & Preview"}),P&&(0,a.jsx)(l.$n,{size:"sm",variant:"ghost",disabled:!!x,onClick:()=>{$(""),I([]),L(""),z(""),R(""),D(!1),T("")},children:"Clear"})]}),(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-1.5 text-[11px] text-text-subtle pt-1",children:[(0,a.jsx)("span",{className:"font-medium text-text-muted",children:"Quick try:"}),["npx skills add citrolabs/ego-lite","anthropics/skills","citrolabs/ego-lite"].map(e=>(0,a.jsx)("button",{type:"button",className:"px-2 py-0.5 rounded border border-border-subtle bg-surface-2 hover:bg-surface text-text-main hover:border-primary font-mono text-[10px] transition-colors cursor-pointer",disabled:!!x,onClick:()=>{$(e),T(""),p("resolve"),fetch("/api/agent-library/catalog",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"resolve",input:e})}).then(e=>e.json()).then(e=>{if(!e.ok)throw Error(e.message||e.error||"Resolution failed");let s=e.skills||[];I(s),1===s.length?(L(s[0].skillId),z(s[0].rawUrl),R(s[0].preview||""),D(!1),h.success(`Resolved skill: ${s[0].skillId}`)):s.length>1&&(L(""),z(""),R(""),D(!1),h.success(`Found ${s.length} skills in ${e.repo||"repository"}. Select one below.`))}).catch(e=>h.error(e.message)).finally(()=>p(""))},children:e},e))]})]}),E.length>1&&(0,a.jsxs)("div",{className:"mt-4 pt-3 border-t border-border-subtle space-y-2",children:[(0,a.jsxs)("div",{className:"text-xs font-medium text-text-main flex items-center gap-1.5",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[16px] text-primary",children:"folder_open"}),"Found ",E.length," skills in repository:"]}),(0,a.jsx)("div",{className:"grid gap-2 sm:grid-cols-2",children:E.map(e=>(0,a.jsxs)("div",{className:`p-2.5 rounded-lg border transition-all text-xs cursor-pointer ${M===e.rawUrl?"border-primary bg-primary/5 shadow-sm":"border-border-subtle hover:border-border bg-surface-2/40"}`,onClick:()=>{L(e.skillId),z(e.rawUrl),D(!1),e.preview?R(e.preview):eu(e.rawUrl)},children:[(0,a.jsxs)("div",{className:"flex items-center justify-between gap-1",children:[(0,a.jsx)("span",{className:"font-semibold text-text-main",children:e.title||e.skillId}),(0,a.jsx)(l.Ex,{size:"sm",variant:M===e.rawUrl?"primary":"default",children:(0,a.jsxs)("code",{className:"text-[10px]",children:["sb-",e.skillId]})})]}),(0,a.jsx)("div",{className:"text-[11px] font-mono text-text-subtle mt-1 truncate",children:e.path}),e.description&&(0,a.jsx)("p",{className:"text-[11px] text-text-muted mt-1 line-clamp-2",children:e.description})]},e.path||e.skillId))})]}),M&&(0,a.jsxs)("div",{className:"mt-4 pt-3 border-t border-border-subtle space-y-3",children:[(0,a.jsxs)("div",{className:"grid gap-2 sm:grid-cols-2",children:[(0,a.jsxs)("label",{className:"flex flex-col gap-1",children:[(0,a.jsxs)("span",{className:"text-[11px] text-text-muted",children:["Skill ID (installed as sb-",A||"...",")"]}),(0,a.jsx)("input",{className:"w-full bg-surface border border-border rounded-md px-2 py-1.5 text-xs font-mono text-text-main",placeholder:"skill-id",value:A,disabled:!!x,onChange:e=>L(e.target.value)})]}),(0,a.jsxs)("label",{className:"flex flex-col gap-1",children:[(0,a.jsx)("span",{className:"text-[11px] text-text-muted",children:"Resolved Raw Source URL"}),(0,a.jsx)("input",{className:"w-full bg-surface border border-border rounded-md px-2 py-1.5 text-xs font-mono text-text-main",placeholder:"https://.../SKILL.md",value:M,disabled:!!x,onChange:e=>z(e.target.value)})]})]}),U?(0,a.jsxs)("div",{className:"space-y-1",children:[(0,a.jsx)("span",{className:"text-[11px] text-text-muted",children:"SKILL.md preview:"}),(0,a.jsx)("pre",{className:"text-[10px] font-mono max-h-56 overflow-auto bg-surface-2 p-2.5 rounded-lg border border-border-subtle whitespace-pre-wrap",children:U})]}):(0,a.jsx)(l.$n,{size:"sm",variant:"secondary",disabled:!M||!!x,loading:"preview"===x,onClick:()=>eu(M),children:"Load Preview"}),(0,a.jsxs)("label",{className:"flex items-start gap-2 text-xs text-text-muted cursor-pointer",children:[(0,a.jsx)("input",{type:"checkbox","aria-label":"I reviewed this catalog skill and understand it may instruct agents to run tools or shell commands",checked:Z,disabled:!!x,onChange:e=>D(e.target.checked)}),(0,a.jsx)("span",{children:"I reviewed this skill and understand it may instruct agents to run tools or shell commands."})]}),(0,a.jsx)("div",{className:"flex items-center gap-2",children:(0,a.jsx)(l.$n,{size:"sm",disabled:!M||!A||!Z||!!x,loading:"catalog"===x,onClick:eb,children:"Install into library"})})]}),O&&(0,a.jsxs)("div",{className:"mt-4 p-3 rounded-lg bg-green-500/10 border border-green-500/30 flex flex-wrap items-center justify-between gap-3",children:[(0,a.jsxs)("div",{className:"text-xs text-green-700 dark:text-green-300",children:[(0,a.jsx)("strong",{children:O})," is installed in your Switchboard library. Apply sync to project it into Claude, Codex, Gemini, OpenCode, and Cursor."]}),(0,a.jsx)(l.$n,{size:"sm",variant:"primary",loading:"apply"===x,disabled:!!x,onClick:()=>er("apply"),children:"Apply sync to all agents now"})]})]}),(0,a.jsxs)(l.Zp,{padding:"md",children:[(0,a.jsx)("h2",{className:"text-sm font-semibold text-text-main mb-1",children:"Trusted presets"}),(0,a.jsx)("p",{className:"text-[11px] text-text-subtle mb-3",children:"One-click standard skills from official sources."}),(0,a.jsx)("div",{className:"space-y-2",children:N.map(e=>(0,a.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2 p-2.5 rounded-lg border border-border-subtle bg-surface-2/40 hover:bg-surface-2/70 transition-colors",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:"text-xs font-semibold text-text-main",children:e.name}),(0,a.jsx)("div",{className:"text-[11px] text-text-muted",children:e.description})]}),(0,a.jsxs)("div",{className:"flex gap-1.5",children:[(0,a.jsx)(l.$n,{size:"sm",variant:"ghost",onClick:()=>{$(e.rawUrl),z(e.rawUrl),L(e.skillId),I([]),T(""),eu(e.rawUrl)},children:"Preview"}),(0,a.jsx)(l.$n,{size:"sm",variant:"secondary",onClick:()=>{$(e.rawUrl),z(e.rawUrl),L(e.skillId),I([]),D(!1),T(""),eu(e.rawUrl)},children:"Select"})]})]},e.id))})]})]}),!c&&"advanced"===y&&(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)(l.Zp,{padding:"md",children:[(0,a.jsx)("h2",{className:"text-sm font-semibold text-text-main mb-2",children:"Clean managed projections"}),(0,a.jsxs)("p",{className:"text-xs text-text-muted mb-3",children:["Removes only ",(0,a.jsx)("code",{className:"font-mono",children:"sb-*"})," skills and MCP keys written by Switchboard. Your other skills/MCP stay untouched."]}),(0,a.jsx)(l.$n,{size:"sm",variant:"outline",disabled:!!x,loading:"clean"===x,onClick:async()=>{await (0,i.l)({message:"Remove all Switchboard-managed skill/MCP projections from targets?",confirmText:"Continue"})&&er("clean")},children:"Clean managed only"})]}),(0,a.jsxs)(l.Zp,{padding:"md",children:[(0,a.jsx)("h2",{className:"text-sm font-semibold text-text-main mb-2",children:"Export AgentSync layout"}),(0,a.jsxs)("p",{className:"text-xs text-text-muted mb-2",children:["Writes a coexistence-friendly ",(0,a.jsx)("code",{className:"font-mono",children:".agents/"})," tree (skills + agentsync.toml). Does not run agentsync. Paths must be under your home or project directory."]}),(0,a.jsx)("input",{className:"w-full bg-surface border border-border rounded-md px-2 py-1.5 text-xs font-mono mb-2",placeholder:"Optional dest (default ~/switchboard-agents-export/.agents)",value:Y,onChange:e=>V(e.target.value)}),(0,a.jsx)(l.$n,{size:"sm",variant:"secondary",disabled:!!x,loading:"export"===x,onClick:eg,children:"Export"})]}),(0,a.jsxs)(l.Zp,{padding:"md",children:[(0,a.jsx)("h2",{className:"text-sm font-semibold text-text-main mb-2",children:"Coexistence"}),(0,a.jsxs)("ul",{className:"text-xs text-text-muted space-y-1 list-disc pl-4",children:[(0,a.jsxs)("li",{children:["Switchboard only owns ",(0,a.jsx)("code",{className:"font-mono",children:"sb-*"})," skill directories and MCP keys."]}),(0,a.jsx)("li",{children:"AgentSync / skillbook may manage other paths — avoid pointing both at the same un-namespaced skill."}),(0,a.jsx)("li",{children:"Product skills for HTTP agents remain under Dashboard → Skills (separate)."})]})]})]})]})}function o({label:e,value:s}){return(0,a.jsxs)(l.Zp,{padding:"sm",children:[(0,a.jsx)("div",{className:"text-[10px] uppercase tracking-wide text-text-subtle font-semibold",children:e}),(0,a.jsx)("div",{className:"text-sm text-text-main mt-1 font-medium truncate",title:s,children:s})]})}}},e=>{e.O(0,[2574,3862,782,8500,594,1321,4707,1330,8441,3794,7358],()=>e(e.s=5194)),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4465],{35497:(e,t,r)=>{"use strict";r.d(t,{x0:()=>j.default,Ex:()=>d.default,$n:()=>a.default,nh:()=>C.default,Zp:()=>l.default,Qv:()=>o.CardSkeleton,CK:()=>h.default,uo:()=>n.ConfirmModal,G9:()=>w.default,wI:()=>y.default,vj:()=>N.default,vE:()=>b.default,pd:()=>s.default,Mh:()=>v.default,uR:()=>p.default,Nf:()=>x.default,aF:()=>n.default,rq:()=>u.default,gw:()=>S.default,LF:()=>m.default,Wx:()=>k.default,gM:()=>g.default,Iz:()=>I.default,l6:()=>i.default,lM:()=>c.default,m_:()=>A.default,jK:()=>f.default});var a=r(92542),s=r(11910),i=r(98),l=r(84588),n=r(81127),o=r(25086);r(56319);var d=r(56061),c=r(98542);r(38587),r(21110),r(92622),r(8823),r(92173);var m=r(90882),u=r(72908),p=r(28815),h=r(45455),x=r(28058),f=r(4809);r(21931),r(80752),r(40197);var g=r(23615);r(44736);var v=r(62899);r(94230);var w=r(30815),b=r(23936),N=r(95088),y=r(73579),j=r(96748),S=r(4823),I=r(28067),A=r(97677),k=r(51825),C=r(29366);r(76361),r(91450)},55774:(e,t,r)=>{Promise.resolve().then(r.bind(r,88512))},88512:(e,t,r)=>{"use strict";r.d(t,{default:()=>w});var a=r(95155),s=r(12115),i=r(35497),l=r(28777),n=r(88105),o=r(5772);let d="basic-chat.sessions",c="basic-chat.activeSessionId",m="basic-chat.activeProviderId",u="basic-chat.draft";function p(){return globalThis.crypto?.randomUUID?globalThis.crypto.randomUUID():`chat_${Date.now()}_${Math.random().toString(16).slice(2)}`}function h(e){if("string"==typeof e)return e;if(null==e)return"";if(Array.isArray(e))return e.map(h).filter(Boolean).join(" ");if("object"==typeof e){if("string"==typeof e.message)return e.message;if("string"==typeof e.error)return e.error;try{return JSON.stringify(e)}catch{}}return String(e)}function x(e=""){let t=h(e).replace(/\s+/g," ").trim();return t?t.length>52?`${t.slice(0,52).trimEnd()}…`:t:"New chat"}async function f(e){return await new Promise((t,r)=>{let a=new FileReader;a.onload=()=>t(String(a.result||"")),a.onerror=()=>r(a.error||Error("Failed to read file")),a.readAsDataURL(e)})}function g(e){return e?.name||function(e=""){return String(e).replace(/[-_]/g," ").replace(/\b\w/g,e=>e.toUpperCase()).trim()||"Unknown"}(e?.provider||e?.id||"provider")}function v(e){return h(e?.providerSpecificData?.prefix)||h(e?.provider)||h(e?.id)}function w(){let[e,t]=(0,s.useState)([]),[r,w]=(0,s.useState)(!0),[b,N]=(0,s.useState)(""),[y,j]=(0,s.useState)(()=>{try{let e=function(e,t){try{return JSON.parse(e)}catch{return t}}(globalThis.localStorage.getItem(d),[]);return Array.isArray(e)?e.map(e=>({...e,messages:Array.isArray(e.messages)?e.messages:[]})):[]}catch{return[]}}),[S,I]=(0,s.useState)(()=>globalThis.localStorage.getItem(c)||""),[A,k]=(0,s.useState)(()=>globalThis.localStorage.getItem(m)||""),[C,D]=(0,s.useState)(""),[M,$]=(0,s.useState)(()=>globalThis.localStorage.getItem(u)||""),[O,_]=(0,s.useState)([]),[E,T]=(0,s.useState)(!1),[R,U]=(0,s.useState)(""),[z,q]=(0,s.useState)(""),[P,F]=(0,s.useState)(!1),[J,K]=(0,s.useState)(!1),[B,L]=(0,s.useState)(!1),W=(0,s.useRef)(null),G=(0,s.useRef)(null),H=(0,s.useRef)(!1),Q=(0,s.useRef)(null),Y=(0,s.useRef)(null);(0,s.useEffect)(()=>{F(!0)},[]),(0,s.useEffect)(()=>{let e=!1;return async function(){w(!0),N("");try{let[r,a]=await Promise.all([fetch("/api/providers",{cache:"no-store"}),fetch("/api/combos",{cache:"no-store"}).catch(()=>null)]),s=await r.json().catch(()=>({})),i=a&&a.ok?await a.json().catch(()=>({})):{},o=Array.isArray(s.connections)?s.connections.filter(e=>e?.isActive!==!1):[],d=Array.isArray(i?.combos)?i.combos.filter(e=>!e.kind||"llm"===e.kind):[];if(0===o.length&&0===d.length){e||(t([]),N("No providers connected yet."));return}let c=new Map;for(let e of o){let t=e.provider||e.id,r=g(e),a=(0,n.mq)(t)?"openai-compatible":(0,n.gb)(t)?"anthropic-compatible":t;c.has(t)||c.set(t,{providerId:t,providerName:r,providerType:a,connections:[],models:[]});let s=c.get(t);s.providerName=s.providerName||r,s.providerType=s.providerType||a,s.connections.push(e);let i=(0,l.KC)(t).map(t=>(function(e,t){if(!e?.id)return null;let r=`${v(t)}/${e.id}`;return{id:r,requestModel:r,name:e.name||e.id,providerId:t.provider,providerName:g(t),source:"static"}})(t,e)).filter(Boolean);s.models.push(...i)}for(let e of(await Promise.all(o.map(async e=>{try{let t=await fetch(`/api/providers/${e.id}/models`,{cache:"no-store"}),r=await t.json().catch(()=>({}));if(!t.ok)return{connection:e,models:[]};let a=(Array.isArray(r?.models)?r.models:Array.isArray(r?.data)?r.data:Array.isArray(r?.results)?r.results:Array.isArray(r)?r:[]).map(t=>(function(e,t){let r="string"==typeof e?e:e?.id||e?.name||e?.model||"";if(!r)return null;let a="string"==typeof e?e:e?.name||e?.displayName||r,s=r;if((0,n.mq)(t.provider)||(0,n.gb)(t.provider)){let e=v(t);e&&!r.startsWith(`${e}/`)&&(s=`${e}/${r}`)}return{id:s,requestModel:s,name:a,providerId:t.provider,providerName:g(t),source:"live"}})(t,e)).filter(Boolean);return{connection:e,models:a}}catch{return{connection:e,models:[]}}})))){let t=e.connection.provider||e.connection.id,r=c.get(t);r&&r.models.push(...e.models)}let m=Array.from(c.values()).map(e=>({...e,models:(function(e){let t=new Map;for(let r of e)r?.id&&(t.has(r.id)||t.set(r.id,r));return Array.from(t.values())})(e.models).sort((e,t)=>e.name.localeCompare(t.name))})).filter(e=>e.models.length>0).sort((e,t)=>e.providerName.localeCompare(t.providerName));if(d.length>0){let e=d.map(e=>({id:e.name,requestModel:e.name,name:`${e.name} (${e.models?.length||0} models)`,providerId:"combos",providerName:"Combos & Routing",source:"combo"}));m.unshift({providerId:"combos",providerName:"Combos & Routing",providerType:"combo",connections:[],models:e})}e||(t(m),0===m.length&&N("Providers connected but no models available."))}catch(r){e||(N(h(r?.message)||"Failed to load providers/models."),t([]))}finally{e||w(!1)}}(),()=>{e=!0}},[]),(0,s.useEffect)(()=>{let e=e=>{Q.current&&!Q.current.contains(e.target)&&K(!1),Y.current&&!Y.current.contains(e.target)&&L(!1)};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[]);let Z=(0,s.useMemo)(()=>{let t=new Map;for(let r of e)for(let e of r.models)t.set(e.id,{...e,providerId:r.providerId,providerName:r.providerName});return t},[e]),V=(0,s.useMemo)(()=>e.find(e=>e.providerId===A)||e[0]||null,[e,A]),X=(0,s.useMemo)(()=>{if(C&&Z.has(C))return Z.get(C);if(S){let e=y.find(e=>e.id===S);if(e?.modelId&&Z.has(e.modelId))return Z.get(e.modelId)}return V?.models?.[0]||null},[C,Z,V,y,S]),ee=(0,s.useMemo)(()=>y.find(e=>e.id===S)||null,[y,S]),et=ee?.messages||[],er=(0,s.useMemo)(()=>[...y].sort((e,t)=>new Date(t.updatedAt).getTime()-new Date(e.updatedAt).getTime()),[y]),ea=!E&&!!X&&(M.trim().length>0||O.length>0);(0,s.useEffect)(()=>{if(P)try{globalThis.localStorage.setItem(d,JSON.stringify(y)),globalThis.localStorage.setItem(c,S),globalThis.localStorage.setItem(m,A),globalThis.localStorage.setItem(u,M)}catch{}},[P,y,S,A,M]),(0,s.useEffect)(()=>{if(!P||r||H.current||0===e.length)return;let t=e.find(e=>e.providerId===A)||e[0],a=C&&Z.has(C)?Z.get(C):t.models[0];if(y.length>0){let e=y.find(e=>e.id===S)||y[0],r=e?.modelId&&Z.has(e.modelId)?Z.get(e.modelId):a;H.current=!0,I(e.id),k(r?.providerId||t.providerId),D(r?.id||a.id);return}let s={id:p(),title:"New chat",providerId:t.providerId,providerName:t.providerName,modelId:a.id,modelName:a.name,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString(),messages:[]};H.current=!0,j([s]),I(s.id),k(t.providerId),D(a.id)},[P,r,e,Z,y,S,A,C]);let es=(e,t)=>{j(r=>r.map(r=>r.id===e?t({...r,messages:Array.isArray(r.messages)?r.messages.map(e=>({...e})):[]}):r))},ei=e=>e?{id:p(),title:"New chat",providerId:e.providerId,providerName:e.providerName,modelId:e.id,modelName:e.name,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString(),messages:[]}:null,el=async e=>{let t=Array.from(e.target.files||[]);if(0===t.length)return;let r=t.filter(e=>e.type.startsWith("image/"));if(0===r.length){e.target.value="";return}let a=await Promise.all(r.map(async e=>({id:p(),name:e.name,type:e.type,size:e.size,dataUrl:await f(e)})));_(e=>[...e,...a]),e.target.value=""},en=async()=>{let e=X||V?.models?.[0]||null;if(!e)return;let t=M.trim();if(!t&&0===O.length)return;let r=S,a=y.find(e=>e.id===r);if(!a){if(!(a=ei(e)))return;r=a.id,j(e=>[a,...e]),I(r)}let s={id:p(),role:"user",content:t,attachments:O.map(e=>({id:e.id,name:e.name,type:e.type,dataUrl:e.dataUrl})),createdAt:new Date().toISOString()},i=p(),l={id:i,role:"assistant",content:"",createdAt:new Date().toISOString(),status:"streaming"},n=[...a.messages||[],s,l];j(a=>a.map(a=>a.id===r?{...a,providerId:e.providerId,providerName:e.providerName,modelId:e.id,modelName:e.name,messages:n,updatedAt:new Date().toISOString(),title:"New chat"===a.title?x(t):a.title}:a)),$(""),_([]),T(!0),U(i),q(""),G.current?.abort(),G.current=new AbortController;let o=n.filter(e=>"assistant"!==e.role||e.id!==i).map(e=>({role:e.role,content:"user"===e.role?function(e){let t=h(e.content).trim(),r=Array.isArray(e.attachments)?e.attachments:[];if(0===r.length)return t;let a=[];for(let e of(t&&a.push({type:"text",text:t}),r))e?.dataUrl&&a.push({type:"image_url",image_url:{url:e.dataUrl}});return a.length>0?a:t}(e):e.content}));try{var d;let a,s=await fetch("/v1/chat/completions",{method:"POST",headers:{"Content-Type":"application/json",Accept:"text/event-stream"},body:JSON.stringify({model:e.requestModel||e.id,messages:o,stream:!0}),signal:G.current.signal});if(!s.ok){let e=await s.json().catch(()=>({}));throw Error(h(e.error||e.message||`Request failed (${s.status})`))}let l=s.body?.getReader();if(!l){let e=await s.json().catch(()=>({})),t=h(e?.choices?.[0]?.message?.content||e?.output_text||e?.error||e?.message||"");es(r,e=>({...e,messages:e.messages.map(e=>e.id===i?{...e,content:t,status:"done"}:e),updatedAt:new Date().toISOString()}));return}let n=new TextDecoder,c="",m="";for(;;){let{value:e,done:t}=await l.read();if(t)break;let a=(c+=n.decode(e,{stream:!0})).split(/\r?\n/);for(let e of(c=a.pop()||"",a)){let t=e.trim();if(!t.startsWith("data:"))continue;let a=t.slice(5).trim();if(a&&"[DONE]"!==a)try{let e=JSON.parse(a),t=function(e){if(!e||"object"!=typeof e)return"";let t=e.choices?.[0];return[(t?.delta||{}).content,t?.message?.content,e.output_text,e.text].map(h).filter(Boolean)[0]||""}(e);if(!t)continue;m+=t,q(m),es(r,e=>({...e,messages:e.messages.map(e=>e.id===i?{...e,content:m,status:"streaming"}:e),updatedAt:new Date().toISOString()}))}catch{}}}es(r,e=>({...e,messages:e.messages.map(e=>e.id===i?{...e,content:m||e.content,status:"done"}:e),updatedAt:new Date().toISOString()})),d=r,a=x(t),es(d,e=>({...e,title:"New chat"===e.title?a:e.title,updatedAt:new Date().toISOString()}))}catch(e){if("AbortError"===e.name)es(r,e=>({...e,messages:e.messages.flatMap(e=>e.id!==i?[e]:h(e.content)?[{...e,status:"stopped"}]:[]),updatedAt:new Date().toISOString()}));else{let t=h(e?.message||e);es(r,e=>({...e,messages:e.messages.map(e=>e.id===i?{...e,content:e.content||`Error: ${t}`,status:"error"}:e),updatedAt:new Date().toISOString()})),N(t||"Failed to send message.")}}finally{T(!1),U(""),q(""),G.current=null}},eo=X?`${X.name}`:"Select model",ed=X?X.requestModel:"Choose from connected providers";return(0,a.jsx)("div",{className:"relative flex-1 flex flex-col h-full min-h-0 min-w-0 bg-[#212121] text-white overflow-hidden",children:(0,a.jsxs)("div",{className:"relative mx-auto flex flex-1 h-full min-h-0 w-full max-w-4xl flex-col",children:[(0,a.jsxs)("div",{className:"flex shrink-0 items-center justify-between gap-3 px-4 py-3 lg:px-6",children:[(0,a.jsxs)("div",{ref:Q,className:"relative",children:[(0,a.jsx)("button",{type:"button",onClick:()=>K(e=>!e),className:"flex items-center gap-3 rounded-2xl border border-white/10 bg-white/5 px-4 py-3 text-left transition hover:bg-white/8",children:(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("span",{className:"text-sm font-semibold text-white",children:eo}),(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px] text-white/70",children:"expand_more"})]}),(0,a.jsx)("p",{className:"truncate text-xs text-white/55",children:ed})]})}),J?(0,a.jsxs)("div",{className:"absolute left-0 top-[calc(100%+10px)] z-30 w-[min(520px,calc(100vw-2rem))] overflow-hidden rounded-[20px] border border-white/10 bg-[#262626] shadow-2xl shadow-black/50",children:[(0,a.jsxs)("div",{className:"border-b border-white/10 px-4 py-3",children:[(0,a.jsx)("p",{className:"text-xs uppercase tracking-[0.22em] text-white/45",children:"Models"}),(0,a.jsx)("p",{className:"text-sm text-white/75",children:"Only from connected providers"})]}),(0,a.jsx)("div",{className:"max-h-[60vh] overflow-y-auto p-2 custom-scrollbar",children:e.map(e=>(0,a.jsxs)("div",{className:"mb-2 rounded-[16px] border border-white/10 bg-black/20 p-2",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between px-2 py-2",children:[(0,a.jsx)("p",{className:"text-sm font-semibold text-white",children:e.providerName}),(0,a.jsx)(i.Ex,{size:"sm",variant:"default",children:e.models.length})]}),(0,a.jsx)("div",{className:"grid gap-2 sm:grid-cols-2",children:e.models.map(e=>{let t=e.id===C;return(0,a.jsx)("button",{type:"button",onClick:()=>(e=>{let t=Z.get(e);if(!t)return;let r=y.find(e=>e.id===S);if(r&&r.messages.length>0){let e=ei(t);if(!e)return;j(t=>[e,...t]),I(e.id)}else if(r)j(e=>e.map(e=>e.id===r.id?{...e,providerId:t.providerId,providerName:t.providerName,modelId:t.id,modelName:t.name}:e)),I(r.id);else{let e=ei(t);if(!e)return;j(t=>[e,...t]),I(e.id)}k(t.providerId),D(t.id),K(!1)})(e.id),className:`rounded-[14px] border px-3 py-3 text-left transition ${t?"border-blue-400/40 bg-blue-500/15":"border-white/10 bg-white/5 hover:bg-white/8"}`,children:(0,a.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsx)("p",{className:"truncate text-sm font-medium text-white",children:e.name}),(0,a.jsx)("p",{className:"truncate text-[11px] text-white/45",children:e.requestModel})]}),t?(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px] text-blue-300",children:"check_circle"}):null]})},e.id)})})]},e.providerId))})]}):null]}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(i.$n,{variant:"ghost",size:"sm",icon:"add",onClick:()=>{if(!X)return;let e=ei(X);e&&(j(t=>[e,...t]),I(e.id),k(e.providerId),D(e.modelId),$(""),_([]),U(""),q(""))},disabled:!X,children:"New conversation"}),(0,a.jsx)("button",{type:"button",onClick:()=>L(e=>!e),className:"rounded-2xl border border-white/10 bg-white/5 px-4 py-3 text-sm text-white/80 transition hover:bg-white/8",children:"History"}),(0,a.jsx)(i.$n,{variant:"ghost",size:"sm",icon:"delete",onClick:()=>{if(!S)return;let e=y.filter(e=>e.id!==S),t=e[0]||null;j(e),t?(I(t.id),k(t.providerId),D(t.modelId)):(I(""),k(""),D(""))},disabled:!S||0===y.length,children:"Clear"})]})]}),B?(0,a.jsxs)("div",{ref:Y,className:"absolute right-4 top-[72px] z-20 w-[min(360px,calc(100vw-2rem))] rounded-[20px] border border-white/10 bg-[#262626] p-2 shadow-2xl shadow-black/50 lg:right-6",children:[(0,a.jsx)("div",{className:"px-3 py-2",children:(0,a.jsx)("p",{className:"text-xs uppercase tracking-[0.22em] text-white/45",children:"Recent chats"})}),(0,a.jsx)("div",{className:"max-h-[48vh] space-y-2 overflow-y-auto p-1 custom-scrollbar",children:0===er.length?(0,a.jsx)("div",{className:"rounded-[16px] border border-dashed border-white/10 bg-white/5 p-4 text-sm text-white/55",children:"No conversations yet."}):er.map(e=>{let t=e.id===S,r=[...e.messages||[]].reverse().find(e=>"user"===e.role)||e.messages?.[0];return(0,a.jsx)("button",{type:"button",onClick:()=>{var t;let r;return t=e.id,void((r=y.find(e=>e.id===t))&&(I(t),k(r.providerId||A),D(r.modelId||C),L(!1)))},className:`w-full rounded-[16px] border px-3 py-3 text-left transition ${t?"border-blue-400/40 bg-blue-500/15":"border-white/10 bg-white/5 hover:bg-white/8"}`,children:(0,a.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,a.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,a.jsx)("p",{className:"truncate text-sm font-medium text-white",children:e.title}),(0,a.jsx)("p",{className:"mt-1 truncate text-xs text-white/50",children:h(r?.content)||"Empty chat"})]}),(0,a.jsx)("span",{className:"text-[10px] text-white/40 shrink-0",children:function(e){if(!e)return"Now";let t=new Date(e).getTime();if(Number.isNaN(t))return"Now";let r=Math.max(1,Math.round((Date.now()-t)/6e4));if(r<60)return`${r}m`;let a=Math.round(r/60);return a<24?`${a}h`:`${Math.round(a/24)}d`}(e.updatedAt)})]})},e.id)})})]}):null,b?(0,a.jsx)("div",{className:"mt-4 rounded-[18px] border border-rose-500/20 bg-rose-500/10 px-4 py-3 text-rose-100",children:(0,a.jsxs)("div",{className:"flex items-start gap-3",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"error"}),(0,a.jsx)("p",{className:"text-sm leading-6",children:b})]})}):null,(0,a.jsxs)("div",{className:"flex flex-1 flex-col min-h-0",children:[(0,a.jsxs)("div",{className:"flex-1 overflow-y-auto py-4 custom-scrollbar",children:[0===et.length?(0,a.jsx)("div",{className:"flex min-h-[50vh] items-center justify-center px-4 text-center",children:(0,a.jsxs)("div",{className:"max-w-xl space-y-4",children:[(0,a.jsx)("div",{className:"mx-auto flex size-16 items-center justify-center rounded-[20px] border border-white/10 bg-white/5 text-white/80",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[30px]",children:"chat"})}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)("h2",{className:"text-2xl font-semibold text-white",children:"Start a conversation"}),(0,a.jsx)("p",{className:"text-sm leading-6 text-white/60",children:"Simple chat interface to interact with any AI model from connected providers. Select a model and start chatting!"})]})]})}):null,(0,a.jsx)("div",{className:"mx-auto flex w-full max-w-3xl flex-col gap-4 px-4",children:et.map(e=>{let t="user"===e.role,r="assistant"===e.role,s=r&&e.id===R&&"streaming"===e.status,i=h(e.content)||(r?z:"");return(0,a.jsx)("div",{className:`flex w-full ${t?"justify-end":"justify-start"} mb-6`,children:(0,a.jsxs)("div",{className:`max-w-[min(88%,42rem)] ${t?"rounded-3xl bg-[#2f2f2f] px-5 py-3.5 text-white":"text-white/90"}`,children:[(0,a.jsx)("div",{className:"mb-1 flex items-center justify-between gap-3",children:(0,a.jsx)("span",{className:"text-xs font-semibold",children:t?"You":X?.name||"Assistant"})}),e.attachments?.length?(0,a.jsx)("div",{className:"mb-3 grid grid-cols-2 gap-2 sm:grid-cols-3 mt-2",children:e.attachments.map(e=>(0,a.jsx)("a",{href:e.dataUrl,target:"_blank",rel:"noreferrer",className:"overflow-hidden rounded-[18px] border border-white/10 bg-black/20",children:(0,a.jsx)(o.default,{src:e.dataUrl,alt:e.name,width:320,height:112,unoptimized:!0,className:"h-28 w-full object-cover"})},e.id))}):null,(0,a.jsxs)("div",{className:"whitespace-pre-wrap break-words text-[15px] leading-7",children:[i,r&&s&&!z?(0,a.jsx)("span",{className:"inline-block animate-pulse",children:"▋"}):null]}),r&&"stopped"===e.status?(0,a.jsx)("p",{className:"mt-1 text-xs italic text-white/45",children:"Generation stopped"}):null]})},e.id)})})]}),(0,a.jsxs)("div",{className:"shrink-0 pt-2",children:[O.length>0?(0,a.jsx)("div",{className:"mx-auto mb-3 flex w-full max-w-3xl flex-wrap gap-2 px-4",children:O.map(e=>(0,a.jsxs)("div",{className:"flex items-center gap-2 rounded-full border border-white/10 bg-white/5 px-3 py-2",children:[(0,a.jsx)("span",{className:"text-xs text-white/80 max-w-[12rem] truncate",children:e.name}),(0,a.jsx)("button",{type:"button",onClick:()=>{var t;return t=e.id,void _(e=>e.filter(e=>e.id!==t))},className:"text-white/55 hover:text-white","aria-label":"Remove attachment",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"close"})})]},e.id))}):null,(0,a.jsx)("div",{className:"mx-auto w-full max-w-3xl px-4 pb-2",children:(0,a.jsxs)("div",{className:"rounded-[26px] bg-[#2f2f2f] px-3 pt-3 pb-2 shadow-[0_0_15px_rgba(0,0,0,0.10)] ring-1 ring-white/5",children:[(0,a.jsx)("textarea",{value:M,onChange:e=>$(e.target.value),onKeyDown:e=>{"Enter"===e.key&&!e.shiftKey&&(e.preventDefault(),ea&&en())},placeholder:"Message AI",rows:1,className:"w-full resize-none bg-transparent px-2 text-[15px] leading-6 text-white outline-none placeholder:text-white/40 custom-scrollbar max-h-[25vh] overflow-y-auto"}),(0,a.jsxs)("div",{className:"mt-2 flex items-center justify-between gap-3",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("button",{type:"button",onClick:()=>W.current?.click(),disabled:!X||r,"aria-label":"Attach image",className:"p-2 text-white/50 hover:text-white transition rounded-full hover:bg-white/5",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"attach_file"})}),(0,a.jsx)("input",{ref:W,type:"file",accept:"image/*",multiple:!0,className:"hidden",onChange:el}),(0,a.jsx)("span",{className:"text-xs font-medium text-white/30 truncate max-w-[120px]",children:X?X.name:"No model"})]}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[E?(0,a.jsx)("button",{type:"button",onClick:()=>{G.current?.abort()},"aria-label":"Stop generating",className:"p-2 text-white bg-white/10 hover:bg-white/20 transition rounded-full h-8 w-8 flex items-center justify-center",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"stop"})}):null,(0,a.jsx)("button",{type:"button",onClick:en,disabled:!ea,"aria-label":"Send message",className:`h-8 w-8 rounded-full flex items-center justify-center transition ${ea?"bg-white text-black hover:opacity-90":"bg-white/10 text-white/30 cursor-not-allowed"}`,children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"arrow_upward"})})]})]})]})})]}),(0,a.jsx)("p",{className:"mx-auto mt-2 max-w-3xl px-4 pb-4 text-center text-[11px] text-white/30",children:"Model list is filtered from connected providers."})]})]})})}}},e=>{e.O(0,[2574,3862,782,8500,594,1321,4707,1330,8441,3794,7358],()=>e(e.s=55774)),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3554],{7769:(e,s,r)=>{Promise.resolve().then(r.bind(r,85309))},85309:(e,s,r)=>{"use strict";r.d(s,{default:()=>u});var t=r(95155),a=r(12115),i=r(98500),l=r.n(i),o=r(35497),c=r(3534),d=r(28777),n=r(88105),x=r(28048),v=r(78559);function u({toolId:e,machineId:s}){let r=c.dM[e],[i,m]=(0,a.useState)([]),[h,p]=(0,a.useState)(!0),[f,P]=(0,a.useState)({}),[j,w]=(0,a.useState)([]);(0,a.useEffect)(()=>{let e=!0;return(async()=>{try{let[s,r]=await Promise.all([fetch("/api/providers"),fetch("/api/keys")]);if(!e)return;if(s.ok){let e=await s.json();m(e.connections||[])}if(r.ok){let e=await r.json();w(e.keys||[])}}catch(e){(0,v.s)("Error loading tool data:",e)}finally{e&&p(!1)}})(),()=>{e=!1}},[]);let b=()=>i.filter(e=>!1!==e.isActive).map(e=>({...e,provider:(0,n.rs)(e.provider)})),k=(0,a.useCallback)((e,s,r)=>{P(t=>t[e]?.[s]===r?t:{...t,[e]:{...t[e],[s]:r}})},[]);return r?h?(0,t.jsx)("div",{className:"mx-auto flex w-full max-w-5xl flex-col gap-4 px-1 sm:px-0",children:(0,t.jsx)(o.Qv,{})}):(0,t.jsxs)("div",{className:"mx-auto flex w-full max-w-5xl flex-col gap-4 px-1 sm:px-0",children:[(0,t.jsxs)(l(),{href:"/dashboard/cli-tools",className:"inline-flex items-center gap-1 text-sm text-text-muted hover:text-primary w-fit",children:[(0,t.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"arrow_back"}),"Back to CLI Tools"]}),s?(0,t.jsxs)("p",{className:"text-xs text-text-muted font-mono",children:["Machine: ",s]}):null,(()=>{let s,a,i,l=(s=b(),a=[],i=new Set,s.forEach(e=>{let s=(0,n.rs)(e.provider),r=d.Xg[s]||s;(0,d.KC)(s).forEach(t=>{let l=`${r}/${t.id}`;i.has(l)||(i.add(l),a.push({value:l,label:`${r}/${t.id}`,provider:s,alias:r,connectionName:e.name,modelId:t.id}))})}),a).length>0,o={tool:r,isExpanded:!0,onToggle:()=>{},baseUrl:window.location.origin,apiKeys:j,tunnelEnabled:!1,tunnelPublicUrl:"",tailscaleEnabled:!1,tailscaleUrl:"",cloudEnabled:!1};switch(e){case"claude":return(0,t.jsx)(x.Tk,{...o,activeProviders:b(),modelMappings:f[e]||{},onModelMappingChange:(s,r)=>k(e,s,r),hasActiveProviders:l});case"codex":return(0,t.jsx)(x.Ah,{...o,activeProviders:b()});case"opencode":return(0,t.jsx)(x.qO,{...o,activeProviders:b()});case"cowork":return(0,t.jsx)(x.Q6,{...o,activeProviders:b(),hasActiveProviders:l,cloudUrl:""});case"droid":return(0,t.jsx)(x.ZM,{...o,activeProviders:b(),hasActiveProviders:l});case"openclaw":return(0,t.jsx)(x.yZ,{...o,activeProviders:b(),hasActiveProviders:l});case"hermes":return(0,t.jsx)(x.RF,{...o,activeProviders:b(),hasActiveProviders:l});case"cline":return(0,t.jsx)(x.aG,{...o,activeProviders:b()});case"kilo":return(0,t.jsx)(x.c9,{...o,activeProviders:b()});case"deepseek-tui":return(0,t.jsx)(x.lF,{...o,activeProviders:b(),hasActiveProviders:l});case"jcode":return(0,t.jsx)(x.mW,{...o,activeProviders:b(),hasActiveProviders:l});case"grok":return(0,t.jsx)(x.wg,{...o,activeProviders:b(),hasActiveProviders:l});case"pi":return(0,t.jsx)(x.S3,{...o,activeProviders:b(),hasActiveProviders:l});case"aider":return(0,t.jsx)(x.qn,{...o,activeProviders:b(),hasActiveProviders:l});case"gemini-cli":return(0,t.jsx)(x.Ib,{...o,activeProviders:b(),hasActiveProviders:l});default:return(0,t.jsx)(x.a7,{toolId:e,...o,activeProviders:b()})}})()]}):(0,t.jsxs)("div",{className:"mx-auto flex w-full max-w-5xl flex-col gap-4 px-1 sm:px-0",children:[(0,t.jsxs)(l(),{href:"/dashboard/cli-tools",className:"inline-flex items-center gap-1 text-sm text-text-muted hover:text-primary w-fit",children:[(0,t.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"arrow_back"}),"Back to CLI Tools"]}),(0,t.jsx)("p",{className:"text-sm text-text-muted",children:"Tool not found or disabled."})]})}}},e=>{e.O(0,[2574,3862,782,8500,594,1321,4707,1330,3531,8441,3794,7358],()=>e(e.s=7769)),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2326],{12750:(e,s,l)=>{Promise.resolve().then(l.bind(l,53501))},53501:(e,s,l)=>{"use strict";l.d(s,{default:()=>g});var a=l(95155),t=l(12115),r=l(35497),i=l(3534),n=l(28048),c=l(98500),o=l.n(c),d=l(5772);function x({toolId:e,tool:s,status:l}){let t=l?l.installed?l.hasSwitchboard?{label:"Connected",cls:"bg-green-500/10 text-green-600 dark:text-green-400 border border-green-500/20"}:{label:"Installed \xb7 not configured",cls:"bg-amber-500/10 text-amber-600 dark:text-amber-400 border border-amber-500/25"}:{label:"Not installed",cls:"bg-orange-500/15 text-orange-600 dark:text-orange-400 border border-orange-500/25"}:{label:"Unknown",cls:"bg-gray-500/10 text-gray-500"};return(0,a.jsx)(o(),{href:`/dashboard/cli-tools/${e}`,className:"block",children:(0,a.jsx)(r.Zp,{padding:"sm",className:"h-full overflow-hidden hover:border-primary/50 transition-colors cursor-pointer",children:(0,a.jsx)("div",{className:"flex h-full flex-col gap-2",children:(0,a.jsxs)("div",{className:"flex items-center gap-3",children:[(0,a.jsx)("div",{className:"size-8 flex items-center justify-center shrink-0",children:s.image?(0,a.jsx)(d.default,{src:s.image,alt:s.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:e=>{e.target.style.display="none"}}):s.icon?(0,a.jsx)("span",{className:"material-symbols-outlined text-[28px]",style:{color:s.color},children:s.icon}):null}),(0,a.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,a.jsx)("h3",{className:"font-medium text-sm truncate",children:s.name}),(0,a.jsx)("span",{className:`inline-block mt-1 px-1.5 py-0.5 text-[10px] font-medium rounded-full ${t.cls}`,children:t.label})]}),(0,a.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[18px] shrink-0",children:"chevron_right"})]})})})})}var m=l(78559);function g({machineId:e}){let[s,l]=(0,t.useState)(!0),[c,o]=(0,t.useState)({});if((0,t.useEffect)(()=>{let e=!0;return(async()=>{try{let s=await fetch("/api/cli-tools/all-statuses");s.ok&&e&&o(await s.json())}catch(e){(0,m.s)("Error fetching tool statuses:",e)}finally{e&&l(!1)}})(),()=>{e=!1}},[]),s)return(0,a.jsxs)("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3 sm:gap-4",children:[(0,a.jsx)(r.Qv,{}),(0,a.jsx)(r.Qv,{}),(0,a.jsx)(r.Qv,{}),(0,a.jsx)(r.Qv,{}),(0,a.jsx)(r.Qv,{}),(0,a.jsx)(r.Qv,{})]});let d=Object.entries(i.dM),h=Object.entries(i.wn);return(0,a.jsxs)("div",{className:"mx-auto flex w-full max-w-5xl flex-col gap-6 px-1 sm:px-0",children:[(0,a.jsx)("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3 sm:gap-4",children:d.map(([e,s])=>(0,a.jsx)(x,{toolId:e,tool:s,status:c[e]},e))}),(0,a.jsxs)("div",{className:"flex flex-col gap-3 sm:gap-4",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px] text-primary",children:"security"}),(0,a.jsx)("h2",{className:"text-sm font-semibold text-text-main",children:"MITM Tools"})]}),(0,a.jsx)("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3 sm:gap-4",children:h.map(([e,s])=>(0,a.jsx)(n.gY,{tool:s},e))})]})]})}}},e=>{e.O(0,[2574,3862,782,8500,594,1321,4707,1330,3531,8441,3794,7358],()=>e(e.s=12750)),_N_E=e.O()}]);
|
package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/combos/page-62cd36ee99eaa630.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3649],{35497:(e,t,a)=>{"use strict";a.d(t,{x0:()=>k.default,Ex:()=>d.default,$n:()=>l.default,nh:()=>M.default,Zp:()=>o.default,Qv:()=>n.CardSkeleton,CK:()=>p.default,uo:()=>i.ConfirmModal,G9:()=>j.default,wI:()=>N.default,vj:()=>v.default,vE:()=>y.default,pd:()=>s.default,Mh:()=>g.default,uR:()=>u.default,Nf:()=>h.default,aF:()=>i.default,rq:()=>x.default,gw:()=>w.default,LF:()=>m.default,Wx:()=>A.default,gM:()=>f.default,Iz:()=>C.default,l6:()=>r.default,lM:()=>c.default,m_:()=>S.default,jK:()=>b.default});var l=a(92542),s=a(11910),r=a(98),o=a(84588),i=a(81127),n=a(25086);a(56319);var d=a(56061),c=a(98542);a(38587),a(21110),a(92622),a(8823),a(92173);var m=a(90882),x=a(72908),u=a(28815),p=a(45455),h=a(28058),b=a(4809);a(21931),a(80752),a(40197);var f=a(23615);a(44736);var g=a(62899);a(94230);var j=a(30815),y=a(23936),v=a(95088),N=a(73579),k=a(96748),w=a(4823),C=a(28067),S=a(97677),A=a(51825),M=a(29366);a(76361),a(91450)},41483:(e,t,a)=>{"use strict";a.d(t,{default:()=>j});var l=a(95155),s=a(12115),r=a(44923),o=a(87256),i=a(39768),n=a(5020),d=a(35497),c=a(11059);a(88105);var m=a(65921),x=a(78559),u=a(47224);let p=/^[a-zA-Z0-9_.\-]+$/,h=[{key:"vision",label:"Vision",icon:"visibility",desc:"Images"},{key:"audioInput",label:"Audio",icon:"graphic_eq",desc:"Audio input"}],b={enabled:!0,roundRobin:!1,models:[]},f=Object.keys({vision:{...b},pdf:{...b},audioInput:{...b},videoInput:{...b}});function g(e){return Array.isArray(e)?{enabled:!0,roundRobin:!1,models:e.map(e=>e?.model||e).filter(Boolean)}:e&&"object"==typeof e?{enabled:!1!==e.enabled,roundRobin:!!e.roundRobin,models:Array.isArray(e.models)?e.models.filter(Boolean):[]}:{...b}}function j({initialData:e}){let t=(0,m.i)(e=>e.error),[a,r]=(0,s.useState)(()=>(e?.combos||[]).filter(e=>!e.kind||"llm"===e.kind)),[o,i]=(0,s.useState)(!e),[n,x]=(0,s.useState)(!1),[u,p]=(0,s.useState)(null),[h,b]=(0,s.useState)(e?.connections||[]),[v,N]=(0,s.useState)(e?.settings?.comboStrategies||{}),[k,w]=(0,s.useState)(e?.modelCaps||{}),[C,A]=(0,s.useState)(()=>{let t=e?.settings?.capacityAdapter||{},a={};for(let e of f)a[e]=g(t[e]);return a}),[F,$]=(0,s.useState)(null),{copied:O,copy:E}=(0,c.C)(),q=(0,s.useCallback)(async()=>{try{let[e,t,a,l]=await Promise.all([fetch("/api/combos"),fetch("/api/providers"),fetch("/api/settings"),fetch("/api/models")]);if(![e,t,a,l].every(e=>e.ok))throw Error("One or more combo resources failed to load");let s=await e.json(),o=await t.json(),i=await a.json();if(e.ok&&r((s.combos||[]).filter(e=>!e.kind||"llm"===e.kind)),t.ok&&b(o.connections||[]),l.ok){let e=await l.json(),t={};for(let a of e.models||[])a.caps&&(t[a.fullModel]=a.caps);w(t)}N(i.comboStrategies||{});let n=i.capacityAdapter||{},d={};for(let e of f)d[e]=g(n[e]);A(d)}catch(e){t("Failed to fetch combo data")}finally{i(!1)}},[t]);(0,s.useEffect)(()=>{e?.combos?i(!1):q()},[e,q]);let P=async e=>{try{let{strategy:a,capacityAutoSwitch:l,routerModel:s,objective:r,...o}=e,i=await fetch("/api/combos",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o)});if(i.ok){let e=await i.json().catch(()=>({})),t=o.name?.trim()||e?.name;t&&(a||void 0!==l||s||r)&&await z(t,y(a,l,s,r)),await q(),x(!1)}else{let e=await i.json();t(e.error||"Failed to create combo")}}catch(e){t("Failed to create combo")}},D=async(e,a)=>{try{let{strategy:l,capacityAutoSwitch:s,routerModel:r,objective:o,...i}=a,n=u?.name,d=await fetch(`/api/combos/${e}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(i)});if(d.ok){let e=i.name?.trim()||n;if(n&&e&&n!==e&&N(t=>{let a={...t};return n in a&&(e in a||(a[e]=a[n]),delete a[n]),a}),e&&(l||void 0!==s)){let t,a=n&&n!==e?(t={...v},n in t&&(e in t||(t[e]=t[n]),delete t[n]),t):v;await z(e,y(l,s,r,o),a)}await q(),p(null)}else{let e=await d.json();t(e.error||"Failed to update combo")}}catch(e){t("Failed to update combo")}},_=async e=>{let l=a.find(t=>t.id===e);$({title:"Delete Combo",message:l?.name?`Delete combo “${l.name}”?`:"Delete this combo?",onConfirm:async()=>{$(null);try{let a=await fetch(`/api/combos/${e}`,{method:"DELETE"});if(a.ok)r(t=>t.filter(t=>t.id!==e)),l?.name&&N(e=>{if(!(l.name in e))return e;let t={...e};return delete t[l.name],t});else{let e=await a.json().catch(()=>({}));t(e.error||`Failed to delete combo (HTTP ${a.status})`)}}catch(e){t("Failed to delete combo")}}})},z=async(e,a,l=null)=>{try{let s={...l||v},r={...s[e]||{},...a};for(let e of Object.keys(r))(""===r[e]||null===r[e]||void 0===r[e])&&delete r[e];let o=r.fallbackStrategy||"fallback";"fallback"!==o||r.judgeModel||r.routerModel||r.objective||void 0!==r.learningEnabled||void 0!==r.freezeLearning||void 0!==r.explorationRate||!1===r.capacityAutoSwitch?(!r.fallbackStrategy&&void 0===a.fallbackStrategy&&s[e]?.fallbackStrategy&&(r.fallbackStrategy=s[e].fallbackStrategy),s[e]=r):delete s[e];let i=await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({comboStrategies:s})});if(!i.ok){let e=await i.json().catch(()=>({}));t(e.error||`Failed to update combo strategy (${i.status})`);return}N(s)}catch(e){throw t("Failed to update combo strategy"),e}},T=async e=>{A(e);try{(await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({capacityAdapter:e})})).ok||t("Failed to update capacity adapter")}catch(e){t("Failed to update capacity adapter")}};return o?(0,l.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,l.jsx)(d.Qv,{}),(0,l.jsx)(d.Qv,{})]}):(0,l.jsxs)("div",{className:"flex min-w-0 flex-col gap-6 px-1 sm:px-0",children:[(0,l.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between",children:[(0,l.jsxs)("div",{className:"min-w-0 max-w-3xl",children:[(0,l.jsx)("h1",{className:"text-[17px] font-semibold text-text-main",children:"Combos"}),(0,l.jsx)("p",{className:"text-sm text-text-muted mt-1",children:"Group models under one name, then pick a strategy per combo:"}),(0,l.jsxs)("ul",{className:"text-sm text-text-muted mt-2 flex flex-col gap-1.5",children:[(0,l.jsxs)("li",{children:[(0,l.jsx)("span",{className:"font-medium text-text-main",children:"Fallback"})," ","— tries models in order (next on failure)"]}),(0,l.jsxs)("li",{children:[(0,l.jsx)("span",{className:"font-medium text-text-main",children:"Round Robin"})," ","— rotates models across requests to spread load"]}),(0,l.jsxs)("li",{children:[(0,l.jsx)("span",{className:"font-medium text-text-main",children:"Fusion"})," ","— queries all models in parallel, then a judge synthesizes one answer. Best quality, but costs the most: every request bills all panel models + the judge (N+1 calls)"]}),(0,l.jsxs)("li",{children:[(0,l.jsx)("span",{className:"font-medium text-text-main",children:"Auto"})," ","— a router model picks one worker from the pool each request (2 calls: router + worker); optional learning from outcomes"]}),(0,l.jsxs)("li",{children:[(0,l.jsx)("span",{className:"font-medium text-text-main",children:"Capacity auto-switch"})," ","— when enabled on a combo, sends image/PDF requests to a model that supports them first (works with Fallback, Round Robin, and Fusion)"]})]})]}),(0,l.jsx)(d.$n,{icon:"add",onClick:()=>x(!0),className:"w-full sm:w-auto whitespace-nowrap shrink-0",children:"Create Combo"})]}),0===a.length?(0,l.jsx)(d.Zp,{children:(0,l.jsxs)("div",{className:"text-center py-12",children:[(0,l.jsx)("div",{className:"inline-flex items-center justify-center w-16 h-16 rounded-full bg-primary/10 text-primary mb-4",children:(0,l.jsx)("span",{className:"material-symbols-outlined text-[32px]",children:"layers"})}),(0,l.jsx)("p",{className:"text-text-main font-medium mb-1",children:"No combos yet"}),(0,l.jsx)("p",{className:"text-sm text-text-muted mb-4 max-w-md mx-auto",children:"Create a named model group, choose Fallback / Round Robin / Fusion / Auto, and point clients at the combo name."}),(0,l.jsx)(d.$n,{icon:"add",onClick:()=>x(!0),className:"w-full sm:w-auto",children:"Create Combo"})]})}):(0,l.jsx)("div",{className:"flex flex-col gap-4",children:a.map(e=>(0,l.jsx)(S,{combo:e,modelCaps:k,activeProviders:h,copied:O,onCopy:E,onEdit:()=>p(e),onDelete:()=>_(e.id),strategy:v[e.name]||{},onSetStrategy:t=>z(e.name,t)},e.id))}),(0,l.jsx)(R,{capacityAdapter:C,onChange:T,activeProviders:h,getCaps:e=>k[e]||null}),(0,l.jsx)(M,{isOpen:n,onClose:()=>x(!1),onSave:P,activeProviders:h,modelCaps:k,initialStrategy:{fallbackStrategy:"fallback",capacityAutoSwitch:!0}},"create"),(0,l.jsx)(M,{isOpen:!!u,combo:u,onClose:()=>p(null),onSave:e=>D(u.id,e),activeProviders:h,modelCaps:k,initialStrategy:u?v[u.name]||{fallbackStrategy:"fallback"}:{}},u?.id||"new"),(0,l.jsx)(d.uo,{isOpen:!!F,onClose:()=>$(null),onConfirm:F?.onConfirm,title:F?.title||"Confirm",message:F?.message,variant:"danger"})]})}function y(e,t,a,l){let s=e||"fallback",r={fallbackStrategy:s,...void 0!==t?{capacityAutoSwitch:t}:{}};return"auto"===s?(a&&(r.routerModel=a),l&&(r.objective=l),r.judgeModel=""):("fusion"===s?r.routerModel="":(r.routerModel="",r.judgeModel=""),r.objective="",r.learningEnabled="",r.freezeLearning="",r.explorationRate=""),r}function v(e,t,a){let l=(e||[]).filter(e=>e&&e!==t);return l.length>0&&!l.some(e=>a[e]?.vision)}function N({models:e,routerModel:t}){let a=(e||[]).filter(e=>e&&e!==t);if(a.length<2)return null;let{cheap:s,frontier:r,disabled:o}=function(e){let t=(e||[]).filter(Boolean);if(t.length<=1)return{cheap:t.slice(),frontier:[],disabled:!0};let a=t.map(e=>({m:e,t:function(e){if(!e)return 4;let[t,...a]=e.split("/"),l=a.join("/")||t,s=(0,u.PS)(t,l);if(!s||"number"!=typeof s.input)return 4;let r="number"==typeof s.output?s.output:3*s.input,o=s.input+r;return o<2?0:o<10?1:o<30?2:o<80?3:4}(e)}));if(new Set(a.map(e=>e.t)).size<=1)return{cheap:t.slice(),frontier:[],disabled:!0};let l=a.filter(e=>e.t<=1).map(e=>e.m),s=a.filter(e=>e.t>=2).map(e=>e.m);if(!l.length||!s.length){let e=a.map((e,t)=>({...e,i:t})).sort((e,t)=>e.t-t.t||e.i-t.i),t=Math.ceil(e.length/2);l=e.slice(0,t).map(e=>e.m),s=e.slice(t).map(e=>e.m)}return{cheap:l,frontier:s,disabled:!1}}(a),i=e=>String(e).split("/").pop();return o?(0,l.jsxs)("div",{className:"flex min-w-0 flex-wrap items-center gap-1.5",children:[(0,l.jsx)("span",{className:"text-[11px] font-medium text-text-muted",children:"Tiers"}),(0,l.jsx)("span",{className:"text-[10px] text-text-subtle",title:"All workers share one cost tier — tiered routing is off",children:"single tier (tiering off)"})]}):(0,l.jsxs)("div",{className:"flex min-w-0 flex-wrap items-center gap-1.5",children:[(0,l.jsx)("span",{className:"text-[11px] font-medium text-text-muted",children:"Tiers"}),s.map(e=>(0,l.jsx)("span",{className:"rounded border border-emerald-500/30 bg-emerald-500/10 px-1.5 py-0.5 font-mono text-[10px] text-emerald-600 dark:text-emerald-400",title:`${e} — cheap tier`,children:i(e)},`c-${e}`)),(0,l.jsx)("span",{className:"material-symbols-outlined text-[12px] text-text-subtle",children:"arrow_forward"}),r.map(e=>(0,l.jsx)("span",{className:"rounded border border-amber-500/30 bg-amber-500/10 px-1.5 py-0.5 font-mono text-[10px] text-amber-600 dark:text-amber-400",title:`${e} — frontier tier`,children:i(e)},`f-${e}`))]})}let k=[{value:"fallback",label:"Fallback — try in order"},{value:"round-robin",label:"Round Robin — rotate load"},{value:"fusion",label:"Fusion — panel + judge (N+1)"},{value:"auto",label:"Auto — router picks 1 worker"}],w={fallback:"Tries models top-to-bottom; on failure uses the next.","round-robin":"Rotates models across requests to spread load.",fusion:"Calls every model, then a judge merges answers (bills N+1).",auto:"Router model chooses one worker each request (bills 2 calls)."},C=[{value:"quality",label:"Quality"},{value:"balanced",label:"Balanced"},{value:"economy",label:"Economy"},{value:"latency",label:"Latency"}];function S({combo:e,modelCaps:t={},activeProviders:a=[],copied:r,onCopy:o,onEdit:i,onDelete:n,strategy:c={},onSetStrategy:m}){let[x,u]=(0,s.useState)(!1),[p,h]=(0,s.useState)(!1),[b,f]=(0,s.useState)(!1),[g,j]=(0,s.useState)(!1),[y,A]=(0,s.useState)(""),M=c.fallbackStrategy||"fallback",R=c.judgeModel||"",F="auto"===M,$=c.routerModel||"",O=c.objective||"balanced",E=c.providerStrategy||"off",q=!1!==c.capacityAutoSwitch;return(0,l.jsxs)(d.Zp,{padding:"sm",className:"group",children:[(0,l.jsxs)("div",{className:"flex min-w-0 flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[(0,l.jsxs)("div",{className:"flex min-w-0 flex-1 items-start gap-3 sm:items-center",children:[(0,l.jsx)("div",{className:"size-8 rounded-lg bg-primary/10 flex items-center justify-center shrink-0",children:(0,l.jsx)("span",{className:"material-symbols-outlined text-primary text-[18px]",children:"layers"})}),(0,l.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,l.jsx)("code",{className:"block truncate font-mono text-sm font-medium",children:e.name}),(0,l.jsx)("p",{className:"text-[10px] text-text-subtle mt-0.5",children:w[M]||""}),(0,l.jsxs)("div",{className:"mt-1 flex min-w-0 flex-wrap items-center gap-1",children:[0===e.models.length?(0,l.jsx)("span",{className:"text-xs text-text-muted italic",children:"No models"}):e.models.slice(0,3).map((e,a)=>(0,l.jsxs)("code",{className:"inline-flex items-center gap-1 rounded bg-black/5 px-1.5 py-0.5 font-mono text-xs text-text-muted dark:bg-white/5",children:[(0,l.jsx)("span",{children:e}),(0,l.jsx)(d.nh,{caps:t[e]})]},a)),e.models.length>3&&(0,l.jsxs)("span",{className:"text-[10px] text-text-muted",children:["+",e.models.length-3," more"]})]}),"fusion"===M&&(0,l.jsxs)("div",{className:"mt-2 flex min-w-0 flex-wrap items-center gap-1.5",children:[(0,l.jsx)("span",{className:"text-[11px] font-medium text-text-muted",children:"Judge"}),(0,l.jsxs)("button",{onClick:()=>u(!0),className:"inline-flex max-w-full items-center gap-1 rounded border border-dashed border-primary/40 px-1.5 py-0.5 font-mono text-[11px] text-primary hover:border-primary hover:bg-primary/5 transition-colors",title:"Pick the model that fuses panel answers",children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-[13px]",children:"gavel"}),(0,l.jsx)("span",{className:"truncate",children:R||`Auto — ${e.models[0]||"first model"}`})]}),R&&(0,l.jsx)("button",{onClick:()=>m({judgeModel:""}),className:"p-0.5 rounded text-text-muted hover:text-red-500 hover:bg-red-500/10 transition-colors",title:"Reset judge to Auto",children:(0,l.jsx)("span",{className:"material-symbols-outlined text-[13px]",children:"close"})})]}),F&&(0,l.jsxs)("div",{className:"mt-2 flex min-w-0 flex-col gap-2",children:[(0,l.jsxs)("div",{className:"flex min-w-0 flex-wrap items-center gap-1.5",children:[(0,l.jsx)("span",{className:"text-[11px] font-medium text-text-muted",children:"Router"}),(0,l.jsxs)("button",{type:"button",onClick:()=>h(!0),className:"inline-flex max-w-full items-center gap-1 rounded border border-dashed border-primary/40 px-1.5 py-0.5 font-mono text-[11px] text-primary hover:border-primary hover:bg-primary/5 transition-colors",title:"Model that picks the worker each request — required for Auto",children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-[13px]",children:"alt_route"}),(0,l.jsx)("span",{className:"truncate",children:$||"Select a router model (required)"})]})]}),$&&e.models?.includes($)&&(0,l.jsxs)("p",{className:"text-[10px] text-amber-600 dark:text-amber-400 flex items-center gap-1",children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:"warning"}),"Router is also in the worker list — it is auto-excluded from the pool."]}),v(e.models,$,t)&&(0,l.jsxs)("p",{className:"text-[10px] text-amber-600 dark:text-amber-400 flex items-center gap-1",children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:"warning"}),"No vision-capable model — image requests will have images stripped"]}),(0,l.jsx)(N,{models:e.models,routerModel:$}),(0,l.jsxs)("div",{className:"flex min-w-0 flex-wrap items-center gap-1.5",children:[(0,l.jsx)("span",{className:"text-[11px] font-medium text-text-muted",children:"Objective"}),(0,l.jsx)("select",{value:O,onChange:e=>m({objective:e.target.value}),className:"rounded border border-border bg-surface-2 px-1.5 py-0.5 text-[11px] text-text-main",children:C.map(e=>(0,l.jsx)("option",{value:e.value,children:e.label},e.value))}),(0,l.jsxs)("label",{className:"inline-flex items-center gap-1 text-[11px] text-text-muted cursor-pointer",children:[(0,l.jsx)("input",{type:"checkbox",className:"rounded border-border",checked:!1!==c.learningEnabled,onChange:e=>m({learningEnabled:e.target.checked})}),"Learn"]}),(0,l.jsxs)("label",{className:"inline-flex items-center gap-1 text-[11px] text-text-muted cursor-pointer",title:"Keep routing on current learning version; block relearn",children:[(0,l.jsx)("input",{type:"checkbox",className:"rounded border-border",checked:!!c.freezeLearning,onChange:e=>m({freezeLearning:e.target.checked})}),"Freeze"]}),(0,l.jsxs)("label",{className:"inline-flex items-center gap-1 text-[11px] text-text-muted cursor-pointer",title:"Occasionally append a 1/2/3 feedback prompt to Auto chat replies (human chat only). Off by default.",children:[(0,l.jsx)("input",{type:"checkbox",className:"rounded border-border",checked:!!c.feedbackAsk,onChange:e=>m({feedbackAsk:e.target.checked})}),"Ask feedback"]}),(0,l.jsxs)("button",{type:"button",disabled:g||!!c.freezeLearning,onClick:async()=>{j(!0),A("");try{let t=await fetch("/api/routing/learn",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({comboName:e.name})}),a=await t.json();A(a.message||(a.ok?"Done":a.error||"Failed"))}catch(e){A(e.message||"Failed")}finally{j(!1)}},className:"inline-flex items-center gap-1 rounded border border-primary/40 bg-primary/10 px-2 py-0.5 text-[11px] font-medium text-primary hover:bg-primary/15 disabled:opacity-50",title:"Run learning optimizer on recent routing events",children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-[13px]",children:"psychology"}),g?"Learning…":"Relearn now"]}),(0,l.jsx)("a",{href:`/dashboard/combos/routing?combo=${encodeURIComponent(e.name)}`,className:"inline-flex items-center gap-1 rounded border border-border px-2 py-0.5 text-[11px] text-text-muted hover:text-primary hover:border-primary/40",children:"Insights"})]}),(0,l.jsxs)("div",{className:"flex min-w-0 flex-wrap items-center gap-1.5",children:[(0,l.jsx)("span",{className:"text-[11px] font-medium text-text-muted",children:"Provider"}),(0,l.jsxs)("select",{value:E,onChange:e=>m({providerStrategy:e.target.value}),className:"rounded border border-border bg-surface-2 px-1.5 py-0.5 text-[11px] text-text-main",children:[(0,l.jsx)("option",{value:"off",children:"Off"}),(0,l.jsx)("option",{value:"priority",children:"Priority"}),(0,l.jsx)("option",{value:"round-robin",children:"Round robin"}),(0,l.jsx)("option",{value:"fastest",children:"Fastest"}),(0,l.jsx)("option",{value:"quota-first",children:"Quota first"})]}),"priority"===E&&(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)("input",{type:"text",value:Array.isArray(c.providerOrder)?c.providerOrder.join(", "):"",onChange:e=>m({providerOrder:e.target.value.split(",").map(e=>e.trim()).filter(Boolean)}),placeholder:"provider-a, provider-b",className:"w-40 rounded border border-border bg-surface-2 px-1.5 py-0.5 text-[11px] text-text-main"}),(0,l.jsx)("span",{className:"text-[10px] text-text-muted",children:"comma-separated provider names, highest priority first"})]}),(0,l.jsx)("input",{type:"number",min:"1",value:c.providerLatencyGuardMs??"",onChange:e=>m({providerLatencyGuardMs:Number(e.target.value)||void 0}),placeholder:"20000",title:"Demote providers slower than this latency in milliseconds",className:"w-20 rounded border border-border bg-surface-2 px-1.5 py-0.5 text-[11px] text-text-main"})]}),"quota-first"===E&&(0,l.jsx)("p",{className:"text-[10px] text-text-muted",children:"Quota data currently available for Claude & Codex; other providers use availability (not rate-limited, lower recent use)."}),(0,l.jsxs)("div",{className:"flex min-w-0 flex-wrap items-center gap-2 text-[11px] text-text-muted",children:[(0,l.jsxs)("label",{className:"inline-flex items-center gap-1",children:["Window",(0,l.jsxs)("select",{value:c.learningWindowDays??14,onChange:e=>m({learningWindowDays:Number(e.target.value)||14}),className:"rounded border border-border bg-surface-2 px-1 py-0.5 text-[11px] text-text-main",children:[(0,l.jsx)("option",{value:7,children:"7d"}),(0,l.jsx)("option",{value:14,children:"14d"}),(0,l.jsx)("option",{value:30,children:"30d"})]})]}),(0,l.jsxs)("label",{className:"inline-flex items-center gap-1",title:"Epsilon-greedy exploration (capped at 20%)",children:["Explore",(0,l.jsx)("select",{value:Math.round((c.explorationRate??.05)*100),onChange:e=>m({explorationRate:Number(e.target.value)/100}),className:"rounded border border-border bg-surface-2 px-1 py-0.5 text-[11px] text-text-main",children:[0,5,10,15,20].map(e=>(0,l.jsxs)("option",{value:e,children:[e,"%"]},e))})]}),(0,l.jsxs)("label",{className:"inline-flex items-center gap-1",title:"0 = manual relearn only",children:["Auto-relearn",(0,l.jsxs)("select",{value:c.autoLearnIntervalHours??0,onChange:e=>m({autoLearnIntervalHours:Number(e.target.value)||0}),className:"rounded border border-border bg-surface-2 px-1 py-0.5 text-[11px] text-text-main",children:[(0,l.jsx)("option",{value:0,children:"off"}),(0,l.jsx)("option",{value:6,children:"6h"}),(0,l.jsx)("option",{value:12,children:"12h"}),(0,l.jsx)("option",{value:24,children:"24h"}),(0,l.jsx)("option",{value:72,children:"72h"})]})]}),(0,l.jsxs)("label",{className:"inline-flex items-center gap-1",title:"Capacity pre-filter before router (vision/PDF)",children:[(0,l.jsx)("input",{type:"checkbox",className:"rounded border-border",checked:!1!==c.capacityAutoSwitch,onChange:e=>m({capacityAutoSwitch:e.target.checked})}),"Heuristic first"]}),(0,l.jsxs)("label",{className:"inline-flex items-center gap-1",title:"Emit X-Auto-Router-* response headers (worker, cluster, score, skipped)",children:[(0,l.jsx)("input",{type:"checkbox",className:"rounded border-border",checked:!1!==c.emitAutoRouterHeaders,onChange:e=>m({emitAutoRouterHeaders:e.target.checked})}),"Route headers"]})]}),y?(0,l.jsx)("p",{className:"text-[11px] font-mono text-text-subtle",children:y}):(0,l.jsx)("p",{className:"text-[10px] text-text-subtle",children:"Worker pool = models list (router model excluded if listed). Every request re-routes. Router model is required — pick a connected account (a cheap, fast model such as Haiku works well)."})]})]})]}),(0,l.jsxs)("div",{className:"flex w-full flex-col gap-2 sm:w-auto sm:flex-row sm:items-center sm:gap-3 sm:shrink-0",children:[(0,l.jsxs)("div",{className:"w-full sm:w-[220px] flex flex-col gap-1.5",children:[(0,l.jsx)(d.l6,{options:k,value:M,onChange:e=>{let t=e.target.value;if("auto"===t&&!$){f(!0),h(!0);return}m({fallbackStrategy:t})},selectClassName:"py-1.5 text-xs"}),!F&&(0,l.jsxs)("label",{className:"inline-flex items-center gap-1.5 text-[10px] text-text-muted cursor-pointer",children:[(0,l.jsx)("input",{type:"checkbox",className:"rounded border-border",checked:q,onChange:e=>m({capacityAutoSwitch:e.target.checked})}),"Capacity auto-switch (vision/PDF first)"]})]}),(0,l.jsxs)("div",{className:"grid grid-cols-3 gap-1 sm:flex",children:[(0,l.jsxs)("button",{onClick:t=>{t.stopPropagation(),o(e.name,`combo-${e.id}`)},className:"flex flex-col items-center rounded px-2 py-1 text-text-muted transition-colors hover:bg-black/5 hover:text-primary dark:hover:bg-white/5",title:"Copy combo name",children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:r===`combo-${e.id}`?"check":"content_copy"}),(0,l.jsx)("span",{className:"text-[10px] leading-tight",children:"Copy"})]}),(0,l.jsxs)("button",{onClick:i,className:"flex flex-col items-center rounded px-2 py-1 text-text-muted transition-colors hover:bg-black/5 hover:text-primary dark:hover:bg-white/5",title:"Edit",children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"edit"}),(0,l.jsx)("span",{className:"text-[10px] leading-tight",children:"Edit"})]}),(0,l.jsxs)("button",{onClick:n,className:"flex flex-col items-center rounded px-2 py-1 text-red-500 transition-colors hover:bg-red-500/10",title:"Delete",children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"delete"}),(0,l.jsx)("span",{className:"text-[10px] leading-tight",children:"Delete"})]})]})]})]}),(0,l.jsx)(d.rq,{isOpen:x,onClose:()=>u(!1),onSelect:e=>{m({judgeModel:e?.value||""}),u(!1)},activeProviders:a,title:"Select Judge Model",addedModelValues:R?[R]:[],closeOnSelect:!0}),(0,l.jsx)(d.rq,{isOpen:p,onClose:()=>{f(!1),h(!1)},onSelect:e=>{let t=e?.value||"";b?(f(!1),t&&m({fallbackStrategy:"auto",routerModel:t})):m({routerModel:t}),h(!1)},activeProviders:a,title:"Select Router Model",addedModelValues:$?[$]:[],closeOnSelect:!0})]})}function A({id:e,index:t,model:a,learned:r=null,isFirst:n,isLast:d,onEdit:c,onMoveUp:m,onMoveDown:x,onRemove:u}){let{attributes:p,listeners:h,setNodeRef:b,transform:f,isDragging:g}=(0,o.gl)({id:e}),j={transform:i.Ks.Transform.toString(f),opacity:g?.4:1,zIndex:g?999:void 0},[y,v]=(0,s.useState)(!1),[N,k]=(0,s.useState)(a),w=()=>{let e=N.trim();e&&e!==a?c(e):k(a),v(!1)};return(0,l.jsxs)("div",{ref:b,style:j,className:`group flex min-w-0 items-center gap-1.5 rounded-md px-2 py-1 bg-black/[0.02] hover:bg-black/[0.04] dark:bg-white/[0.02] dark:hover:bg-white/[0.04] transition-colors ${g?"shadow-md ring-1 ring-primary/30":""}`,children:[(0,l.jsx)("button",{...p,...h,type:"button",className:"cursor-grab touch-none p-0.5 rounded text-text-muted hover:text-primary active:cursor-grabbing shrink-0",title:"Drag to reorder",children:(0,l.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"currentColor",children:[(0,l.jsx)("circle",{cx:"9",cy:"4",r:"2"}),(0,l.jsx)("circle",{cx:"15",cy:"4",r:"2"}),(0,l.jsx)("circle",{cx:"9",cy:"12",r:"2"}),(0,l.jsx)("circle",{cx:"15",cy:"12",r:"2"}),(0,l.jsx)("circle",{cx:"9",cy:"20",r:"2"}),(0,l.jsx)("circle",{cx:"15",cy:"20",r:"2"})]})}),(0,l.jsx)("span",{className:"text-[10px] font-medium text-text-muted w-3 text-center shrink-0",children:t+1}),y?(0,l.jsx)("input",{autoFocus:!0,value:N,onChange:e=>k(e.target.value),onBlur:w,onKeyDown:e=>{"Enter"===e.key&&w(),"Escape"===e.key&&(k(a),v(!1))},className:"min-w-0 flex-1 rounded border border-primary/40 bg-white px-1.5 py-0.5 font-mono text-xs text-text-main outline-none dark:bg-black/20"}):(0,l.jsx)("div",{role:"button",tabIndex:0,className:"min-w-0 flex-1 cursor-text truncate rounded px-1.5 py-0.5 font-mono text-xs text-text-main hover:bg-black/5 dark:hover:bg-white/5 focus:outline-none focus-visible:ring-2 focus-visible:ring-primary/40",onClick:()=>v(!0),onKeyDown:e=>{("Enter"===e.key||" "===e.key)&&(e.preventDefault(),v(!0))},title:"Click to edit","aria-label":`Edit model ${a}`,children:a}),r&&r.n>=10&&(0,l.jsxs)("span",{className:"shrink-0 font-mono text-[10px] text-text-subtle",title:"Learned routing stats (all combos, last 14d)",children:["avg ",Math.round(r.avgScore)," \xb7 n=",r.n,r.bestCluster?` \xb7 best: ${r.bestCluster}`:""]}),(0,l.jsxs)("div",{className:"flex shrink-0 items-center gap-0.5",children:[(0,l.jsx)("button",{onClick:m,disabled:n,className:`p-0.5 rounded ${n?"text-text-muted/20 cursor-not-allowed":"text-text-muted hover:text-primary hover:bg-black/5 dark:hover:bg-white/5"}`,title:"Move up",children:(0,l.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:"arrow_upward"})}),(0,l.jsx)("button",{onClick:x,disabled:d,className:`p-0.5 rounded ${d?"text-text-muted/20 cursor-not-allowed":"text-text-muted hover:text-primary hover:bg-black/5 dark:hover:bg-white/5"}`,title:"Move down",children:(0,l.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:"arrow_downward"})})]}),(0,l.jsx)("button",{onClick:u,className:"p-0.5 hover:bg-red-500/10 rounded text-text-muted hover:text-red-500 transition-all",title:"Remove",children:(0,l.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:"close"})})]})}function M({isOpen:e,combo:t,onClose:a,onSave:i,activeProviders:c,modelCaps:m={},kindFilter:u=null,initialStrategy:h={}}){let[b,f]=(0,s.useState)(t?.name||""),[g,j]=(0,s.useState)(t?.models||[]),[y,N]=(0,s.useState)(h.fallbackStrategy||"fallback"),[C,S]=(0,s.useState)(!1!==h.capacityAutoSwitch),[R,F]=(0,s.useState)(!1),[$,O]=(0,s.useState)(!1),[E,q]=(0,s.useState)(""),[P,D]=(0,s.useState)({}),[_,z]=(0,s.useState)({}),T=(0,r.FR)((0,r.MS)(r.AN,{activationConstraint:{distance:5}}),(0,r.MS)(r.uN,{coordinateGetter:o.JR})),L=g.map((e,t)=>({uid:`item-${t}`,model:e})),I=async()=>{try{let e=await fetch("/api/models/alias");if(e.ok){let t=await e.json();D(t.aliases||{})}}catch(e){(0,x.s)("Error fetching modal data:",e)}try{let e=await fetch("/api/routing/stats");if(!e.ok)throw Error("Failed to fetch learned routing stats");let t=await e.json(),a={};for(let e of t.global||[]){let t=Object.entries(e.clusters||{}),l=t.filter(([,e])=>e.n>=3),s=(l.length?l:t).reduce((e,t)=>{if(!e)return t;let[a,s]=e,[r,o]=t,i=l.length?s.avgScore:s.n,n=l.length?o.avgScore:o.n;return n>i||n===i&&r<a?t:e},null);a[e.worker]={avgScore:e.avgScore,n:e.n,bestCluster:s?s[0]:null}}z(a)}catch{z({})}};(0,s.useEffect)(()=>{e&&(f(t?.name||""),j(t?.models||[]),N(h.fallbackStrategy||"fallback"),S(!1!==h.capacityAutoSwitch),F(!1),O(!1),q(""),z({}),I())},[e,t?.id,t?.name]);let B=e=>e.trim()?p.test(e)?(q(""),!0):(q("Only letters, numbers, -, _ and . allowed"),!1):(q("Name is required"),!1),H=async()=>{if(B(b)){if(0===g.length)return void(0,x.s)("Add at least one model to the combo");if("auto"===y&&g.length<2)return void(0,x.s)("Auto strategy needs at least 2 models in the worker pool (plus a connected router account)");O(!0),await i({name:b.trim(),models:g,strategy:y,capacityAutoSwitch:"auto"===y||C}),O(!1)}},J=!!t;return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(d.aF,{isOpen:e,onClose:a,title:J?"Edit Combo":"Create Combo",children:(0,l.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,l.jsxs)("p",{className:"text-xs text-text-muted leading-relaxed",children:["Clients call this combo by name as the ",(0,l.jsx)("code",{className:"text-primary",children:"model"})," field. Strategy controls how models in the list are used."]}),(0,l.jsxs)("div",{children:[(0,l.jsx)(d.pd,{label:"Combo Name",value:b,onChange:e=>{let t=e.target.value;f(t),t?B(t):q("")},placeholder:"my-combo",error:E}),(0,l.jsx)("p",{className:"text-[10px] text-text-muted mt-0.5",children:"Only letters, numbers, -, _ and . allowed \xb7 use as model id in /v1"})]}),(0,l.jsxs)("div",{children:[(0,l.jsx)("label",{className:"text-sm font-medium mb-1.5 block",children:"Strategy"}),(0,l.jsx)(d.l6,{options:k,value:y,onChange:e=>N(e.target.value),selectClassName:"py-2 text-sm"}),(0,l.jsx)("p",{className:"text-[11px] text-text-muted mt-1.5",children:w[y]}),"auto"===y&&(0,l.jsxs)("p",{className:"text-[11px] text-amber-600 dark:text-amber-400 mt-1 flex items-center gap-1",children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:"info"}),"Auto requires a router model — select one on the combo card after saving."]}),"auto"!==y&&(0,l.jsxs)("label",{className:"mt-2 inline-flex items-center gap-2 text-xs text-text-muted cursor-pointer",children:[(0,l.jsx)("input",{type:"checkbox",className:"rounded border-border",checked:C,onChange:e=>S(e.target.checked)}),"Capacity auto-switch — prefer vision/PDF-capable models when the request needs them"]}),"auto"===y&&(0,l.jsx)("p",{className:"text-[11px] text-text-subtle mt-1.5 font-mono",children:"After create: set Router model on the combo card (must be a connected account). Workers = this model list (router excluded if listed)."}),"fusion"===y&&(0,l.jsx)("p",{className:"text-[11px] text-text-subtle mt-1.5 font-mono",children:"After create: optionally set Judge on the combo card (default = first model)."})]}),(0,l.jsxs)("div",{children:[(0,l.jsxs)("label",{className:"text-sm font-medium mb-1.5 block",children:["Models ","fallback"===y?"(order = priority)":"(pool)"]}),g.length>0&&v(g,null,m)&&(0,l.jsxs)("p",{className:"text-[10px] text-amber-600 dark:text-amber-400 flex items-center gap-1 mb-1",children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:"warning"}),"No vision-capable model — image requests will have images stripped"]}),0===g.length?(0,l.jsxs)("div",{className:"text-center py-4 border border-dashed border-black/10 dark:border-white/10 rounded-lg bg-black/[0.01] dark:bg-white/[0.01]",children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-text-muted text-xl mb-1",children:"layers"}),(0,l.jsx)("p",{className:"text-xs text-text-muted",children:"No models added yet"})]}):(0,l.jsx)(r.Mp,{sensors:T,collisionDetection:r.fp,onDragEnd:e=>{let{active:t,over:a}=e;if(a&&t.id!==a.id){let e=L.findIndex(e=>e.uid===t.id),l=L.findIndex(e=>e.uid===a.id);-1!==e&&-1!==l&&j(t=>(0,o.be)(t,e,l))}},modifiers:[n.FN,n.gj],children:(0,l.jsx)(o.gB,{items:L.map(e=>e.uid),strategy:o._G,children:(0,l.jsx)("div",{className:"flex max-h-[55vh] min-w-0 flex-col gap-1 overflow-y-auto sm:max-h-[350px]",children:L.map(({uid:e,model:t},a)=>(0,l.jsx)(A,{id:e,index:a,model:t,learned:_[t]||null,isFirst:0===a,isLast:a===L.length-1,onEdit:e=>{let t=[...g];t[a]=e,j(t)},onMoveUp:()=>(e=>{if(0===e)return;let t=[...g];[t[e-1],t[e]]=[t[e],t[e-1]],j(t)})(a),onMoveDown:()=>(e=>{if(e===g.length-1)return;let t=[...g];[t[e],t[e+1]]=[t[e+1],t[e]],j(t)})(a),onRemove:()=>{j(g.filter((e,t)=>t!==a))}},e))})})}),(0,l.jsxs)("button",{onClick:()=>F(!0),className:"w-full mt-2 py-2 border border-dashed border-black/10 dark:border-white/10 rounded-lg text-xs text-primary font-medium hover:text-primary hover:border-primary/50 transition-colors flex items-center justify-center gap-1",children:[(0,l.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"add"}),"Add Model"]})]}),(0,l.jsxs)("div",{className:"flex flex-col gap-2 pt-1 sm:flex-row",children:[(0,l.jsx)(d.$n,{onClick:a,variant:"ghost",fullWidth:!0,size:"sm",children:"Cancel"}),(0,l.jsx)(d.$n,{onClick:H,fullWidth:!0,size:"sm",disabled:!b.trim()||!!E||$,children:$?"Saving...":J?"Save":"Create"})]})]})}),(0,l.jsx)(d.rq,{isOpen:R,onClose:()=>F(!1),onSelect:e=>{g.includes(e.value)||j([...g,e.value])},onDeselect:e=>{j(g.filter(t=>t!==e.value))},activeProviders:c,modelAliases:P,title:"Add Model to Combo",kindFilter:u,addedModelValues:g,closeOnSelect:!1})]})}function R({capacityAdapter:e,onChange:t,activeProviders:a,getCaps:s}){return(0,l.jsx)(d.Zp,{padding:"sm",children:(0,l.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,l.jsx)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:(0,l.jsxs)("div",{className:"min-w-0",children:[(0,l.jsx)("p",{className:"text-sm font-medium text-text-main",children:"Capacity Adapter"}),(0,l.jsx)("p",{className:"text-xs text-text-muted mt-0.5",children:"Request carries images or audio your model can't read? Auto-switches to a model in the pool below."}),(0,l.jsxs)("ul",{className:"mt-1.5 text-[11px] text-text-muted flex flex-col gap-0.5",children:[(0,l.jsxs)("li",{children:[(0,l.jsx)("span",{className:"font-medium text-text-main",children:"Vision"})," — images (png, jpg, webp, …)"]}),(0,l.jsxs)("li",{children:[(0,l.jsx)("span",{className:"font-medium text-text-main",children:"Audio"})," — audio input"]})]})]})}),(0,l.jsx)("div",{className:"flex flex-col gap-4",children:h.map(r=>(0,l.jsx)(F,{cap:r,entry:e[r.key]||b,onChange:a=>t({...e,[r.key]:a}),activeProviders:a,getCaps:s},r.key))})]})})}function F({cap:e,entry:t,onChange:a,activeProviders:r,getCaps:o}){let[i,n]=(0,s.useState)(!1),{enabled:c,roundRobin:m,models:x}=t,u=e=>a({...t,...e}),p=(e,t)=>{let a=e+t;if(a<0||a>=x.length)return;let l=[...x];[l[e],l[a]]=[l[a],l[e]],u({models:l})};return(0,l.jsxs)("div",{className:`group rounded-lg border border-black/5 p-3 ${!c?"opacity-50":""} dark:border-white/10`,children:[(0,l.jsxs)("div",{className:"flex min-w-0 flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[(0,l.jsxs)("div",{className:"flex min-w-0 flex-1 items-start gap-2.5 sm:items-center",children:[(0,l.jsx)(d.lM,{checked:c,onChange:e=>u({enabled:e}),"aria-label":`Enable ${e.label} adapter`}),(0,l.jsx)("div",{className:"size-8 rounded-lg bg-primary/10 flex items-center justify-center shrink-0",children:(0,l.jsx)("span",{className:"material-symbols-outlined text-primary text-[18px]",children:e.icon})}),(0,l.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,l.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,l.jsx)("code",{className:"font-mono text-sm font-medium text-text-main",children:e.label}),(0,l.jsxs)("span",{className:"text-[10px] text-text-muted",children:["— ",e.desc]})]}),(0,l.jsxs)("div",{className:"mt-1 flex min-w-0 flex-wrap items-center gap-1",children:[0===x.length?(0,l.jsx)("span",{className:"text-xs text-text-muted italic",children:"No models"}):x.slice(0,3).map((e,t)=>(0,l.jsxs)("code",{className:"group/chip inline-flex items-center gap-1 rounded bg-black/5 px-1.5 py-0.5 font-mono text-xs text-text-muted dark:bg-white/5",children:[(0,l.jsx)("span",{children:e}),(0,l.jsx)(d.nh,{caps:o?.(e)}),(0,l.jsx)("button",{onClick:()=>p(t,-1),disabled:0===t,className:`leading-none opacity-0 group-hover/chip:opacity-100 ${0===t?"text-text-muted/20":"text-text-muted hover:text-primary"}`,children:(0,l.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:"arrow_upward"})}),(0,l.jsx)("button",{onClick:()=>p(t,1),disabled:t===x.length-1,className:`leading-none opacity-0 group-hover/chip:opacity-100 ${t===x.length-1?"text-text-muted/20":"text-text-muted hover:text-primary"}`,children:(0,l.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:"arrow_downward"})}),(0,l.jsx)("button",{onClick:()=>{let e;u({models:0===(e=x.filter((e,a)=>a!==t)).length?["oc/mimo-v2.5-free"]:e})},className:"leading-none opacity-0 group-hover/chip:opacity-100 text-text-muted hover:text-red-500",children:(0,l.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:"close"})})]},`${e}-${t}`)),x.length>3&&(0,l.jsxs)("span",{className:"text-[10px] text-text-muted",children:["+",x.length-3," more"]})]})]})]}),(0,l.jsxs)("div",{className:"flex w-full flex-col gap-2 sm:w-auto sm:flex-row sm:items-center sm:gap-3 sm:shrink-0",children:[(0,l.jsxs)("label",{className:"flex items-center gap-1.5 text-xs text-text-muted cursor-pointer select-none",children:[(0,l.jsx)(d.lM,{checked:m,onChange:e=>u({roundRobin:e}),disabled:!c,"aria-label":`Round-robin ${e.label} adapter`}),(0,l.jsx)("span",{children:"Round"})]}),(0,l.jsx)(d.$n,{icon:"add",variant:"ghost",size:"sm",onClick:()=>n(!0),disabled:!c,title:`Add ${e.label} model`,children:"Add Model"})]})]}),i&&(0,l.jsx)(d.rq,{isOpen:i,onClose:()=>n(!1),onSelect:e=>{x.includes(e.value)||u({models:[...x,e.value]})},activeProviders:r,title:`Add ${e.label} Model`,addedModelValues:x,capFilter:e.key,closeOnSelect:!1})]})}},80063:(e,t,a)=>{Promise.resolve().then(a.bind(a,41483))}},e=>{e.O(0,[2574,3862,782,8500,594,7055,1321,4707,1330,8441,3794,7358],()=>e(e.s=80063)),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[624],{35497:(e,t,s)=>{"use strict";s.d(t,{x0:()=>k.default,Ex:()=>c.default,$n:()=>a.default,nh:()=>L.default,Zp:()=>o.default,Qv:()=>i.CardSkeleton,CK:()=>u.default,uo:()=>n.ConfirmModal,G9:()=>g.default,wI:()=>v.default,vj:()=>y.default,vE:()=>N.default,pd:()=>r.default,Mh:()=>j.default,uR:()=>p.default,Nf:()=>h.default,aF:()=>n.default,rq:()=>m.default,gw:()=>w.default,LF:()=>x.default,Wx:()=>M.default,gM:()=>f.default,Iz:()=>S.default,l6:()=>l.default,lM:()=>d.default,m_:()=>C.default,jK:()=>b.default});var a=s(92542),r=s(11910),l=s(98),o=s(84588),n=s(81127),i=s(25086);s(56319);var c=s(56061),d=s(98542);s(38587),s(21110),s(92622),s(8823),s(92173);var x=s(90882),m=s(72908),p=s(28815),u=s(45455),h=s(28058),b=s(4809);s(21931),s(80752),s(40197);var f=s(23615);s(44736);var j=s(62899);s(94230);var g=s(30815),N=s(23936),y=s(95088),v=s(73579),k=s(96748),w=s(4823),S=s(28067),C=s(97677),M=s(51825),L=s(29366);s(76361),s(91450)},61872:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>C});var a=s(95155),r=s(12115),l=s(73321),o=s(98500),n=s.n(o),i=s(21742),c=s(16746),d=s(28408),x=s(32539),m=s(59656),p=s(84420),u=s(19381),h=s(94977),b=s(48035),f=s(67869),j=s(67389),g=s(85545),N=s(35497);let y=["#3987e5","#199e70","#c98500","#9085e9","#008300","#e66767"],v="#8a8172",k=[{key:"router",label:"Router"},{key:"bandit_policy",label:"Bandit policy"},{key:"cached_route",label:"Cached route"},{key:"exploration",label:"Exploration"},{key:"judge_flag_escalation",label:"Judge escalation"},{key:"fallback_rescue",label:"Fallback rescue"}],w={backgroundColor:"var(--color-bg)",border:"1px solid var(--color-border)",borderRadius:"8px",color:"var(--color-text)",fontSize:"12px"};function S({active:e,payload:t}){if(!e||!t?.length)return null;let s=t[0].payload;return(0,a.jsxs)("div",{className:"font-mono",style:w,children:[(0,a.jsx)("p",{className:"mb-1 text-text-muted",children:s.worker}),(0,a.jsxs)("p",{className:"text-text-main",children:["Score: ",Math.round(Number(s.avgScore)||0)]}),null!=s.winRate&&(0,a.jsxs)("p",{className:"text-text-main",children:["Win rate: ",Math.round(100*s.winRate),"%"]}),(0,a.jsxs)("p",{className:"text-text-main",children:["Latency: ",Math.round(Number(s.avgLatencyMs)||0),"ms"]})]})}function C(){return(0,a.jsx)(r.Suspense,{fallback:(0,a.jsx)("p",{className:"text-sm text-text-muted p-4",children:"Loading insights…"}),children:(0,a.jsx)(M,{})})}function M(){let e,t,s=(0,l.useSearchParams)().get("combo")||"",[o,C]=(0,r.useState)(null),[M,O]=(0,r.useState)(null),[$,R]=(0,r.useState)(!1),[F,_]=(0,r.useState)(""),[E,A]=(0,r.useState)(""),[T,z]=(0,r.useState)(14),[P,W]=(0,r.useState)(""),[Z,I]=(0,r.useState)(""),[K,J]=(0,r.useState)(!1),q=(0,r.useCallback)(async()=>{if(s){R(!0),_("");try{let e=new URLSearchParams({combo:s,days:String(T)});P&&e.set("cluster",P),Z&&e.set("worker",Z),K&&e.set("exploration","1");let[t,a]=await Promise.all([fetch(`/api/routing/insights?${e}`,{cache:"no-store"}),fetch(`/api/routing/stats?combo=${encodeURIComponent(s)}&days=${T}`,{cache:"no-store"}).then(async e=>e.ok?e.json():null).catch(()=>null)]),r=await t.json();if(!t.ok)throw Error(r.error||"Failed to load insights");C(r),O(a)}catch(e){_(e.message||"Failed"),C(null),O(null)}finally{R(!1)}}},[s,T,P,Z,K]);(0,r.useEffect)(()=>{q()},[q]);let D=(0,r.useCallback)(async(e,t)=>{if(e)try{let s=await fetch("/api/routing/feedback",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({requestId:e,rating:t})}),a=await s.json().catch(()=>({}));if(!s.ok)throw Error(a.error||"Feedback failed");A(0===t?"Feedback cleared":"Thanks — feedback recorded"),await q()}catch(e){A(e.message||"Feedback failed")}},[q]),B=(0,r.useMemo)(()=>{if(!o?.heatmap)return 100;let e=1;for(let t of o.heatmap)for(let s of t.cells||[])null!=s.avg&&s.avg>e&&(e=s.avg);return e},[o]),G=M?.timeline||[],U=(e=[...new Set([...(o?.modelStats||[]).map(e=>e.worker),...G.map(e=>e.worker)].filter(Boolean))].sort(),t={},e.forEach((e,s)=>{t[e]=s<6?y[s]:v}),t),Q=(o?.modelStats||[]).map(e=>({...e,workerLabel:e.worker.split("/").pop(),winRate:null!=e.wins&&Number(e.n)>0?Number(e.wins)/Number(e.n):null})),V=[...new Set(G.map(e=>e.worker).filter(Boolean))].sort(),H=V.filter(e=>U[e]!==v),X=V.some(e=>U[e]===v),Y=new Map;for(let e of G){let t=Number(e.avgScore);if(!Number.isFinite(t))continue;let s=Y.get(e.day)||{day:e.day,otherN:0,otherScore:0};if(U[e.worker]===v){let a=Number(e.n)||0;s.otherN+=a,s.otherScore+=t*a}else s[e.worker]=t;Y.set(e.day,s)}let ee=[...Y.values()].map(e=>(e.otherN>0&&(e.Other=e.otherScore/e.otherN),delete e.otherN,delete e.otherScore,e)),et=X?[...H,"Other"]:H,es=M?.pickSource||{},ea=Object.values(es).reduce((e,t)=>e+(Number(t)||0),0),er=ea?Math.round(((Number(es.bandit_policy)||0)+(Number(es.cached_route)||0))/ea*100):null,el=G.reduce((e,t)=>e+(Number(t.n)||0),0),eo=G.reduce((e,t)=>e+(Number(t.avgScore)||0)*(Number(t.n)||0),0),en=M?.judgeCoverage,ei=en?.total?Math.round(Number(en.judged)/Number(en.total)*100):null;return s?(0,a.jsxs)("div",{className:"flex flex-col gap-5 max-w-[1180px]",children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-end justify-between gap-3",children:[(0,a.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,a.jsx)("h1",{className:"text-[17px] font-semibold tracking-tight",children:"Routing insights"}),(0,a.jsxs)("p",{className:"text-xs font-mono text-text-subtle",children:["combo: ",s,o?.strategy?.routerModel?` \xb7 router ${o.strategy.routerModel}`:"",o?.strategy?.objective?` \xb7 ${o.strategy.objective}`:"",o?.strategy?.explorationRate!=null?` \xb7 ε=${Math.round((o.strategy.explorationRate??.05)*100)}% (cap ${Math.round((o.strategy.explorationRateCap??.2)*100)}%)`:""]})]}),(0,a.jsxs)("div",{className:"flex flex-wrap gap-2 items-center",children:[(0,a.jsxs)("select",{value:T,onChange:e=>z(Number(e.target.value)||14),className:"text-[11.5px] font-mono text-text-subtle px-2 py-1.5 rounded-[7px] bg-surface-2 border border-border",title:"Date range",children:[(0,a.jsx)("option",{value:7,children:"last 7 days"}),(0,a.jsx)("option",{value:14,children:"last 14 days"}),(0,a.jsx)("option",{value:30,children:"last 30 days"}),(0,a.jsx)("option",{value:90,children:"last 90 days"})]}),(0,a.jsxs)("select",{value:P,onChange:e=>W(e.target.value),className:"text-[11.5px] font-mono text-text-subtle px-2 py-1.5 rounded-[7px] bg-surface-2 border border-border max-w-[140px]",title:"Filter cluster",children:[(0,a.jsx)("option",{value:"",children:"all clusters"}),(o?.clusters||[]).map(e=>(0,a.jsx)("option",{value:e,children:e},e))]}),(0,a.jsxs)("select",{value:Z,onChange:e=>I(e.target.value),className:"text-[11.5px] font-mono text-text-subtle px-2 py-1.5 rounded-[7px] bg-surface-2 border border-border max-w-[160px]",title:"Filter worker",children:[(0,a.jsx)("option",{value:"",children:"all workers"}),(o?.workers||[]).map(e=>(0,a.jsx)("option",{value:e,children:e.split("/").pop()},e))]}),(0,a.jsxs)("label",{className:"inline-flex items-center gap-1 text-[11px] text-text-muted cursor-pointer",children:[(0,a.jsx)("input",{type:"checkbox",className:"rounded border-border",checked:K,onChange:e=>J(e.target.checked)}),"exploration only"]}),(0,a.jsx)(N.$n,{size:"sm",variant:"secondary",onClick:q,disabled:$,children:"Refresh"}),(0,a.jsx)(N.$n,{size:"sm",disabled:$,onClick:async()=>{A("");try{let e=await fetch("/api/routing/learn",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({comboName:s})}),t=await e.json();A(t.message||JSON.stringify(t)),await q()}catch(e){A(e.message)}},children:"Relearn now"}),(0,a.jsx)(n(),{href:"/dashboard/combos",className:"text-xs text-text-muted hover:text-primary px-2 py-1.5",children:"← Combos"})]})]}),E&&(0,a.jsx)("p",{className:"text-xs font-mono text-text-subtle",children:E}),F&&(0,a.jsx)("p",{className:"text-sm text-red-400",children:F}),$&&!o&&(0,a.jsx)("p",{className:"text-sm text-text-muted",children:"Loading…"}),o&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"grid grid-cols-2 sm:grid-cols-4 gap-3",children:[(0,a.jsx)(L,{label:"Requests",value:String(o.eventCount??0)}),(0,a.jsx)(L,{label:"Need for learn",value:o.needMore>0?`${o.needMore} more`:"ready"}),(0,a.jsx)(L,{label:"Active version",value:o.promoted?`v${o.promoted.version}`:"—"}),(0,a.jsx)(L,{label:"Eval score",value:o.promoted?.evalScore!=null?Number(o.promoted.evalScore).toFixed(1):"—"})]}),(0,a.jsxs)("div",{className:"grid grid-cols-2 sm:grid-cols-4 gap-3",children:[(0,a.jsx)(L,{label:"Router-skip %",value:null==er?"—":`${er}%`}),(0,a.jsx)(L,{label:"Avg score",value:el>0?(eo/el).toFixed(1):"—"}),(0,a.jsx)(L,{label:"Judge coverage %",value:null==ei?"—":`${ei}%`}),(0,a.jsx)(L,{label:"Total picks",value:String(ea)})]}),(0,a.jsxs)("p",{className:"text-[11px] text-text-subtle font-mono -mt-2",children:["Request-level counts (one per chat). Intermediate fallback attempts",null!=o.attemptCount&&o.attemptCount!==o.eventCount?` (${o.attemptCount} attempt rows)`:""," ","feed the bandit but not the min-events gate. Single-worker and heuristic shortcuts are not logged here."]}),(0,a.jsxs)(N.Zp,{padding:"md",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between mb-1 flex-wrap gap-2",children:[(0,a.jsx)("span",{className:"text-[13px] font-semibold",children:"Win-rate heatmap"}),(0,a.jsxs)("div",{className:"flex items-center gap-2 text-[10.5px] font-mono text-text-subtle",children:[(0,a.jsx)("span",{children:"low"}),(0,a.jsx)("span",{className:"w-[120px] h-2 rounded",style:{background:"linear-gradient(90deg,rgba(229,180,84,.1),rgba(229,180,84,.72))"}}),(0,a.jsx)("span",{children:"high \xb7 number always shown"})]})]}),(0,a.jsx)("p",{className:"text-[11.5px] font-mono text-text-subtle mb-3",children:"cluster \xd7 worker \xb7 average outcome score (0–100)"}),o.clusters?.length&&o.workers?.length?(0,a.jsxs)("div",{className:"grid gap-1 overflow-x-auto",style:{gridTemplateColumns:`112px repeat(${o.workers.length}, minmax(56px, 1fr))`},children:[(0,a.jsx)("div",{}),o.workers.map(e=>(0,a.jsx)("div",{className:"font-mono text-[10.5px] text-text-muted text-center pb-1 truncate",title:e,children:e.split("/").pop()},e)),o.heatmap.map(e=>(0,a.jsxs)("div",{className:"contents",children:[(0,a.jsx)("div",{className:"text-[11px] uppercase tracking-wide text-text-muted flex items-center font-medium",children:e.cluster}),e.cells.map(t=>{let s=t.avg,r=null==s||B<=0?0:Math.min(1,s/B);return(0,a.jsx)("div",{className:"rounded text-center font-mono text-[11px] py-2 border border-border",style:{background:`rgba(229,180,84,${.08+.55*r})`,color:null==s?"#6F6653":"#ECE4D2"},title:`${t.worker}: n=${t.n}`,children:null==s?"—":Math.round(s)},`${e.cluster}-${t.worker}`)})]},e.cluster))]}):(0,a.jsx)("p",{className:"text-sm text-text-muted py-6 text-center",children:"No routing events yet. Point a client at this combo with strategy Auto."})]}),(0,a.jsxs)(N.Zp,{padding:"md",children:[(0,a.jsx)("span",{className:"text-[13px] font-semibold",children:"Score trend"}),(0,a.jsx)("p",{className:"text-[11px] text-text-subtle font-mono mb-2",children:"mean outcome score per worker per day (request-level)"}),0===ee.length?(0,a.jsx)("p",{className:"text-xs text-text-muted py-6 text-center",children:"No routing data in this window — Auto combos learn as they route"}):(0,a.jsx)(i.u,{width:"100%",height:220,children:(0,a.jsxs)(c.b,{data:ee,margin:{top:8,right:12,left:0,bottom:0},children:[(0,a.jsx)(d.d,{strokeDasharray:"3 3",strokeOpacity:.1}),(0,a.jsx)(x.W,{dataKey:"day",tick:{className:"font-mono",fill:"currentColor",fillOpacity:.65,fontSize:10},tickFormatter:e=>String(e).slice(5),tickLine:!1,axisLine:!1}),(0,a.jsx)(m.h,{domain:[0,100],tick:{className:"font-mono",fill:"currentColor",fillOpacity:.65,fontSize:10},tickLine:!1,axisLine:!1,width:32}),(0,a.jsx)(p.m,{contentStyle:w,itemStyle:{color:"var(--color-text)"},labelStyle:{color:"var(--color-text-muted)"},formatter:(e,t)=>[Math.round(Number(e)),t]}),et.length>=2&&(0,a.jsx)(u.s,{formatter:e=>(0,a.jsx)("span",{className:"font-mono text-[10px] text-text-muted",children:e})}),et.map(e=>(0,a.jsx)(h.N1,{type:"monotone",dataKey:t=>t[e]??null,name:"Other"===e?"Other":e.split("/").pop(),stroke:"Other"===e?v:U[e],strokeWidth:2,dot:!1,activeDot:{r:4},connectNulls:!0,isAnimationActive:!1},e))]})})]}),(0,a.jsxs)("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-4",children:[(0,a.jsxs)(N.Zp,{padding:"md",children:[(0,a.jsx)("span",{className:"text-[13px] font-semibold",children:"Worker comparison"}),(0,a.jsx)("p",{className:"text-[11px] text-text-subtle font-mono mb-3",children:"average outcome score (0–100)"}),0===Q.length?(0,a.jsx)("p",{className:"text-xs text-text-muted py-6 text-center",children:"No routing data in this window — Auto combos learn as they route"}):(0,a.jsx)(i.u,{width:"100%",height:Math.max(180,34*Q.length),children:(0,a.jsxs)(b.E,{data:Q,layout:"vertical",margin:{top:2,right:34,left:0,bottom:0},children:[(0,a.jsx)(d.d,{strokeDasharray:"3 3",strokeOpacity:.1,horizontal:!1}),(0,a.jsx)(x.W,{type:"number",domain:[0,100],tick:{className:"font-mono",fill:"currentColor",fillOpacity:.65,fontSize:10},tickLine:!1,axisLine:!1}),(0,a.jsx)(m.h,{type:"category",dataKey:"workerLabel",width:110,tick:{className:"font-mono",fill:"currentColor",fillOpacity:.65,fontSize:10},tickLine:!1,axisLine:!1}),(0,a.jsx)(p.m,{content:(0,a.jsx)(S,{}),contentStyle:w}),(0,a.jsxs)(f.yP,{dataKey:"avgScore",name:"Average score",barSize:16,radius:[0,4,4,0],isAnimationActive:!1,children:[Q.map(e=>(0,a.jsx)(j.f,{fill:U[e.worker]||v},e.worker)),(0,a.jsx)(g.Ze,{dataKey:"avgScore",position:"right",formatter:e=>Math.round(Number(e)||0),fill:"var(--color-text-muted)",className:"font-mono"})]})]})})]}),(0,a.jsxs)(N.Zp,{padding:"md",children:[(0,a.jsx)("span",{className:"text-[13px] font-semibold",children:"Pick source"}),(0,a.jsx)("p",{className:"text-[11px] text-text-subtle font-mono mb-3",children:"terminal selections in the selected window"}),0===ea?(0,a.jsx)("p",{className:"text-xs text-text-muted py-6 text-center",children:"No routing data in this window — Auto combos learn as they route"}):(0,a.jsx)(i.u,{width:"100%",height:180,children:(0,a.jsxs)(b.E,{data:[{name:"window",...es}],margin:{top:8,right:8,left:0,bottom:0},children:[(0,a.jsx)(d.d,{strokeDasharray:"3 3",strokeOpacity:.1,vertical:!1}),(0,a.jsx)(x.W,{type:"number",tick:{className:"font-mono",fill:"currentColor",fillOpacity:.65,fontSize:10},tickLine:!1,axisLine:!1}),(0,a.jsx)(m.h,{type:"category",dataKey:"name",width:48,tick:{className:"font-mono",fill:"currentColor",fillOpacity:.65,fontSize:10},tickLine:!1,axisLine:!1}),(0,a.jsx)(p.m,{contentStyle:w,itemStyle:{color:"var(--color-text)"},labelStyle:{color:"var(--color-text-muted)"}}),(0,a.jsx)(u.s,{formatter:e=>(0,a.jsx)("span",{className:"font-mono text-[10px] text-text-muted",children:e})}),k.map((e,t)=>(0,a.jsx)(f.yP,{dataKey:e.key,name:e.label,stackId:"s",fill:t<6?y[t]:v,isAnimationActive:!1},e.key))]})})]})]}),(0,a.jsxs)("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-4",children:[(0,a.jsxs)(N.Zp,{padding:"md",children:[(0,a.jsx)("span",{className:"text-[13px] font-semibold",children:"Model performance"}),(0,a.jsxs)("div",{className:"mt-3 space-y-2",children:[0===(o.modelStats||[]).length&&(0,a.jsx)("p",{className:"text-xs text-text-muted",children:"No data"}),(o.modelStats||[]).map(e=>(0,a.jsxs)("div",{className:"grid grid-cols-[1fr_52px_60px_40px] gap-2 items-center text-xs",children:[(0,a.jsx)("span",{className:"font-mono truncate text-text-main",title:e.worker,children:e.worker}),(0,a.jsx)("span",{className:"text-right font-mono text-text-muted",children:null!=e.avgScore?Math.round(e.avgScore):"—"}),(0,a.jsx)("span",{className:"text-right font-mono text-text-muted",children:null!=e.avgLatencyMs?`${Math.round(e.avgLatencyMs)}ms`:"—"}),(0,a.jsx)("span",{className:"text-right font-mono text-text-subtle",children:e.errors||0})]},e.worker))]})]}),(0,a.jsxs)(N.Zp,{padding:"md",children:[(0,a.jsx)("span",{className:"text-[13px] font-semibold",children:"Learning versions"}),(0,a.jsx)("p",{className:"text-[11px] text-text-subtle font-mono mb-2",children:"immutable \xb7 rollback-safe"}),(0,a.jsxs)("div",{className:"space-y-2 max-h-64 overflow-y-auto",children:[0===(o.versions||[]).length&&(0,a.jsx)("p",{className:"text-xs text-text-muted",children:"No versions yet"}),(o.versions||[]).map(e=>(0,a.jsxs)("div",{className:"flex items-center justify-between gap-2 text-xs border-b border-border py-1.5",children:[(0,a.jsxs)("div",{children:[(0,a.jsxs)("span",{className:"font-mono text-text-main",children:["v",e.version,e.promoted?" \xb7 active":""]}),(0,a.jsxs)("div",{className:"text-[10px] text-text-subtle font-mono",children:["eval ",null!=e.evalScore?Number(e.evalScore).toFixed(1):"—"," \xb7"," ",e.source]})]}),!e.promoted&&(0,a.jsx)("button",{type:"button",className:"text-primary text-[11px] hover:underline",onClick:async()=>{await fetch("/api/routing/versions/promote",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:e.id})}),q()},children:"Promote"})]},e.id))]}),o.promoted?.prevVersionId&&(0,a.jsx)(N.$n,{size:"sm",variant:"outline",className:"mt-3",onClick:async()=>{await fetch("/api/routing/versions/rollback",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({comboName:s})}),q()},children:"Rollback"})]})]}),(0,a.jsxs)(N.Zp,{padding:"md",children:[(0,a.jsx)("span",{className:"text-[13px] font-semibold",children:"Recent decisions"}),(0,a.jsxs)("div",{className:"mt-3 overflow-x-auto",children:[(0,a.jsxs)("table",{className:"w-full text-left text-xs",children:[(0,a.jsx)("thead",{className:"text-text-subtle font-mono uppercase tracking-wide",children:(0,a.jsxs)("tr",{children:[(0,a.jsx)("th",{className:"py-1 pr-2",children:"Time"}),(0,a.jsx)("th",{className:"py-1 pr-2",children:"Cluster"}),(0,a.jsx)("th",{className:"py-1 pr-2",children:"Worker"}),(0,a.jsx)("th",{className:"py-1 pr-2",children:"Score"}),(0,a.jsx)("th",{className:"py-1 pr-2",children:"Reason"}),(0,a.jsx)("th",{className:"py-1",children:"Rate"})]})}),(0,a.jsx)("tbody",{children:(o.recent||[]).map(e=>{let t=e.meta?.userRating??null;return(0,a.jsxs)("tr",{className:"border-t border-border",children:[(0,a.jsxs)("td",{className:"py-1.5 pr-2 font-mono text-text-muted whitespace-nowrap",children:[e.timestamp?.slice(0,19)?.replace("T"," "),e.meta?.exploration?(0,a.jsx)("span",{className:"ml-1 text-[9px] text-primary",children:"ε"}):null,e.meta?.judgeScore!=null?(0,a.jsxs)("span",{className:"ml-1 text-[9px] text-text-subtle",title:`LLM-judge score ${e.meta.judgeScore}/10`,children:["J",e.meta.judgeScore]}):null]}),(0,a.jsx)("td",{className:"py-1.5 pr-2",children:e.cluster||"—"}),(0,a.jsx)("td",{className:"py-1.5 pr-2 font-mono truncate max-w-[160px]",title:e.pickedWorker,children:e.pickedWorker?.split("/").pop()||"—"}),(0,a.jsx)("td",{className:"py-1.5 pr-2 font-mono",children:null!=e.outcomeScore?Math.round(e.outcomeScore):"—"}),(0,a.jsx)("td",{className:"py-1.5 pr-2 text-text-muted truncate max-w-[240px]",title:e.routerReason,children:e.routerReason||"—"}),(0,a.jsx)("td",{className:"py-1.5 whitespace-nowrap",children:e.requestId?(0,a.jsxs)("span",{className:"inline-flex items-center gap-1",children:[(0,a.jsx)("button",{type:"button",title:"Good route",className:`text-[13px] leading-none ${1===t?"text-primary":"text-text-subtle hover:text-primary"}`,onClick:()=>D(e.requestId,+(1!==t)),children:"▲"}),(0,a.jsx)("button",{type:"button",title:"Bad route",className:`text-[13px] leading-none ${-1===t?"text-red-400":"text-text-subtle hover:text-red-400"}`,onClick:()=>D(e.requestId,-1===t?0:-1),children:"▼"})]}):(0,a.jsx)("span",{className:"text-[10px] text-text-subtle",children:"—"})})]},e.id)})})]}),!(o.recent||[]).length&&(0,a.jsx)("p",{className:"text-xs text-text-muted py-4 text-center",children:"No decisions logged"})]})]}),(0,a.jsxs)(N.Zp,{padding:"md",children:[(0,a.jsx)("span",{className:"text-[13px] font-semibold",children:"Exploration log"}),(0,a.jsx)("p",{className:"text-[11px] text-text-subtle font-mono mb-2",children:"epsilon-greedy random picks (meta.exploration)"}),(0,a.jsxs)("div",{className:"space-y-1.5 max-h-48 overflow-y-auto",children:[0===(o.explorationLog||[]).length&&(0,a.jsx)("p",{className:"text-xs text-text-muted",children:"No exploration events in this window"}),(o.explorationLog||[]).map(e=>(0,a.jsxs)("div",{className:"flex flex-wrap gap-2 text-[11px] font-mono border-b border-border py-1",children:[(0,a.jsx)("span",{className:"text-text-muted",children:e.timestamp?.slice(0,19)?.replace("T"," ")}),(0,a.jsx)("span",{children:e.cluster||"—"}),(0,a.jsx)("span",{className:"text-primary",children:e.pickedWorker?.split("/").pop()}),(0,a.jsxs)("span",{className:"text-text-subtle",children:["score ",null!=e.outcomeScore?Math.round(e.outcomeScore):"—"]})]},`ex-${e.id}`))]})]})]})]}):(0,a.jsxs)("div",{className:"max-w-lg space-y-3",children:[(0,a.jsx)("h1",{className:"text-[17px] font-semibold",children:"Routing insights"}),(0,a.jsxs)("p",{className:"text-sm text-text-muted",children:["Open from a combo card with strategy ",(0,a.jsx)("strong",{children:"Auto"}),", or append"," ",(0,a.jsx)("code",{className:"text-xs",children:"?combo=your-combo"}),"."]}),(0,a.jsx)(n(),{href:"/dashboard/combos",className:"text-sm text-primary hover:underline",children:"← Combos"})]})}function L({label:e,value:t}){return(0,a.jsxs)("div",{className:"rounded-[11px] border border-border bg-surface p-3.5",children:[(0,a.jsx)("div",{className:"text-[10px] uppercase tracking-wide text-text-subtle mb-1.5",children:e}),(0,a.jsx)("div",{className:"font-mono text-[18px] font-semibold text-text-main",children:t})]})}},63759:(e,t,s)=>{Promise.resolve().then(s.bind(s,61872))}},e=>{e.O(0,[2574,3862,782,8500,594,136,1321,4707,1330,8441,3794,7358],()=>e(e.s=63759)),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[712],{35497:(e,t,l)=>{"use strict";l.d(t,{x0:()=>C.default,Ex:()=>i.default,$n:()=>s.default,nh:()=>L.default,Zp:()=>r.default,Qv:()=>c.CardSkeleton,CK:()=>p.default,uo:()=>o.ConfirmModal,G9:()=>y.default,wI:()=>b.default,vj:()=>N.default,vE:()=>j.default,pd:()=>n.default,Mh:()=>v.default,uR:()=>f.default,Nf:()=>m.default,aF:()=>o.default,rq:()=>x.default,gw:()=>E.default,LF:()=>u.default,Wx:()=>k.default,gM:()=>h.default,Iz:()=>w.default,l6:()=>a.default,lM:()=>d.default,m_:()=>_.default,jK:()=>g.default});var s=l(92542),n=l(11910),a=l(98),r=l(84588),o=l(81127),c=l(25086);l(56319);var i=l(56061),d=l(98542);l(38587),l(21110),l(92622),l(8823),l(92173);var u=l(90882),x=l(72908),f=l(28815),p=l(45455),m=l(28058),g=l(4809);l(21931),l(80752),l(40197);var h=l(23615);l(44736);var v=l(62899);l(94230);var y=l(30815),j=l(23936),N=l(95088),b=l(73579),C=l(96748),E=l(4823),w=l(28067),_=l(97677),k=l(51825),L=l(29366);l(76361),l(91450)},44493:(e,t,l)=>{"use strict";l.d(t,{default:()=>d});var s=l(95155),n=l(12115),a=l(35497),r=l(11059),o=l(90620),c=l(78559);let i={LOG:"text-green-400",INFO:"text-blue-400",WARN:"text-yellow-400",ERROR:"text-red-400",DEBUG:"text-purple-400"};function d(){let[e,t]=(0,n.useState)([]),[l,d]=(0,n.useState)(!1),[u,x]=(0,n.useState)(!1),[f,p]=(0,n.useState)(0),m=(0,n.useRef)(null),g=(0,n.useRef)(null),h=async()=>{try{await fetch("/api/translator/console-logs",{method:"DELETE"})}catch(e){(0,c.s)("Failed to clear console logs:",e)}};(0,n.useEffect)(()=>{let e=new EventSource("/api/translator/console-logs/stream");return g.current=e,e.onopen=()=>{d(!0),x(!1)},e.onmessage=e=>{try{let l=JSON.parse(e.data);"init"===l.type?t(Array.isArray(l.logs)?l.logs.slice(-o.UY.maxLines):[]):"line"===l.type?t(e=>{let t=[...e,l.line];return t.length>o.UY.maxLines?t.slice(-o.UY.maxLines):t}):"lines"===l.type?t(e=>{let t=[...e,...Array.isArray(l.lines)?l.lines:[]];return t.length>o.UY.maxLines?t.slice(-o.UY.maxLines):t}):"clear"===l.type&&t([])}catch(e){(0,c.s)("Failed to parse console log SSE message:",e)}},e.onerror=()=>{d(!1),x(!0)},()=>{e.close(),g.current=null}},[f]),(0,n.useEffect)(()=>{m.current&&(m.current.scrollTop=m.current.scrollHeight)},[e]);let{copied:v,copy:y}=(0,r.C)();return(0,s.jsx)("div",{className:"",children:(0,s.jsxs)(a.Zp,{children:[(0,s.jsxs)("div",{className:"flex items-center justify-end gap-2 px-4 pt-3 pb-2",children:[(0,s.jsx)("span",{className:`text-xs font-mono mr-auto ${l?"text-green-500":"text-text-muted"}`,role:"status","aria-live":"polite",children:l?"connected":u?"disconnected":"connecting"}),u&&(0,s.jsx)(a.$n,{size:"sm",variant:"outline",icon:"refresh",onClick:()=>{g.current?.close(),x(!1),d(!1),p(e=>e+1)},children:"Reconnect"}),e.length>0&&(0,s.jsx)(a.$n,{size:"sm",variant:"outline",icon:"console_logs"===v?"check":"content_copy",onClick:()=>{y(e.join("\n"),"console_logs")},children:"console_logs"===v?"Copied":"Copy Logs"}),(0,s.jsx)(a.$n,{size:"sm",variant:"outline",icon:"delete",onClick:h,children:"Clear"})]}),u&&(0,s.jsxs)("div",{role:"alert",className:"mx-4 mb-2 flex items-start gap-2 rounded-lg border border-red-500/30 bg-red-500/10 px-3 py-2 text-xs text-red-500",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[16px] leading-none mt-0.5",children:"error"}),(0,s.jsx)("span",{children:"Console stream disconnected — the log view is paused and new logs are not being received."})]}),(0,s.jsx)("div",{ref:m,className:"bg-black rounded-b-lg p-4 text-xs font-mono h-[calc(100vh-220px)] overflow-y-auto","aria-label":"Console log stream",children:0===e.length?(0,s.jsx)("span",{className:"text-text-muted",children:u?"No console logs received yet (disconnected).":"No console logs yet."}):(0,s.jsx)("div",{className:"space-y-0.5",children:e.map((e,t)=>{let l,n;return(0,s.jsx)("div",{children:(n=i[(l=e.match(/\[(\w+)\]/g))?l[1]?.replace(/\[|\]/g,""):null]||"text-green-400",(0,s.jsx)("span",{className:n,children:e}))},t)})})})]})})}},63131:(e,t,l)=>{Promise.resolve().then(l.bind(l,44493))}},e=>{e.O(0,[2574,3862,782,8500,594,1321,4707,1330,8441,3794,7358],()=>e(e.s=63131)),_N_E=e.O()}]);
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6099],{35497:(e,t,s)=>{"use strict";s.d(t,{x0:()=>C.default,Ex:()=>d.default,$n:()=>a.default,nh:()=>P.default,Zp:()=>r.default,Qv:()=>l.CardSkeleton,CK:()=>p.default,uo:()=>o.ConfirmModal,G9:()=>g.default,wI:()=>k.default,vj:()=>j.default,vE:()=>v.default,pd:()=>i.default,Mh:()=>f.default,uR:()=>h.default,Nf:()=>x.default,aF:()=>o.default,rq:()=>m.default,gw:()=>N.default,LF:()=>u.default,Wx:()=>A.default,gM:()=>b.default,Iz:()=>w.default,l6:()=>n.default,lM:()=>c.default,m_:()=>S.default,jK:()=>y.default});var a=s(92542),i=s(11910),n=s(98),r=s(84588),o=s(81127),l=s(25086);s(56319);var d=s(56061),c=s(98542);s(38587),s(21110),s(92622),s(8823),s(92173);var u=s(90882),m=s(72908),h=s(28815),p=s(45455),x=s(28058),y=s(4809);s(21931),s(80752),s(40197);var b=s(23615);s(44736);var f=s(62899);s(94230);var g=s(30815),v=s(23936),j=s(95088),k=s(73579),C=s(96748),N=s(4823),w=s(28067),S=s(97677),A=s(51825),P=s(29366);s(76361),s(91450)},48874:(e,t,s)=>{"use strict";async function a(e,t){let s=await fetch(e,{...t,headers:{"Content-Type":"application/json",...t?.headers||{}},credentials:"same-origin"}),a=null;try{a=await s.json()}catch{a=null}if(!s.ok){let e=a&&(a.error||a.message)||`Request failed (${s.status})`,t=Error("string"==typeof e?e:"Request failed");throw t.status=s.status,t.data=a,t}return a}s.d(t,{x:()=>a})},53390:(e,t,s)=>{"use strict";s.d(t,{$:()=>o,s:()=>r});var a=s(31967),i=s(99190),n=s(9846),r=class extends i.k{#e;#t;#s;#a;constructor(e){super(),this.#e=e.client,this.mutationId=e.mutationId,this.#s=e.mutationCache,this.#t=[],this.state=e.state||o(),this.setOptions(e.options),this.scheduleGc()}setOptions(e){this.options=e,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(e){this.#t.includes(e)||(this.#t.push(e),this.clearGcTimeout(),this.#s.notify({type:"observerAdded",mutation:this,observer:e}))}removeObserver(e){this.#t=this.#t.filter(t=>t!==e),this.scheduleGc(),this.#s.notify({type:"observerRemoved",mutation:this,observer:e})}optionalRemove(){this.#t.length||("pending"===this.state.status?this.scheduleGc():this.#s.remove(this))}continue(){return this.#a?.continue()??this.execute(this.state.variables)}async execute(e){let t=()=>{this.#i({type:"continue"})},s={client:this.#e,meta:this.options.meta,mutationKey:this.options.mutationKey};this.#a=(0,n.II)({fn:()=>this.options.mutationFn?this.options.mutationFn(e,s):Promise.reject(Error("No mutationFn found")),onFail:(e,t)=>{this.#i({type:"failed",failureCount:e,error:t})},onPause:()=>{this.#i({type:"pause"})},onContinue:t,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>this.#s.canRun(this)});let a="pending"===this.state.status,i=!this.#a.canStart();try{if(a)t();else{this.#i({type:"pending",variables:e,isPaused:i}),this.#s.config.onMutate&&await this.#s.config.onMutate(e,this,s);let t=await this.options.onMutate?.(e,s);t!==this.state.context&&this.#i({type:"pending",context:t,variables:e,isPaused:i})}let n=await this.#a.start();return await this.#s.config.onSuccess?.(n,e,this.state.context,this,s),await this.options.onSuccess?.(n,e,this.state.context,s),await this.#s.config.onSettled?.(n,null,this.state.variables,this.state.context,this,s),await this.options.onSettled?.(n,null,e,this.state.context,s),this.#i({type:"success",data:n}),n}catch(t){try{await this.#s.config.onError?.(t,e,this.state.context,this,s)}catch(e){Promise.reject(e)}try{await this.options.onError?.(t,e,this.state.context,s)}catch(e){Promise.reject(e)}try{await this.#s.config.onSettled?.(void 0,t,this.state.variables,this.state.context,this,s)}catch(e){Promise.reject(e)}try{await this.options.onSettled?.(void 0,t,e,this.state.context,s)}catch(e){Promise.reject(e)}throw this.#i({type:"error",error:t}),t}finally{this.#s.runNext(this)}}#i(e){this.state=(t=>{switch(e.type){case"failed":return{...t,failureCount:e.failureCount,failureReason:e.error};case"pause":return{...t,isPaused:!0};case"continue":return{...t,isPaused:!1};case"pending":return{...t,context:e.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:e.isPaused,status:"pending",variables:e.variables,submittedAt:Date.now()};case"success":return{...t,data:e.data,failureCount:0,failureReason:null,error:null,status:"success",isPaused:!1};case"error":return{...t,data:void 0,error:e.error,failureCount:t.failureCount+1,failureReason:e.error,isPaused:!1,status:"error"}}})(this.state),a.jG.batch(()=>{this.#t.forEach(t=>{t.onMutationUpdate(e)}),this.#s.notify({mutation:this,type:"updated",action:e})})}};function o(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:"idle",variables:void 0,submittedAt:0}}},53427:(e,t,s)=>{Promise.resolve().then(s.bind(s,57125))},57125:(e,t,s)=>{"use strict";s.d(t,{default:()=>O});var a=s(95155),i=s(12115),n=s(14051),r=s.n(n),o=s(35625),l=s(4109),d=s(53390),c=s(31967),u=s(98216),m=s(5858),h=class extends u.Q{#e;#n=void 0;#r;#o;constructor(e,t){super(),this.#e=e,this.setOptions(t),this.bindMethods(),this.#l()}bindMethods(){this.mutate=this.mutate.bind(this),this.reset=this.reset.bind(this)}setOptions(e){let t=this.options;this.options=this.#e.defaultMutationOptions(e),(0,m.f8)(this.options,t)||this.#e.getMutationCache().notify({type:"observerOptionsUpdated",mutation:this.#r,observer:this}),t?.mutationKey&&this.options.mutationKey&&(0,m.EN)(t.mutationKey)!==(0,m.EN)(this.options.mutationKey)?this.reset():this.#r?.state.status==="pending"&&this.#r.setOptions(this.options)}onUnsubscribe(){this.hasListeners()||this.#r?.removeObserver(this)}onMutationUpdate(e){this.#l(),this.#d(e)}getCurrentResult(){return this.#n}reset(){this.#r?.removeObserver(this),this.#r=void 0,this.#l(),this.#d()}mutate(e,t){return this.#o=t,this.#r?.removeObserver(this),this.#r=this.#e.getMutationCache().build(this.#e,this.options),this.#r.addObserver(this),this.#r.execute(e)}#l(){let e=this.#r?.state??(0,d.$)();this.#n={...e,isPending:"pending"===e.status,isSuccess:"success"===e.status,isError:"error"===e.status,isIdle:"idle"===e.status,mutate:this.mutate,reset:this.reset}}#d(e){c.jG.batch(()=>{if(this.#o&&this.hasListeners()){let t=this.#n.variables,s=this.#n.context,a={client:this.#e,meta:this.options.meta,mutationKey:this.options.mutationKey};if(e?.type==="success"){try{this.#o.onSuccess?.(e.data,t,s,a)}catch(e){Promise.reject(e)}try{this.#o.onSettled?.(e.data,null,t,s,a)}catch(e){Promise.reject(e)}}else if(e?.type==="error"){try{this.#o.onError?.(e.error,t,s,a)}catch(e){Promise.reject(e)}try{this.#o.onSettled?.(void 0,e.error,t,s,a)}catch(e){Promise.reject(e)}}}this.listeners.forEach(e=>{e(this.#n)})})}};function p(e,t){let s=(0,o.jE)(t),[a]=i.useState(()=>new h(s,e));i.useEffect(()=>{a.setOptions(e)},[a,e]);let n=i.useSyncExternalStore(i.useCallback(e=>a.subscribe(c.jG.batchCalls(e)),[a]),()=>a.getCurrentResult(),()=>a.getCurrentResult()),r=i.useCallback((e,t)=>{a.mutate(e,t).catch(m.lQ)},[a]);if(n.error&&(0,m.GU)(a.options.throwOnError,[n.error]))throw n.error;return{...n,mutate:r,mutateAsync:n.mutate}}var x=s(35497),y=s(11059);function b({label:e,url:t,copyId:s,copied:i,onCopy:n,badge:r,actions:o}){return(0,a.jsxs)("div",{className:"flex items-center gap-2 min-w-0",children:[(0,a.jsx)("span",{className:`text-xs font-mono px-1.5 py-0.5 rounded shrink-0 min-w-[88px] text-center border ${"CF"===r||"TS"===r?"bg-primary/10 text-primary border-primary/25":"bg-surface-2 text-text-muted border-border"}`,children:e}),(0,a.jsx)(x.pd,{value:t,readOnly:!0,className:"flex-1 min-w-0",inputClassName:"font-mono text-sm"}),(0,a.jsx)("button",{type:"button",onClick:()=>n(t,s),className:"p-2 hover:bg-surface-2 rounded text-text-muted hover:text-primary transition-colors shrink-0 border border-transparent hover:border-border",title:"Copy","aria-label":`Copy ${e} endpoint URL`,children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px] leading-none",children:i===s?"check":"content_copy"})}),o]})}let f=[{id:"openai_base",label:"OpenAI Base URL",category:"openai",method:"BASE",path:"/v1",desc:"For OPENAI_BASE_URL, Cursor, Aider, OpenCode, LiteLLM, LangChain",headerHint:"Authorization: Bearer <key>"},{id:"openai_chat",label:"Chat Completions",category:"openai",method:"POST",path:"/v1/chat/completions",desc:"Standard OpenAI chat stream & JSON format across all models & combos",headerHint:"Authorization: Bearer <key>"},{id:"openai_models",label:"Model Catalog",category:"openai",method:"GET",path:"/v1/models",desc:"Discover all active upstream models, custom models, and combos",headerHint:"Authorization: Bearer <key>"},{id:"claude_base",label:"Anthropic Base URL",category:"claude",method:"BASE",path:"",desc:"For ANTHROPIC_BASE_URL (Claude Code CLI, Cline, Roo Code, Claude SDK)",headerHint:"x-api-key: <key> or ANTHROPIC_AUTH_TOKEN"},{id:"claude_messages",label:"Claude Messages",category:"claude",method:"POST",path:"/v1/messages",desc:"Native Anthropic Messages API with streaming, tool use, & thinking blocks",headerHint:"x-api-key: <key> or Authorization: Bearer <key>"},{id:"claude_count",label:"Count Tokens",category:"claude",method:"POST",path:"/v1/messages/count_tokens",desc:"Anthropic token calculation API",headerHint:"x-api-key: <key>"},{id:"gemini_base",label:"Gemini Base URL",category:"gemini",method:"BASE",path:"/v1beta",desc:"For Google GenAI SDK & Gemini CLI base URLs",headerHint:"x-goog-api-key: <key>"},{id:"gemini_content",label:"Gemini Content Generation",category:"gemini",method:"POST",path:"/v1beta/models/{model}:generateContent",desc:"Native Google Gemini REST format with streaming & schema support",headerHint:"x-goog-api-key: <key>"},{id:"responses_api",label:"Codex Responses API",category:"responses",method:"POST",path:"/v1/responses",desc:"OpenAI Responses format (Codex CLI, instruction tuning, response loops)",headerHint:"Authorization: Bearer <key>"},{id:"media_stt",label:"Audio Transcriptions (STT)",category:"media",method:"POST",path:"/v1/audio/transcriptions",desc:"Speech-to-text audio transcription via multipart/form-data",headerHint:"Authorization: Bearer <key>"},{id:"media_tts",label:"Text-to-Speech (TTS)",category:"media",method:"POST",path:"/v1/audio/speech",desc:"Synthesize spoken audio from text with voice selection",headerHint:"Authorization: Bearer <key>"},{id:"media_embeddings",label:"Vector Embeddings",category:"media",method:"POST",path:"/v1/embeddings",desc:"Text embeddings for semantic search, vector stores, and RAG",headerHint:"Authorization: Bearer <key>"},{id:"media_images",label:"Image Generation",category:"media",method:"POST",path:"/v1/images/generations",desc:"Text-to-image synthesis and image editing",headerHint:"Authorization: Bearer <key>"}],g=[{value:"all",label:"All Routes"},{value:"openai",label:"OpenAI",icon:"forum"},{value:"claude",label:"Claude",icon:"smart_toy"},{value:"gemini",label:"Gemini",icon:"diamond"},{value:"responses",label:"Responses",icon:"terminal"},{value:"media",label:"Media (STT/TTS/Img)",icon:"mic"},{value:"snippets",label:"SDK & CLI Snippets",icon:"code"}];function v({origin:e,copied:t,onCopy:s}){let[n,r]=(0,i.useState)("all"),o=e.replace(/\/+$/,""),l="all"===n?f:f.filter(e=>e.category===n),d=`export ANTHROPIC_BASE_URL="${o}"
|
|
2
|
-
export ANTHROPIC_AUTH_TOKEN="sk_switchboard"
|
|
3
|
-
claude`,c=`from openai import OpenAI
|
|
4
|
-
|
|
5
|
-
client = OpenAI(
|
|
6
|
-
base_url="${o}/v1",
|
|
7
|
-
api_key="sk_switchboard"
|
|
8
|
-
)`,u=`curl ${o}/v1/chat/completions \\
|
|
9
|
-
-H "Content-Type: application/json" \\
|
|
10
|
-
-H "Authorization: Bearer sk_switchboard" \\
|
|
11
|
-
-d '{
|
|
12
|
-
"model": "claude-sonnet-4-6",
|
|
13
|
-
"messages": [{"role": "user", "content": "Hello"}]
|
|
14
|
-
}'`;return(0,a.jsxs)(x.Zp,{children:[(0,a.jsx)("div",{className:"flex flex-col sm:flex-row sm:items-center justify-between gap-4 mb-4",children:(0,a.jsxs)("div",{children:[(0,a.jsxs)("h2",{className:"text-lg font-semibold flex items-center gap-2",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-primary",children:"hub"}),"Protocol & Tool Endpoints"]}),(0,a.jsx)("p",{className:"text-sm text-text-muted mt-1",children:"Every route and protocol exposed by Switchboard with format translation."})]})}),(0,a.jsx)("div",{className:"mb-6 overflow-x-auto pb-1",children:(0,a.jsx)(x.Iz,{options:g,value:n,onChange:r,size:"sm"})}),"snippets"===n?(0,a.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,a.jsxs)("div",{className:"rounded-[10px] bg-surface-2 p-4 border border-border",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between mb-2",children:[(0,a.jsxs)("span",{className:"text-sm font-semibold flex items-center gap-2",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-primary text-[18px]",children:"terminal"}),"Claude Code CLI Environment"]}),(0,a.jsxs)("button",{type:"button",onClick:()=>s(d,"snippet_claude"),className:"p-1.5 hover:bg-surface rounded text-text-muted hover:text-primary transition-colors text-xs flex items-center gap-1 border border-border/50",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"snippet_claude"===t?"check":"content_copy"}),"snippet_claude"===t?"Copied":"Copy"]})]}),(0,a.jsx)("pre",{className:"text-xs font-mono bg-black/5 dark:bg-black/40 p-3 rounded-[6px] overflow-x-auto text-text-main",children:d})]}),(0,a.jsxs)("div",{className:"rounded-[10px] bg-surface-2 p-4 border border-border",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between mb-2",children:[(0,a.jsxs)("span",{className:"text-sm font-semibold flex items-center gap-2",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-primary text-[18px]",children:"code"}),"OpenAI Python SDK"]}),(0,a.jsxs)("button",{type:"button",onClick:()=>s(c,"snippet_python"),className:"p-1.5 hover:bg-surface rounded text-text-muted hover:text-primary transition-colors text-xs flex items-center gap-1 border border-border/50",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"snippet_python"===t?"check":"content_copy"}),"snippet_python"===t?"Copied":"Copy"]})]}),(0,a.jsx)("pre",{className:"text-xs font-mono bg-black/5 dark:bg-black/40 p-3 rounded-[6px] overflow-x-auto text-text-main",children:c})]}),(0,a.jsxs)("div",{className:"rounded-[10px] bg-surface-2 p-4 border border-border",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between mb-2",children:[(0,a.jsxs)("span",{className:"text-sm font-semibold flex items-center gap-2",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-primary text-[18px]",children:"send"}),"Direct cURL"]}),(0,a.jsxs)("button",{type:"button",onClick:()=>s(u,"snippet_curl"),className:"p-1.5 hover:bg-surface rounded text-text-muted hover:text-primary transition-colors text-xs flex items-center gap-1 border border-border/50",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"snippet_curl"===t?"check":"content_copy"}),"snippet_curl"===t?"Copied":"Copy"]})]}),(0,a.jsx)("pre",{className:"text-xs font-mono bg-black/5 dark:bg-black/40 p-3 rounded-[6px] overflow-x-auto text-text-main",children:u})]})]}):(0,a.jsx)("div",{className:"flex flex-col divide-y divide-border/60",children:l.map(e=>{let i=`${o}${e.path}`;return(0,a.jsxs)("div",{className:"py-3.5 first:pt-0 last:pb-0 flex flex-col gap-2",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2 min-w-0",children:[(0,a.jsx)("span",{className:`text-[11px] font-mono font-semibold px-2 py-0.5 rounded border shrink-0 ${function(e){switch(e){case"POST":return"bg-teal-500/10 text-teal-600 dark:text-teal-400 border-teal-500/20";case"GET":return"bg-sky-500/10 text-sky-600 dark:text-sky-400 border-sky-500/20";default:return"bg-primary/10 text-primary border-primary/25"}}(e.method)}`,children:e.method}),(0,a.jsx)("span",{className:"text-sm font-medium truncate",children:e.label})]}),e.headerHint&&(0,a.jsx)("span",{className:"text-[11px] font-mono text-text-muted hidden md:inline truncate max-w-[280px]",children:e.headerHint})]}),(0,a.jsxs)("div",{className:"flex items-center gap-2 min-w-0",children:[(0,a.jsx)(x.pd,{value:i,readOnly:!0,className:"flex-1 min-w-0",inputClassName:"font-mono text-xs bg-surface-2"}),(0,a.jsx)("button",{type:"button",onClick:()=>s(i,e.id),className:"p-2 hover:bg-surface-2 rounded text-text-muted hover:text-primary transition-colors shrink-0 border border-transparent hover:border-border",title:"Copy URL","aria-label":`Copy ${e.label} URL`,children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px] leading-none",children:t===e.id?"check":"content_copy"})})]}),(0,a.jsx)("p",{className:"text-xs text-text-muted",children:e.desc})]},e.id)})})]})}function j({message:e,action:t}){return(0,a.jsxs)("div",{className:"flex items-center gap-2 px-3 py-2 rounded-lg bg-brand-500/10 border border-brand-500/30 text-brand-400",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[16px] shrink-0 leading-none",children:"warning"}),(0,a.jsx)("p",{className:"text-xs flex-1 text-brand-300",children:e}),t&&(0,a.jsx)("a",{href:t.href,className:"text-xs font-medium underline shrink-0 hover:opacity-80",onClick:t.href.startsWith("#")?e=>{e.preventDefault(),document.getElementById(t.href.slice(1))?.scrollIntoView({behavior:"smooth"})}:void 0,children:t.label})]})}function k(e){return String(e||"").split("\n").map(e=>e.trim()).filter(Boolean)}function C(e){return""===e?null:Number(e)}function N({apiKey:e,isOpen:t,isSaving:s,onClose:n,onSave:r}){let[o,l]=(0,i.useState)(""),[d,c]=(0,i.useState)(!0),[u,m]=(0,i.useState)(""),[h,p]=(0,i.useState)(""),[y,b]=(0,i.useState)(""),[f,g]=(0,i.useState)(""),[v,j]=(0,i.useState)(""),[w,S]=(0,i.useState)("");return(0,i.useEffect)(()=>{t&&e&&(l(e.name||""),c(!1!==e.isActive),m((e.allowedModels||[]).join("\n")),p((e.allowedCombos||[]).join("\n")),b(function(e){if(!e)return"";let t=new Date(e);return Number.isNaN(t.getTime())?"":new Date(t.getTime()-6e4*t.getTimezoneOffset()).toISOString().slice(0,16)}(e.expiresAt)),g(e.rateLimitPerMinute??""),j(e.concurrencyLimit??""),S(e.spendLimitUsd??""))},[e,t]),(0,a.jsx)(x.aF,{isOpen:t,onClose:n,title:"Edit API Key Policy",size:"lg",children:(0,a.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,a.jsx)(x.pd,{label:"Key name",value:o,onChange:e=>l(e.target.value)}),(0,a.jsxs)("div",{className:"flex items-center justify-between rounded-lg border border-border p-3",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("p",{className:"text-sm font-medium",children:"Active"}),(0,a.jsx)("p",{className:"text-xs text-text-muted",children:"Paused keys cannot authenticate."})]}),(0,a.jsx)(x.lM,{checked:d,onChange:c})]}),(0,a.jsxs)("label",{className:"flex flex-col gap-1.5 text-sm font-medium",children:["Allowed model IDs",(0,a.jsx)("textarea",{className:"min-h-24 rounded-lg border border-border bg-surface-2 p-3 font-mono text-sm",value:u,onChange:e=>m(e.target.value),placeholder:"openai/gpt-5\\nanthropic/claude-sonnet"}),(0,a.jsx)("span",{className:"text-xs font-normal text-text-muted",children:"One exact model ID per line. Empty allows all targets."})]}),(0,a.jsxs)("label",{className:"flex flex-col gap-1.5 text-sm font-medium",children:["Allowed combo names",(0,a.jsx)("textarea",{className:"min-h-20 rounded-lg border border-border bg-surface-2 p-3 font-mono text-sm",value:h,onChange:e=>p(e.target.value),placeholder:"fast\\nquality"}),(0,a.jsx)("span",{className:"text-xs font-normal text-text-muted",children:"One exact combo name per line."})]}),(0,a.jsx)(x.pd,{label:"Expires at",type:"datetime-local",value:y,onChange:e=>b(e.target.value)}),(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-3 sm:grid-cols-3",children:[(0,a.jsx)(x.pd,{label:"Requests / minute",type:"number",min:"1",step:"1",value:f,onChange:e=>g(e.target.value)}),(0,a.jsx)(x.pd,{label:"Concurrent requests",type:"number",min:"1",step:"1",value:v,onChange:e=>j(e.target.value)}),(0,a.jsx)(x.pd,{label:"Spend ceiling (USD)",type:"number",min:"0",step:"0.01",value:w,onChange:e=>S(e.target.value)})]}),(0,a.jsxs)("p",{className:"text-sm text-text-muted",children:["Current spend: ",(0,a.jsxs)("span",{className:"font-mono text-text-main",children:["$",Number(e?.spentUsd||0).toFixed(4)]})]}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(x.$n,{fullWidth:!0,loading:s,disabled:s||!o.trim(),onClick:()=>r({name:o,isActive:d,allowedModels:k(u),allowedCombos:k(h),expiresAt:y?new Date(y).toISOString():null,rateLimitPerMinute:C(f),concurrencyLimit:C(v),spendLimitUsd:C(w)}),children:"Save policy"}),(0,a.jsx)(x.$n,{fullWidth:!0,variant:"ghost",disabled:s,onClick:n,children:"Cancel"})]})]})})}v.propTypes={origin:r().string.isRequired,copied:r().string,onCopy:r().func.isRequired},N.propTypes={apiKey:r().object,isOpen:r().bool.isRequired,isSaving:r().bool.isRequired,onClose:r().func.isRequired,onSave:r().func.isRequired};let w=()=>["endpoint","keys"],S=()=>["endpoint","settings"];var A=s(48874),P=s(65921);function O({initialData:e}){let t=(0,o.jE)(),s=e?.machineId||"",n=(0,P.i)(e=>e.error),r=(0,l.I)({queryKey:w(),queryFn:async()=>{let e=async()=>(await (0,A.x)("/api/keys")).keys||[],t=await e();if(0===t.length)try{await (0,A.x)("/api/keys",{method:"POST",body:JSON.stringify({name:"Default Key"})}),t=await e()}catch{}return t},initialData:e?.keys||[]}),d=(0,l.I)({queryKey:S(),queryFn:()=>(0,A.x)("/api/settings"),initialData:e?.settings||{}}),c=r.data||[],u=d.data?.requireApiKey===!0,[m,h]=(0,i.useState)(!1),[f,g]=(0,i.useState)(""),[k,C]=(0,i.useState)(null),[I,R]=(0,i.useState)(null),[_,T]=(0,i.useState)(null),[E,M]=(0,i.useState)("/v1"),[K,L]=(0,i.useState)("http://127.0.0.1:20128");(0,i.useEffect)(()=>{M(`${window.location.origin}/v1`),L(window.location.origin)},[]);let{copied:$,copy:q}=(0,y.C)(),D=p({mutationFn:e=>(0,A.x)("/api/settings",{method:"PATCH",body:JSON.stringify({requireApiKey:e})}),onSuccess:()=>{t.invalidateQueries({queryKey:S()})},onError:()=>n("Failed to update API key requirement")}),F=p({mutationFn:e=>(0,A.x)("/api/keys",{method:"POST",body:JSON.stringify({name:e})}),onSuccess:e=>{C(e.key||null),g(""),h(!1),t.invalidateQueries({queryKey:w()})},onError:()=>n("Failed to create API key")}),U=p({mutationFn:e=>(0,A.x)(`/api/keys/${e}`,{method:"DELETE"}),onSuccess:()=>{t.invalidateQueries({queryKey:w()})},onError:()=>n("Failed to delete API key")}),H=p({mutationFn:({id:e,isActive:t})=>(0,A.x)(`/api/keys/${e}`,{method:"PUT",body:JSON.stringify({isActive:t})}),onSuccess:()=>{t.invalidateQueries({queryKey:w()})},onError:()=>n("Failed to toggle API key")}),G=p({mutationFn:({id:e,patch:t})=>(0,A.x)(`/api/keys/${e}`,{method:"PUT",body:JSON.stringify(t)}),onSuccess:()=>{T(null),t.invalidateQueries({queryKey:w()})},onError:()=>n("Failed to update API key policy")});return(0,a.jsxs)("div",{className:"flex flex-col gap-8",children:[(0,a.jsxs)(x.Zp,{children:[(0,a.jsxs)("h2",{className:"text-lg font-semibold mb-4 flex items-center gap-2",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-primary",children:"api"}),"API Endpoint"]}),(0,a.jsx)("p",{className:"text-sm text-text-muted mb-4",children:"Local OpenAI-compatible base URL for coding agents and SDKs. Switchboard is local-only — no tunnels or remote exposure."}),(0,a.jsx)(b,{label:"Local",url:E,copyId:"local_url",copied:$,onCopy:q}),s?(0,a.jsxs)("p",{className:"mt-3 text-xs text-text-muted font-mono",children:["Machine: ",s]}):null]}),(0,a.jsx)(v,{origin:K,copied:$,onCopy:q}),(0,a.jsxs)(x.Zp,{id:"require-api-key",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,a.jsxs)("h2",{className:"text-lg font-semibold flex items-center gap-2",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-primary",children:"vpn_key"}),"API Keys"]}),(0,a.jsx)(x.$n,{icon:"add",onClick:()=>h(!0),children:"Create Key"})]}),(0,a.jsxs)("div",{className:"flex items-center justify-between pb-4 mb-4 border-b border-border",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("p",{className:"font-medium",children:"Require API key"}),(0,a.jsx)("p",{className:"text-sm text-text-muted",children:"Requests without a valid key will be rejected"})]}),(0,a.jsx)(x.lM,{checked:u,onChange:()=>{u?R({title:"Disable API key protection?",message:"Any client that can reach this Switchboard endpoint will be able to use your provider accounts.",onConfirm:()=>{R(null),D.mutate(!1)}}):D.mutate(!0)},"aria-label":"Require API key"})]}),!u&&(0,a.jsx)("div",{className:"mb-4 -mt-2",children:(0,a.jsx)(j,{message:"API key is not required — any local client can call /v1."})}),0===c.length?(0,a.jsxs)("div",{className:"text-center py-12",children:[(0,a.jsx)("div",{className:"inline-flex items-center justify-center w-16 h-16 rounded-full bg-primary/10 text-primary mb-4",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[32px]",children:"vpn_key"})}),(0,a.jsx)("p",{className:"text-text-main font-medium mb-1",children:"No API keys yet"}),(0,a.jsx)("p",{className:"text-sm text-text-muted mb-4",children:"Create your first API key to get started"}),(0,a.jsx)(x.$n,{icon:"add",onClick:()=>h(!0),children:"Create Key"})]}):(0,a.jsx)("div",{className:"flex flex-col",children:c.map(e=>{let t=e.name?.trim()||e.id;return(0,a.jsxs)("div",{className:`group flex items-center justify-between py-3 border-b border-black/[0.03] dark:border-white/[0.03] last:border-b-0 ${!1===e.isActive?"opacity-60":""}`,children:[(0,a.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,a.jsx)("p",{className:"text-sm font-medium",children:e.name}),(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2 mt-1",children:[(0,a.jsx)("code",{className:"text-xs text-text-muted font-mono",children:e.keyPrefix}),e.rotationRequired?(0,a.jsx)("span",{className:"rounded-full bg-orange-500/10 px-2 py-0.5 text-[11px] text-orange-600",title:"This legacy key remains usable through its compatibility verifier until you create a replacement.",children:"Rotation required"}):null,e.allowedModels?.length||e.allowedCombos?.length?(0,a.jsx)("span",{className:"rounded-full bg-primary/10 px-2 py-0.5 text-[11px] text-primary",children:"Restricted targets"}):(0,a.jsx)("span",{className:"rounded-full bg-black/5 px-2 py-0.5 text-[11px] text-text-muted dark:bg-white/5",children:"All targets"}),e.rateLimitPerMinute?(0,a.jsxs)("span",{className:"rounded-full bg-black/5 px-2 py-0.5 text-[11px] text-text-muted dark:bg-white/5",children:[e.rateLimitPerMinute,"/min"]}):null,e.concurrencyLimit?(0,a.jsxs)("span",{className:"rounded-full bg-black/5 px-2 py-0.5 text-[11px] text-text-muted dark:bg-white/5",children:[e.concurrencyLimit," concurrent"]}):null,null!=e.spendLimitUsd?(0,a.jsxs)("span",{className:"rounded-full bg-black/5 px-2 py-0.5 text-[11px] text-text-muted dark:bg-white/5",children:["$",Number(e.spentUsd||0).toFixed(2)," / $",Number(e.spendLimitUsd).toFixed(2)]}):null]}),(0,a.jsxs)("p",{className:"text-xs text-text-muted mt-1",children:["Created ",new Date(e.createdAt).toLocaleDateString()]}),!1===e.isActive&&(0,a.jsx)("p",{className:"text-xs text-orange-500 mt-1",children:"Paused"})]}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(x.lM,{size:"sm",checked:e.isActive??!0,onChange:s=>{e.isActive&&!s?R({title:"Pause API Key",message:`Pause API key "${t}"?
|
|
15
|
-
|
|
16
|
-
This key will stop working immediately but can be resumed later.`,onConfirm:async()=>{R(null),H.mutate({id:e.id,isActive:s})}}):H.mutate({id:e.id,isActive:s})},title:e.isActive?"Pause key":"Resume key","aria-label":e.isActive?`Pause API key ${t}`:`Resume API key ${t}`}),(0,a.jsx)("button",{type:"button",onClick:()=>T(e),className:"p-2 hover:bg-primary/10 rounded text-text-muted hover:text-primary opacity-100 sm:opacity-0 sm:group-hover:opacity-100 transition-all",title:"Edit key policy","aria-label":`Edit API key ${t} policy`,children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"edit"})}),(0,a.jsx)("button",{type:"button",onClick:()=>R({title:"Delete API Key",message:`Delete API key "${t}"?`,onConfirm:async()=>{R(null),U.mutate(e.id)}}),className:"p-2 hover:bg-red-500/10 rounded text-red-500 opacity-100 sm:opacity-0 sm:group-hover:opacity-100 transition-all","aria-label":`Delete API key ${t}`,children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"delete"})})]})]},e.id)})})]}),(0,a.jsx)(x.aF,{isOpen:m,title:"Create API Key",onClose:()=>{h(!1),g("")},children:(0,a.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,a.jsx)(x.pd,{label:"Key Name",value:f,onChange:e=>g(e.target.value),placeholder:"Production Key"}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(x.$n,{onClick:()=>F.mutate(f.trim()),fullWidth:!0,disabled:!f.trim()||F.isPending,loading:F.isPending,children:"Create"}),(0,a.jsx)(x.$n,{onClick:()=>{h(!1),g("")},variant:"ghost",fullWidth:!0,children:"Cancel"})]})]})}),(0,a.jsx)(x.aF,{isOpen:!!k,title:"API Key Created",onClose:()=>C(null),children:(0,a.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,a.jsxs)("div",{className:"bg-yellow-50 dark:bg-yellow-900/20 border border-yellow-200 dark:border-yellow-800 rounded-lg p-4",children:[(0,a.jsx)("p",{className:"text-sm text-yellow-800 dark:text-yellow-200 mb-2 font-medium",children:"Save this key now!"}),(0,a.jsx)("p",{className:"text-sm text-yellow-700 dark:text-yellow-300",children:"This is the only time you will see this key. Store it securely."})]}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(x.pd,{value:k||"",readOnly:!0,className:"flex-1 font-mono text-sm"}),(0,a.jsx)(x.$n,{variant:"secondary",icon:"created_key"===$?"check":"content_copy",onClick:()=>q(k,"created_key"),children:"created_key"===$?"Copied!":"Copy"})]}),(0,a.jsx)(x.$n,{onClick:()=>C(null),fullWidth:!0,children:"Done"})]})}),(0,a.jsx)(N,{apiKey:_,isOpen:!!_,isSaving:G.isPending,onClose:()=>T(null),onSave:e=>G.mutate({id:_.id,patch:e})}),(0,a.jsx)(x.uo,{isOpen:!!I,onClose:()=>R(null),onConfirm:I?.onConfirm,title:I?.title||"Confirm",message:I?.message,variant:"danger"})]})}O.propTypes={initialData:r().shape({machineId:r().string,keys:r().array,settings:r().object}).isRequired}}},e=>{e.O(0,[2574,3862,782,8500,594,1321,4707,1330,8441,3794,7358],()=>e(e.s=53427)),_N_E=e.O()}]);
|