@rsalmn/extremerouter 0.7.3 → 0.7.5
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-cli-build/BUILD_ID +1 -1
- package/app/.next-cli-build/app-path-routes-manifest.json +2 -2
- package/app/.next-cli-build/build-manifest.json +2 -2
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/alerts/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/alerts/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/alerts/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/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 +1 -1
- 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/health/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/health/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/health/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.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 +1 -1
- 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/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/overview/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/overview/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/overview/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/playground/page.js +2 -2
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/playground/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/playground/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 +3 -3
- 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/proxy-pools/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/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/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/swarm/page.js +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/swarm/page.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/(dashboard)/dashboard/swarm/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.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/_global-error.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_global-error.segments/_index.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 +5 -5
- package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_not-found.segments/_index.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/api/alerts/test/route.js +1 -1
- package/app/.next-cli-build/server/app/api/alerts/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/auth/reset-password/route.js.nft.json +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/cache/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +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.nft.json +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.nft.json +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/copilot-settings/route.js.nft.json +1 -1
- 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.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js +1 -1
- 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.nft.json +1 -1
- 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/hermes-settings/route.js.nft.json +1 -1
- 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.nft.json +1 -1
- 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.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/start/route.js.nft.json +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.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/health/providers/route.js.nft.json +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/health/stream/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/init/route.js.nft.json +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.nft.json +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.nft.json +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.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.nft.json +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/models/alias/route.js.nft.json +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.nft.json +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.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.nft.json +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.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.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/route.js.nft.json +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.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/freebuff-profile/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/health-timeline/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]/qwencloud-profile/route.js.nft.json +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/[id]/v0-profile/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/vault-pool/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/providers/[id]/zenmux-plans/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.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.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/proxy-pools/[id]/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
- 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/status/route.js.nft.json +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.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/settings/require-login/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.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/swarm/active/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/swarm/stream/route.js.nft.json +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/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.nft.json +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/tunnel/disable/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/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.nft.json +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.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/usage/meta/route.js +1 -1
- package/app/.next-cli-build/server/app/api/usage/meta/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/route.js.nft.json +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/retry-stats/route.js.nft.json +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.nft.json +1 -1
- package/app/.next-cli-build/server/app/api/v1/api/chat/route.js +1 -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 +1 -1
- 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.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/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 +5 -5
- package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/callback.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +5 -5
- 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 +1 -1
- package/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
- 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 +6 -6
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.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 +2 -2
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +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 +5 -5
- package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/index.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +5 -5
- 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/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/landing.segments/_index.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 +1 -1
- package/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
- 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 +6 -6
- package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +6 -6
- package/app/.next-cli-build/server/app/login.segments/_head.segment.rsc +1 -1
- package/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +5 -5
- package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
- package/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
- 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 +2 -2
- package/app/.next-cli-build/server/chunks/1051.js +1 -1
- package/app/.next-cli-build/server/chunks/1216.js +1 -1
- package/app/.next-cli-build/server/chunks/1350.js +1 -1
- package/app/.next-cli-build/server/chunks/1719.js +1 -1
- package/app/.next-cli-build/server/chunks/2231.js +1 -1
- package/app/.next-cli-build/server/chunks/2701.js +1 -1
- package/app/.next-cli-build/server/chunks/318.js +8 -6
- package/app/.next-cli-build/server/chunks/3571.js +1 -0
- package/app/.next-cli-build/server/chunks/4040.js +2 -2
- package/app/.next-cli-build/server/chunks/412.js +2 -2
- package/app/.next-cli-build/server/chunks/5612.js +1 -1
- package/app/.next-cli-build/server/chunks/5699.js +1 -1
- package/app/.next-cli-build/server/chunks/5961.js +1 -1
- package/app/.next-cli-build/server/chunks/6070.js +1 -1
- package/app/.next-cli-build/server/chunks/615.js +1 -1
- package/app/.next-cli-build/server/chunks/6306.js +1 -1
- package/app/.next-cli-build/server/chunks/6316.js +2 -2
- package/app/.next-cli-build/server/chunks/6763.js +1 -1
- package/app/.next-cli-build/server/chunks/6777.js +1 -1
- package/app/.next-cli-build/server/chunks/7872.js +1 -0
- package/app/.next-cli-build/server/chunks/8238.js +1 -1
- package/app/.next-cli-build/server/chunks/8271.js +1 -1
- package/app/.next-cli-build/server/chunks/8833.js +1 -1
- package/app/.next-cli-build/server/chunks/8920.js +1 -1
- package/app/.next-cli-build/server/chunks/9422.js +1 -1
- package/app/.next-cli-build/server/chunks/9630.js +1 -1
- package/app/.next-cli-build/server/chunks/9903.js +1 -1
- package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
- package/app/.next-cli-build/server/middleware.js +1 -1
- package/app/.next-cli-build/server/pages/404.html +1 -1
- package/app/.next-cli-build/server/pages/500.html +1 -1
- package/app/.next-cli-build/static/chunks/1321-959c422643a40389.js +1 -0
- package/app/.next-cli-build/static/chunks/{1696-2558002db021b00d.js → 1696-bafe4b44a7a0439e.js} +1 -1
- package/app/.next-cli-build/static/chunks/1992-b492aa3235a8c259.js +1 -0
- package/app/.next-cli-build/static/chunks/5497-2bcb49ea235529a8.js +7 -0
- package/app/.next-cli-build/static/chunks/705-b7d7b61f41806f0d.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/combos/page-783ab7461aca504e.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/playground/page-8a44865bda8d1138.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-a21a13f1ec3bceb0.js +10 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/page-e71aac08cb013b28.js +1 -0
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/quota/{page-5fc4c9e1400d741e.js → page-b1c9268d55538aba.js} +1 -1
- package/app/.next-cli-build/static/css/db2812b8f70181df.css +1 -0
- package/app/cli/.build-home/AppData/Roaming/extremerouter/db/backups/upgrade-0.7.4-to-0.7.5-0.7.5-20260722-212802/data.sqlite +0 -0
- package/app/cli/.build-home/AppData/Roaming/extremerouter/db/data.sqlite-shm +0 -0
- package/app/cli/.build-home/AppData/Roaming/extremerouter/db/data.sqlite-wal +0 -0
- package/app/package.json +3 -1
- package/app/public/providers/alibaba-cn.svg +11 -0
- package/app/public/providers/alibaba.svg +11 -0
- package/app/public/providers/forge.svg +9 -0
- package/app/public/providers/hcnsec.svg +10 -0
- package/app/public/providers/qwen-cloud-token-plan.svg +8 -0
- package/app/public/providers/qwen-cloud.svg +8 -0
- package/app/public/providers/tokenrouter.svg +15 -0
- package/package.json +1 -1
- package/app/.next-cli-build/server/chunks/8881.js +0 -1
- package/app/.next-cli-build/static/chunks/1321-118ecb4341892b2c.js +0 -1
- package/app/.next-cli-build/static/chunks/5497-d21171ba9c9fbb8d.js +0 -7
- package/app/.next-cli-build/static/chunks/705-197061b2f061280b.js +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/combos/page-70b66ef1b070a378.js +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/playground/page-ba165a4326051b21.js +0 -1
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-1e4e44e8b9d5d986.js +0 -10
- package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/page-0fb5e4d7aabfb5d2.js +0 -1
- package/app/.next-cli-build/static/css/f99fd82ccc97a1ed.css +0 -1
- /package/app/.next-cli-build/static/{3gc9MPTw0g8Wf0FjVPWJh → igzkl-70ERpcxe5WPUc63}/_buildManifest.js +0 -0
- /package/app/.next-cli-build/static/{3gc9MPTw0g8Wf0FjVPWJh → igzkl-70ERpcxe5WPUc63}/_ssgManifest.js +0 -0
- /package/app/cli/.build-home/AppData/Roaming/extremerouter/db/backups/{upgrade-0.6.8-to-0.6.9-0.6.9-20260713-141714 → upgrade-0.7.2-to-0.7.3-0.7.3-20260719-100408}/data.sqlite +0 -0
- /package/app/cli/.build-home/AppData/Roaming/extremerouter/db/backups/{upgrade-0.6.9-to-0.7.0-0.7.0-20260715-111110 → upgrade-0.7.3-to-0.7.4-0.7.4-20260722-105125}/data.sqlite +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
"use strict";exports.id=4040,exports.ids=[4040],exports.modules={34040:(a,b,c)=>{c.d(b,{zH:()=>
|
|
1
|
+
"use strict";exports.id=4040,exports.ids=[4040],exports.modules={34040:(a,b,c)=>{c.d(b,{zH:()=>R,dW:()=>U,Vt:()=>Q,$x:()=>K,Vu:()=>O,Pr:()=>P,vt:()=>V,je:()=>B,UP:()=>N,wj:()=>T});var d=c(12557),e=c(43659),f=c(66306),g=c(26922),h=c(24467),i=c(64367);let j=[/you are (an? )?(expert|senior|principal|staff)?\s*(coding|programming|software|ai)\s*(assistant|agent|engineer|companion|specialist)/i,/you are (claude|cursor|cline|copilot|windsurf|aider|roo|cody|continue)/i,/your (primary )?(task|role|job|goal) is to (help|assist|act as)/i,/follow the user[''']?s instructions/i,/you are operating as (a |an )?(pair|interactive|autonomous)/i,/write (clean|idiomatic|production)[- ]ready code/i,/you have access to (a set of |various )?tools/i,/<environment|<context|<system_prompt>/i];function k(a){return!!a&&"string"==typeof a&&!(a.length<80)&&j.some(b=>b.test(a))}function l(a){if(!a)return a;let b={...a};for(let a of["messages","input"])Array.isArray(b[a])&&(b[a]=b[a].filter(a=>{var b;return a?.role!=="system"&&a?.role!=="developer"||!k("string"==typeof(b=a.content)?b:Array.isArray(b)?b.map(a=>"string"==typeof a?a:a?.text||"").join("\n"):"")}));if("string"==typeof b.system&&k(b.system))delete b.system;else if(Array.isArray(b.system)){let a=b.system.filter(a=>!(a?.type==="text"&&k(a.text)));b.system=a.length>0?a:void 0,void 0===b.system&&delete b.system}for(let a of["system_instruction","systemInstruction"]){let c=b[a];c&&k(Array.isArray(c.parts)?c.parts.map(a=>a?.text||"").join("\n"):"")&&delete b[a]}return b}let m={default:"You are a specialist worker in a swarm. Focus exclusively on your assigned subtask. Produce complete, production-ready output. Do not attempt other subtasks.",architecture:"You are a software architect. Design the structure, interfaces, and module boundaries for your assigned component. Prioritize clean separation of concerns.","game-logic":"You are a game-logic specialist. Implement mechanics, state machines, and rules with correctness and balance in mind.","data-layer":"You are a data/persistence specialist. Implement storage, schemas, serialization, and access patterns with integrity and performance in mind.",ui:"You are a UI/UX specialist. Build accessible, responsive interfaces with clean component structure.",testing:"You are a testing specialist. Write thorough tests covering happy paths, edge cases, and failure modes.",security:"You are a security specialist. Harden inputs, prevent injection/XSS, and enforce least-privilege.",devops:"You are a DevOps specialist. Handle deployment, configuration, and operational concerns."};function n(a){let b=m[a?.role]||m.default,c=a?.instruction||a?.title||"Complete your assigned subtask.";return["=== SWARM WORKER DIRECTIVE ===",b,"",`Subtask: ${a?.title||"Untitled"}`,"",c,"\nOutput ONLY your work for this subtask. Do not reference other workers or the orchestrator.\n=== END DIRECTIVE ==="].join("\n")}var o=c(36701);let p={workerHardTimeoutMs:9e4,workerQuorum:2,stragglerGraceMs:1e4,managerTimeoutMs:6e4,minWorkers:2,maxWorkers:8},q="=== SWARM GATEKEEPER ===\nYou are the GATEKEEPER of a hierarchical swarm. Classify the user's most recent request as SIMPLE or COMPLEX.\n\nSIMPLE = greeting, small talk, a factual question, a one-line clarification, or anything answerable in under ~50 tokens without decomposition.\nCOMPLEX = a coding task, multi-step build request, design problem, debugging session, or anything benefiting from decomposition into parallel specialist work.\n\nRespond with EXACTLY one line, nothing else:\nVERDICT: SIMPLE\nor\nVERDICT: COMPLEX";function r(a){return['=== SWARM MANAGER (STRATEGY) ===\nYou are the MANAGER of a hierarchical swarm. Analyze the user\'s request and produce a high-level execution strategy that decomposes it into independent parallel subtasks.\n\nRespond with ONLY a JSON object (no markdown fences, no prose) of this exact shape:\n{\n "assessment": "<1-2 sentence summary of what the request needs>",\n "subtasks": [\n { "id": 1, "title": "<short title>", "role": "<architecture|game-logic|data-layer|ui|testing|security|devops|default>", "instruction": "<detailed instruction for the specialist worker>" }\n ]\n}\n\nRules:\n- Aim for 2-5 subtasks. Each must be independently executable in parallel.\n- `role` must be one of the listed values; pick the best specialist fit.\n- `instruction` must be self-contained — a worker sees only its own subtask.\n- Do NOT include integration/assembly as a subtask; the Staff auditor + Manager synthesis handle that.\n\n=== USER REQUEST ===',a].join("\n")}function s(a,b){return["=== SWARM STAFF (AUDIT) ===\nYou are the STAFF auditor of a hierarchical swarm. Specialist workers have independently completed their assigned subtasks. Your job is to produce a TECHNICAL AUDIT REPORT that the Manager will use to synthesize the final answer.\n\nFor each worker output, evaluate:\n- Completeness: did it fulfill the subtask instruction?\n- Correctness: any bugs, type errors, logic flaws, or missing edge cases?\n- Consistency: naming conflicts, duplicated logic, or mismatched interfaces with other workers?\n- Integration risks: what will need reconciliation when combining outputs?\n\nThen provide a CONSOLIDATION PLAN: the order in which outputs should be merged, what conflicts to resolve, and what gaps remain.\n\n=== SUBTASKS & WORKER OUTPUTS ===",a.map((a,c)=>{let d=b[c]||"(worker did not produce output)";return`### Subtask ${a.id}: ${a.title}
|
|
2
2
|
Role: ${a.role}
|
|
3
3
|
Instruction: ${a.instruction}
|
|
4
4
|
|
|
5
5
|
#### Worker Output
|
|
6
|
-
${d}`}).join("\n\n---\n\n"),"=== END ===\n\nNow write the technical audit report. Be concrete and specific. Reference subtask IDs."].join("\n")}function r(a,b){return["=== SWARM MANAGER (SYNTHESIS) ===\nYou are the MANAGER producing the FINAL ANSWER. A Staff auditor has reviewed the parallel worker outputs and produced a technical audit report below. Synthesize ONE cohesive, complete, production-quality answer for the user's original request.\n\nRules:\n- Resolve any conflicts the auditor flagged.\n- Integrate all worker outputs into a single coherent result (codebase, explanation, or both).\n- Do NOT mention the swarm, workers, audit, or that multiple agents were used. The user sees only your final answer.\n- Match the user's language and intent exactly.\n\n=== TECHNICAL AUDIT REPORT ===",a,"=== END AUDIT ===\n\n=== ORIGINAL USER REQUEST ===",b,"\nNow produce the final answer."].join("\n")}function s(a){for(let b of["messages","input"])if(Array.isArray(a[b]))for(let c=a[b].length-1;c>=0;c--){let d=a[b][c];if(d?.role==="user"){if("string"==typeof d.content)return d.content;if(Array.isArray(d.content))return d.content.map(a=>"string"==typeof a?a:a?.text||"").join("")}}if(Array.isArray(a.contents)){let b=a.contents[a.contents.length-1];if(b?.role==="user"&&Array.isArray(b.parts))return b.parts.map(a=>a?.text||"").join("")}return""}function t(a){if(!a)return null;let b=a.replace(/```json\s*/gi,"").replace(/```/g,"").trim(),c=b.indexOf("{"),d=b.lastIndexOf("}");if(-1===c||-1===d)return null;try{let a=JSON.parse(b.slice(c,d+1));if(Array.isArray(a.subtasks)&&a.subtasks.length>0)return a}catch{}return null}function u(a){let{tools:b,tool_choice:c,...d}=a,e={...d,stream:!1};return Array.isArray(e.messages)&&(e.messages=I(e.messages)),e}async function v({runId:a,body:b,managerModel:c,handleSingleModel:d,cfg:e,log:f}){(0,m._5)(a,"gatekeeper",{model:c}),s(b);let g=P(j(u(b)),o);try{let b=await R(d(g,c,!0),e.managerTimeoutMs);if(b?.__timeout||b?.__error)return(0,m.SH)(a,"gatekeeper",{verdict:"complex"}),"complex";let h=O(await b.clone().json().catch(()=>({}))),i=/VERDICT:\s*SIMPLE/i.test(h)?"simple":"complex";return(0,m.SH)(a,"gatekeeper",{verdict:i}),f?.info?.("SWARM",`Gatekeeper verdict: ${i}`),i}catch(b){return f?.warn?.("SWARM",`Gatekeeper error, assuming complex: ${b?.message||b}`),(0,m.SH)(a,"gatekeeper",{verdict:"complex"}),"complex"}}async function w({runId:a,body:b,managerModel:c,handleSingleModel:d,cfg:e,log:f}){(0,m._5)(a,"manager",{model:c});let g=s(b),h=P(j(u(b)),p(g));try{let b=await R(d(h,c,!0),e.managerTimeoutMs);if(b?.__timeout||b?.__error)return(0,m.SH)(a,"manager",{strategy:null}),null;let g=O(await b.clone().json().catch(()=>({}))),i=t(g);return(0,m.SH)(a,"manager",{strategy:i?{subtaskCount:i.subtasks.length}:null}),i||f?.warn?.("SWARM","Manager produced unparseable strategy"),i}catch(b){return f?.warn?.("SWARM",`Manager strategy error: ${b?.message||b}`),(0,m.SH)(a,"manager",{strategy:null}),null}}async function x({runId:a,strategy:b,models:c,handleSingleModel:d,cfg:e,log:f}){(0,m._5)(a,"workers",{workerCount:b.subtasks.length});let g=b.subtasks,h=c.filter(Boolean);if(0===h.length)return(0,m.SH)(a,"workers",{workers:[]}),[];let i=g.map((b,c)=>{let f=h[c%h.length],g=P(u(z),l(b));return(0,m.gF)(a,c,"running",{model:f}),R(d(g,f,!0),e.workerHardTimeoutMs).then(async d=>{if(d?.__timeout||d?.__error)return(0,m.gF)(a,c,"error",{model:f}),{ok:!1,text:""};let e=O(await d.clone().json().catch(()=>({})));return(0,m.gF)(a,c,"done",{model:f,outputLen:e.length}),{ok:!0,text:e,subtask:b}}).catch(()=>((0,m.gF)(a,c,"error",{model:f}),{ok:!1,text:""}))}),j=await S(i,{minPanel:Math.min(e.workerQuorum,i.length),stragglerGraceMs:e.stragglerGraceMs,panelHardTimeoutMs:e.workerHardTimeoutMs}),k=[];for(let a=0;a<j.length;a++){let b=j[a];b&&b.ok&&k.push({subtask:g[a],text:b.text})}return(0,m.SH)(a,"workers",{workers:j.map((a,b)=>({index:b,ok:!!a?.ok}))}),k}async function y({runId:a,strategy:b,workerOutputs:c,staffModel:d,auditModel:e,handleSingleModel:f,cfg:g,log:h}){let i=d||e;if(!i)return(0,m.SH)(a,"audit",{skipped:!0}),null;(0,m._5)(a,"audit",{model:i});let k=b.subtasks.map((a,b)=>{let d=c.find(b=>b.subtask?.id===a.id);return{...a,output:d?.text||"(no output)"}}),l=P(j(u(z)),q(k,c.map(a=>a.text)));try{let b=await R(f(l,i,!0),g.managerTimeoutMs);if(b?.__timeout||b?.__error)return(0,m.SH)(a,"audit",{skipped:!0}),null;let c=O(await b.clone().json().catch(()=>({})));return(0,m.SH)(a,"audit",{reportLen:c.length}),c}catch(b){return h?.warn?.("SWARM",`Staff audit error: ${b?.message||b}`),(0,m.SH)(a,"audit",{skipped:!0}),null}}let z=null;async function A({body:a,models:b,handleSingleModel:c,log:d,comboName:e,managerModel:f,staffModel:g,auditModel:h,workerCount:i,swarmTuning:j,telemetry:k=!0}){let l=b.filter(Boolean);if(0===l.length)return new Response(JSON.stringify({error:"Swarm requires at least one worker model"}),{status:400});let o={...n,...j||{}},p=(f||"").trim()||l[0],q=s(a);if(1===l.length&&!f&&!g&&!h)return c(a,l[0]);z=a;let t=k?(0,m._s)({comboName:e,promptPreview:q,managerModel:p,staffModel:g,auditModel:h,workerCount:i||o.minWorkers}):null,u=t?.runId;try{let b=k?await v({runId:u,body:a,managerModel:p,handleSingleModel:c,cfg:o,log:d}):await B({body:a,managerModel:p,handleSingleModel:c,cfg:o,log:d});if("simple"===b)return d?.info?.("SWARM","Gatekeeper bypass — simple request, direct answer"),u&&(0,m.kA)(u,{bypassed:!0}),z=null,c(a,p);let e=k?await w({runId:u,body:a,managerModel:p,handleSingleModel:c,cfg:o,log:d}):await C({body:a,managerModel:p,handleSingleModel:c,cfg:o,log:d});if(!e||!Array.isArray(e.subtasks)||0===e.subtasks.length)return d?.warn?.("SWARM","Strategy decomposition failed — falling back to direct answer"),u&&(0,m.kA)(u,{fallback:!0}),z=null,c(a,p);let f=e.subtasks.slice(0,o.maxWorkers),i=k?await x({runId:u,strategy:{subtasks:f},models:l,handleSingleModel:c,cfg:o,log:d}):await D({strategy:{subtasks:f},models:l,handleSingleModel:c,cfg:o,log:d});if(i.length<o.minWorkers){if(d?.warn?.("SWARM",`Only ${i.length}/${f.length} workers succeeded — fallback`),u&&(0,m.kA)(u,{fallback:!0}),z=null,1===i.length)return c(P(a,"The specialist worker produced this answer. Output it verbatim to the user."),p);return c(a,p)}let j=k?await y({runId:u,strategy:{subtasks:f},workerOutputs:i,staffModel:g,auditModel:h,handleSingleModel:c,cfg:o,log:d}):await E({strategy:{subtasks:f},workerOutputs:i,staffModel:g,auditModel:h,handleSingleModel:c,cfg:o,log:d}),n=j?r(j,q):r(i.map(a=>a.text).join("\n\n---\n\n"),q),s=P(a,n);if(d?.info?.("SWARM",`Synthesizing final answer from ${i.length} worker outputs`),u){(0,m._5)(u,"synthesis",{model:p});let a=await c(s,p);return(0,m.SH)(u,"synthesis"),(0,m.kA)(u,{workerCount:i.length}),z=null,a}return z=null,c(s,p)}catch(b){return d?.error?.("SWARM",`Swarm failed: ${b?.message||b}`),u&&(0,m.bt)(u,b),z=null,c(a,p)}}async function B({body:a,managerModel:b,handleSingleModel:c,cfg:d,log:e}){let f=P(j(u(a)),o);try{let a=await R(c(f,b,!0),d.managerTimeoutMs);if(a?.__timeout||a?.__error)return"complex";let e=O(await a.clone().json().catch(()=>({})));return/VERDICT:\s*SIMPLE/i.test(e)?"simple":"complex"}catch{return"complex"}}async function C({body:a,managerModel:b,handleSingleModel:c,cfg:d,log:e}){let f=s(a),g=P(j(u(a)),p(f));try{let a=await R(c(g,b,!0),d.managerTimeoutMs);if(a?.__timeout||a?.__error)return null;let e=O(await a.clone().json().catch(()=>({})));return t(e)}catch{return null}}async function D({strategy:a,models:b,handleSingleModel:c,cfg:d}){let e=b.filter(Boolean);if(0===e.length)return[];let f=a.subtasks.map((a,b)=>{let f=e[b%e.length];return R(c(P(u(z),l(a)),f,!0),d.workerHardTimeoutMs)}),g=await S(f,{minPanel:Math.min(d.workerQuorum,f.length),stragglerGraceMs:d.stragglerGraceMs,panelHardTimeoutMs:d.workerHardTimeoutMs}),h=[];for(let b=0;b<g.length;b++){let c=g[b];if(c&&!c.__timeout&&!c.__error){let d=O(await c.clone().json().catch(()=>({})));d&&h.push({subtask:a.subtasks[b],text:d})}}return h}async function E({strategy:a,workerOutputs:b,staffModel:c,auditModel:d,handleSingleModel:e,cfg:f}){let g=c||d;if(!g)return null;let h=a.subtasks.map((a,c)=>{let d=b.find(b=>b.subtask?.id===a.id);return{...a,output:d?.text||"(no output)"}}),i=P(j(u(z)),q(h,b.map(a=>a.text)));try{let a=await R(e(i,g,!0),f.managerTimeoutMs);if(a?.__timeout||a?.__error)return null;return O(await a.clone().json().catch(()=>({})))}catch{return null}}let F=new Set(["vision","pdf","audioInput","videoInput"]),G="[Called tools: ",H="[Tool result: ";function I(a){return a.filter(a=>a).map(a=>{if("tool"===a.role||"function"===a.role)return{role:"assistant",content:`${H}${(0,g.kU)(a.content)||String(a.content??"")}]`};if("assistant"===a.role&&Array.isArray(a.tool_calls)){let{tool_calls:b,...c}=a,d=b.map(a=>a?.function?.name||a?.name||"tool").join(", "),e=(0,g.kU)(c.content)||("string"==typeof c.content?c.content:"");return{...c,content:`${e}${e?"\n":""}${G}${d}]`}}if(Array.isArray(a.content)){let b=a.content.some(a=>"tool_use"===a.type),c=a.content.some(a=>"tool_result"===a.type);if(b||c){let b=[],c=[],d=[];for(let e of a.content)"text"===e.type&&e.text&&b.push(e.text),"tool_use"===e.type&&c.push(e.name||"tool"),"tool_result"===e.type&&d.push((0,g.kU)(e.content)||String(e.content??""));let{...e}=a,f=b.join("\n");return c.length>0&&(f=`${f}${f?"\n":""}${G}${c.join(", ")}]`),d.length>0&&(f=`${f}${f?"\n":""}${H}${d.join("\n")}]`),{...e,content:f}}}return a})}let J=new Map;function K(a){if(!Array.isArray(a)||0===a.length)return[];let b=a=>"assistant"===a||"model"===a,c=a.length-1;for(;c>=0&&!b(a[c]?.role);)c--;return a.slice(c+1)}function L(a){a?J.delete(a):J.clear()}function M(a,b){if(a.includes("/"))return null;let c=(Array.isArray(b)?b:b?.combos||[]).find(b=>b.name===a);return c&&c.models&&c.models.length>0?c.models:null}async function N({body:a,models:b,handleSingleModel:c,log:g,comboName:h,comboStrategy:i,comboStickyLimit:j=1,autoSwitch:k=!0}){let l=function(a,b,c,d=1){let e;if(!a||a.length<=1||"round-robin"!==c)return a;let f=b||"__default__",g=Number.isFinite(e=Number.parseInt(d,10))&&e>0?e:1,h=J.get(f),i="number"==typeof h?{index:h,consecutiveUseCount:0}:h||{index:0,consecutiveUseCount:0},j=i.index%a.length,k=function(a,b){let c=[...a];for(let a=0;a<b;a++){let a=c.shift();c.push(a)}return c}(a,j),l=i.consecutiveUseCount+1;return l>=g?J.set(f,{index:(j+1)%a.length,consecutiveUseCount:0}):J.set(f,{index:j,consecutiveUseCount:l}),k}(b,h,i,j);if(k){let b=function(a){let b=new Set;if(!a||"object"!=typeof a)return b;let c=a=>{if(!a||"object"!=typeof a)return;let c=a.type;("image_url"===c||"image"===c||"input_image"===c)&&b.add("vision"),("file"===c||"document"===c||"input_file"===c)&&b.add("pdf");let d=a.inlineData?.mimeType||a.fileData?.mimeType;"string"==typeof d&&d.startsWith("image/")&&b.add("vision"),"application/pdf"===d&&b.add("pdf")},d=a=>{if(Array.isArray(a))for(let b of a)c(b)};for(let b of K(a.messages))d(b.content);for(let b of K(a.input))d(b.content);for(let b of K(a.contents||a.request?.contents))d(b.parts);return b}(a);if(b.size>0){let a=function(a,b){if(!b||0===b.size||!Array.isArray(a)||a.length<=1)return a;let c=[...b].filter(a=>F.has(a)),d=[...b].filter(a=>!F.has(a));return a.map((a,b)=>{let e,g,h,i;return{m:a,i:b,t:(g=(e="string"==typeof a?a.indexOf("/"):-1)>0?a.slice(0,e):"",h=e>0?a.slice(e+1):a,i=(0,f.nl)(g,h),c.every(a=>!0===i[a])?+!d.every(a=>!0===i[a]):2)}}).sort((a,b)=>a.t-b.t||a.i-b.i).map(a=>a.m)}(l,b);a[0]!==l[0]&&g.info("COMBO",`auto-switch for [${[...b].join(",")}] → ${a[0]}`),l=a}}let m=null,n=null,o=null;for(let b=0;b<l.length;b++){let e=l[b];g.info("COMBO",`Trying model ${b+1}/${l.length}: ${e}`);try{let b=await c(a,e);if(b.ok)return g.info("COMBO",`Model ${e} succeeded`),b;let f=b.statusText||"",h=null;try{let a=await b.clone().json();f=a?.error?.message||a?.error||a?.message||f,h=a?.retryAfter||null}catch{}if(h&&(!n||new Date(h)<new Date(n))&&(n=h),"string"!=typeof f)try{f=JSON.stringify(f)}catch{f=String(f)}let{shouldFallback:i,cooldownMs:j}=(0,d.hk)(b.status,f);if(!i)return g.warn("COMBO",`Model ${e} failed (no fallback)`,{status:b.status}),b;j&&j>0&&j<=5e3&&(503===b.status||502===b.status||504===b.status)&&(g.info("COMBO",`Model ${e} transient ${b.status}, waiting ${j}ms before next`),await new Promise(a=>setTimeout(a,j))),m=f||String(b.status),o||(o=b.status),g.warn("COMBO",`Model ${e} failed, trying next`,{status:b.status})}catch(a){m=a.message||String(a),o||(o=500),g.warn("COMBO",`Model ${e} threw error, trying next`,{error:m})}}let p=m&&m.toLowerCase().includes("no credentials")?503:o||503,q=m||"All combo models unavailable";if(n){let a=(0,d.Qo)(n);return g.warn("COMBO",`All models failed | ${q} (${a})`),(0,e.wO)(p,q,n,a)}return g.warn("COMBO",`All models failed | ${q}`),new Response(JSON.stringify({error:{message:q}}),{status:p,headers:{"Content-Type":"application/json"}})}function O(a){if(!a||"object"!=typeof a)return"";let b=a.choices?.[0];if(b){let a=b.message??b.delta??{},c=(0,g.kU)(a.content);if(c.trim())return c;if("string"==typeof b.text&&b.text.trim())return b.text}let c=(0,g.kU)(a.content);if(c.trim())return c;let d=a.candidates?.[0]?.content?.parts;if(Array.isArray(d)){let a=d.map(a=>a?.text||"").join("");if(a.trim())return a}if(Array.isArray(a.output)){let b=a.output.flatMap(a=>Array.isArray(a.content)?a.content.map(a=>a?.text||""):[]).join("");if(b.trim())return b}return""}function P(a,b){let c={...a};return Array.isArray(a.messages)?c.messages=[...a.messages,{role:"user",content:b}]:Array.isArray(a.input)?c.input=[...a.input,{role:"user",content:b}]:Array.isArray(a.contents)?c.contents=[...a.contents,{role:"user",parts:[{text:b}]}]:c.messages=[{role:"user",content:b}],c}let Q={minPanel:2,stragglerGraceMs:8e3,panelHardTimeoutMs:9e4};function R(a,b){return new Promise(c=>{let d=setTimeout(()=>c({__timeout:!0}),b);Promise.resolve(a).then(a=>{clearTimeout(d),c(a)}).catch(a=>{clearTimeout(d),c({__error:a})})})}function S(a,{minPanel:b,stragglerGraceMs:c,panelHardTimeoutMs:d}){return new Promise(e=>{let f=Array(a.length),g=0,h=0,i=!1,j=null,k=()=>{i||(i=!0,clearTimeout(l),j&&clearTimeout(j),e(f))},l=setTimeout(k,d);a.forEach((d,e)=>{Promise.resolve(d).then(a=>{f[e]=a}).catch(a=>{f[e]={__error:a}}).finally(()=>{if(g++,f[e]&&f[e].ok&&h++,g===a.length)return k();h>=b&&!j&&(j=setTimeout(k,c))})})})}async function T({body:a,models:b,handleSingleModel:c,log:d,comboName:e,judgeModel:f,tuning:g}){let h,i=Array.isArray(b)?b.filter(Boolean):[];if(0===i.length)return new Response(JSON.stringify({error:{message:"Fusion combo has no models"}}),{status:400,headers:{"Content-Type":"application/json"}});if(1===i.length)return c(a,i[0]);let j={...Q,...g||{}},k=Math.min(Math.max(2,j.minPanel),i.length),l=f&&f.trim()?f.trim():i[0];d.info("FUSION",`Combo "${e}" | panel=${i.length} [${i.join(", ")}] | judge=${l} | quorum=${k}`);let{tools:m,tool_choice:n,...o}=a,p={...o,stream:!1};Array.isArray(p.messages)?p.messages=I(p.messages):Array.isArray(p.input)&&(p.input=I(p.input));let q=Date.now(),r=i.map(a=>R(c(p,a,!0),j.panelHardTimeoutMs)),s=await S(r,{...j,minPanel:k});d.info("FUSION",`fan-out collected in ${Date.now()-q}ms`);let t=[];for(let a=0;a<s.length;a++){let b=s[a],c=i[a];if(!b){d.warn("FUSION",`Panel ${c} dropped (straggler/timeout)`);continue}if(b.__timeout){d.warn("FUSION",`Panel ${c} timed out`);continue}if(b.__error){d.warn("FUSION",`Panel ${c} threw`,{error:b.__error?.message||String(b.__error)});continue}if(!b.ok){d.warn("FUSION",`Panel ${c} failed`,{status:b.status});continue}try{let a=await b.clone().json(),e=O(a);e?(t.push({model:c,text:e}),d.info("FUSION",`Panel ${c} ok (${e.length} chars)`)):d.warn("FUSION",`Panel ${c} returned empty content`)}catch(a){d.warn("FUSION",`Panel ${c} unparseable`,{error:a.message||String(a)})}}if(0===t.length)return d.warn("FUSION","All panel models failed"),new Response(JSON.stringify({error:{message:"All fusion panel models failed"}}),{status:503,headers:{"Content-Type":"application/json"}});if(1===t.length)return d.info("FUSION",`Only ${t[0].model} succeeded — answering directly (no fusion)`),c(a,t[0].model);let u=P(a,(h=t.map((a,b)=>`[Source ${b+1}]
|
|
6
|
+
${d}`}).join("\n\n---\n\n"),"=== END ===\n\nNow write the technical audit report. Be concrete and specific. Reference subtask IDs."].join("\n")}function t(a,b){return["=== SWARM MANAGER (SYNTHESIS) ===\nYou are the MANAGER producing the FINAL ANSWER. A Staff auditor has reviewed the parallel worker outputs and produced a technical audit report below. Synthesize ONE cohesive, complete, production-quality answer for the user's original request.\n\nRules:\n- Resolve any conflicts the auditor flagged.\n- Integrate all worker outputs into a single coherent result (codebase, explanation, or both).\n- Do NOT mention the swarm, workers, audit, or that multiple agents were used. The user sees only your final answer.\n- Match the user's language and intent exactly.\n\n=== TECHNICAL AUDIT REPORT ===",a,"=== END AUDIT ===\n\n=== ORIGINAL USER REQUEST ===",b,"\nNow produce the final answer."].join("\n")}function u(a){for(let b of["messages","input"])if(Array.isArray(a[b]))for(let c=a[b].length-1;c>=0;c--){let d=a[b][c];if(d?.role==="user"){if("string"==typeof d.content)return d.content;if(Array.isArray(d.content))return d.content.map(a=>"string"==typeof a?a:a?.text||"").join("")}}if(Array.isArray(a.contents)){let b=a.contents[a.contents.length-1];if(b?.role==="user"&&Array.isArray(b.parts))return b.parts.map(a=>a?.text||"").join("")}return""}function v(a){let b;if(!a)return null;let c=a.replace(/```json\s*/gi,"").replace(/```/g,"").trim(),d=c.indexOf("{"),e=c.lastIndexOf("}");if(-1!==d&&-1!==e&&e>d)try{let a=JSON.parse(c.slice(d,e+1));if(Array.isArray(a.subtasks)&&a.subtasks.length>0)return a}catch{}let f=[],g=/\{[^{}]*?"id"\s*:\s*\d+[^{}]*?\}/gs;for(;null!==(b=g.exec(c));){let a=b[0];try{let b=JSON.parse(a);b&&(b.title||b.instruction||b.role)&&f.push({id:"number"==typeof b.id?b.id:f.length+1,title:b.title||`Subtask ${f.length+1}`,role:b.role||"default",instruction:b.instruction||b.title||""})}catch{}}return f.length>0?{assessment:"(recovered from truncated output)",subtasks:f}:null}function w(a){let{tools:b,tool_choice:c,...d}=a,e={...d,stream:!1};return Array.isArray(e.messages)&&(e.messages=K(e.messages)),e}async function x({runId:a,body:b,managerModel:c,handleSingleModel:d,cfg:e,log:f}){(0,o._5)(a,"gatekeeper",{model:c}),u(b);let g=R(l(w(b)),q);try{let b=await T(d(g,c,!0),e.managerTimeoutMs);if(b?.__timeout||b?.__error)return(0,o.SH)(a,"gatekeeper",{verdict:"complex"}),"complex";let h=Q(await b.clone().json().catch(()=>({}))),i=/VERDICT:\s*SIMPLE/i.test(h)?"simple":"complex";return(0,o.SH)(a,"gatekeeper",{verdict:i}),f?.info?.("SWARM",`Gatekeeper verdict: ${i}`),i}catch(b){return f?.warn?.("SWARM",`Gatekeeper error, assuming complex: ${b?.message||b}`),(0,o.SH)(a,"gatekeeper",{verdict:"complex"}),"complex"}}async function y({runId:a,body:b,managerModel:c,handleSingleModel:d,cfg:e,log:f}){(0,o._5)(a,"manager",{model:c});let g=u(b),h=R(l(w(b)),r(g));try{let b=await T(d(h,c,!0),e.managerTimeoutMs);if(b?.__timeout||b?.__error)return(0,o.SH)(a,"manager",{strategy:null}),null;let g=Q(await b.clone().json().catch(()=>({}))),i=v(g);return(0,o.SH)(a,"manager",{strategy:i?{subtaskCount:i.subtasks.length}:null}),i||f?.warn?.("SWARM","Manager produced unparseable strategy"),i}catch(b){return f?.warn?.("SWARM",`Manager strategy error: ${b?.message||b}`),(0,o.SH)(a,"manager",{strategy:null}),null}}async function z({runId:a,strategy:b,models:c,body:d,handleSingleModel:e,cfg:f,log:g}){(0,o._5)(a,"workers",{workerCount:b.subtasks.length});let h=b.subtasks,i=c.filter(Boolean);if(0===i.length)return(0,o.SH)(a,"workers",{workers:[]}),[];let j=h.map((b,c)=>{let g=i[c%i.length],h=R(w(d),n(b));return(0,o.gF)(a,c,"running",{model:g}),T(e(h,g,!0),f.workerHardTimeoutMs).then(async d=>{if(d?.__timeout||d?.__error)return(0,o.gF)(a,c,"error",{model:g}),{ok:!1,text:""};let e=Q(await d.clone().json().catch(()=>({})));return(0,o.gF)(a,c,"done",{model:g,outputLen:e.length}),{ok:!0,text:e,subtask:b}}).catch(()=>((0,o.gF)(a,c,"error",{model:g}),{ok:!1,text:""}))}),k=await U(j,{minPanel:Math.min(f.workerQuorum,j.length),stragglerGraceMs:f.stragglerGraceMs,panelHardTimeoutMs:f.workerHardTimeoutMs}),l=[];for(let a=0;a<k.length;a++){let b=k[a];b&&b.ok&&l.push({subtask:h[a],text:b.text})}return(0,o.SH)(a,"workers",{workers:k.map((a,b)=>({index:b,ok:!!a?.ok}))}),l}async function A({runId:a,strategy:b,workerOutputs:c,staffModel:d,auditModel:e,body:f,handleSingleModel:g,cfg:h,log:i}){let j=d||e;if(!j)return(0,o.SH)(a,"audit",{skipped:!0}),null;(0,o._5)(a,"audit",{model:j});let k=b.subtasks.map((a,b)=>{let d=c.find(b=>b.subtask?.id===a.id);return{...a,output:d?.text||"(no output)"}}),m=R(l(w(f)),s(k,c.map(a=>a.text)));try{let b=await T(g(m,j,!0),h.managerTimeoutMs);if(b?.__timeout||b?.__error)return(0,o.SH)(a,"audit",{skipped:!0}),null;let c=Q(await b.clone().json().catch(()=>({})));return(0,o.SH)(a,"audit",{reportLen:c.length}),c}catch(b){return i?.warn?.("SWARM",`Staff audit error: ${b?.message||b}`),(0,o.SH)(a,"audit",{skipped:!0}),null}}async function B({body:a,models:b,handleSingleModel:c,log:d,comboName:e,managerModel:f,staffModel:g,auditModel:h,workerCount:i,swarmTuning:j,telemetry:k=!0}){let l=b.filter(Boolean);if(0===l.length)return new Response(JSON.stringify({error:"Swarm requires at least one worker model"}),{status:400});let m={...p,...j||{}},n=(f||"").trim()||l[0],q=u(a);if(1===l.length&&!f&&!g&&!h)return c(a,l[0]);let r=k?(0,o._s)({comboName:e,promptPreview:q,managerModel:n,staffModel:g,auditModel:h,workerCount:i||m.minWorkers}):null,s=r?.runId;try{let b=k?await x({runId:s,body:a,managerModel:n,handleSingleModel:c,cfg:m,log:d}):await C({body:a,managerModel:n,handleSingleModel:c,cfg:m,log:d});if("simple"===b)return d?.info?.("SWARM","Gatekeeper bypass — simple request, direct answer"),s&&(0,o.kA)(s,{bypassed:!0}),c(a,n);let e=k?await y({runId:s,body:a,managerModel:n,handleSingleModel:c,cfg:m,log:d}):await D({body:a,managerModel:n,handleSingleModel:c,cfg:m,log:d});if(!e||!Array.isArray(e.subtasks)||0===e.subtasks.length)return d?.warn?.("SWARM","Strategy decomposition failed — falling back to direct answer"),s&&(0,o.kA)(s,{fallback:!0}),c(a,n);let f="number"==typeof i&&i>0?Math.min(i,m.maxWorkers):m.maxWorkers,j=e.subtasks.slice(0,f),p=k?await z({runId:s,strategy:{subtasks:j},models:l,body:a,handleSingleModel:c,cfg:m,log:d}):await E({strategy:{subtasks:j},models:l,body:a,handleSingleModel:c,cfg:m,log:d});if(p.length<m.minWorkers){if(d?.warn?.("SWARM",`Only ${p.length}/${j.length} workers succeeded — fallback`),s&&(0,o.kA)(s,{fallback:!0}),1===p.length)return c(R(a,"The specialist worker produced this answer. Output it verbatim to the user."),n);return c(a,n)}let r=k?await A({runId:s,strategy:{subtasks:j},workerOutputs:p,staffModel:g,auditModel:h,body:a,handleSingleModel:c,cfg:m,log:d}):await F({strategy:{subtasks:j},workerOutputs:p,staffModel:g,auditModel:h,body:a,handleSingleModel:c,cfg:m,log:d}),u=r?t(r,q):t(p.map(a=>a.text).join("\n\n---\n\n"),q),v=R(a,u);if(d?.info?.("SWARM",`Synthesizing final answer from ${p.length} worker outputs`),s){(0,o._5)(s,"synthesis",{model:n});let a=await c(v,n);return(0,o.SH)(s,"synthesis"),(0,o.kA)(s,{workerCount:p.length}),a}return c(v,n)}catch(b){return d?.error?.("SWARM",`Swarm failed: ${b?.message||b}`),s&&(0,o.bt)(s,b),c(a,n)}}async function C({body:a,managerModel:b,handleSingleModel:c,cfg:d,log:e}){let f=R(l(w(a)),q);try{let a=await T(c(f,b,!0),d.managerTimeoutMs);if(a?.__timeout||a?.__error)return"complex";let e=Q(await a.clone().json().catch(()=>({})));return/VERDICT:\s*SIMPLE/i.test(e)?"simple":"complex"}catch{return"complex"}}async function D({body:a,managerModel:b,handleSingleModel:c,cfg:d,log:e}){let f=u(a),g=R(l(w(a)),r(f));try{let a=await T(c(g,b,!0),d.managerTimeoutMs);if(a?.__timeout||a?.__error)return null;let e=Q(await a.clone().json().catch(()=>({})));return v(e)}catch{return null}}async function E({strategy:a,models:b,body:c,handleSingleModel:d,cfg:e}){let f=b.filter(Boolean);if(0===f.length)return[];let g=a.subtasks.map((a,b)=>{let g=f[b%f.length];return T(d(R(w(c),n(a)),g,!0),e.workerHardTimeoutMs)}),h=await U(g,{minPanel:Math.min(e.workerQuorum,g.length),stragglerGraceMs:e.stragglerGraceMs,panelHardTimeoutMs:e.workerHardTimeoutMs}),i=[];for(let b=0;b<h.length;b++){let c=h[b];if(c&&!c.__timeout&&!c.__error){let d=Q(await c.clone().json().catch(()=>({})));d&&i.push({subtask:a.subtasks[b],text:d})}}return i}async function F({strategy:a,workerOutputs:b,staffModel:c,auditModel:d,body:e,handleSingleModel:f,cfg:g}){let h=c||d;if(!h)return null;let i=a.subtasks.map((a,c)=>{let d=b.find(b=>b.subtask?.id===a.id);return{...a,output:d?.text||"(no output)"}}),j=R(l(w(e)),s(i,b.map(a=>a.text)));try{let a=await T(f(j,h,!0),g.managerTimeoutMs);if(a?.__timeout||a?.__error)return null;return Q(await a.clone().json().catch(()=>({})))}catch{return null}}let G=new Set(["vision","pdf","audioInput","videoInput"]),H=new Map;for(let a of i.A){if(a.alias&&H.set(a.alias,a.id),Array.isArray(a.aliases))for(let b of a.aliases)H.set(b,a.id);H.set(a.id,a.id)}let I="[Called tools: ",J="[Tool result: ";function K(a){return a.filter(a=>a).map(a=>{if("tool"===a.role||"function"===a.role)return{role:"assistant",content:`${J}${(0,g.kU)(a.content)||String(a.content??"")}]`};if("assistant"===a.role&&Array.isArray(a.tool_calls)){let{tool_calls:b,...c}=a,d=b.map(a=>a?.function?.name||a?.name||"tool").join(", "),e=(0,g.kU)(c.content)||("string"==typeof c.content?c.content:"");return{...c,content:`${e}${e?"\n":""}${I}${d}]`}}if(Array.isArray(a.content)){let b=a.content.some(a=>"tool_use"===a.type),c=a.content.some(a=>"tool_result"===a.type);if(b||c){let b=[],c=[],d=[];for(let e of a.content)"text"===e.type&&e.text&&b.push(e.text),"tool_use"===e.type&&c.push(e.name||"tool"),"tool_result"===e.type&&d.push((0,g.kU)(e.content)||String(e.content??""));let{...e}=a,f=b.join("\n");return c.length>0&&(f=`${f}${f?"\n":""}${I}${c.join(", ")}]`),d.length>0&&(f=`${f}${f?"\n":""}${J}${d.join("\n")}]`),{...e,content:f}}}return a})}let L=new Map;function M(a){if(!Array.isArray(a)||0===a.length)return[];let b=a=>"assistant"===a||"model"===a,c=a.length-1;for(;c>=0&&!b(a[c]?.role);)c--;return a.slice(c+1)}function N(a){a?L.delete(a):L.clear()}function O(a,b){if(a.includes("/"))return null;let c=(Array.isArray(b)?b:b?.combos||[]).find(b=>b.name===a);return c&&c.models&&c.models.length>0?c.models:null}async function P({body:a,models:b,handleSingleModel:c,log:g,comboName:i,comboStrategy:j,comboStickyLimit:k=1,autoSwitch:l=!0,breakerSettings:m=null}){let n=function(a,b,c,d=1){let e;if(!a||a.length<=1||"round-robin"!==c)return a;let f=b||"__default__",g=Number.isFinite(e=Number.parseInt(d,10))&&e>0?e:1,h=L.get(f)||{index:0,consecutiveUseCount:0},i=h.index%a.length,j=function(a,b){let c=[...a];for(let a=0;a<b;a++){let a=c.shift();c.push(a)}return c}(a,i),k=h.consecutiveUseCount+1;return k>=g?L.set(f,{index:(i+1)%a.length,consecutiveUseCount:0}):L.set(f,{index:i,consecutiveUseCount:k}),j}(b,i,j,k);if(m){let{active:a,skipped:b}=function(a,b){if(!Array.isArray(a)||a.length<=1)return{active:a||[],skipped:[]};let c=[],d=[];for(let e of a){let a="string"==typeof e?e.indexOf("/"):-1,f=a>0?e.slice(0,a):"",g=f?H.get(f)||f:"";g&&(0,h.GK)(g,b)?d.push(e):c.push(e)}return 0===c.length?{active:a,skipped:[]}:{active:c,skipped:d}}(n,m);b.length>0&&(g.info("COMBO",`breaker pre-filter: skipped ${b.length} open-breaker model(s) [${b.join(", ")}]`),n=a)}if(l){let b=function(a){let b=new Set;if(!a||"object"!=typeof a)return b;let c=a=>{if(!a||"object"!=typeof a)return;let c=a.type;("image_url"===c||"image"===c||"input_image"===c)&&b.add("vision"),("file"===c||"document"===c||"input_file"===c)&&b.add("pdf");let d=a.inlineData?.mimeType||a.fileData?.mimeType;"string"==typeof d&&d.startsWith("image/")&&b.add("vision"),"application/pdf"===d&&b.add("pdf")},d=a=>{if(Array.isArray(a))for(let b of a)c(b)};for(let b of M(a.messages))d(b.content);for(let b of M(a.input))d(b.content);for(let b of M(a.contents||a.request?.contents))d(b.parts);return b}(a);if(b.size>0){let a=function(a,b){if(!b||0===b.size||!Array.isArray(a)||a.length<=1)return a;let c=[...b].filter(a=>G.has(a)),d=[...b].filter(a=>!G.has(a));return a.map((a,b)=>{let e,g,h,i;return{m:a,i:b,t:(g=(e="string"==typeof a?a.indexOf("/"):-1)>0?a.slice(0,e):"",h=e>0?a.slice(e+1):a,i=(0,f.nl)(g,h),c.every(a=>!0===i[a])?+!d.every(a=>!0===i[a]):2)}}).sort((a,b)=>a.t-b.t||a.i-b.i).map(a=>a.m)}(n,b);a[0]!==n[0]&&g.info("COMBO",`auto-switch for [${[...b].join(",")}] → ${a[0]}`),n=a}}let o=null,p=null,q=null;for(let b=0;b<n.length;b++){let e=n[b];g.info("COMBO",`Trying model ${b+1}/${n.length}: ${e}`);try{let b=await c(a,e);if(b.ok)return g.info("COMBO",`Model ${e} succeeded`),b;let f=b.statusText||"",h=null;try{let a=await b.clone().json();f=a?.error?.message||a?.error||a?.message||f,h=a?.retryAfter||null}catch{}if(h&&(!p||new Date(h)<new Date(p))&&(p=h),"string"!=typeof f)try{f=JSON.stringify(f)}catch{f=String(f)}let{shouldFallback:i,cooldownMs:j}=(0,d.hk)(b.status,f);if(!i)return g.warn("COMBO",`Model ${e} failed (no fallback)`,{status:b.status}),b;j&&j>0&&j<=5e3&&(503===b.status||502===b.status||504===b.status)&&(g.info("COMBO",`Model ${e} transient ${b.status}, waiting ${j}ms before next`),await new Promise(a=>setTimeout(a,j))),o=f||String(b.status),q||(q=b.status),g.warn("COMBO",`Model ${e} failed, trying next`,{status:b.status})}catch(a){o=a.message||String(a),q||(q=500),g.warn("COMBO",`Model ${e} threw error, trying next`,{error:o})}}let r=o&&o.toLowerCase().includes("no credentials")?503:q||503,s=o||"All combo models unavailable";if(p){let a=(0,d.Qo)(p);return g.warn("COMBO",`All models failed | ${s} (${a})`),(0,e.wO)(r,s,p,a)}return g.warn("COMBO",`All models failed | ${s}`),new Response(JSON.stringify({error:{message:s}}),{status:r,headers:{"Content-Type":"application/json"}})}function Q(a){if(!a||"object"!=typeof a)return"";let b=a.choices?.[0];if(b){let a=b.message??b.delta??{},c=(0,g.kU)(a.content);if(c.trim())return c;if("string"==typeof b.text&&b.text.trim())return b.text}let c=(0,g.kU)(a.content);if(c.trim())return c;let d=a.candidates?.[0]?.content?.parts;if(Array.isArray(d)){let a=d.map(a=>a?.text||"").join("");if(a.trim())return a}if(Array.isArray(a.output)){let b=a.output.flatMap(a=>Array.isArray(a.content)?a.content.map(a=>a?.text||""):[]).join("");if(b.trim())return b}return""}function R(a,b){let c={...a};return Array.isArray(a.messages)?c.messages=[...a.messages,{role:"user",content:b}]:Array.isArray(a.input)?c.input=[...a.input,{role:"user",content:b}]:Array.isArray(a.contents)?c.contents=[...a.contents,{role:"user",parts:[{text:b}]}]:c.messages=[{role:"user",content:b}],c}let S={minPanel:2,stragglerGraceMs:8e3,panelHardTimeoutMs:9e4};function T(a,b){return new Promise(c=>{let d=setTimeout(()=>c({__timeout:!0}),b);Promise.resolve(a).then(a=>{clearTimeout(d),c(a)}).catch(a=>{clearTimeout(d),c({__error:a})})})}function U(a,{minPanel:b,stragglerGraceMs:c,panelHardTimeoutMs:d}){return new Promise(e=>{let f=Array(a.length),g=0,h=0,i=!1,j=null,k=()=>{i||(i=!0,clearTimeout(l),j&&clearTimeout(j),e(f))},l=setTimeout(k,d);a.forEach((d,e)=>{Promise.resolve(d).then(a=>{f[e]=a}).catch(a=>{f[e]={__error:a}}).finally(()=>{if(g++,f[e]&&f[e].ok&&h++,g===a.length)return k();h>=b&&!j&&(j=setTimeout(k,c))})})})}async function V({body:a,models:b,handleSingleModel:c,log:d,comboName:e,judgeModel:f,tuning:g}){let h,i=Array.isArray(b)?b.filter(Boolean):[];if(0===i.length)return new Response(JSON.stringify({error:{message:"Fusion combo has no models"}}),{status:400,headers:{"Content-Type":"application/json"}});if(1===i.length)return c(a,i[0]);let j={...S,...g||{}},k=Math.min(Math.max(2,j.minPanel),i.length),l=f&&f.trim()?f.trim():i[0];d.info("FUSION",`Combo "${e}" | panel=${i.length} [${i.join(", ")}] | judge=${l} | quorum=${k}`);let{tools:m,tool_choice:n,...o}=a,p={...o,stream:!1};Array.isArray(p.messages)?p.messages=K(p.messages):Array.isArray(p.input)&&(p.input=K(p.input));let q=Date.now(),r=i.map(a=>T(c(p,a,!0),j.panelHardTimeoutMs)),s=await U(r,{...j,minPanel:k});d.info("FUSION",`fan-out collected in ${Date.now()-q}ms`);let t=[];for(let a=0;a<s.length;a++){let b=s[a],c=i[a];if(!b){d.warn("FUSION",`Panel ${c} dropped (straggler/timeout)`);continue}if(b.__timeout){d.warn("FUSION",`Panel ${c} timed out`);continue}if(b.__error){d.warn("FUSION",`Panel ${c} threw`,{error:b.__error?.message||String(b.__error)});continue}if(!b.ok){d.warn("FUSION",`Panel ${c} failed`,{status:b.status});continue}try{let a=await b.clone().json(),e=Q(a);e?(t.push({model:c,text:e,res:b}),d.info("FUSION",`Panel ${c} ok (${e.length} chars)`)):d.warn("FUSION",`Panel ${c} returned empty content`)}catch(a){d.warn("FUSION",`Panel ${c} unparseable`,{error:a.message||String(a)})}}if(0===t.length)return d.warn("FUSION","All panel models failed"),new Response(JSON.stringify({error:{message:"All fusion panel models failed"}}),{status:503,headers:{"Content-Type":"application/json"}});if(1===t.length)return a?.stream===!0?(d.info("FUSION",`Only ${t[0].model} succeeded — re-running with stream:true to honor client SSE request (no fusion)`),c(a,t[0].model)):(d.info("FUSION",`Only ${t[0].model} succeeded — returning its response directly (no fusion, no re-run)`),t[0].res);let u=R(a,(h=t.map((a,b)=>`[Source ${b+1}]
|
|
7
7
|
${a.text}`).join("\n\n"),[`You are the JUDGE in a model-fusion panel. ${t.length} expert models independently answered the user's most recent request. Their responses are below, anonymized by source.`,"\nDo NOT mention that multiple models were used, and do NOT refer to the sources. Produce ONE authoritative final answer addressed directly to the user.\n\nFirst, internally analyze the panel along these dimensions: consensus (points most sources agree on — treat as higher-confidence), contradictions (where they disagree — resolve with your own judgment), partial coverage, unique insights only one source surfaced, and blind spots every source missed. Then write the best possible final answer grounded in that analysis — more complete and correct than any single response, with no filler.\n\n=== PANEL RESPONSES ===",h,"=== END PANEL RESPONSES ===\n\nNow write the final answer to the user's original request."].join("\n")));return d.info("FUSION",`Judging ${t.length} answers with ${l}`),c(u,l)}},36701:(a,b,c)=>{c.d(b,{SH:()=>l,ZW:()=>p,_5:()=>k,_s:()=>j,bt:()=>n,gF:()=>m,kA:()=>o,ni:()=>f});var d=c(78474),e=c(77598);global._swarmEmitter||(global._swarmEmitter=new d.EventEmitter,global._swarmEmitter.setMaxListeners(100),global._swarmRuns=new Map,global._swarmEmitTimers={});let f=global._swarmEmitter,g=global._swarmRuns,h=global._swarmEmitTimers;function i(a,b,c=120){let d=`${a}:${b?.runId||""}`;h[d]&&clearTimeout(h[d]),h[d]=setTimeout(()=>{delete h[d],f.emit(a,b)},c)}function j({comboName:a,promptPreview:b,managerModel:c,staffModel:d,auditModel:f,workerCount:h}){let k=(0,e.randomUUID)(),l=Date.now(),m={runId:k,comboName:a,promptPreview:(b||"").slice(0,200),managerModel:c,staffModel:d,auditModel:f,workerCount:h||0,status:"running",startedAt:l,completedAt:null,totalDurationMs:null,stages:{gatekeeper:{status:"pending",startedAt:null,completedAt:null,durationMs:null,model:c,verdict:null},manager:{status:"pending",startedAt:null,completedAt:null,durationMs:null,model:c,strategy:null},workers:{status:"pending",startedAt:null,completedAt:null,durationMs:null,workers:[]},audit:{status:"pending",startedAt:null,completedAt:null,durationMs:null,model:d||f},synthesis:{status:"pending",startedAt:null,completedAt:null,durationMs:null,model:c}}};for(let a=0;a<(h||0);a++)m.stages.workers.workers.push({index:a,status:"pending",model:null,durationMs:null});if(g.set(k,m),g.size>50){let a=[...g.entries()].sort((a,b)=>a[1].startedAt-b[1].startedAt)[0];a&&g.delete(a[0])}return i("swarm:start",{runId:k,comboName:a,promptPreview:m.promptPreview,workerCount:m.workerCount},0),m}function k(a,b,c={}){let d=g.get(a);if(!d)return;let e=d.stages[b];e&&(e.status="running",e.startedAt=Date.now(),Object.assign(e,c),i("swarm:stage",{runId:a,stage:b,status:"running",...c}))}function l(a,b,c={}){let d=g.get(a);if(!d)return;let e=d.stages[b];e&&(e.status="done",e.completedAt=Date.now(),e.durationMs=e.startedAt?e.completedAt-e.startedAt:null,Object.assign(e,c),i("swarm:stage",{runId:a,stage:b,status:"done",durationMs:e.durationMs,...c}))}function m(a,b,c,d={}){let e=g.get(a);if(!e)return;let f=e.stages.workers.workers[b];f&&(f.status=c,Object.assign(f,d),i("swarm:stage",{runId:a,stage:"workers",worker:b,status:c,...d}))}function n(a,b){let c=g.get(a);c&&(c.status="error",c.error=String(b?.message||b||"unknown"),c.completedAt=Date.now(),c.totalDurationMs=c.completedAt-c.startedAt,i("swarm:error",{runId:a,error:c.error,totalDurationMs:c.totalDurationMs},0))}function o(a,b={}){let c=g.get(a);c&&(c.status="done",c.completedAt=Date.now(),c.totalDurationMs=c.completedAt-c.startedAt,Object.assign(c,b),i("swarm:complete",{runId:a,totalDurationMs:c.totalDurationMs,...b},0))}function p(a=20){return[...g.values()].sort((a,b)=>b.startedAt-a.startedAt).slice(0,a)}}};
|