omniroute 3.4.3 → 3.4.4

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.
Files changed (109) hide show
  1. package/README.md +4 -0
  2. package/app/.next/BUILD_ID +1 -1
  3. package/app/.next/build-manifest.json +3 -3
  4. package/app/.next/prerender-manifest.json +3 -3
  5. package/app/.next/server/app/(dashboard)/dashboard/agents/page_client-reference-manifest.js +1 -1
  6. package/app/.next/server/app/(dashboard)/dashboard/analytics/page_client-reference-manifest.js +1 -1
  7. package/app/.next/server/app/(dashboard)/dashboard/api-manager/page_client-reference-manifest.js +1 -1
  8. package/app/.next/server/app/(dashboard)/dashboard/audit/page_client-reference-manifest.js +1 -1
  9. package/app/.next/server/app/(dashboard)/dashboard/auto-combo/page_client-reference-manifest.js +1 -1
  10. package/app/.next/server/app/(dashboard)/dashboard/cache/page_client-reference-manifest.js +1 -1
  11. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  12. package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  13. package/app/.next/server/app/(dashboard)/dashboard/costs/page_client-reference-manifest.js +1 -1
  14. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  15. package/app/.next/server/app/(dashboard)/dashboard/health/page_client-reference-manifest.js +1 -1
  16. package/app/.next/server/app/(dashboard)/dashboard/limits/page_client-reference-manifest.js +1 -1
  17. package/app/.next/server/app/(dashboard)/dashboard/logs/page_client-reference-manifest.js +1 -1
  18. package/app/.next/server/app/(dashboard)/dashboard/media/page_client-reference-manifest.js +1 -1
  19. package/app/.next/server/app/(dashboard)/dashboard/memory/page_client-reference-manifest.js +1 -1
  20. package/app/.next/server/app/(dashboard)/dashboard/onboarding/page_client-reference-manifest.js +1 -1
  21. package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  22. package/app/.next/server/app/(dashboard)/dashboard/playground/page_client-reference-manifest.js +1 -1
  23. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  24. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  25. package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  26. package/app/.next/server/app/(dashboard)/dashboard/search-tools/page_client-reference-manifest.js +1 -1
  27. package/app/.next/server/app/(dashboard)/dashboard/settings/page_client-reference-manifest.js +1 -1
  28. package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  29. package/app/.next/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
  30. package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  31. package/app/.next/server/app/400/page_client-reference-manifest.js +1 -1
  32. package/app/.next/server/app/401/page_client-reference-manifest.js +1 -1
  33. package/app/.next/server/app/403/page_client-reference-manifest.js +1 -1
  34. package/app/.next/server/app/408/page_client-reference-manifest.js +1 -1
  35. package/app/.next/server/app/429/page_client-reference-manifest.js +1 -1
  36. package/app/.next/server/app/500/page_client-reference-manifest.js +1 -1
  37. package/app/.next/server/app/502/page_client-reference-manifest.js +1 -1
  38. package/app/.next/server/app/503/page_client-reference-manifest.js +1 -1
  39. package/app/.next/server/app/_global-error.html +1 -1
  40. package/app/.next/server/app/_global-error.rsc +1 -1
  41. package/app/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  42. package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  43. package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  44. package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  45. package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  46. package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  47. package/app/.next/server/app/api/system/version/route.js.nft.json +1 -1
  48. package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
  49. package/app/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  50. package/app/.next/server/app/forbidden/page_client-reference-manifest.js +1 -1
  51. package/app/.next/server/app/forgot-password/page_client-reference-manifest.js +1 -1
  52. package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
  53. package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
  54. package/app/.next/server/app/maintenance/page_client-reference-manifest.js +1 -1
  55. package/app/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  56. package/app/.next/server/app/page_client-reference-manifest.js +1 -1
  57. package/app/.next/server/app/privacy/page_client-reference-manifest.js +1 -1
  58. package/app/.next/server/app/status/page_client-reference-manifest.js +1 -1
  59. package/app/.next/server/app/terms/page_client-reference-manifest.js +1 -1
  60. package/app/.next/server/chunks/[root-of-the-server]__02uu1us._.js +1 -1
  61. package/app/.next/server/chunks/[root-of-the-server]__0c721a-._.js +1 -1
  62. package/app/.next/server/chunks/[root-of-the-server]__0ex164m._.js +1 -1
  63. package/app/.next/server/chunks/[root-of-the-server]__0qf7ta~._.js +1 -1
  64. package/app/.next/server/chunks/[root-of-the-server]__0s1dq3.._.js +1 -1
  65. package/app/.next/server/chunks/[root-of-the-server]__0tsl88m._.js +1 -1
  66. package/app/.next/server/chunks/[root-of-the-server]__0x_~cf-._.js +1 -1
  67. package/app/.next/server/chunks/[root-of-the-server]__111mvd5._.js +1 -1
  68. package/app/.next/server/chunks/_00.pgsp._.js +1 -1
  69. package/app/.next/server/chunks/_013gowh._.js +1 -1
  70. package/app/.next/server/chunks/_036lxbr._.js +1 -1
  71. package/app/.next/server/chunks/_05reh6o._.js +1 -1
  72. package/app/.next/server/chunks/_0a3.3sc._.js +1 -1
  73. package/app/.next/server/chunks/_0c.abwr._.js +1 -1
  74. package/app/.next/server/chunks/_0h-j8c2._.js +1 -1
  75. package/app/.next/server/chunks/_0k43pd6._.js +5 -5
  76. package/app/.next/server/chunks/_10.rw9f._.js +1 -1
  77. package/app/.next/server/chunks/src_lib_0j-wze8._.js +1 -1
  78. package/app/.next/server/chunks/src_lib_db_core_ts_0aifyrs._.js +2 -2
  79. package/app/.next/server/chunks/src_lib_db_core_ts_0naqwwu._.js +6 -6
  80. package/app/.next/server/chunks/src_lib_db_core_ts_0~nrtni._.js +6 -6
  81. package/app/.next/server/chunks/ssr/_008ht2n._.js +1 -1
  82. package/app/.next/server/chunks/ssr/_0oo1f90._.js +1 -1
  83. package/app/.next/server/chunks/ssr/src_lib_db_core_ts_0a4mjaw._.js +1 -1
  84. package/app/.next/server/middleware-build-manifest.js +3 -3
  85. package/app/.next/server/pages/500.html +1 -1
  86. package/app/.next/server/server-reference-manifest.js +1 -1
  87. package/app/.next/server/server-reference-manifest.json +1 -1
  88. package/app/.next/static/chunks/{0z77gqz0h9srz.js → 0vau7j_kpzwkc.js} +1 -1
  89. package/app/CHANGELOG.md +17 -0
  90. package/app/README.md +4 -0
  91. package/app/docker-compose.prod.yml +1 -0
  92. package/app/docker-compose.yml +1 -0
  93. package/app/docs/i18n/zh-CN/README.md +4 -0
  94. package/app/docs/openapi.yaml +1 -1
  95. package/app/open-sse/package.json +1 -1
  96. package/app/open-sse/translator/index.ts +9 -0
  97. package/app/open-sse/translator/response/openai-responses.ts +17 -4
  98. package/app/package-lock.json +3 -3
  99. package/app/package.json +1 -1
  100. package/app/src/app/api/restart/route.ts +2 -2
  101. package/app/src/app/api/shutdown/route.ts +1 -1
  102. package/app/src/lib/db/core.ts +36 -5
  103. package/app/src/lib/gracefulShutdown.ts +3 -5
  104. package/app/tests/unit/fixes-p1.test.mjs +76 -0
  105. package/app/tests/unit/responses-translation-fixes.test.mjs +3 -1
  106. package/package.json +1 -1
  107. /package/app/.next/static/{FON4TJvqiYocduWLr9KDp → KbjOFkfScJgP8s3aOWBvF}/_buildManifest.js +0 -0
  108. /package/app/.next/static/{FON4TJvqiYocduWLr9KDp → KbjOFkfScJgP8s3aOWBvF}/_clientMiddlewareManifest.js +0 -0
  109. /package/app/.next/static/{FON4TJvqiYocduWLr9KDp → KbjOFkfScJgP8s3aOWBvF}/_ssgManifest.js +0 -0
@@ -1,4 +1,4 @@
1
- module.exports=[157763,e=>{"use strict";var t=e.i(785148),r=e.i(814747),a=e.i(522734),o=e.i(256770),i=e.i(792509);let n={get url(){return`file://${e.P("src/lib/db/migrationRunner.ts")}`}},T=function(){try{let e=n.url;if(e&&e.startsWith("file://")){let t=(0,i.fileURLToPath)(e);return r.default.join(r.default.dirname(t),"migrations")}}catch{}return r.default.join(process.cwd(),"src","lib","db","migrations")}(),l="object"==typeof globalThis.caches&&null!==globalThis.caches,s="phase-production-build"===process.env.NEXT_PHASE,E=(0,o.resolveDataDir)({isCloud:l});l||(0,o.getLegacyDotDataDir)();let c=l?null:r.default.join(E,"storage.sqlite"),d=l?null:r.default.join(E,"db.json"),_=l?null:r.default.join(E,"db_backups");if(!l&&!a.default.existsSync(E))try{a.default.mkdirSync(E,{recursive:!0})}catch(t){let e=t instanceof Error?t.message:String(t);console.warn(`[DB] Cannot create data directory '${E}': ${e}
1
+ module.exports=[157763,e=>{"use strict";var t=e.i(785148),r=e.i(814747),o=e.i(522734),a=e.i(256770),i=e.i(792509);let n={get url(){return`file://${e.P("src/lib/db/migrationRunner.ts")}`}},l=function(){try{let e=n.url;if(e&&e.startsWith("file://")){let t=(0,i.fileURLToPath)(e);return r.default.join(r.default.dirname(t),"migrations")}}catch{}return r.default.join(process.cwd(),"src","lib","db","migrations")}(),T="object"==typeof globalThis.caches&&null!==globalThis.caches,s="phase-production-build"===process.env.NEXT_PHASE,E=(0,a.resolveDataDir)({isCloud:T});T||(0,a.getLegacyDotDataDir)();let c=T?null:r.default.join(E,"storage.sqlite"),d=T?null:r.default.join(E,"db.json"),_=T?null:r.default.join(E,"db_backups");if(!T&&!o.default.existsSync(E))try{o.default.mkdirSync(E,{recursive:!0})}catch(t){let e=t instanceof Error?t.message:String(t);console.warn(`[DB] Cannot create data directory '${E}': ${e}
2
2
  [DB] Set the DATA_DIR environment variable to a writable path, e.g.:
3
3
  [DB] DATA_DIR=/path/to/writable/dir omniroute`)}let p=`
4
4
  CREATE TABLE IF NOT EXISTS provider_connections (
@@ -209,7 +209,7 @@ module.exports=[157763,e=>{"use strict";var t=e.i(785148),r=e.i(814747),a=e.i(52
209
209
  );
210
210
  CREATE INDEX IF NOT EXISTS idx_sc_sig ON semantic_cache(signature);
211
211
  CREATE INDEX IF NOT EXISTS idx_sc_model ON semantic_cache(model);
212
- `;function u(){return globalThis.__omnirouteDb??null}function m(e){e?globalThis.__omnirouteDb=e:delete globalThis.__omnirouteDb}function N(e){try{let t=e.prepare("PRAGMA table_info(usage_history)").all(),r=new Set(t.map(e=>String(e.name??"")));r.has("success")||(e.exec("ALTER TABLE usage_history ADD COLUMN success INTEGER DEFAULT 1"),console.log("[DB] Added usage_history.success column")),r.has("latency_ms")||(e.exec("ALTER TABLE usage_history ADD COLUMN latency_ms INTEGER DEFAULT 0"),console.log("[DB] Added usage_history.latency_ms column")),r.has("ttft_ms")||(e.exec("ALTER TABLE usage_history ADD COLUMN ttft_ms INTEGER DEFAULT 0"),console.log("[DB] Added usage_history.ttft_ms column")),r.has("error_code")||(e.exec("ALTER TABLE usage_history ADD COLUMN error_code TEXT"),console.log("[DB] Added usage_history.error_code column"))}catch(e){console.warn("[DB] Failed to verify usage_history schema:",e instanceof Error?e.message:String(e))}}e.s(["DATA_DIR",0,E,"DB_BACKUPS_DIR",0,_,"SQLITE_FILE",0,c,"cleanNulls",0,function(e){let t={};for(let[r,a]of Object.entries(e||{}))null!=a&&(t[r]=a);return t},"getDbInstance",0,function(){let e=u();if(e)return e;if(l||s){s&&console.log("[DB] Build phase detected — using in-memory SQLite (read-only)");let e=new t.default(":memory:");return e.pragma("journal_mode = WAL"),e.exec(p),N(e),m(e),e}if(!c)throw Error("SQLITE_FILE is unavailable for local mode");if(a.default.existsSync(c))try{let e=new t.default(c,{readonly:!0});if(e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='schema_migrations'").get()){let o=!1;try{let t=e.prepare("SELECT COUNT(*) as c FROM provider_connections").get();o=!!(t&&t.c>0)}catch{}if(e.close(),o){console.log("[DB] Old schema_migrations table found but data exists — preserving data (#146)");let e=new t.default(c);try{e.exec("DROP TABLE IF EXISTS schema_migrations"),e.pragma("wal_checkpoint(TRUNCATE)")}catch(t){let e=t instanceof Error?t.message:String(t);console.warn("[DB] Could not clean up old schema table:",e)}finally{e.close()}}else{let e=c+".old-schema";for(let t of(console.log(`[DB] Old incompatible schema detected (empty) — renaming to ${r.default.basename(e)}`),a.default.renameSync(c,e),["-wal","-shm"]))try{a.default.existsSync(c+t)&&a.default.unlinkSync(c+t)}catch{}}}else e.close()}catch(e){console.warn("[DB] Could not probe existing DB, will create fresh:",e instanceof Error?e.message:String(e));try{a.default.unlinkSync(c)}catch{}}let o=new t.default(c);o.pragma("journal_mode = WAL"),o.pragma("busy_timeout = 5000"),o.pragma("synchronous = NORMAL"),o.exec(p);try{let e=o.prepare("PRAGMA table_info(provider_connections)").all(),t=new Set(e.map(e=>String(e.name??"")));t.has("rate_limit_protection")||(o.exec("ALTER TABLE provider_connections ADD COLUMN rate_limit_protection INTEGER DEFAULT 0"),console.log("[DB] Added provider_connections.rate_limit_protection column")),t.has("last_used_at")||(o.exec("ALTER TABLE provider_connections ADD COLUMN last_used_at TEXT"),console.log("[DB] Added provider_connections.last_used_at column")),t.has("group")||(o.exec('ALTER TABLE provider_connections ADD COLUMN "group" TEXT'),console.log('[DB] Added provider_connections."group" column'))}catch(e){console.warn("[DB] Failed to verify provider_connections schema:",e instanceof Error?e.message:String(e))}N(o);try{let e=o.prepare("PRAGMA table_info(call_logs)").all(),t=new Set(e.map(e=>String(e.name??"")));t.has("artifact_relpath")||(o.exec("ALTER TABLE call_logs ADD COLUMN artifact_relpath TEXT"),console.log("[DB] Added call_logs.artifact_relpath column")),t.has("has_pipeline_details")||(o.exec("ALTER TABLE call_logs ADD COLUMN has_pipeline_details INTEGER DEFAULT 0"),console.log("[DB] Added call_logs.has_pipeline_details column"))}catch(e){console.warn("[DB] Failed to verify call_logs schema:",e instanceof Error?e.message:String(e))}return o.exec(`
212
+ `;function u(){return globalThis.__omnirouteDb??null}function m(e){e?globalThis.__omnirouteDb=e:delete globalThis.__omnirouteDb}function N(e){try{let t=e.prepare("PRAGMA table_info(usage_history)").all(),r=new Set(t.map(e=>String(e.name??"")));r.has("success")||(e.exec("ALTER TABLE usage_history ADD COLUMN success INTEGER DEFAULT 1"),console.log("[DB] Added usage_history.success column")),r.has("latency_ms")||(e.exec("ALTER TABLE usage_history ADD COLUMN latency_ms INTEGER DEFAULT 0"),console.log("[DB] Added usage_history.latency_ms column")),r.has("ttft_ms")||(e.exec("ALTER TABLE usage_history ADD COLUMN ttft_ms INTEGER DEFAULT 0"),console.log("[DB] Added usage_history.ttft_ms column")),r.has("error_code")||(e.exec("ALTER TABLE usage_history ADD COLUMN error_code TEXT"),console.log("[DB] Added usage_history.error_code column"))}catch(e){console.warn("[DB] Failed to verify usage_history schema:",e instanceof Error?e.message:String(e))}}e.s(["DATA_DIR",0,E,"DB_BACKUPS_DIR",0,_,"SQLITE_FILE",0,c,"cleanNulls",0,function(e){let t={};for(let[r,o]of Object.entries(e||{}))null!=o&&(t[r]=o);return t},"getDbInstance",0,function(){let e=u();if(e)return e;if(T||s){s&&console.log("[DB] Build phase detected — using in-memory SQLite (read-only)");let e=new t.default(":memory:");return e.pragma("journal_mode = WAL"),e.exec(p),N(e),m(e),e}if(!c)throw Error("SQLITE_FILE is unavailable for local mode");if(o.default.existsSync(c))try{let e=new t.default(c,{readonly:!0});if(e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='schema_migrations'").get()){let a=!1;try{let t=e.prepare("SELECT COUNT(*) as c FROM provider_connections").get();a=!!(t&&t.c>0)}catch{}if(e.close(),a){console.log("[DB] Old schema_migrations table found but data exists — preserving data (#146)");let e=new t.default(c);try{e.exec("DROP TABLE IF EXISTS schema_migrations"),e.pragma("wal_checkpoint(TRUNCATE)")}catch(t){let e=t instanceof Error?t.message:String(t);console.warn("[DB] Could not clean up old schema table:",e)}finally{e.close()}}else{let e=c+".old-schema";for(let t of(console.log(`[DB] Old incompatible schema detected (empty) — renaming to ${r.default.basename(e)}`),o.default.renameSync(c,e),["-wal","-shm"]))try{o.default.existsSync(c+t)&&o.default.unlinkSync(c+t)}catch{}}}else e.close()}catch(e){console.warn("[DB] Could not probe existing DB, will create fresh:",e instanceof Error?e.message:String(e));try{o.default.unlinkSync(c)}catch{}}let a=new t.default(c);a.pragma("journal_mode = WAL"),a.pragma("busy_timeout = 5000"),a.pragma("synchronous = NORMAL"),a.exec(p);try{let e=a.prepare("PRAGMA table_info(provider_connections)").all(),t=new Set(e.map(e=>String(e.name??"")));t.has("rate_limit_protection")||(a.exec("ALTER TABLE provider_connections ADD COLUMN rate_limit_protection INTEGER DEFAULT 0"),console.log("[DB] Added provider_connections.rate_limit_protection column")),t.has("last_used_at")||(a.exec("ALTER TABLE provider_connections ADD COLUMN last_used_at TEXT"),console.log("[DB] Added provider_connections.last_used_at column")),t.has("group")||(a.exec('ALTER TABLE provider_connections ADD COLUMN "group" TEXT'),console.log('[DB] Added provider_connections."group" column'))}catch(e){console.warn("[DB] Failed to verify provider_connections schema:",e instanceof Error?e.message:String(e))}N(a);try{let e=a.prepare("PRAGMA table_info(call_logs)").all(),t=new Set(e.map(e=>String(e.name??"")));t.has("artifact_relpath")||(a.exec("ALTER TABLE call_logs ADD COLUMN artifact_relpath TEXT"),console.log("[DB] Added call_logs.artifact_relpath column")),t.has("has_pipeline_details")||(a.exec("ALTER TABLE call_logs ADD COLUMN has_pipeline_details INTEGER DEFAULT 0"),console.log("[DB] Added call_logs.has_pipeline_details column"))}catch(e){console.warn("[DB] Failed to verify call_logs schema:",e instanceof Error?e.message:String(e))}return a.exec(`
213
213
  CREATE TABLE IF NOT EXISTS _omniroute_migrations (
214
214
  version TEXT PRIMARY KEY,
215
215
  name TEXT NOT NULL,
@@ -223,7 +223,7 @@ module.exports=[157763,e=>{"use strict";var t=e.i(785148),r=e.i(814747),a=e.i(52
223
223
  name TEXT NOT NULL,
224
224
  applied_at TEXT NOT NULL DEFAULT (datetime('now'))
225
225
  );
226
- `);let t=a.default.existsSync(T)?a.default.readdirSync(T).filter(e=>e.endsWith(".sql")).sort().map(e=>{let t=e.match(/^(\d+)_(.+)\.sql$/);return t?{version:t[1],name:t[2],path:r.default.join(T,e)}:null}).filter(Boolean):[],o=new Set(e.prepare("SELECT version FROM _omniroute_migrations").all().map(e=>e.version)),i=0;for(let r of t){if(o.has(r.version))continue;let t=a.default.readFileSync(r.path,"utf-8"),n=e.transaction(()=>{e.exec(t),e.prepare("INSERT INTO _omniroute_migrations (version, name) VALUES (?, ?)").run(r.version,r.name)});try{n(),i++,console.log(`[Migration] Applied: ${r.version}_${r.name}`)}catch(t){let e=t instanceof Error?t.message:String(t);throw console.error(`[Migration] FAILED: ${r.version}_${r.name} — ${e}`),t}}i>0&&console.log(`[Migration] ${i} migration(s) applied successfully.`)}(o),d&&a.default.existsSync(d)&&function(e,t){try{let o=a.default.readFileSync(t,"utf-8"),i=JSON.parse(o),n=(i.providerConnections||[]).length,T=(i.providerNodes||[]).length,l=(i.apiKeys||[]).length;if(0===n&&0===T&&0===l){console.log("[DB] db.json has no data to migrate, skipping"),a.default.renameSync(t,t+".empty");return}console.log(`[DB] Migrating db.json → SQLite (${n} connections, ${T} nodes, ${l} keys)...`),e.transaction(()=>{let t=e.prepare(`
226
+ `);let t=o.default.existsSync(l)?o.default.readdirSync(l).filter(e=>e.endsWith(".sql")).sort().map(e=>{let t=e.match(/^(\d+)_(.+)\.sql$/);return t?{version:t[1],name:t[2],path:r.default.join(l,e)}:null}).filter(Boolean):[],a=new Set(e.prepare("SELECT version FROM _omniroute_migrations").all().map(e=>e.version)),i=0;for(let r of t){if(a.has(r.version))continue;let t=o.default.readFileSync(r.path,"utf-8"),n=e.transaction(()=>{e.exec(t),e.prepare("INSERT INTO _omniroute_migrations (version, name) VALUES (?, ?)").run(r.version,r.name)});try{n(),i++,console.log(`[Migration] Applied: ${r.version}_${r.name}`)}catch(t){let e=t instanceof Error?t.message:String(t);throw console.error(`[Migration] FAILED: ${r.version}_${r.name} — ${e}`),t}}i>0&&console.log(`[Migration] ${i} migration(s) applied successfully.`)}(a),d&&o.default.existsSync(d)&&function(e,t){try{let a=o.default.readFileSync(t,"utf-8"),i=JSON.parse(a),n=(i.providerConnections||[]).length,l=(i.providerNodes||[]).length,T=(i.apiKeys||[]).length;if(0===n&&0===l&&0===T){console.log("[DB] db.json has no data to migrate, skipping"),o.default.renameSync(t,t+".empty");return}console.log(`[DB] Migrating db.json → SQLite (${n} connections, ${l} nodes, ${T} keys)...`),e.transaction(()=>{let t=e.prepare(`
227
227
  INSERT OR REPLACE INTO provider_connections (
228
228
  id, provider, auth_type, name, email, priority, is_active,
229
229
  access_token, refresh_token, expires_at, token_expires_at,
@@ -246,12 +246,12 @@ module.exports=[157763,e=>{"use strict";var t=e.i(785148),r=e.i(814747),a=e.i(52
246
246
  `);for(let e of i.providerConnections||[])t.run({id:e.id,provider:e.provider,authType:e.authType||"oauth",name:e.name||null,email:e.email||null,priority:e.priority||0,isActive:+(!1!==e.isActive),accessToken:e.accessToken||null,refreshToken:e.refreshToken||null,expiresAt:e.expiresAt||null,tokenExpiresAt:e.tokenExpiresAt||null,scope:e.scope||null,projectId:e.projectId||null,testStatus:e.testStatus||null,errorCode:e.errorCode||null,lastError:e.lastError||null,lastErrorAt:e.lastErrorAt||null,lastErrorType:e.lastErrorType||null,lastErrorSource:e.lastErrorSource||null,backoffLevel:e.backoffLevel||0,rateLimitedUntil:e.rateLimitedUntil||null,healthCheckInterval:e.healthCheckInterval||null,lastHealthCheckAt:e.lastHealthCheckAt||null,lastTested:e.lastTested||null,apiKey:e.apiKey||null,idToken:e.idToken||null,providerSpecificData:e.providerSpecificData?JSON.stringify(e.providerSpecificData):null,expiresIn:e.expiresIn||null,displayName:e.displayName||null,globalPriority:e.globalPriority||null,defaultModel:e.defaultModel||null,tokenType:e.tokenType||null,consecutiveUseCount:e.consecutiveUseCount||0,lastUsedAt:e.lastUsedAt||null,rateLimitProtection:+(!0===e.rateLimitProtection||1===e.rateLimitProtection),createdAt:e.createdAt||new Date().toISOString(),updatedAt:e.updatedAt||new Date().toISOString()});let r=e.prepare(`
247
247
  INSERT OR REPLACE INTO provider_nodes (id, type, name, prefix, api_type, base_url, created_at, updated_at)
248
248
  VALUES (@id, @type, @name, @prefix, @apiType, @baseUrl, @createdAt, @updatedAt)
249
- `);for(let e of i.providerNodes||[])r.run({id:e.id,type:e.type,name:e.name,prefix:e.prefix||null,apiType:e.apiType||null,baseUrl:e.baseUrl||null,createdAt:e.createdAt||new Date().toISOString(),updatedAt:e.updatedAt||new Date().toISOString()});let a=e.prepare("INSERT OR REPLACE INTO key_value (namespace, key, value) VALUES (?, ?, ?)");for(let[e,t]of Object.entries(i.modelAliases||{}))a.run("modelAliases",e,JSON.stringify(t));for(let[e,t]of Object.entries(i.mitmAlias||{}))a.run("mitmAlias",e,JSON.stringify(t));for(let[e,t]of Object.entries(i.settings||{}))a.run("settings",e,JSON.stringify(t));for(let[e,t]of Object.entries(i.pricing||{}))a.run("pricing",e,JSON.stringify(t));for(let[e,t]of Object.entries(i.customModels||{}))a.run("customModels",e,JSON.stringify(t));i.proxyConfig&&(a.run("proxyConfig","global",JSON.stringify(i.proxyConfig.global||null)),a.run("proxyConfig","providers",JSON.stringify(i.proxyConfig.providers||{})),a.run("proxyConfig","combos",JSON.stringify(i.proxyConfig.combos||{})),a.run("proxyConfig","keys",JSON.stringify(i.proxyConfig.keys||{})));let o=e.prepare(`
249
+ `);for(let e of i.providerNodes||[])r.run({id:e.id,type:e.type,name:e.name,prefix:e.prefix||null,apiType:e.apiType||null,baseUrl:e.baseUrl||null,createdAt:e.createdAt||new Date().toISOString(),updatedAt:e.updatedAt||new Date().toISOString()});let o=e.prepare("INSERT OR REPLACE INTO key_value (namespace, key, value) VALUES (?, ?, ?)");for(let[e,t]of Object.entries(i.modelAliases||{}))o.run("modelAliases",e,JSON.stringify(t));for(let[e,t]of Object.entries(i.mitmAlias||{}))o.run("mitmAlias",e,JSON.stringify(t));for(let[e,t]of Object.entries(i.settings||{}))o.run("settings",e,JSON.stringify(t));for(let[e,t]of Object.entries(i.pricing||{}))o.run("pricing",e,JSON.stringify(t));for(let[e,t]of Object.entries(i.customModels||{}))o.run("customModels",e,JSON.stringify(t));i.proxyConfig&&(o.run("proxyConfig","global",JSON.stringify(i.proxyConfig.global||null)),o.run("proxyConfig","providers",JSON.stringify(i.proxyConfig.providers||{})),o.run("proxyConfig","combos",JSON.stringify(i.proxyConfig.combos||{})),o.run("proxyConfig","keys",JSON.stringify(i.proxyConfig.keys||{})));let a=e.prepare(`
250
250
  INSERT OR REPLACE INTO combos (id, name, data, created_at, updated_at)
251
251
  VALUES (@id, @name, @data, @createdAt, @updatedAt)
252
- `);for(let e of i.combos||[])o.run({id:e.id,name:e.name,data:JSON.stringify(e),createdAt:e.createdAt||new Date().toISOString(),updatedAt:e.updatedAt||new Date().toISOString()});let n=e.prepare(`
252
+ `);for(let e of i.combos||[])a.run({id:e.id,name:e.name,data:JSON.stringify(e),createdAt:e.createdAt||new Date().toISOString(),updatedAt:e.updatedAt||new Date().toISOString()});let n=e.prepare(`
253
253
  INSERT OR REPLACE INTO api_keys (id, name, key, machine_id, allowed_models, no_log, created_at)
254
254
  VALUES (@id, @name, @key, @machineId, @allowedModels, @noLog, @createdAt)
255
- `);for(let e of i.apiKeys||[])n.run({id:e.id,name:e.name,key:e.key,machineId:e.machineId||null,allowedModels:JSON.stringify(e.allowedModels||[]),noLog:+!!e.noLog,createdAt:e.createdAt||new Date().toISOString()})})();let s=t+".migrated";a.default.renameSync(t,s),console.log(`[DB] ✓ Migration complete. Original saved as ${s}`);let c=r.default.join(E,"db_backups");if(a.default.existsSync(c)){let e=a.default.readdirSync(c).filter(e=>e.endsWith(".json"));e.length>0&&console.log(`[DB] Note: ${e.length} legacy .json backups remain in ${c}`)}}catch(e){console.error("[DB] Migration from db.json failed:",e.message)}}(o,d),o.prepare("INSERT OR REPLACE INTO db_meta (key, value) VALUES ('schema_version', '1')").run(),m(o),console.log(`[DB] SQLite database ready: ${c}`),o},"isBuildPhase",0,s,"isCloud",0,l,"resetDbInstance",0,function(){let e=u();e&&(e.close(),m(null))},"rowToCamel",0,function(e){if(!e)return null;let t={};for(let[r,a]of Object.entries(e)){let e=r.replace(/_([a-z])/g,(e,t)=>t.toUpperCase());if("isActive"===e||"rateLimitProtection"===e)t[e]=1===a||!0===a;else if("providerSpecificData"===e&&"string"==typeof a)try{t[e]=JSON.parse(a)}catch{t[e]=a}else t[e]=a}return t}],157763)}];
255
+ `);for(let e of i.apiKeys||[])n.run({id:e.id,name:e.name,key:e.key,machineId:e.machineId||null,allowedModels:JSON.stringify(e.allowedModels||[]),noLog:+!!e.noLog,createdAt:e.createdAt||new Date().toISOString()})})();let s=t+".migrated";o.default.renameSync(t,s),console.log(`[DB] ✓ Migration complete. Original saved as ${s}`);let c=r.default.join(E,"db_backups");if(o.default.existsSync(c)){let e=o.default.readdirSync(c).filter(e=>e.endsWith(".json"));e.length>0&&console.log(`[DB] Note: ${e.length} legacy .json backups remain in ${c}`)}}catch(e){console.error("[DB] Migration from db.json failed:",e.message)}}(a,d),a.prepare("INSERT OR REPLACE INTO db_meta (key, value) VALUES ('schema_version', '1')").run(),m(a),console.log(`[DB] SQLite database ready: ${c}`),a},"isBuildPhase",0,s,"isCloud",0,T,"resetDbInstance",0,function(){!function(){let e=u();if(!e)return;let t=(void 0)??"TRUNCATE";try{if(t)try{(function(e,t="TRUNCATE"){return!T&&!s&&!!c&&(e.pragma(`wal_checkpoint(${t})`),!0)})(e,t)&&console.log(`[DB] SQLite WAL checkpoint completed (${t}).`)}catch(r){let e=r instanceof Error?r.message:String(r);console.warn(`[DB] WAL checkpoint failed during close (${t}):`,e)}}finally{try{e.open&&e.close()}finally{m(null)}}}()},"rowToCamel",0,function(e){if(!e)return null;let t={};for(let[r,o]of Object.entries(e)){let e=r.replace(/_([a-z])/g,(e,t)=>t.toUpperCase());if("isActive"===e||"rateLimitProtection"===e)t[e]=1===o||!0===o;else if("providerSpecificData"===e&&"string"==typeof o)try{t[e]=JSON.parse(o)}catch{t[e]=o}else t[e]=o}return t}],157763)}];
256
256
 
257
257
  //# sourceMappingURL=src_lib_db_core_ts_0naqwwu._.js.map
@@ -1,4 +1,4 @@
1
- module.exports=[196039,e=>{"use strict";var t=e.i(785148),r=e.i(814747),a=e.i(522734),o=e.i(402755),i=e.i(792509);let n={get url(){return`file://${e.P("src/lib/db/migrationRunner.ts")}`}},T=function(){try{let e=n.url;if(e&&e.startsWith("file://")){let t=(0,i.fileURLToPath)(e);return r.default.join(r.default.dirname(t),"migrations")}}catch{}return r.default.join(process.cwd(),"src","lib","db","migrations")}(),l="object"==typeof globalThis.caches&&null!==globalThis.caches,s="phase-production-build"===process.env.NEXT_PHASE,E=(0,o.resolveDataDir)({isCloud:l});l||(0,o.getLegacyDotDataDir)();let c=l?null:r.default.join(E,"storage.sqlite"),d=l?null:r.default.join(E,"db.json"),_=l?null:r.default.join(E,"db_backups");if(!l&&!a.default.existsSync(E))try{a.default.mkdirSync(E,{recursive:!0})}catch(t){let e=t instanceof Error?t.message:String(t);console.warn(`[DB] Cannot create data directory '${E}': ${e}
1
+ module.exports=[196039,e=>{"use strict";var t=e.i(785148),r=e.i(814747),o=e.i(522734),a=e.i(402755),i=e.i(792509);let n={get url(){return`file://${e.P("src/lib/db/migrationRunner.ts")}`}},l=function(){try{let e=n.url;if(e&&e.startsWith("file://")){let t=(0,i.fileURLToPath)(e);return r.default.join(r.default.dirname(t),"migrations")}}catch{}return r.default.join(process.cwd(),"src","lib","db","migrations")}(),T="object"==typeof globalThis.caches&&null!==globalThis.caches,s="phase-production-build"===process.env.NEXT_PHASE,E=(0,a.resolveDataDir)({isCloud:T});T||(0,a.getLegacyDotDataDir)();let c=T?null:r.default.join(E,"storage.sqlite"),d=T?null:r.default.join(E,"db.json"),_=T?null:r.default.join(E,"db_backups");if(!T&&!o.default.existsSync(E))try{o.default.mkdirSync(E,{recursive:!0})}catch(t){let e=t instanceof Error?t.message:String(t);console.warn(`[DB] Cannot create data directory '${E}': ${e}
2
2
  [DB] Set the DATA_DIR environment variable to a writable path, e.g.:
3
3
  [DB] DATA_DIR=/path/to/writable/dir omniroute`)}let p=`
4
4
  CREATE TABLE IF NOT EXISTS provider_connections (
@@ -209,7 +209,7 @@ module.exports=[196039,e=>{"use strict";var t=e.i(785148),r=e.i(814747),a=e.i(52
209
209
  );
210
210
  CREATE INDEX IF NOT EXISTS idx_sc_sig ON semantic_cache(signature);
211
211
  CREATE INDEX IF NOT EXISTS idx_sc_model ON semantic_cache(model);
212
- `;function u(){return globalThis.__omnirouteDb??null}function m(e){e?globalThis.__omnirouteDb=e:delete globalThis.__omnirouteDb}function N(e){try{let t=e.prepare("PRAGMA table_info(usage_history)").all(),r=new Set(t.map(e=>String(e.name??"")));r.has("success")||(e.exec("ALTER TABLE usage_history ADD COLUMN success INTEGER DEFAULT 1"),console.log("[DB] Added usage_history.success column")),r.has("latency_ms")||(e.exec("ALTER TABLE usage_history ADD COLUMN latency_ms INTEGER DEFAULT 0"),console.log("[DB] Added usage_history.latency_ms column")),r.has("ttft_ms")||(e.exec("ALTER TABLE usage_history ADD COLUMN ttft_ms INTEGER DEFAULT 0"),console.log("[DB] Added usage_history.ttft_ms column")),r.has("error_code")||(e.exec("ALTER TABLE usage_history ADD COLUMN error_code TEXT"),console.log("[DB] Added usage_history.error_code column"))}catch(e){console.warn("[DB] Failed to verify usage_history schema:",e instanceof Error?e.message:String(e))}}e.s(["DATA_DIR",0,E,"DB_BACKUPS_DIR",0,_,"SQLITE_FILE",0,c,"cleanNulls",0,function(e){let t={};for(let[r,a]of Object.entries(e||{}))null!=a&&(t[r]=a);return t},"getDbInstance",0,function(){let e=u();if(e)return e;if(l||s){s&&console.log("[DB] Build phase detected — using in-memory SQLite (read-only)");let e=new t.default(":memory:");return e.pragma("journal_mode = WAL"),e.exec(p),N(e),m(e),e}if(!c)throw Error("SQLITE_FILE is unavailable for local mode");if(a.default.existsSync(c))try{let e=new t.default(c,{readonly:!0});if(e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='schema_migrations'").get()){let o=!1;try{let t=e.prepare("SELECT COUNT(*) as c FROM provider_connections").get();o=!!(t&&t.c>0)}catch{}if(e.close(),o){console.log("[DB] Old schema_migrations table found but data exists — preserving data (#146)");let e=new t.default(c);try{e.exec("DROP TABLE IF EXISTS schema_migrations"),e.pragma("wal_checkpoint(TRUNCATE)")}catch(t){let e=t instanceof Error?t.message:String(t);console.warn("[DB] Could not clean up old schema table:",e)}finally{e.close()}}else{let e=c+".old-schema";for(let t of(console.log(`[DB] Old incompatible schema detected (empty) — renaming to ${r.default.basename(e)}`),a.default.renameSync(c,e),["-wal","-shm"]))try{a.default.existsSync(c+t)&&a.default.unlinkSync(c+t)}catch{}}}else e.close()}catch(e){console.warn("[DB] Could not probe existing DB, will create fresh:",e instanceof Error?e.message:String(e));try{a.default.unlinkSync(c)}catch{}}let o=new t.default(c);o.pragma("journal_mode = WAL"),o.pragma("busy_timeout = 5000"),o.pragma("synchronous = NORMAL"),o.exec(p);try{let e=o.prepare("PRAGMA table_info(provider_connections)").all(),t=new Set(e.map(e=>String(e.name??"")));t.has("rate_limit_protection")||(o.exec("ALTER TABLE provider_connections ADD COLUMN rate_limit_protection INTEGER DEFAULT 0"),console.log("[DB] Added provider_connections.rate_limit_protection column")),t.has("last_used_at")||(o.exec("ALTER TABLE provider_connections ADD COLUMN last_used_at TEXT"),console.log("[DB] Added provider_connections.last_used_at column")),t.has("group")||(o.exec('ALTER TABLE provider_connections ADD COLUMN "group" TEXT'),console.log('[DB] Added provider_connections."group" column'))}catch(e){console.warn("[DB] Failed to verify provider_connections schema:",e instanceof Error?e.message:String(e))}N(o);try{let e=o.prepare("PRAGMA table_info(call_logs)").all(),t=new Set(e.map(e=>String(e.name??"")));t.has("artifact_relpath")||(o.exec("ALTER TABLE call_logs ADD COLUMN artifact_relpath TEXT"),console.log("[DB] Added call_logs.artifact_relpath column")),t.has("has_pipeline_details")||(o.exec("ALTER TABLE call_logs ADD COLUMN has_pipeline_details INTEGER DEFAULT 0"),console.log("[DB] Added call_logs.has_pipeline_details column"))}catch(e){console.warn("[DB] Failed to verify call_logs schema:",e instanceof Error?e.message:String(e))}return o.exec(`
212
+ `;function u(){return globalThis.__omnirouteDb??null}function m(e){e?globalThis.__omnirouteDb=e:delete globalThis.__omnirouteDb}function N(e){try{let t=e.prepare("PRAGMA table_info(usage_history)").all(),r=new Set(t.map(e=>String(e.name??"")));r.has("success")||(e.exec("ALTER TABLE usage_history ADD COLUMN success INTEGER DEFAULT 1"),console.log("[DB] Added usage_history.success column")),r.has("latency_ms")||(e.exec("ALTER TABLE usage_history ADD COLUMN latency_ms INTEGER DEFAULT 0"),console.log("[DB] Added usage_history.latency_ms column")),r.has("ttft_ms")||(e.exec("ALTER TABLE usage_history ADD COLUMN ttft_ms INTEGER DEFAULT 0"),console.log("[DB] Added usage_history.ttft_ms column")),r.has("error_code")||(e.exec("ALTER TABLE usage_history ADD COLUMN error_code TEXT"),console.log("[DB] Added usage_history.error_code column"))}catch(e){console.warn("[DB] Failed to verify usage_history schema:",e instanceof Error?e.message:String(e))}}function A(e){let t=u();if(!t)return!1;let r=e?.checkpointMode??"TRUNCATE";try{if(r)try{(function(e,t="TRUNCATE"){return!T&&!s&&!!c&&(e.pragma(`wal_checkpoint(${t})`),!0)})(t,r)&&console.log(`[DB] SQLite WAL checkpoint completed (${r}).`)}catch(t){let e=t instanceof Error?t.message:String(t);console.warn(`[DB] WAL checkpoint failed during close (${r}):`,e)}}finally{try{t.open&&t.close()}finally{m(null)}}return!0}e.s(["DATA_DIR",0,E,"DB_BACKUPS_DIR",0,_,"SQLITE_FILE",0,c,"cleanNulls",0,function(e){let t={};for(let[r,o]of Object.entries(e||{}))null!=o&&(t[r]=o);return t},"closeDbInstance",0,A,"getDbInstance",0,function(){let e=u();if(e)return e;if(T||s){s&&console.log("[DB] Build phase detected — using in-memory SQLite (read-only)");let e=new t.default(":memory:");return e.pragma("journal_mode = WAL"),e.exec(p),N(e),m(e),e}if(!c)throw Error("SQLITE_FILE is unavailable for local mode");if(o.default.existsSync(c))try{let e=new t.default(c,{readonly:!0});if(e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='schema_migrations'").get()){let a=!1;try{let t=e.prepare("SELECT COUNT(*) as c FROM provider_connections").get();a=!!(t&&t.c>0)}catch{}if(e.close(),a){console.log("[DB] Old schema_migrations table found but data exists — preserving data (#146)");let e=new t.default(c);try{e.exec("DROP TABLE IF EXISTS schema_migrations"),e.pragma("wal_checkpoint(TRUNCATE)")}catch(t){let e=t instanceof Error?t.message:String(t);console.warn("[DB] Could not clean up old schema table:",e)}finally{e.close()}}else{let e=c+".old-schema";for(let t of(console.log(`[DB] Old incompatible schema detected (empty) — renaming to ${r.default.basename(e)}`),o.default.renameSync(c,e),["-wal","-shm"]))try{o.default.existsSync(c+t)&&o.default.unlinkSync(c+t)}catch{}}}else e.close()}catch(e){console.warn("[DB] Could not probe existing DB, will create fresh:",e instanceof Error?e.message:String(e));try{o.default.unlinkSync(c)}catch{}}let a=new t.default(c);a.pragma("journal_mode = WAL"),a.pragma("busy_timeout = 5000"),a.pragma("synchronous = NORMAL"),a.exec(p);try{let e=a.prepare("PRAGMA table_info(provider_connections)").all(),t=new Set(e.map(e=>String(e.name??"")));t.has("rate_limit_protection")||(a.exec("ALTER TABLE provider_connections ADD COLUMN rate_limit_protection INTEGER DEFAULT 0"),console.log("[DB] Added provider_connections.rate_limit_protection column")),t.has("last_used_at")||(a.exec("ALTER TABLE provider_connections ADD COLUMN last_used_at TEXT"),console.log("[DB] Added provider_connections.last_used_at column")),t.has("group")||(a.exec('ALTER TABLE provider_connections ADD COLUMN "group" TEXT'),console.log('[DB] Added provider_connections."group" column'))}catch(e){console.warn("[DB] Failed to verify provider_connections schema:",e instanceof Error?e.message:String(e))}N(a);try{let e=a.prepare("PRAGMA table_info(call_logs)").all(),t=new Set(e.map(e=>String(e.name??"")));t.has("artifact_relpath")||(a.exec("ALTER TABLE call_logs ADD COLUMN artifact_relpath TEXT"),console.log("[DB] Added call_logs.artifact_relpath column")),t.has("has_pipeline_details")||(a.exec("ALTER TABLE call_logs ADD COLUMN has_pipeline_details INTEGER DEFAULT 0"),console.log("[DB] Added call_logs.has_pipeline_details column"))}catch(e){console.warn("[DB] Failed to verify call_logs schema:",e instanceof Error?e.message:String(e))}return a.exec(`
213
213
  CREATE TABLE IF NOT EXISTS _omniroute_migrations (
214
214
  version TEXT PRIMARY KEY,
215
215
  name TEXT NOT NULL,
@@ -223,7 +223,7 @@ module.exports=[196039,e=>{"use strict";var t=e.i(785148),r=e.i(814747),a=e.i(52
223
223
  name TEXT NOT NULL,
224
224
  applied_at TEXT NOT NULL DEFAULT (datetime('now'))
225
225
  );
226
- `);let t=a.default.existsSync(T)?a.default.readdirSync(T).filter(e=>e.endsWith(".sql")).sort().map(e=>{let t=e.match(/^(\d+)_(.+)\.sql$/);return t?{version:t[1],name:t[2],path:r.default.join(T,e)}:null}).filter(Boolean):[],o=new Set(e.prepare("SELECT version FROM _omniroute_migrations").all().map(e=>e.version)),i=0;for(let r of t){if(o.has(r.version))continue;let t=a.default.readFileSync(r.path,"utf-8"),n=e.transaction(()=>{e.exec(t),e.prepare("INSERT INTO _omniroute_migrations (version, name) VALUES (?, ?)").run(r.version,r.name)});try{n(),i++,console.log(`[Migration] Applied: ${r.version}_${r.name}`)}catch(t){let e=t instanceof Error?t.message:String(t);throw console.error(`[Migration] FAILED: ${r.version}_${r.name} — ${e}`),t}}i>0&&console.log(`[Migration] ${i} migration(s) applied successfully.`)}(o),d&&a.default.existsSync(d)&&function(e,t){try{let o=a.default.readFileSync(t,"utf-8"),i=JSON.parse(o),n=(i.providerConnections||[]).length,T=(i.providerNodes||[]).length,l=(i.apiKeys||[]).length;if(0===n&&0===T&&0===l){console.log("[DB] db.json has no data to migrate, skipping"),a.default.renameSync(t,t+".empty");return}console.log(`[DB] Migrating db.json → SQLite (${n} connections, ${T} nodes, ${l} keys)...`),e.transaction(()=>{let t=e.prepare(`
226
+ `);let t=o.default.existsSync(l)?o.default.readdirSync(l).filter(e=>e.endsWith(".sql")).sort().map(e=>{let t=e.match(/^(\d+)_(.+)\.sql$/);return t?{version:t[1],name:t[2],path:r.default.join(l,e)}:null}).filter(Boolean):[],a=new Set(e.prepare("SELECT version FROM _omniroute_migrations").all().map(e=>e.version)),i=0;for(let r of t){if(a.has(r.version))continue;let t=o.default.readFileSync(r.path,"utf-8"),n=e.transaction(()=>{e.exec(t),e.prepare("INSERT INTO _omniroute_migrations (version, name) VALUES (?, ?)").run(r.version,r.name)});try{n(),i++,console.log(`[Migration] Applied: ${r.version}_${r.name}`)}catch(t){let e=t instanceof Error?t.message:String(t);throw console.error(`[Migration] FAILED: ${r.version}_${r.name} — ${e}`),t}}i>0&&console.log(`[Migration] ${i} migration(s) applied successfully.`)}(a),d&&o.default.existsSync(d)&&function(e,t){try{let a=o.default.readFileSync(t,"utf-8"),i=JSON.parse(a),n=(i.providerConnections||[]).length,l=(i.providerNodes||[]).length,T=(i.apiKeys||[]).length;if(0===n&&0===l&&0===T){console.log("[DB] db.json has no data to migrate, skipping"),o.default.renameSync(t,t+".empty");return}console.log(`[DB] Migrating db.json → SQLite (${n} connections, ${l} nodes, ${T} keys)...`),e.transaction(()=>{let t=e.prepare(`
227
227
  INSERT OR REPLACE INTO provider_connections (
228
228
  id, provider, auth_type, name, email, priority, is_active,
229
229
  access_token, refresh_token, expires_at, token_expires_at,
@@ -246,12 +246,12 @@ module.exports=[196039,e=>{"use strict";var t=e.i(785148),r=e.i(814747),a=e.i(52
246
246
  `);for(let e of i.providerConnections||[])t.run({id:e.id,provider:e.provider,authType:e.authType||"oauth",name:e.name||null,email:e.email||null,priority:e.priority||0,isActive:+(!1!==e.isActive),accessToken:e.accessToken||null,refreshToken:e.refreshToken||null,expiresAt:e.expiresAt||null,tokenExpiresAt:e.tokenExpiresAt||null,scope:e.scope||null,projectId:e.projectId||null,testStatus:e.testStatus||null,errorCode:e.errorCode||null,lastError:e.lastError||null,lastErrorAt:e.lastErrorAt||null,lastErrorType:e.lastErrorType||null,lastErrorSource:e.lastErrorSource||null,backoffLevel:e.backoffLevel||0,rateLimitedUntil:e.rateLimitedUntil||null,healthCheckInterval:e.healthCheckInterval||null,lastHealthCheckAt:e.lastHealthCheckAt||null,lastTested:e.lastTested||null,apiKey:e.apiKey||null,idToken:e.idToken||null,providerSpecificData:e.providerSpecificData?JSON.stringify(e.providerSpecificData):null,expiresIn:e.expiresIn||null,displayName:e.displayName||null,globalPriority:e.globalPriority||null,defaultModel:e.defaultModel||null,tokenType:e.tokenType||null,consecutiveUseCount:e.consecutiveUseCount||0,lastUsedAt:e.lastUsedAt||null,rateLimitProtection:+(!0===e.rateLimitProtection||1===e.rateLimitProtection),createdAt:e.createdAt||new Date().toISOString(),updatedAt:e.updatedAt||new Date().toISOString()});let r=e.prepare(`
247
247
  INSERT OR REPLACE INTO provider_nodes (id, type, name, prefix, api_type, base_url, created_at, updated_at)
248
248
  VALUES (@id, @type, @name, @prefix, @apiType, @baseUrl, @createdAt, @updatedAt)
249
- `);for(let e of i.providerNodes||[])r.run({id:e.id,type:e.type,name:e.name,prefix:e.prefix||null,apiType:e.apiType||null,baseUrl:e.baseUrl||null,createdAt:e.createdAt||new Date().toISOString(),updatedAt:e.updatedAt||new Date().toISOString()});let a=e.prepare("INSERT OR REPLACE INTO key_value (namespace, key, value) VALUES (?, ?, ?)");for(let[e,t]of Object.entries(i.modelAliases||{}))a.run("modelAliases",e,JSON.stringify(t));for(let[e,t]of Object.entries(i.mitmAlias||{}))a.run("mitmAlias",e,JSON.stringify(t));for(let[e,t]of Object.entries(i.settings||{}))a.run("settings",e,JSON.stringify(t));for(let[e,t]of Object.entries(i.pricing||{}))a.run("pricing",e,JSON.stringify(t));for(let[e,t]of Object.entries(i.customModels||{}))a.run("customModels",e,JSON.stringify(t));i.proxyConfig&&(a.run("proxyConfig","global",JSON.stringify(i.proxyConfig.global||null)),a.run("proxyConfig","providers",JSON.stringify(i.proxyConfig.providers||{})),a.run("proxyConfig","combos",JSON.stringify(i.proxyConfig.combos||{})),a.run("proxyConfig","keys",JSON.stringify(i.proxyConfig.keys||{})));let o=e.prepare(`
249
+ `);for(let e of i.providerNodes||[])r.run({id:e.id,type:e.type,name:e.name,prefix:e.prefix||null,apiType:e.apiType||null,baseUrl:e.baseUrl||null,createdAt:e.createdAt||new Date().toISOString(),updatedAt:e.updatedAt||new Date().toISOString()});let o=e.prepare("INSERT OR REPLACE INTO key_value (namespace, key, value) VALUES (?, ?, ?)");for(let[e,t]of Object.entries(i.modelAliases||{}))o.run("modelAliases",e,JSON.stringify(t));for(let[e,t]of Object.entries(i.mitmAlias||{}))o.run("mitmAlias",e,JSON.stringify(t));for(let[e,t]of Object.entries(i.settings||{}))o.run("settings",e,JSON.stringify(t));for(let[e,t]of Object.entries(i.pricing||{}))o.run("pricing",e,JSON.stringify(t));for(let[e,t]of Object.entries(i.customModels||{}))o.run("customModels",e,JSON.stringify(t));i.proxyConfig&&(o.run("proxyConfig","global",JSON.stringify(i.proxyConfig.global||null)),o.run("proxyConfig","providers",JSON.stringify(i.proxyConfig.providers||{})),o.run("proxyConfig","combos",JSON.stringify(i.proxyConfig.combos||{})),o.run("proxyConfig","keys",JSON.stringify(i.proxyConfig.keys||{})));let a=e.prepare(`
250
250
  INSERT OR REPLACE INTO combos (id, name, data, created_at, updated_at)
251
251
  VALUES (@id, @name, @data, @createdAt, @updatedAt)
252
- `);for(let e of i.combos||[])o.run({id:e.id,name:e.name,data:JSON.stringify(e),createdAt:e.createdAt||new Date().toISOString(),updatedAt:e.updatedAt||new Date().toISOString()});let n=e.prepare(`
252
+ `);for(let e of i.combos||[])a.run({id:e.id,name:e.name,data:JSON.stringify(e),createdAt:e.createdAt||new Date().toISOString(),updatedAt:e.updatedAt||new Date().toISOString()});let n=e.prepare(`
253
253
  INSERT OR REPLACE INTO api_keys (id, name, key, machine_id, allowed_models, no_log, created_at)
254
254
  VALUES (@id, @name, @key, @machineId, @allowedModels, @noLog, @createdAt)
255
- `);for(let e of i.apiKeys||[])n.run({id:e.id,name:e.name,key:e.key,machineId:e.machineId||null,allowedModels:JSON.stringify(e.allowedModels||[]),noLog:+!!e.noLog,createdAt:e.createdAt||new Date().toISOString()})})();let s=t+".migrated";a.default.renameSync(t,s),console.log(`[DB] ✓ Migration complete. Original saved as ${s}`);let c=r.default.join(E,"db_backups");if(a.default.existsSync(c)){let e=a.default.readdirSync(c).filter(e=>e.endsWith(".json"));e.length>0&&console.log(`[DB] Note: ${e.length} legacy .json backups remain in ${c}`)}}catch(e){console.error("[DB] Migration from db.json failed:",e.message)}}(o,d),o.prepare("INSERT OR REPLACE INTO db_meta (key, value) VALUES ('schema_version', '1')").run(),m(o),console.log(`[DB] SQLite database ready: ${c}`),o},"isBuildPhase",0,s,"isCloud",0,l,"resetDbInstance",0,function(){let e=u();e&&(e.close(),m(null))},"rowToCamel",0,function(e){if(!e)return null;let t={};for(let[r,a]of Object.entries(e)){let e=r.replace(/_([a-z])/g,(e,t)=>t.toUpperCase());if("isActive"===e||"rateLimitProtection"===e)t[e]=1===a||!0===a;else if("providerSpecificData"===e&&"string"==typeof a)try{t[e]=JSON.parse(a)}catch{t[e]=a}else t[e]=a}return t}],196039)}];
255
+ `);for(let e of i.apiKeys||[])n.run({id:e.id,name:e.name,key:e.key,machineId:e.machineId||null,allowedModels:JSON.stringify(e.allowedModels||[]),noLog:+!!e.noLog,createdAt:e.createdAt||new Date().toISOString()})})();let s=t+".migrated";o.default.renameSync(t,s),console.log(`[DB] ✓ Migration complete. Original saved as ${s}`);let c=r.default.join(E,"db_backups");if(o.default.existsSync(c)){let e=o.default.readdirSync(c).filter(e=>e.endsWith(".json"));e.length>0&&console.log(`[DB] Note: ${e.length} legacy .json backups remain in ${c}`)}}catch(e){console.error("[DB] Migration from db.json failed:",e.message)}}(a,d),a.prepare("INSERT OR REPLACE INTO db_meta (key, value) VALUES ('schema_version', '1')").run(),m(a),console.log(`[DB] SQLite database ready: ${c}`),a},"isBuildPhase",0,s,"isCloud",0,T,"resetDbInstance",0,function(){A()},"rowToCamel",0,function(e){if(!e)return null;let t={};for(let[r,o]of Object.entries(e)){let e=r.replace(/_([a-z])/g,(e,t)=>t.toUpperCase());if("isActive"===e||"rateLimitProtection"===e)t[e]=1===o||!0===o;else if("providerSpecificData"===e&&"string"==typeof o)try{t[e]=JSON.parse(o)}catch{t[e]=o}else t[e]=o}return t}],196039)}];
256
256
 
257
257
  //# sourceMappingURL=src_lib_db_core_ts_0~nrtni._.js.map
@@ -1,4 +1,4 @@
1
- module.exports=[113792,a=>{"use strict";a.s(["default",0,{name:"omniroute",version:"3.4.3",description:"Smart AI Router with auto fallback — route to FREE & cheap models, zero downtime. Works with Cursor, Cline, Claude Desktop, Codex, and any OpenAI-compatible tool.",type:"module",bin:{omniroute:"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},files:["bin/","app/","open-sse/mcp-server/","src/shared/contracts/","scripts/postinstall.mjs","scripts/native-binary-compat.mjs","README.md","LICENSE"],workspaces:["open-sse"],engines:{node:">=18.0.0 <24.0.0"},keywords:["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],license:"MIT",author:"diegosouzapw",repository:{type:"git",url:"https://github.com/diegosouzapw/OmniRoute"},homepage:"https://omniroute.online",scripts:{dev:"node scripts/run-next.mjs dev",build:"node scripts/build-next-isolated.mjs","build:cli":"node scripts/prepublish.mjs",start:"node scripts/run-next.mjs start",lint:"eslint .","electron:dev":'concurrently "npm run dev" "wait-on http://localhost:20128 && cd electron && npm run dev"',"electron:build":"npm run build && cd electron && npm run build","electron:build:win":"npm run build && cd electron && npm run build:win","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:linux":"npm run build && cd electron && npm run build:linux",test:"node --import tsx/esm --test tests/unit/*.test.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","check:cycles":"node scripts/check-cycles.mjs","check:route-validation:t06":"node scripts/check-route-validation.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","check:docs-sync":"node scripts/check-docs-sync.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","test:coverage":"c8 --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 55 --lines 55 --functions 55 --branches 60 node --import tsx/esm --test tests/unit/*.test.mjs","test:coverage:legacy":"c8 --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx/esm --test tests/unit/*.test.mjs","coverage:report":"c8 report --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","coverage:report:legacy":"c8 report --exclude=open-sse --reporter=text --reporter=text-summary","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e",check:"npm run lint && npm run test",prepublishOnly:"npm run build:cli",postinstall:"node scripts/postinstall.mjs",prepare:"husky","system-info":"node scripts/system-info.mjs"},dependencies:{"@lobehub/icons":"^5.0.1","@modelcontextprotocol/sdk":"^1.27.1","@monaco-editor/react":"^4.7.0","@swc/helpers":"0.5.19",bcryptjs:"^3.0.3","better-sqlite3":"^12.6.2",bottleneck:"^2.19.5",dompurify:"^3.3.2",express:"^5.2.1","fetch-socks":"^1.3.2","http-proxy-middleware":"^3.0.5","https-proxy-agent":"^8.0.0",jose:"^6.1.3","js-yaml":"^4.1.0",lowdb:"^7.0.1","monaco-editor":"^0.55.1",next:"^16.0.10","next-intl":"^4.8.3","node-machine-id":"^1.1.12",open:"^11.0.0",ora:"^9.1.0",pino:"^10.3.1","pino-pretty":"^13.1.3",react:"19.2.4","react-dom":"19.2.4",recharts:"^3.7.0",selfsigned:"^5.5.0",tsx:"^4.21.0",undici:"^7.19.2",uuid:"^13.0.0","wreq-js":"^2.0.1",yazl:"^3.3.1",zod:"^4.3.6",zustand:"^5.0.10"},optionalDependencies:{keytar:"^7.9.0"},devDependencies:{"@playwright/test":"^1.58.2","@tailwindcss/postcss":"^4.1.18","@testing-library/jest-dom":"^6.9.1","@testing-library/react":"^16.3.2","@types/bcryptjs":"^3.0.0","@types/better-sqlite3":"^7.6.13","@types/keytar":"^4.4.0","@types/node":"^25.2.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1",c8:"^11.0.0",concurrently:"^9.2.1","cross-env":"^10.1.0",eslint:"^9.39.2","eslint-config-next":"^16.0.10",husky:"^9.1.7",jsdom:"^29.0.1","lint-staged":"^16.2.7",prettier:"^3.8.1","prop-types":"^15.8.1",tailwindcss:"^4",typescript:"^5.9.3","typescript-eslint":"^8.56.0",vitest:"^4.0.18","wait-on":"^9.0.4"},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},pnpm:{onlyBuiltDependencies:["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},overrides:{dompurify:"^3.3.2","path-to-regexp":"^8.4.0",react:"$react","react-dom":"$react-dom"}}])},978251,a=>a.a(async(b,c)=>{try{var d=a.i(677850),e=b([d]);[d]=e.then?(await e)():e;let f=d.z.object({id:d.z.string().min(1),alias:d.z.string().min(1).optional(),name:d.z.string().min(1),icon:d.z.string().min(1),color:d.z.string().regex(/^#[0-9A-Fa-f]{6}$/,"Must be a valid hex color (#RRGGBB)"),textIcon:d.z.string().optional(),website:d.z.string().url().optional(),passthroughModels:d.z.boolean().optional(),deprecated:d.z.boolean().optional(),deprecationReason:d.z.string().optional(),hasFree:d.z.boolean().optional(),freeNote:d.z.string().optional(),authHint:d.z.string().optional(),apiHint:d.z.string().optional()}),g=d.z.record(d.z.string(),f);a.s(["validateProviders",0,function(a,b){let c=g.safeParse(a);if(!c.success){let a=c.error.issues.map(a=>` ${a.path.join(".")}: ${a.message}`).join("\n");throw console.error(`[PROVIDER VALIDATION] ${b} has invalid entries:
1
+ module.exports=[113792,a=>{"use strict";a.s(["default",0,{name:"omniroute",version:"3.4.4",description:"Smart AI Router with auto fallback — route to FREE & cheap models, zero downtime. Works with Cursor, Cline, Claude Desktop, Codex, and any OpenAI-compatible tool.",type:"module",bin:{omniroute:"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},files:["bin/","app/","open-sse/mcp-server/","src/shared/contracts/","scripts/postinstall.mjs","scripts/native-binary-compat.mjs","README.md","LICENSE"],workspaces:["open-sse"],engines:{node:">=18.0.0 <24.0.0"},keywords:["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],license:"MIT",author:"diegosouzapw",repository:{type:"git",url:"https://github.com/diegosouzapw/OmniRoute"},homepage:"https://omniroute.online",scripts:{dev:"node scripts/run-next.mjs dev",build:"node scripts/build-next-isolated.mjs","build:cli":"node scripts/prepublish.mjs",start:"node scripts/run-next.mjs start",lint:"eslint .","electron:dev":'concurrently "npm run dev" "wait-on http://localhost:20128 && cd electron && npm run dev"',"electron:build":"npm run build && cd electron && npm run build","electron:build:win":"npm run build && cd electron && npm run build:win","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:linux":"npm run build && cd electron && npm run build:linux",test:"node --import tsx/esm --test tests/unit/*.test.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","check:cycles":"node scripts/check-cycles.mjs","check:route-validation:t06":"node scripts/check-route-validation.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","check:docs-sync":"node scripts/check-docs-sync.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","test:coverage":"c8 --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 55 --lines 55 --functions 55 --branches 60 node --import tsx/esm --test tests/unit/*.test.mjs","test:coverage:legacy":"c8 --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx/esm --test tests/unit/*.test.mjs","coverage:report":"c8 report --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","coverage:report:legacy":"c8 report --exclude=open-sse --reporter=text --reporter=text-summary","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e",check:"npm run lint && npm run test",prepublishOnly:"npm run build:cli",postinstall:"node scripts/postinstall.mjs",prepare:"husky","system-info":"node scripts/system-info.mjs"},dependencies:{"@lobehub/icons":"^5.0.1","@modelcontextprotocol/sdk":"^1.27.1","@monaco-editor/react":"^4.7.0","@swc/helpers":"0.5.19",bcryptjs:"^3.0.3","better-sqlite3":"^12.6.2",bottleneck:"^2.19.5",dompurify:"^3.3.2",express:"^5.2.1","fetch-socks":"^1.3.2","http-proxy-middleware":"^3.0.5","https-proxy-agent":"^8.0.0",jose:"^6.1.3","js-yaml":"^4.1.0",lowdb:"^7.0.1","monaco-editor":"^0.55.1",next:"^16.0.10","next-intl":"^4.8.3","node-machine-id":"^1.1.12",open:"^11.0.0",ora:"^9.1.0",pino:"^10.3.1","pino-pretty":"^13.1.3",react:"19.2.4","react-dom":"19.2.4",recharts:"^3.7.0",selfsigned:"^5.5.0",tsx:"^4.21.0",undici:"^7.19.2",uuid:"^13.0.0","wreq-js":"^2.0.1",yazl:"^3.3.1",zod:"^4.3.6",zustand:"^5.0.10"},optionalDependencies:{keytar:"^7.9.0"},devDependencies:{"@playwright/test":"^1.58.2","@tailwindcss/postcss":"^4.1.18","@testing-library/jest-dom":"^6.9.1","@testing-library/react":"^16.3.2","@types/bcryptjs":"^3.0.0","@types/better-sqlite3":"^7.6.13","@types/keytar":"^4.4.0","@types/node":"^25.2.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1",c8:"^11.0.0",concurrently:"^9.2.1","cross-env":"^10.1.0",eslint:"^9.39.2","eslint-config-next":"^16.0.10",husky:"^9.1.7",jsdom:"^29.0.1","lint-staged":"^16.2.7",prettier:"^3.8.1","prop-types":"^15.8.1",tailwindcss:"^4",typescript:"^5.9.3","typescript-eslint":"^8.56.0",vitest:"^4.0.18","wait-on":"^9.0.4"},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},pnpm:{onlyBuiltDependencies:["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},overrides:{dompurify:"^3.3.2","path-to-regexp":"^8.4.0",react:"$react","react-dom":"$react-dom"}}])},978251,a=>a.a(async(b,c)=>{try{var d=a.i(677850),e=b([d]);[d]=e.then?(await e)():e;let f=d.z.object({id:d.z.string().min(1),alias:d.z.string().min(1).optional(),name:d.z.string().min(1),icon:d.z.string().min(1),color:d.z.string().regex(/^#[0-9A-Fa-f]{6}$/,"Must be a valid hex color (#RRGGBB)"),textIcon:d.z.string().optional(),website:d.z.string().url().optional(),passthroughModels:d.z.boolean().optional(),deprecated:d.z.boolean().optional(),deprecationReason:d.z.string().optional(),hasFree:d.z.boolean().optional(),freeNote:d.z.string().optional(),authHint:d.z.string().optional(),apiHint:d.z.string().optional()}),g=d.z.record(d.z.string(),f);a.s(["validateProviders",0,function(a,b){let c=g.safeParse(a);if(!c.success){let a=c.error.issues.map(a=>` ${a.path.join(".")}: ${a.message}`).join("\n");throw console.error(`[PROVIDER VALIDATION] ${b} has invalid entries:
2
2
  ${a}`),Error(`Provider validation failed for ${b}`)}}]),c()}catch(a){c(a)}},!1),549276,a=>a.a(async(b,c)=>{try{var d=a.i(978251),e=b([d]);[d]=e.then?(await e)():e;let f={qoder:{id:"qoder",alias:"if",name:"Qoder AI",icon:"water_drop",color:"#6366F1"},qwen:{id:"qwen",alias:"qw",name:"Qwen Code",icon:"psychology",color:"#10B981"},"gemini-cli":{id:"gemini-cli",alias:"gemini-cli",name:"Gemini CLI",icon:"terminal",color:"#4285F4",deprecated:!0,deprecationReason:"Google restricts third-party OAuth usage for Gemini CLI (Mar 2026). Pro models require paid plans. Use 'gemini' (API key) provider instead."},kiro:{id:"kiro",alias:"kr",name:"Kiro AI",icon:"psychology_alt",color:"#FF6B35"}},g={claude:{id:"claude",alias:"cc",name:"Claude Code",icon:"smart_toy",color:"#D97757"},antigravity:{id:"antigravity",alias:void 0,name:"Antigravity",icon:"rocket_launch",color:"#F59E0B"},codex:{id:"codex",alias:"cx",name:"OpenAI Codex",icon:"code",color:"#3B82F6"},github:{id:"github",alias:"gh",name:"GitHub Copilot",icon:"code",color:"#333333"},cursor:{id:"cursor",alias:"cu",name:"Cursor IDE",icon:"edit_note",color:"#00D4AA"},"kimi-coding":{id:"kimi-coding",alias:"kmc",name:"Kimi Coding",icon:"psychology",color:"#1E40AF",textIcon:"KC"},kilocode:{id:"kilocode",alias:"kc",name:"Kilo Code",icon:"code",color:"#FF6B35",textIcon:"KC"},cline:{id:"cline",alias:"cl",name:"Cline",icon:"smart_toy",color:"#5B9BD5",textIcon:"CL"}},h={openrouter:{id:"openrouter",alias:"openrouter",name:"OpenRouter",icon:"router",color:"#F97316",textIcon:"OR",passthroughModels:!0,website:"https://openrouter.ai"},glm:{id:"glm",alias:"glm",name:"GLM Coding",icon:"code",color:"#2563EB",textIcon:"GL",website:"https://open.bigmodel.cn"},"bailian-coding-plan":{id:"bailian-coding-plan",alias:"bcp",name:"Alibaba Coding Plan",icon:"code",color:"#FF6A00",textIcon:"BCP",website:"https://www.alibabacloud.com/help/en/model-studio/coding-plan"},kimi:{id:"kimi",alias:"kimi",name:"Kimi",icon:"psychology",color:"#1E3A8A",textIcon:"KM",website:"https://kimi.moonshot.cn"},"kimi-coding-apikey":{id:"kimi-coding-apikey",alias:"kmca",name:"Kimi Coding (API Key)",icon:"psychology",color:"#1E40AF",textIcon:"KC",website:"https://kimi.com"},minimax:{id:"minimax",alias:"minimax",name:"Minimax Coding",icon:"memory",color:"#7C3AED",textIcon:"MM",website:"https://www.minimaxi.com"},"minimax-cn":{id:"minimax-cn",alias:"minimax-cn",name:"Minimax (China)",icon:"memory",color:"#DC2626",textIcon:"MC",website:"https://www.minimaxi.com"},alicode:{id:"alicode",alias:"alicode",name:"Alibaba",icon:"cloud",color:"#FF6A00",textIcon:"ALi",website:"https://bailian.console.aliyun.com"},"alicode-intl":{id:"alicode-intl",alias:"alicode-intl",name:"Alibaba Intl",icon:"cloud",color:"#FF6A00",textIcon:"ALi",website:"https://modelstudio.console.alibabacloud.com"},openai:{id:"openai",alias:"openai",name:"OpenAI",icon:"auto_awesome",color:"#10A37F",textIcon:"OA",website:"https://platform.openai.com"},anthropic:{id:"anthropic",alias:"anthropic",name:"Anthropic",icon:"smart_toy",color:"#D97757",textIcon:"AN",website:"https://console.anthropic.com"},gemini:{id:"gemini",alias:"gemini",name:"Gemini (Google AI Studio)",icon:"diamond",color:"#4285F4",textIcon:"GE",website:"https://ai.google.dev",hasFree:!0,freeNote:"Free forever: 1,500 req/day for Gemini 2.5 Flash — no credit card, get key at aistudio.google.com"},deepseek:{id:"deepseek",alias:"ds",name:"DeepSeek",icon:"bolt",color:"#4D6BFE",textIcon:"DS",website:"https://deepseek.com"},groq:{id:"groq",alias:"groq",name:"Groq",icon:"speed",color:"#F55036",textIcon:"GQ",website:"https://groq.com",hasFree:!0,freeNote:"Free tier: 30 RPM / 14.4K RPD — no credit card"},blackbox:{id:"blackbox",alias:"bb",name:"Blackbox AI",icon:"view_in_ar",color:"#1A1A2E",textIcon:"BB",website:"https://blackbox.ai"},xai:{id:"xai",alias:"xai",name:"xAI (Grok)",icon:"auto_awesome",color:"#1DA1F2",textIcon:"XA",website:"https://x.ai"},mistral:{id:"mistral",alias:"mistral",name:"Mistral",icon:"air",color:"#FF7000",textIcon:"MI",website:"https://mistral.ai"},perplexity:{id:"perplexity",alias:"pplx",name:"Perplexity",icon:"search",color:"#20808D",textIcon:"PP",website:"https://www.perplexity.ai"},together:{id:"together",alias:"together",name:"Together AI",icon:"group_work",color:"#0F6FFF",textIcon:"TG",website:"https://www.together.ai",hasFree:!0,freeNote:"$25 signup credits + 3 permanently free models: Llama 3.3 70B, Vision, DeepSeek-R1 distill"},fireworks:{id:"fireworks",alias:"fireworks",name:"Fireworks AI",icon:"local_fire_department",color:"#7B2EF2",textIcon:"FW",website:"https://fireworks.ai"},cerebras:{id:"cerebras",alias:"cerebras",name:"Cerebras",icon:"memory",color:"#FF4F00",textIcon:"CB",website:"https://inference.cerebras.ai",hasFree:!0,freeNote:"Free: 1M tokens/day, 60K TPM — world's fastest inference"},cohere:{id:"cohere",alias:"cohere",name:"Cohere",icon:"hub",color:"#39594D",textIcon:"CO",website:"https://cohere.com"},nvidia:{id:"nvidia",alias:"nvidia",name:"NVIDIA NIM",icon:"developer_board",color:"#76B900",textIcon:"NV",website:"https://build.nvidia.com",hasFree:!0,freeNote:"Free dev access: ~40 RPM, 70+ models (Kimi K2.5, GLM 4.7, DeepSeek V3.2...)"},nebius:{id:"nebius",alias:"nebius",name:"Nebius AI",icon:"cloud",color:"#6C5CE7",textIcon:"NB",website:"https://nebius.com"},siliconflow:{id:"siliconflow",alias:"siliconflow",name:"SiliconFlow",icon:"cloud_queue",color:"#5B6EF5",textIcon:"SF",website:"https://cloud.siliconflow.com"},hyperbolic:{id:"hyperbolic",alias:"hyp",name:"Hyperbolic",icon:"bolt",color:"#00D4FF",textIcon:"HY",website:"https://hyperbolic.xyz"},deepgram:{id:"deepgram",alias:"dg",name:"Deepgram",icon:"mic",color:"#13EF93",textIcon:"DG",website:"https://deepgram.com"},assemblyai:{id:"assemblyai",alias:"aai",name:"AssemblyAI",icon:"record_voice_over",color:"#0062FF",textIcon:"AA",website:"https://assemblyai.com"},nanobanana:{id:"nanobanana",alias:"nb",name:"NanoBanana",icon:"image",color:"#FFD700",textIcon:"NB",website:"https://nanobananaapi.ai"},"ollama-cloud":{id:"ollama-cloud",alias:"ollamacloud",name:"Ollama Cloud",icon:"cloud",color:"#58A6FF",textIcon:"OC",website:"https://ollama.com/settings/api-keys"},elevenlabs:{id:"elevenlabs",alias:"el",name:"ElevenLabs",icon:"record_voice_over",color:"#6C47FF",textIcon:"EL",website:"https://elevenlabs.io"},cartesia:{id:"cartesia",alias:"cartesia",name:"Cartesia",icon:"spatial_audio",color:"#FF4F8B",textIcon:"CA",website:"https://cartesia.ai"},playht:{id:"playht",alias:"playht",name:"PlayHT",icon:"play_circle",color:"#00B4D8",textIcon:"PH",website:"https://play.ht"},inworld:{id:"inworld",alias:"inworld",name:"Inworld",icon:"voice_chat",color:"#7B2EF2",textIcon:"IW",website:"https://inworld.ai"},sdwebui:{id:"sdwebui",alias:"sdwebui",name:"SD WebUI",icon:"brush",color:"#FF7043",textIcon:"SD",website:"https://github.com/AUTOMATIC1111/stable-diffusion-webui"},comfyui:{id:"comfyui",alias:"comfyui",name:"ComfyUI",icon:"account_tree",color:"#4CAF50",textIcon:"CF",website:"https://github.com/comfyanonymous/ComfyUI"},huggingface:{id:"huggingface",alias:"hf",name:"HuggingFace",icon:"face",color:"#FFD21E",textIcon:"HF",website:"https://huggingface.co",hasFree:!0,freeNote:"Free Inference API for thousands of models (Whisper, VITS, SDXL…)"},synthetic:{id:"synthetic",alias:"synthetic",name:"Synthetic",icon:"verified_user",color:"#6366F1",textIcon:"SY",website:"https://synthetic.new",passthroughModels:!0},"kilo-gateway":{id:"kilo-gateway",alias:"kg",name:"Kilo Gateway",icon:"hub",color:"#617A91",textIcon:"KG",website:"https://kilo.ai",passthroughModels:!0},vertex:{id:"vertex",alias:"vertex",name:"Vertex AI",icon:"cloud",color:"#4285F4",textIcon:"VA",website:"https://cloud.google.com/vertex-ai",authHint:"Provide Service Account JSON or OAuth access_token"},zai:{id:"zai",alias:"zai",name:"Z.AI",icon:"psychology",color:"#2563EB",textIcon:"ZA",website:"https://open.bigmodel.cn",apiHint:"API key from https://open.bigmodel.cn/usercenter/apikeys"},"perplexity-search":{id:"perplexity-search",alias:"pplx-search",name:"Perplexity Search",icon:"search",color:"#20808D",textIcon:"PS",website:"https://docs.perplexity.ai/guides/search-quickstart",authHint:"Same API key as Perplexity (pplx-...)"},"serper-search":{id:"serper-search",alias:"serper-search",name:"Serper Search",icon:"search",color:"#4285F4",textIcon:"SP",website:"https://serper.dev",authHint:"API key from serper.dev dashboard"},"brave-search":{id:"brave-search",alias:"brave-search",name:"Brave Search",icon:"travel_explore",color:"#FB542B",textIcon:"BR",website:"https://brave.com/search/api",authHint:"Subscription token from Brave Search API dashboard"},"exa-search":{id:"exa-search",alias:"exa-search",name:"Exa Search",icon:"neurology",color:"#1E40AF",textIcon:"EX",website:"https://exa.ai",authHint:"API key from dashboard.exa.ai"},"tavily-search":{id:"tavily-search",alias:"tavily-search",name:"Tavily Search",icon:"manage_search",color:"#5B4FDB",textIcon:"TV",website:"https://tavily.com",authHint:"API key from app.tavily.com (format: tvly-...)"},"opencode-zen":{id:"opencode-zen",alias:"opencode-zen",name:"OpenCode Zen",icon:"opencode",color:"#6366f1",website:"https://opencode.ai/zen"},"opencode-go":{id:"opencode-go",alias:"opencode-go",name:"OpenCode Go",icon:"opencode",color:"#6366f1",website:"https://opencode.ai/zen/go"},alibaba:{id:"alibaba",alias:"ali",name:"Alibaba Cloud (DashScope)",icon:"cloud_queue",color:"#FF6600",textIcon:"AL",website:"https://dashscope-intl.aliyuncs.com",hasFree:!1},longcat:{id:"longcat",alias:"lc",name:"LongCat AI",icon:"auto_awesome",color:"#FF6B9D",textIcon:"LC",website:"https://longcat.chat",hasFree:!0,freeNote:"50M tokens/day (Flash-Lite) + 500K/day (Chat/Thinking) — 100% free while public beta"},pollinations:{id:"pollinations",alias:"pol",name:"Pollinations AI",icon:"local_florist",color:"#4CAF50",textIcon:"PO",website:"https://pollinations.ai",hasFree:!0,freeNote:"No API key needed — access GPT-5, Claude, Gemini, DeepSeek V3, Llama 4 free (1 req/15s)"},puter:{id:"puter",alias:"pu",name:"Puter AI",icon:"cloud_circle",color:"#6366F1",textIcon:"PU",website:"https://puter.com",hasFree:!0,freeNote:"500+ models (GPT-5, Claude Opus 4, Gemini 3 Pro, Grok 4, DeepSeek V3...) — Users pay via free Puter account",passthroughModels:!0,authHint:"Get token at puter.com/dashboard → Copy Auth Token"},"cloudflare-ai":{id:"cloudflare-ai",alias:"cf",name:"Cloudflare Workers AI",icon:"cloud",color:"#F48120",textIcon:"CF",website:"https://developers.cloudflare.com/workers-ai/",hasFree:!0,freeNote:"Free 10K Neurons/day: ~150 LLM responses or 500s Whisper audio — edge inference globally",authHint:"Requires API Token AND Account ID (found at dash.cloudflare.com)"},scaleway:{id:"scaleway",alias:"scw",name:"Scaleway AI",icon:"cloud",color:"#4F0599",textIcon:"SCW",website:"https://www.scaleway.com/en/ai/generative-apis/",hasFree:!0,freeNote:"1M free tokens for new accounts — EU/GDPR compliant (Paris), Qwen3 235B & Llama 70B"},aimlapi:{id:"aimlapi",alias:"aiml",name:"AI/ML API",icon:"hub",color:"#6366F1",textIcon:"AI",website:"https://aimlapi.com",hasFree:!0,freeNote:"$0.025/day free credits — 200+ models (GPT-4o, Claude, Gemini, Llama) via single endpoint",passthroughModels:!0}},i={...f,...g,...h};Object.values(i).reduce((a,b)=>(b.alias&&(a[b.alias]=b.id),a),{}),Object.values(i).reduce((a,b)=>(a[b.id]=b.alias||b.id,a),{}),(0,d.validateProviders)(f,"FREE_PROVIDERS"),(0,d.validateProviders)(g,"OAUTH_PROVIDERS"),(0,d.validateProviders)(h,"APIKEY_PROVIDERS"),a.s(["AI_PROVIDERS",0,i,"APIKEY_PROVIDERS",0,h,"FREE_PROVIDERS",0,f,"OAUTH_PROVIDERS",0,g]),c()}catch(a){c(a)}},!1),728972,a=>a.a(async(b,c)=>{try{var d=a.i(958301),e=a.i(549276),f=b([e]);[e]=f.then?(await f)():f,Object.entries(e.AI_PROVIDERS).filter(([,a])=>a.passthroughModels).map(([a])=>a),Object.entries(d.PROVIDER_MODELS).flatMap(([a,b])=>b.map(b=>({provider:a,model:b.id,name:b.name}))),a.s([]),c()}catch(a){c(a)}},!1),895812,a=>a.a(async(b,c)=>{try{var d=a.i(113792),e=a.i(549276),f=a.i(728972),g=b([e,f]);[e,f]=g.then?(await g)():g;let h={name:"OmniRoute",description:"AI Gateway for Multi-Provider LLMs",version:d.default.version};a.s(["APP_CONFIG",0,h]),c()}catch(a){c(a)}},!1),831575,a=>a.a(async(b,c)=>{try{var d=a.i(907997),e=a.i(395936),f=a.i(442979),g=a.i(895812),h=a.i(549276),i=b([g,h]);[g,h]=i.then?(await i)():i;let k=[{path:"/v1/chat/completions",method:"POST",noteKey:"endpointChatNote"},{path:"/v1/responses",method:"POST",noteKey:"endpointResponsesNote"},{path:"/v1/models",method:"GET",noteKey:"endpointModelsNote"},{path:"/v1/embeddings",method:"POST",noteKey:"endpointEmbeddingsNote"},{path:"/v1/audio/transcriptions",method:"POST",noteKey:"endpointAudioNote"},{path:"/v1/audio/speech",method:"POST",noteKey:"endpointSpeechNote"},{path:"/v1/images/generations",method:"POST",noteKey:"endpointImagesNote"},{path:"/chat/completions",method:"POST",noteKey:"endpointRewriteChatNote"},{path:"/responses",method:"POST",noteKey:"endpointRewriteResponsesNote"},{path:"/models",method:"GET",noteKey:"endpointRewriteModelsNote"}],l=[{path:"/api/v1/management/proxies",method:"GET",noteKey:"mgmtProxiesListNote"},{path:"/api/v1/management/proxies",method:"POST",noteKey:"mgmtProxiesCreateNote"},{path:"/api/v1/management/proxies/health",method:"GET",noteKey:"mgmtProxiesHealthNote"},{path:"/api/v1/management/proxies/bulk-assign",method:"PUT",noteKey:"mgmtProxiesBulkAssignNote"},{path:"/api/v1/management/proxies/assignments",method:"GET",noteKey:"mgmtAssignmentsListNote"},{path:"/api/v1/management/proxies/assignments",method:"PUT",noteKey:"mgmtAssignmentsUpdateNote"},{path:"/api/settings/proxies/migrate",method:"POST",noteKey:"mgmtLegacyMigrationNote"}],m=[{icon:"hub",titleKey:"featureRoutingTitle",textKey:"featureRoutingText"},{icon:"layers",titleKey:"featureCombosTitle",textKey:"featureCombosText"},{icon:"bar_chart",titleKey:"featureUsageTitle",textKey:"featureUsageText"},{icon:"analytics",titleKey:"featureAnalyticsTitle",textKey:"featureAnalyticsText"},{icon:"health_and_safety",titleKey:"featureHealthTitle",textKey:"featureHealthText"},{icon:"terminal",titleKey:"featureCliTitle",textKey:"featureCliText"},{icon:"shield",titleKey:"featureSecurityTitle",textKey:"featureSecurityText"},{icon:"cloud_sync",titleKey:"featureCloudSyncTitle",textKey:"featureCloudSyncText"}],n=[{titleKey:"useCaseSingleEndpointTitle",textKey:"useCaseSingleEndpointText"},{titleKey:"useCaseFallbackTitle",textKey:"useCaseFallbackText"},{titleKey:"useCaseUsageVisibilityTitle",textKey:"useCaseUsageVisibilityText"}],o=["troubleshootingModelRouting","troubleshootingAmbiguousModels","troubleshootingCodexFamily","troubleshootingTestConnection","troubleshootingCircuitBreaker","troubleshootingOAuth"],p=[{href:"#quick-start",labelKey:"quickStart"},{href:"#features",labelKey:"features"},{href:"#supported-providers",labelKey:"supportedProvidersToc"},{href:"#use-cases",labelKey:"commonUseCases"},{href:"#client-compatibility",labelKey:"clientCompatibility"},{href:"#protocols",labelKey:"protocolsToc"},{href:"#api-reference",labelKey:"apiReference"},{href:"#management-api",labelKey:"managementApiReference"},{href:"#model-prefixes",labelKey:"modelPrefixes"},{href:"#troubleshooting",labelKey:"troubleshooting"}];function j({title:a,providers:b,colorDot:c}){let e=(0,f.useTranslations)("docs"),g=Object.values(b);return(0,d.jsxs)("div",{className:"rounded-lg border border-border bg-bg p-4",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2 mb-3",children:[(0,d.jsx)("span",{className:`size-2.5 rounded-full ${c}`}),(0,d.jsx)("h3",{className:"font-semibold",children:a}),(0,d.jsx)("span",{className:"text-xs text-text-muted ml-auto",children:e("providersCount",{count:g.length})})]}),(0,d.jsx)("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-x-6 gap-y-1 text-sm",children:g.map(a=>(0,d.jsxs)("div",{className:"flex items-center justify-between py-1.5 border-b border-border/40 last:border-0",children:[(0,d.jsx)("span",{className:"font-medium",children:a.name}),(0,d.jsxs)("code",{className:"text-xs text-text-muted px-1.5 py-0.5 rounded bg-bg-subtle",children:[a.alias,"/"]})]},a.id))})]})}a.s(["default",0,function(){let a=(0,f.useTranslations)("docs"),b=Object.keys(h.FREE_PROVIDERS).length+Object.keys(h.OAUTH_PROVIDERS).length+Object.keys(h.APIKEY_PROVIDERS).length,c=k.map(b=>({...b,note:a(b.noteKey)})),i=l.map(b=>({...b,note:a(b.noteKey)})),q=m.map(b=>({...b,title:a(b.titleKey),text:a(b.textKey)})),r=n.map(b=>({...b,title:a(b.titleKey),text:a(b.textKey)})),s=o.map(b=>a(b)),t=p.map(b=>({...b,label:a(b.labelKey)})),u=[...Object.values(h.FREE_PROVIDERS).map(a=>({...a,type:"free"})),...Object.values(h.OAUTH_PROVIDERS).map(a=>({...a,type:"oauth"})),...Object.values(h.APIKEY_PROVIDERS).map(a=>({...a,type:"apiKey"}))];return(0,d.jsx)("div",{className:"min-h-screen bg-bg text-text-main",children:(0,d.jsxs)("div",{className:"mx-auto max-w-6xl px-4 sm:px-6 lg:px-8 py-10 md:py-14 flex flex-col gap-8",children:[(0,d.jsx)("header",{className:"rounded-2xl border border-border bg-bg-subtle p-6 md:p-8",children:(0,d.jsxs)("div",{className:"flex flex-col gap-4 md:flex-row md:items-center md:justify-between",children:[(0,d.jsxs)("div",{children:[(0,d.jsx)("p",{className:"text-xs uppercase tracking-wider text-text-muted",children:a("documentationVersion",{version:g.APP_CONFIG.version})}),(0,d.jsxs)("h1",{className:"text-3xl md:text-4xl font-bold mt-1",children:[g.APP_CONFIG.name," ",a("docsLabel")]}),(0,d.jsx)("p",{className:"text-sm md:text-base text-text-muted mt-2 max-w-3xl",children:a("docsHeroDescription")})]}),(0,d.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,d.jsx)(e.default,{href:"/dashboard",className:"px-3 py-2 rounded-lg border border-border text-sm hover:bg-bg transition-colors",children:a("openDashboard")}),(0,d.jsx)(e.default,{href:"/dashboard/endpoint",className:"px-3 py-2 rounded-lg border border-border text-sm hover:bg-bg transition-colors",children:a("endpointPage")}),(0,d.jsxs)("a",{href:"https://github.com/diegosouzapw/OmniRoute",target:"_blank",rel:"noopener noreferrer",className:"px-3 py-2 rounded-lg border border-border text-sm hover:bg-bg transition-colors flex items-center gap-1",children:[a("github")," ",(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"open_in_new"})]}),(0,d.jsx)("a",{href:"https://github.com/diegosouzapw/OmniRoute/issues",target:"_blank",rel:"noopener noreferrer",className:"px-3 py-2 rounded-lg border border-border text-sm hover:bg-bg transition-colors",children:a("reportIssue")})]})]})}),(0,d.jsxs)("nav",{className:"rounded-2xl border border-border bg-bg-subtle p-6",children:[(0,d.jsx)("h2",{className:"text-sm font-semibold uppercase tracking-wider text-text-muted mb-3",children:a("onThisPage")}),(0,d.jsx)("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-2 text-sm",children:t.map(a=>(0,d.jsxs)("a",{href:a.href,className:"flex items-center gap-1.5 px-3 py-2 rounded-lg border border-border hover:bg-bg transition-colors",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px] text-text-muted",children:"tag"}),a.label]},a.href))})]}),(0,d.jsxs)("section",{id:"quick-start",className:"rounded-2xl border border-border bg-bg-subtle p-6",children:[(0,d.jsx)("h2",{className:"text-xl font-semibold",children:a("quickStart")}),(0,d.jsxs)("ol",{className:"mt-4 grid grid-cols-1 md:grid-cols-2 gap-3 text-sm",children:[(0,d.jsxs)("li",{className:"rounded-lg border border-border p-3 bg-bg",children:[(0,d.jsx)("span",{className:"font-semibold",children:a("quickStartStep1Title")}),(0,d.jsxs)("p",{className:"text-text-muted mt-1",children:[a("quickStartStep1Prefix")," ",(0,d.jsx)("code",{className:"px-1 rounded bg-bg-subtle",children:"npx omniroute"})," ",a("quickStartStep1Middle")," ",(0,d.jsx)("code",{className:"px-1 rounded bg-bg-subtle",children:"npm start"}),"."]})]}),(0,d.jsxs)("li",{className:"rounded-lg border border-border p-3 bg-bg",children:[(0,d.jsx)("span",{className:"font-semibold",children:a("quickStartStep2Title")}),(0,d.jsx)("p",{className:"text-text-muted mt-1",children:a("quickStartStep2Text")})]}),(0,d.jsxs)("li",{className:"rounded-lg border border-border p-3 bg-bg",children:[(0,d.jsx)("span",{className:"font-semibold",children:a("quickStartStep3Title")}),(0,d.jsx)("p",{className:"text-text-muted mt-1",children:a("quickStartStep3Text")})]}),(0,d.jsxs)("li",{className:"rounded-lg border border-border p-3 bg-bg",children:[(0,d.jsx)("span",{className:"font-semibold",children:a("quickStartStep4Title")}),(0,d.jsxs)("p",{className:"text-text-muted mt-1",children:[a("quickStartStep4Prefix")," ",(0,d.jsx)("code",{className:"px-1 rounded bg-bg-subtle",children:"https://<host>/v1"}),"."," ",a("quickStartStep4Suffix")," ",(0,d.jsx)("code",{className:"px-1 rounded bg-bg-subtle",children:"gh/gpt-5.1-codex"}),"."]})]})]})]}),(0,d.jsxs)("section",{id:"features",className:"rounded-2xl border border-border bg-bg-subtle p-6",children:[(0,d.jsx)("h2",{className:"text-xl font-semibold",children:a("features")}),(0,d.jsx)("div",{className:"mt-4 grid grid-cols-1 md:grid-cols-2 gap-3",children:q.map(a=>(0,d.jsxs)("article",{className:"rounded-lg border border-border p-4 bg-bg flex gap-3",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[20px] text-primary shrink-0 mt-0.5",children:a.icon}),(0,d.jsxs)("div",{children:[(0,d.jsx)("h3",{className:"font-semibold text-sm",children:a.title}),(0,d.jsx)("p",{className:"text-sm text-text-muted mt-1",children:a.text})]})]},a.titleKey))})]}),(0,d.jsxs)("section",{id:"supported-providers",className:"rounded-2xl border border-border bg-bg-subtle p-6",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,d.jsxs)("div",{children:[(0,d.jsx)("h2",{className:"text-xl font-semibold",children:a("supportedProviders")}),(0,d.jsx)("p",{className:"text-sm text-text-muted mt-1",children:a("providersAcrossConnectionTypes",{count:b})})]}),(0,d.jsx)(e.default,{href:"/dashboard/providers",className:"px-3 py-2 rounded-lg border border-border text-sm hover:bg-bg transition-colors",children:a("manageProviders")})]}),(0,d.jsxs)("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-3",children:[(0,d.jsx)(j,{title:a("providerTypeFree"),providers:h.FREE_PROVIDERS,colorDot:"bg-green-500"}),(0,d.jsx)(j,{title:a("providerTypeOAuth"),providers:h.OAUTH_PROVIDERS,colorDot:"bg-blue-500"}),(0,d.jsx)(j,{title:a("providerTypeApiKey"),providers:h.APIKEY_PROVIDERS,colorDot:"bg-amber-500"})]})]}),(0,d.jsxs)("section",{id:"use-cases",className:"rounded-2xl border border-border bg-bg-subtle p-6",children:[(0,d.jsx)("h2",{className:"text-xl font-semibold",children:a("commonUseCases")}),(0,d.jsx)("div",{className:"mt-4 grid grid-cols-1 md:grid-cols-3 gap-3",children:r.map(a=>(0,d.jsxs)("article",{className:"rounded-lg border border-border p-4 bg-bg",children:[(0,d.jsx)("h3",{className:"font-semibold",children:a.title}),(0,d.jsx)("p",{className:"text-sm text-text-muted mt-2",children:a.text})]},a.titleKey))})]}),(0,d.jsxs)("section",{id:"client-compatibility",className:"rounded-2xl border border-border bg-bg-subtle p-6",children:[(0,d.jsx)("h2",{className:"text-xl font-semibold",children:a("clientCompatibility")}),(0,d.jsxs)("div",{className:"mt-4 grid grid-cols-1 md:grid-cols-2 gap-3 text-sm",children:[(0,d.jsxs)("article",{className:"rounded-lg border border-border p-4 bg-bg",children:[(0,d.jsx)("h3",{className:"font-semibold",children:a("clientCherryStudioTitle")}),(0,d.jsxs)("ul",{className:"mt-2 text-text-muted space-y-1",children:[(0,d.jsxs)("li",{children:[a("baseUrlLabel"),":"," ",(0,d.jsx)("code",{className:"px-1 rounded bg-bg-subtle",children:"https://<host>/v1"})]}),(0,d.jsxs)("li",{children:[a("chatEndpointLabel"),":"," ",(0,d.jsx)("code",{className:"px-1 rounded bg-bg-subtle",children:"/chat/completions"})]}),(0,d.jsxs)("li",{children:[a("modelRecommendationLabel")," (",(0,d.jsx)("code",{className:"px-1 rounded bg-bg-subtle",children:"gh/..."}),","," ",(0,d.jsx)("code",{className:"px-1 rounded bg-bg-subtle",children:"cc/..."}),")"]})]})]}),(0,d.jsxs)("article",{className:"rounded-lg border border-border p-4 bg-bg",children:[(0,d.jsx)("h3",{className:"font-semibold",children:a("clientCodexTitle")}),(0,d.jsxs)("ul",{className:"mt-2 text-text-muted space-y-1",children:[(0,d.jsxs)("li",{children:[a("clientCodexBullet1")," ",(0,d.jsx)("code",{className:"px-1 rounded bg-bg-subtle",children:"gh/"}),"."]}),(0,d.jsxs)("li",{children:[a("clientCodexBullet2")," ",(0,d.jsx)("code",{className:"px-1 rounded bg-bg-subtle",children:"/responses"}),"."]}),(0,d.jsxs)("li",{children:[a("clientCodexBullet3")," ",(0,d.jsx)("code",{className:"px-1 rounded bg-bg-subtle",children:"/chat/completions"}),"."]})]})]}),(0,d.jsxs)("article",{className:"rounded-lg border border-border p-4 bg-bg",children:[(0,d.jsx)("h3",{className:"font-semibold",children:a("clientCursorTitle")}),(0,d.jsxs)("ul",{className:"mt-2 text-text-muted space-y-1",children:[(0,d.jsxs)("li",{children:[a("clientCursorBullet1")," ",(0,d.jsx)("code",{className:"px-1 rounded bg-bg-subtle",children:"cu/"})," ",a("clientCursorBullet1Suffix")]}),(0,d.jsx)("li",{children:a("clientCursorBullet2")}),(0,d.jsx)("li",{children:a("supportsChat")})]})]}),(0,d.jsxs)("article",{className:"rounded-lg border border-border p-4 bg-bg",children:[(0,d.jsx)("h3",{className:"font-semibold",children:a("clientClaudeTitle")}),(0,d.jsxs)("ul",{className:"mt-2 text-text-muted space-y-1",children:[(0,d.jsxs)("li",{children:[a("clientClaudeBullet1Prefix")," ",(0,d.jsx)("code",{className:"px-1 rounded bg-bg-subtle",children:"cc/"})," ",a("clientClaudeBullet1Middle")," ",(0,d.jsx)("code",{className:"px-1 rounded bg-bg-subtle",children:"antigravity/"})," ",a("clientClaudeBullet1Suffix")]}),(0,d.jsx)("li",{children:a("oauthAutoRefresh")}),(0,d.jsx)("li",{children:a("fullStreaming")})]})]})]})]}),(0,d.jsxs)("section",{id:"protocols",className:"rounded-2xl border border-border bg-bg-subtle p-6",children:[(0,d.jsx)("h2",{className:"text-xl font-semibold",children:a("protocolsTitle")}),(0,d.jsx)("p",{className:"text-sm text-text-muted mt-2",children:a("protocolsDescription")}),(0,d.jsxs)("div",{className:"mt-4 grid grid-cols-1 lg:grid-cols-2 gap-4 text-sm",children:[(0,d.jsxs)("article",{className:"rounded-lg border border-border p-4 bg-bg",children:[(0,d.jsx)("h3",{className:"font-semibold",children:a("protocolMcpTitle")}),(0,d.jsx)("p",{className:"text-text-muted mt-1",children:a("protocolMcpDesc")}),(0,d.jsxs)("ol",{className:"mt-3 list-decimal list-inside space-y-1 text-text-muted",children:[(0,d.jsx)("li",{children:a("protocolMcpStep1")}),(0,d.jsx)("li",{children:a("protocolMcpStep2")}),(0,d.jsx)("li",{children:a("protocolMcpStep3")})]}),(0,d.jsx)("pre",{className:"mt-3 p-3 rounded-lg border border-border bg-bg overflow-x-auto text-xs",children:(0,d.jsx)("code",{children:"omniroute --mcp"})})]}),(0,d.jsxs)("article",{className:"rounded-lg border border-border p-4 bg-bg",children:[(0,d.jsx)("h3",{className:"font-semibold",children:a("protocolA2aTitle")}),(0,d.jsx)("p",{className:"text-text-muted mt-1",children:a("protocolA2aDesc")}),(0,d.jsxs)("ol",{className:"mt-3 list-decimal list-inside space-y-1 text-text-muted",children:[(0,d.jsx)("li",{children:a("protocolA2aStep1")}),(0,d.jsx)("li",{children:a("protocolA2aStep2")}),(0,d.jsx)("li",{children:a("protocolA2aStep3")})]}),(0,d.jsx)("pre",{className:"mt-3 p-3 rounded-lg border border-border bg-bg overflow-x-auto text-xs",children:(0,d.jsx)("code",{children:`GET /.well-known/agent.json
3
3
  POST /a2a (JSON-RPC: message/send | message/stream)`})})]})]}),(0,d.jsxs)("div",{className:"mt-4 rounded-lg border border-border p-4 bg-bg",children:[(0,d.jsx)("h3",{className:"font-semibold",children:a("protocolTroubleshootingTitle")}),(0,d.jsxs)("ul",{className:"mt-2 list-disc list-inside text-sm text-text-muted space-y-1",children:[(0,d.jsx)("li",{children:a("protocolTroubleshooting1")}),(0,d.jsx)("li",{children:a("protocolTroubleshooting2")}),(0,d.jsx)("li",{children:a("protocolTroubleshooting3")})]})]})]}),(0,d.jsxs)("section",{id:"api-reference",className:"rounded-2xl border border-border bg-bg-subtle p-6",children:[(0,d.jsx)("h2",{className:"text-xl font-semibold",children:a("apiReference")}),(0,d.jsx)("div",{className:"mt-4 overflow-x-auto",children:(0,d.jsxs)("table",{className:"w-full text-sm border-collapse",children:[(0,d.jsx)("thead",{children:(0,d.jsxs)("tr",{className:"border-b border-border",children:[(0,d.jsx)("th",{className:"text-left py-2 pr-4",children:a("method")}),(0,d.jsx)("th",{className:"text-left py-2 pr-4",children:a("path")}),(0,d.jsx)("th",{className:"text-left py-2",children:a("notes")})]})}),(0,d.jsx)("tbody",{children:c.map(a=>(0,d.jsxs)("tr",{className:"border-b border-border/60",children:[(0,d.jsx)("td",{className:"py-2 pr-4",children:(0,d.jsx)("code",{className:"px-1.5 py-0.5 rounded bg-bg text-xs font-semibold",children:a.method})}),(0,d.jsx)("td",{className:"py-2 pr-4 font-mono",children:a.path}),(0,d.jsx)("td",{className:"py-2 text-text-muted",children:a.note})]},a.path))})]})})]}),(0,d.jsxs)("section",{id:"model-prefixes",className:"rounded-2xl border border-border bg-bg-subtle p-6",children:[(0,d.jsx)("h2",{className:"text-xl font-semibold",children:a("modelPrefixes")}),(0,d.jsxs)("p",{className:"text-sm text-text-muted mt-2 mb-4",children:[a("modelPrefixesDescriptionStart")," ",(0,d.jsx)("code",{className:"px-1 rounded bg-bg",children:"gh/gpt-5.1-codex"})," ",a("modelPrefixesDescriptionEnd")]}),(0,d.jsx)("div",{className:"overflow-x-auto",children:(0,d.jsxs)("table",{className:"w-full text-sm border-collapse",children:[(0,d.jsx)("thead",{children:(0,d.jsxs)("tr",{className:"border-b border-border",children:[(0,d.jsx)("th",{className:"text-left py-2 pr-4",children:a("prefix")}),(0,d.jsx)("th",{className:"text-left py-2 pr-4",children:a("provider")}),(0,d.jsx)("th",{className:"text-left py-2",children:a("type")})]})}),(0,d.jsx)("tbody",{children:u.map(b=>{var c;return(0,d.jsxs)("tr",{className:"border-b border-border/60",children:[(0,d.jsx)("td",{className:"py-2 pr-4 font-mono",children:(0,d.jsxs)("code",{className:"px-1.5 py-0.5 rounded bg-bg",children:[b.alias,"/"]})}),(0,d.jsx)("td",{className:"py-2 pr-4",children:b.name}),(0,d.jsx)("td",{className:"py-2",children:(0,d.jsxs)("span",{className:`inline-flex items-center gap-1 text-xs ${"free"===b.type?"text-green-500":"oauth"===b.type?"text-blue-500":"text-amber-500"}`,children:[(0,d.jsx)("span",{className:`size-1.5 rounded-full ${"free"===b.type?"bg-green-500":"oauth"===b.type?"bg-blue-500":"bg-amber-500"}`}),(c=b.type,"free"===c?a("providerTypeFree"):"oauth"===c?a("providerTypeOAuth"):a("providerTypeApiKey"))]})})]},b.id)})})]})})]}),(0,d.jsxs)("section",{id:"management-api",className:"rounded-2xl border border-border bg-bg-subtle p-6",children:[(0,d.jsx)("h2",{className:"text-xl font-semibold",children:a("managementApiReference")}),(0,d.jsx)("p",{className:"text-sm text-text-muted mt-2",children:a("managementApiDescription")}),(0,d.jsx)("div",{className:"mt-4 overflow-x-auto",children:(0,d.jsxs)("table",{className:"w-full text-sm border-collapse",children:[(0,d.jsx)("thead",{children:(0,d.jsxs)("tr",{className:"border-b border-border",children:[(0,d.jsx)("th",{className:"text-left py-2 pr-4",children:a("method")}),(0,d.jsx)("th",{className:"text-left py-2 pr-4",children:a("path")}),(0,d.jsx)("th",{className:"text-left py-2",children:a("notes")})]})}),(0,d.jsx)("tbody",{children:i.map(a=>(0,d.jsxs)("tr",{className:"border-b border-border/60",children:[(0,d.jsx)("td",{className:"py-2 pr-4",children:(0,d.jsx)("code",{className:"px-1.5 py-0.5 rounded bg-bg text-xs font-semibold",children:a.method})}),(0,d.jsx)("td",{className:"py-2 pr-4 font-mono",children:a.path}),(0,d.jsx)("td",{className:"py-2 text-text-muted",children:a.note})]},`${a.method}:${a.path}`))})]})})]}),(0,d.jsxs)("section",{id:"troubleshooting",className:"rounded-2xl border border-border bg-bg-subtle p-6",children:[(0,d.jsx)("h2",{className:"text-xl font-semibold",children:a("troubleshooting")}),(0,d.jsx)("ul",{className:"mt-4 list-disc list-inside text-sm text-text-muted space-y-2",children:s.map(a=>(0,d.jsx)("li",{children:a},a))})]})]})})}]),c()}catch(a){c(a)}},!1),665554,a=>{a.n(a.i(831575))}];
4
4
 
@@ -1,4 +1,4 @@
1
- module.exports=[920226,a=>{"use strict";var b=a.i(572131);let c=a=>{let b,c=new Set,d=(a,d)=>{let e="function"==typeof a?a(b):a;if(!Object.is(e,b)){let a=b;b=(null!=d?d:"object"!=typeof e||null===e)?e:Object.assign({},b,e),c.forEach(c=>c(b,a))}},e=()=>b,f={setState:d,getState:e,getInitialState:()=>g,subscribe:a=>(c.add(a),()=>c.delete(a))},g=b=a(d,e,f);return f},d=a=>{let d=a?c(a):c,e=a=>(function(a,c=a=>a){let d=b.default.useSyncExternalStore(a.subscribe,b.default.useCallback(()=>c(a.getState()),[a,c]),b.default.useCallback(()=>c(a.getInitialState()),[a,c]));return b.default.useDebugValue(d),d})(d,a);return Object.assign(e,d),e};a.s(["create",0,a=>a?d(a):d],920226)},862435,a=>{"use strict";let b=a=>c=>{try{let d=a(c);if(d instanceof Promise)return d;return{then:a=>b(a)(d),catch(a){return this}}}catch(a){return{then(a){return this},catch:c=>b(c)(a)}}};a.s(["persist",0,(a,c)=>(d,e,f)=>{let g,h={storage:function(a){let b;try{b=a()}catch(a){return}return{getItem:a=>{var c;let d=a=>null===a?null:JSON.parse(a,void 0),e=null!=(c=b.getItem(a))?c:null;return e instanceof Promise?e.then(d):d(e)},setItem:(a,c)=>b.setItem(a,JSON.stringify(c,void 0)),removeItem:a=>b.removeItem(a)}}(()=>window.localStorage),partialize:a=>a,version:0,merge:(a,b)=>({...b,...a}),...c},i=!1,j=0,k=new Set,l=new Set,m=h.storage;if(!m)return a((...a)=>{console.warn(`[zustand persist middleware] Unable to update item '${h.name}', the given storage is currently unavailable.`),d(...a)},e,f);let n=()=>{let a=h.partialize({...e()});return m.setItem(h.name,{state:a,version:h.version})},o=f.setState;f.setState=(a,b)=>(o(a,b),n());let p=a((...a)=>(d(...a),n()),e,f);f.getInitialState=()=>p;let q=()=>{var a,c;if(!m)return;let f=++j;i=!1,k.forEach(a=>{var b;return a(null!=(b=e())?b:p)});let o=(null==(c=h.onRehydrateStorage)?void 0:c.call(h,null!=(a=e())?a:p))||void 0;return b(m.getItem.bind(m))(h.name).then(a=>{if(a)if("number"!=typeof a.version||a.version===h.version)return[!1,a.state];else{if(h.migrate){let b=h.migrate(a.state,a.version);return b instanceof Promise?b.then(a=>[!0,a]):[!0,b]}console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}return[!1,void 0]}).then(a=>{var b;if(f!==j)return;let[c,i]=a;if(d(g=h.merge(i,null!=(b=e())?b:p),!0),c)return n()}).then(()=>{f===j&&(null==o||o(e(),void 0),g=e(),i=!0,l.forEach(a=>a(g)))}).catch(a=>{f===j&&(null==o||o(void 0,a))})};return f.persist={setOptions:a=>{h={...h,...a},a.storage&&(m=a.storage)},clearStorage:()=>{null==m||m.removeItem(h.name)},getOptions:()=>h,rehydrate:()=>q(),hasHydrated:()=>i,onHydrate:a=>(k.add(a),()=>{k.delete(a)}),onFinishHydration:a=>(l.add(a),()=>{l.delete(a)})},h.skipHydration||q(),g||p}])},137849,a=>{"use strict";a.s(["default",0,{name:"omniroute",version:"3.4.3",description:"Smart AI Router with auto fallback — route to FREE & cheap models, zero downtime. Works with Cursor, Cline, Claude Desktop, Codex, and any OpenAI-compatible tool.",type:"module",bin:{omniroute:"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},files:["bin/","app/","open-sse/mcp-server/","src/shared/contracts/","scripts/postinstall.mjs","scripts/native-binary-compat.mjs","README.md","LICENSE"],workspaces:["open-sse"],engines:{node:">=18.0.0 <24.0.0"},keywords:["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],license:"MIT",author:"diegosouzapw",repository:{type:"git",url:"https://github.com/diegosouzapw/OmniRoute"},homepage:"https://omniroute.online",scripts:{dev:"node scripts/run-next.mjs dev",build:"node scripts/build-next-isolated.mjs","build:cli":"node scripts/prepublish.mjs",start:"node scripts/run-next.mjs start",lint:"eslint .","electron:dev":'concurrently "npm run dev" "wait-on http://localhost:20128 && cd electron && npm run dev"',"electron:build":"npm run build && cd electron && npm run build","electron:build:win":"npm run build && cd electron && npm run build:win","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:linux":"npm run build && cd electron && npm run build:linux",test:"node --import tsx/esm --test tests/unit/*.test.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","check:cycles":"node scripts/check-cycles.mjs","check:route-validation:t06":"node scripts/check-route-validation.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","check:docs-sync":"node scripts/check-docs-sync.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","test:coverage":"c8 --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 55 --lines 55 --functions 55 --branches 60 node --import tsx/esm --test tests/unit/*.test.mjs","test:coverage:legacy":"c8 --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx/esm --test tests/unit/*.test.mjs","coverage:report":"c8 report --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","coverage:report:legacy":"c8 report --exclude=open-sse --reporter=text --reporter=text-summary","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e",check:"npm run lint && npm run test",prepublishOnly:"npm run build:cli",postinstall:"node scripts/postinstall.mjs",prepare:"husky","system-info":"node scripts/system-info.mjs"},dependencies:{"@lobehub/icons":"^5.0.1","@modelcontextprotocol/sdk":"^1.27.1","@monaco-editor/react":"^4.7.0","@swc/helpers":"0.5.19",bcryptjs:"^3.0.3","better-sqlite3":"^12.6.2",bottleneck:"^2.19.5",dompurify:"^3.3.2",express:"^5.2.1","fetch-socks":"^1.3.2","http-proxy-middleware":"^3.0.5","https-proxy-agent":"^8.0.0",jose:"^6.1.3","js-yaml":"^4.1.0",lowdb:"^7.0.1","monaco-editor":"^0.55.1",next:"^16.0.10","next-intl":"^4.8.3","node-machine-id":"^1.1.12",open:"^11.0.0",ora:"^9.1.0",pino:"^10.3.1","pino-pretty":"^13.1.3",react:"19.2.4","react-dom":"19.2.4",recharts:"^3.7.0",selfsigned:"^5.5.0",tsx:"^4.21.0",undici:"^7.19.2",uuid:"^13.0.0","wreq-js":"^2.0.1",yazl:"^3.3.1",zod:"^4.3.6",zustand:"^5.0.10"},optionalDependencies:{keytar:"^7.9.0"},devDependencies:{"@playwright/test":"^1.58.2","@tailwindcss/postcss":"^4.1.18","@testing-library/jest-dom":"^6.9.1","@testing-library/react":"^16.3.2","@types/bcryptjs":"^3.0.0","@types/better-sqlite3":"^7.6.13","@types/keytar":"^4.4.0","@types/node":"^25.2.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1",c8:"^11.0.0",concurrently:"^9.2.1","cross-env":"^10.1.0",eslint:"^9.39.2","eslint-config-next":"^16.0.10",husky:"^9.1.7",jsdom:"^29.0.1","lint-staged":"^16.2.7",prettier:"^3.8.1","prop-types":"^15.8.1",tailwindcss:"^4",typescript:"^5.9.3","typescript-eslint":"^8.56.0",vitest:"^4.0.18","wait-on":"^9.0.4"},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},pnpm:{onlyBuiltDependencies:["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},overrides:{dompurify:"^3.3.2","path-to-regexp":"^8.4.0",react:"$react","react-dom":"$react-dom"}}])},843314,a=>a.a(async(b,c)=>{try{var d=a.i(677850),e=b([d]);[d]=e.then?(await e)():e;let f=d.z.object({id:d.z.string().min(1),alias:d.z.string().min(1).optional(),name:d.z.string().min(1),icon:d.z.string().min(1),color:d.z.string().regex(/^#[0-9A-Fa-f]{6}$/,"Must be a valid hex color (#RRGGBB)"),textIcon:d.z.string().optional(),website:d.z.string().url().optional(),passthroughModels:d.z.boolean().optional(),deprecated:d.z.boolean().optional(),deprecationReason:d.z.string().optional(),hasFree:d.z.boolean().optional(),freeNote:d.z.string().optional(),authHint:d.z.string().optional(),apiHint:d.z.string().optional()}),g=d.z.record(d.z.string(),f);a.s(["validateProviders",0,function(a,b){let c=g.safeParse(a);if(!c.success){let a=c.error.issues.map(a=>` ${a.path.join(".")}: ${a.message}`).join("\n");throw console.error(`[PROVIDER VALIDATION] ${b} has invalid entries:
1
+ module.exports=[920226,a=>{"use strict";var b=a.i(572131);let c=a=>{let b,c=new Set,d=(a,d)=>{let e="function"==typeof a?a(b):a;if(!Object.is(e,b)){let a=b;b=(null!=d?d:"object"!=typeof e||null===e)?e:Object.assign({},b,e),c.forEach(c=>c(b,a))}},e=()=>b,f={setState:d,getState:e,getInitialState:()=>g,subscribe:a=>(c.add(a),()=>c.delete(a))},g=b=a(d,e,f);return f},d=a=>{let d=a?c(a):c,e=a=>(function(a,c=a=>a){let d=b.default.useSyncExternalStore(a.subscribe,b.default.useCallback(()=>c(a.getState()),[a,c]),b.default.useCallback(()=>c(a.getInitialState()),[a,c]));return b.default.useDebugValue(d),d})(d,a);return Object.assign(e,d),e};a.s(["create",0,a=>a?d(a):d],920226)},862435,a=>{"use strict";let b=a=>c=>{try{let d=a(c);if(d instanceof Promise)return d;return{then:a=>b(a)(d),catch(a){return this}}}catch(a){return{then(a){return this},catch:c=>b(c)(a)}}};a.s(["persist",0,(a,c)=>(d,e,f)=>{let g,h={storage:function(a){let b;try{b=a()}catch(a){return}return{getItem:a=>{var c;let d=a=>null===a?null:JSON.parse(a,void 0),e=null!=(c=b.getItem(a))?c:null;return e instanceof Promise?e.then(d):d(e)},setItem:(a,c)=>b.setItem(a,JSON.stringify(c,void 0)),removeItem:a=>b.removeItem(a)}}(()=>window.localStorage),partialize:a=>a,version:0,merge:(a,b)=>({...b,...a}),...c},i=!1,j=0,k=new Set,l=new Set,m=h.storage;if(!m)return a((...a)=>{console.warn(`[zustand persist middleware] Unable to update item '${h.name}', the given storage is currently unavailable.`),d(...a)},e,f);let n=()=>{let a=h.partialize({...e()});return m.setItem(h.name,{state:a,version:h.version})},o=f.setState;f.setState=(a,b)=>(o(a,b),n());let p=a((...a)=>(d(...a),n()),e,f);f.getInitialState=()=>p;let q=()=>{var a,c;if(!m)return;let f=++j;i=!1,k.forEach(a=>{var b;return a(null!=(b=e())?b:p)});let o=(null==(c=h.onRehydrateStorage)?void 0:c.call(h,null!=(a=e())?a:p))||void 0;return b(m.getItem.bind(m))(h.name).then(a=>{if(a)if("number"!=typeof a.version||a.version===h.version)return[!1,a.state];else{if(h.migrate){let b=h.migrate(a.state,a.version);return b instanceof Promise?b.then(a=>[!0,a]):[!0,b]}console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}return[!1,void 0]}).then(a=>{var b;if(f!==j)return;let[c,i]=a;if(d(g=h.merge(i,null!=(b=e())?b:p),!0),c)return n()}).then(()=>{f===j&&(null==o||o(e(),void 0),g=e(),i=!0,l.forEach(a=>a(g)))}).catch(a=>{f===j&&(null==o||o(void 0,a))})};return f.persist={setOptions:a=>{h={...h,...a},a.storage&&(m=a.storage)},clearStorage:()=>{null==m||m.removeItem(h.name)},getOptions:()=>h,rehydrate:()=>q(),hasHydrated:()=>i,onHydrate:a=>(k.add(a),()=>{k.delete(a)}),onFinishHydration:a=>(l.add(a),()=>{l.delete(a)})},h.skipHydration||q(),g||p}])},137849,a=>{"use strict";a.s(["default",0,{name:"omniroute",version:"3.4.4",description:"Smart AI Router with auto fallback — route to FREE & cheap models, zero downtime. Works with Cursor, Cline, Claude Desktop, Codex, and any OpenAI-compatible tool.",type:"module",bin:{omniroute:"bin/omniroute.mjs","omniroute-reset-password":"bin/reset-password.mjs"},files:["bin/","app/","open-sse/mcp-server/","src/shared/contracts/","scripts/postinstall.mjs","scripts/native-binary-compat.mjs","README.md","LICENSE"],workspaces:["open-sse"],engines:{node:">=18.0.0 <24.0.0"},keywords:["ai","router","proxy","openai","claude","anthropic","gemini","fallback","cursor","cline","codex","llm","auto-fallback"],license:"MIT",author:"diegosouzapw",repository:{type:"git",url:"https://github.com/diegosouzapw/OmniRoute"},homepage:"https://omniroute.online",scripts:{dev:"node scripts/run-next.mjs dev",build:"node scripts/build-next-isolated.mjs","build:cli":"node scripts/prepublish.mjs",start:"node scripts/run-next.mjs start",lint:"eslint .","electron:dev":'concurrently "npm run dev" "wait-on http://localhost:20128 && cd electron && npm run dev"',"electron:build":"npm run build && cd electron && npm run build","electron:build:win":"npm run build && cd electron && npm run build:win","electron:build:mac":"npm run build && cd electron && npm run build:mac","electron:build:linux":"npm run build && cd electron && npm run build:linux",test:"node --import tsx/esm --test tests/unit/*.test.mjs","test:unit":"node --import tsx/esm --test tests/unit/*.test.mjs","test:plan3":"node --import tsx/esm --test tests/unit/plan3-p0.test.mjs","test:fixes":"node --import tsx/esm --test tests/unit/fixes-p1.test.mjs","test:security":"node --import tsx/esm --test tests/unit/security-fase01.test.mjs","check:cycles":"node scripts/check-cycles.mjs","check:route-validation:t06":"node scripts/check-route-validation.mjs","check:any-budget:t11":"node scripts/check-t11-any-budget.mjs","check:docs-sync":"node scripts/check-docs-sync.mjs","typecheck:core":"tsc --pretty false -p tsconfig.typecheck-core.json","typecheck:noimplicit:core":"tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json","test:integration":"node --import tsx/esm --test tests/integration/*.test.mjs","test:e2e":"node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts","test:protocols:e2e":"node scripts/run-protocol-clients-tests.mjs","test:vitest":"vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts","test:ecosystem":"node scripts/run-ecosystem-tests.mjs","test:coverage":"c8 --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 55 --lines 55 --functions 55 --branches 60 node --import tsx/esm --test tests/unit/*.test.mjs","test:coverage:legacy":"c8 --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx/esm --test tests/unit/*.test.mjs","coverage:report":"c8 report --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov","coverage:report:legacy":"c8 report --exclude=open-sse --reporter=text --reporter=text-summary","test:all":"npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e",check:"npm run lint && npm run test",prepublishOnly:"npm run build:cli",postinstall:"node scripts/postinstall.mjs",prepare:"husky","system-info":"node scripts/system-info.mjs"},dependencies:{"@lobehub/icons":"^5.0.1","@modelcontextprotocol/sdk":"^1.27.1","@monaco-editor/react":"^4.7.0","@swc/helpers":"0.5.19",bcryptjs:"^3.0.3","better-sqlite3":"^12.6.2",bottleneck:"^2.19.5",dompurify:"^3.3.2",express:"^5.2.1","fetch-socks":"^1.3.2","http-proxy-middleware":"^3.0.5","https-proxy-agent":"^8.0.0",jose:"^6.1.3","js-yaml":"^4.1.0",lowdb:"^7.0.1","monaco-editor":"^0.55.1",next:"^16.0.10","next-intl":"^4.8.3","node-machine-id":"^1.1.12",open:"^11.0.0",ora:"^9.1.0",pino:"^10.3.1","pino-pretty":"^13.1.3",react:"19.2.4","react-dom":"19.2.4",recharts:"^3.7.0",selfsigned:"^5.5.0",tsx:"^4.21.0",undici:"^7.19.2",uuid:"^13.0.0","wreq-js":"^2.0.1",yazl:"^3.3.1",zod:"^4.3.6",zustand:"^5.0.10"},optionalDependencies:{keytar:"^7.9.0"},devDependencies:{"@playwright/test":"^1.58.2","@tailwindcss/postcss":"^4.1.18","@testing-library/jest-dom":"^6.9.1","@testing-library/react":"^16.3.2","@types/bcryptjs":"^3.0.0","@types/better-sqlite3":"^7.6.13","@types/keytar":"^4.4.0","@types/node":"^25.2.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1",c8:"^11.0.0",concurrently:"^9.2.1","cross-env":"^10.1.0",eslint:"^9.39.2","eslint-config-next":"^16.0.10",husky:"^9.1.7",jsdom:"^29.0.1","lint-staged":"^16.2.7",prettier:"^3.8.1","prop-types":"^15.8.1",tailwindcss:"^4",typescript:"^5.9.3","typescript-eslint":"^8.56.0",vitest:"^4.0.18","wait-on":"^9.0.4"},"lint-staged":{"*.{js,jsx,ts,tsx,mjs}":["prettier --write","eslint --fix --no-error-on-unmatched-pattern"],"*.{json,md,yml,yaml,css}":["prettier --write"]},pnpm:{onlyBuiltDependencies:["@parcel/watcher","@swc/core","better-sqlite3","esbuild","omniroute","sharp"]},overrides:{dompurify:"^3.3.2","path-to-regexp":"^8.4.0",react:"$react","react-dom":"$react-dom"}}])},843314,a=>a.a(async(b,c)=>{try{var d=a.i(677850),e=b([d]);[d]=e.then?(await e)():e;let f=d.z.object({id:d.z.string().min(1),alias:d.z.string().min(1).optional(),name:d.z.string().min(1),icon:d.z.string().min(1),color:d.z.string().regex(/^#[0-9A-Fa-f]{6}$/,"Must be a valid hex color (#RRGGBB)"),textIcon:d.z.string().optional(),website:d.z.string().url().optional(),passthroughModels:d.z.boolean().optional(),deprecated:d.z.boolean().optional(),deprecationReason:d.z.string().optional(),hasFree:d.z.boolean().optional(),freeNote:d.z.string().optional(),authHint:d.z.string().optional(),apiHint:d.z.string().optional()}),g=d.z.record(d.z.string(),f);a.s(["validateProviders",0,function(a,b){let c=g.safeParse(a);if(!c.success){let a=c.error.issues.map(a=>` ${a.path.join(".")}: ${a.message}`).join("\n");throw console.error(`[PROVIDER VALIDATION] ${b} has invalid entries:
2
2
  ${a}`),Error(`Provider validation failed for ${b}`)}}]),c()}catch(a){c(a)}},!1),662073,a=>a.a(async(b,c)=>{try{var d=a.i(843314),e=b([d]);[d]=e.then?(await e)():e;let f={qoder:{id:"qoder",alias:"if",name:"Qoder AI",icon:"water_drop",color:"#6366F1"},qwen:{id:"qwen",alias:"qw",name:"Qwen Code",icon:"psychology",color:"#10B981"},"gemini-cli":{id:"gemini-cli",alias:"gemini-cli",name:"Gemini CLI",icon:"terminal",color:"#4285F4",deprecated:!0,deprecationReason:"Google restricts third-party OAuth usage for Gemini CLI (Mar 2026). Pro models require paid plans. Use 'gemini' (API key) provider instead."},kiro:{id:"kiro",alias:"kr",name:"Kiro AI",icon:"psychology_alt",color:"#FF6B35"}},g={claude:{id:"claude",alias:"cc",name:"Claude Code",icon:"smart_toy",color:"#D97757"},antigravity:{id:"antigravity",alias:void 0,name:"Antigravity",icon:"rocket_launch",color:"#F59E0B"},codex:{id:"codex",alias:"cx",name:"OpenAI Codex",icon:"code",color:"#3B82F6"},github:{id:"github",alias:"gh",name:"GitHub Copilot",icon:"code",color:"#333333"},cursor:{id:"cursor",alias:"cu",name:"Cursor IDE",icon:"edit_note",color:"#00D4AA"},"kimi-coding":{id:"kimi-coding",alias:"kmc",name:"Kimi Coding",icon:"psychology",color:"#1E40AF",textIcon:"KC"},kilocode:{id:"kilocode",alias:"kc",name:"Kilo Code",icon:"code",color:"#FF6B35",textIcon:"KC"},cline:{id:"cline",alias:"cl",name:"Cline",icon:"smart_toy",color:"#5B9BD5",textIcon:"CL"}},h={openrouter:{id:"openrouter",alias:"openrouter",name:"OpenRouter",icon:"router",color:"#F97316",textIcon:"OR",passthroughModels:!0,website:"https://openrouter.ai"},glm:{id:"glm",alias:"glm",name:"GLM Coding",icon:"code",color:"#2563EB",textIcon:"GL",website:"https://open.bigmodel.cn"},"bailian-coding-plan":{id:"bailian-coding-plan",alias:"bcp",name:"Alibaba Coding Plan",icon:"code",color:"#FF6A00",textIcon:"BCP",website:"https://www.alibabacloud.com/help/en/model-studio/coding-plan"},kimi:{id:"kimi",alias:"kimi",name:"Kimi",icon:"psychology",color:"#1E3A8A",textIcon:"KM",website:"https://kimi.moonshot.cn"},"kimi-coding-apikey":{id:"kimi-coding-apikey",alias:"kmca",name:"Kimi Coding (API Key)",icon:"psychology",color:"#1E40AF",textIcon:"KC",website:"https://kimi.com"},minimax:{id:"minimax",alias:"minimax",name:"Minimax Coding",icon:"memory",color:"#7C3AED",textIcon:"MM",website:"https://www.minimaxi.com"},"minimax-cn":{id:"minimax-cn",alias:"minimax-cn",name:"Minimax (China)",icon:"memory",color:"#DC2626",textIcon:"MC",website:"https://www.minimaxi.com"},alicode:{id:"alicode",alias:"alicode",name:"Alibaba",icon:"cloud",color:"#FF6A00",textIcon:"ALi",website:"https://bailian.console.aliyun.com"},"alicode-intl":{id:"alicode-intl",alias:"alicode-intl",name:"Alibaba Intl",icon:"cloud",color:"#FF6A00",textIcon:"ALi",website:"https://modelstudio.console.alibabacloud.com"},openai:{id:"openai",alias:"openai",name:"OpenAI",icon:"auto_awesome",color:"#10A37F",textIcon:"OA",website:"https://platform.openai.com"},anthropic:{id:"anthropic",alias:"anthropic",name:"Anthropic",icon:"smart_toy",color:"#D97757",textIcon:"AN",website:"https://console.anthropic.com"},gemini:{id:"gemini",alias:"gemini",name:"Gemini (Google AI Studio)",icon:"diamond",color:"#4285F4",textIcon:"GE",website:"https://ai.google.dev",hasFree:!0,freeNote:"Free forever: 1,500 req/day for Gemini 2.5 Flash — no credit card, get key at aistudio.google.com"},deepseek:{id:"deepseek",alias:"ds",name:"DeepSeek",icon:"bolt",color:"#4D6BFE",textIcon:"DS",website:"https://deepseek.com"},groq:{id:"groq",alias:"groq",name:"Groq",icon:"speed",color:"#F55036",textIcon:"GQ",website:"https://groq.com",hasFree:!0,freeNote:"Free tier: 30 RPM / 14.4K RPD — no credit card"},blackbox:{id:"blackbox",alias:"bb",name:"Blackbox AI",icon:"view_in_ar",color:"#1A1A2E",textIcon:"BB",website:"https://blackbox.ai"},xai:{id:"xai",alias:"xai",name:"xAI (Grok)",icon:"auto_awesome",color:"#1DA1F2",textIcon:"XA",website:"https://x.ai"},mistral:{id:"mistral",alias:"mistral",name:"Mistral",icon:"air",color:"#FF7000",textIcon:"MI",website:"https://mistral.ai"},perplexity:{id:"perplexity",alias:"pplx",name:"Perplexity",icon:"search",color:"#20808D",textIcon:"PP",website:"https://www.perplexity.ai"},together:{id:"together",alias:"together",name:"Together AI",icon:"group_work",color:"#0F6FFF",textIcon:"TG",website:"https://www.together.ai",hasFree:!0,freeNote:"$25 signup credits + 3 permanently free models: Llama 3.3 70B, Vision, DeepSeek-R1 distill"},fireworks:{id:"fireworks",alias:"fireworks",name:"Fireworks AI",icon:"local_fire_department",color:"#7B2EF2",textIcon:"FW",website:"https://fireworks.ai"},cerebras:{id:"cerebras",alias:"cerebras",name:"Cerebras",icon:"memory",color:"#FF4F00",textIcon:"CB",website:"https://inference.cerebras.ai",hasFree:!0,freeNote:"Free: 1M tokens/day, 60K TPM — world's fastest inference"},cohere:{id:"cohere",alias:"cohere",name:"Cohere",icon:"hub",color:"#39594D",textIcon:"CO",website:"https://cohere.com"},nvidia:{id:"nvidia",alias:"nvidia",name:"NVIDIA NIM",icon:"developer_board",color:"#76B900",textIcon:"NV",website:"https://build.nvidia.com",hasFree:!0,freeNote:"Free dev access: ~40 RPM, 70+ models (Kimi K2.5, GLM 4.7, DeepSeek V3.2...)"},nebius:{id:"nebius",alias:"nebius",name:"Nebius AI",icon:"cloud",color:"#6C5CE7",textIcon:"NB",website:"https://nebius.com"},siliconflow:{id:"siliconflow",alias:"siliconflow",name:"SiliconFlow",icon:"cloud_queue",color:"#5B6EF5",textIcon:"SF",website:"https://cloud.siliconflow.com"},hyperbolic:{id:"hyperbolic",alias:"hyp",name:"Hyperbolic",icon:"bolt",color:"#00D4FF",textIcon:"HY",website:"https://hyperbolic.xyz"},deepgram:{id:"deepgram",alias:"dg",name:"Deepgram",icon:"mic",color:"#13EF93",textIcon:"DG",website:"https://deepgram.com"},assemblyai:{id:"assemblyai",alias:"aai",name:"AssemblyAI",icon:"record_voice_over",color:"#0062FF",textIcon:"AA",website:"https://assemblyai.com"},nanobanana:{id:"nanobanana",alias:"nb",name:"NanoBanana",icon:"image",color:"#FFD700",textIcon:"NB",website:"https://nanobananaapi.ai"},"ollama-cloud":{id:"ollama-cloud",alias:"ollamacloud",name:"Ollama Cloud",icon:"cloud",color:"#58A6FF",textIcon:"OC",website:"https://ollama.com/settings/api-keys"},elevenlabs:{id:"elevenlabs",alias:"el",name:"ElevenLabs",icon:"record_voice_over",color:"#6C47FF",textIcon:"EL",website:"https://elevenlabs.io"},cartesia:{id:"cartesia",alias:"cartesia",name:"Cartesia",icon:"spatial_audio",color:"#FF4F8B",textIcon:"CA",website:"https://cartesia.ai"},playht:{id:"playht",alias:"playht",name:"PlayHT",icon:"play_circle",color:"#00B4D8",textIcon:"PH",website:"https://play.ht"},inworld:{id:"inworld",alias:"inworld",name:"Inworld",icon:"voice_chat",color:"#7B2EF2",textIcon:"IW",website:"https://inworld.ai"},sdwebui:{id:"sdwebui",alias:"sdwebui",name:"SD WebUI",icon:"brush",color:"#FF7043",textIcon:"SD",website:"https://github.com/AUTOMATIC1111/stable-diffusion-webui"},comfyui:{id:"comfyui",alias:"comfyui",name:"ComfyUI",icon:"account_tree",color:"#4CAF50",textIcon:"CF",website:"https://github.com/comfyanonymous/ComfyUI"},huggingface:{id:"huggingface",alias:"hf",name:"HuggingFace",icon:"face",color:"#FFD21E",textIcon:"HF",website:"https://huggingface.co",hasFree:!0,freeNote:"Free Inference API for thousands of models (Whisper, VITS, SDXL…)"},synthetic:{id:"synthetic",alias:"synthetic",name:"Synthetic",icon:"verified_user",color:"#6366F1",textIcon:"SY",website:"https://synthetic.new",passthroughModels:!0},"kilo-gateway":{id:"kilo-gateway",alias:"kg",name:"Kilo Gateway",icon:"hub",color:"#617A91",textIcon:"KG",website:"https://kilo.ai",passthroughModels:!0},vertex:{id:"vertex",alias:"vertex",name:"Vertex AI",icon:"cloud",color:"#4285F4",textIcon:"VA",website:"https://cloud.google.com/vertex-ai",authHint:"Provide Service Account JSON or OAuth access_token"},zai:{id:"zai",alias:"zai",name:"Z.AI",icon:"psychology",color:"#2563EB",textIcon:"ZA",website:"https://open.bigmodel.cn",apiHint:"API key from https://open.bigmodel.cn/usercenter/apikeys"},"perplexity-search":{id:"perplexity-search",alias:"pplx-search",name:"Perplexity Search",icon:"search",color:"#20808D",textIcon:"PS",website:"https://docs.perplexity.ai/guides/search-quickstart",authHint:"Same API key as Perplexity (pplx-...)"},"serper-search":{id:"serper-search",alias:"serper-search",name:"Serper Search",icon:"search",color:"#4285F4",textIcon:"SP",website:"https://serper.dev",authHint:"API key from serper.dev dashboard"},"brave-search":{id:"brave-search",alias:"brave-search",name:"Brave Search",icon:"travel_explore",color:"#FB542B",textIcon:"BR",website:"https://brave.com/search/api",authHint:"Subscription token from Brave Search API dashboard"},"exa-search":{id:"exa-search",alias:"exa-search",name:"Exa Search",icon:"neurology",color:"#1E40AF",textIcon:"EX",website:"https://exa.ai",authHint:"API key from dashboard.exa.ai"},"tavily-search":{id:"tavily-search",alias:"tavily-search",name:"Tavily Search",icon:"manage_search",color:"#5B4FDB",textIcon:"TV",website:"https://tavily.com",authHint:"API key from app.tavily.com (format: tvly-...)"},"opencode-zen":{id:"opencode-zen",alias:"opencode-zen",name:"OpenCode Zen",icon:"opencode",color:"#6366f1",website:"https://opencode.ai/zen"},"opencode-go":{id:"opencode-go",alias:"opencode-go",name:"OpenCode Go",icon:"opencode",color:"#6366f1",website:"https://opencode.ai/zen/go"},alibaba:{id:"alibaba",alias:"ali",name:"Alibaba Cloud (DashScope)",icon:"cloud_queue",color:"#FF6600",textIcon:"AL",website:"https://dashscope-intl.aliyuncs.com",hasFree:!1},longcat:{id:"longcat",alias:"lc",name:"LongCat AI",icon:"auto_awesome",color:"#FF6B9D",textIcon:"LC",website:"https://longcat.chat",hasFree:!0,freeNote:"50M tokens/day (Flash-Lite) + 500K/day (Chat/Thinking) — 100% free while public beta"},pollinations:{id:"pollinations",alias:"pol",name:"Pollinations AI",icon:"local_florist",color:"#4CAF50",textIcon:"PO",website:"https://pollinations.ai",hasFree:!0,freeNote:"No API key needed — access GPT-5, Claude, Gemini, DeepSeek V3, Llama 4 free (1 req/15s)"},puter:{id:"puter",alias:"pu",name:"Puter AI",icon:"cloud_circle",color:"#6366F1",textIcon:"PU",website:"https://puter.com",hasFree:!0,freeNote:"500+ models (GPT-5, Claude Opus 4, Gemini 3 Pro, Grok 4, DeepSeek V3...) — Users pay via free Puter account",passthroughModels:!0,authHint:"Get token at puter.com/dashboard → Copy Auth Token"},"cloudflare-ai":{id:"cloudflare-ai",alias:"cf",name:"Cloudflare Workers AI",icon:"cloud",color:"#F48120",textIcon:"CF",website:"https://developers.cloudflare.com/workers-ai/",hasFree:!0,freeNote:"Free 10K Neurons/day: ~150 LLM responses or 500s Whisper audio — edge inference globally",authHint:"Requires API Token AND Account ID (found at dash.cloudflare.com)"},scaleway:{id:"scaleway",alias:"scw",name:"Scaleway AI",icon:"cloud",color:"#4F0599",textIcon:"SCW",website:"https://www.scaleway.com/en/ai/generative-apis/",hasFree:!0,freeNote:"1M free tokens for new accounts — EU/GDPR compliant (Paris), Qwen3 235B & Llama 70B"},aimlapi:{id:"aimlapi",alias:"aiml",name:"AI/ML API",icon:"hub",color:"#6366F1",textIcon:"AI",website:"https://aimlapi.com",hasFree:!0,freeNote:"$0.025/day free credits — 200+ models (GPT-4o, Claude, Gemini, Llama) via single endpoint",passthroughModels:!0}},i="openai-compatible-",j="anthropic-compatible-",k="anthropic-compatible-cc-",l={...f,...g,...h},m=Object.values(l).reduce((a,b)=>(b.alias&&(a[b.alias]=b.id),a),{});Object.values(l).reduce((a,b)=>(a[b.id]=b.alias||b.id,a),{}),(0,d.validateProviders)(f,"FREE_PROVIDERS"),(0,d.validateProviders)(g,"OAUTH_PROVIDERS"),(0,d.validateProviders)(h,"APIKEY_PROVIDERS"),a.s(["AI_PROVIDERS",0,l,"ALIAS_TO_ID",0,m,"ANTHROPIC_COMPATIBLE_PREFIX",0,j,"APIKEY_PROVIDERS",0,h,"AUTH_METHODS",0,{oauth:{id:"oauth",name:"OAuth",icon:"lock"},apikey:{id:"apikey",name:"API Key",icon:"key"}},"CLAUDE_CODE_COMPATIBLE_PREFIX",0,k,"FREE_PROVIDERS",0,f,"OAUTH_PROVIDERS",0,g,"OPENAI_COMPATIBLE_PREFIX",0,i,"USAGE_SUPPORTED_PROVIDERS",0,["antigravity","gemini-cli","kiro","github","codex","claude","kimi-coding","glm"],"getProviderAlias",0,function(a){let b=l[a];return b?.alias||a},"getProviderByAlias",0,function(a){for(let b of Object.values(l))if(b.alias===a||b.id===a)return b;return null},"isAnthropicCompatibleProvider",0,function(a){return"string"==typeof a&&a.startsWith(j)},"isClaudeCodeCompatibleProvider",0,function(a){return"string"==typeof a&&a.startsWith(k)},"isOpenAICompatibleProvider",0,function(a){return"string"==typeof a&&a.startsWith(i)}]),c()}catch(a){c(a)}},!1),911655,a=>{"use strict";var b=a.i(446786);let c=Object.freeze(["temperature","top_p","frequency_penalty","presence_penalty","logprobs","top_logprobs","n"]),d={format:"claude",executor:"default",baseUrl:"https://api.kimi.com/coding/v1/messages",authHeader:"x-api-key",headers:{"Anthropic-Version":"2023-06-01","Anthropic-Beta":"claude-code-20250219,interleaved-thinking-2025-05-14"},models:[{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"kimi-k2.5-thinking",name:"Kimi K2.5 Thinking"},{id:"kimi-latest",name:"Kimi Latest"}]},e={claude:{id:"claude",alias:"cc",format:"claude",executor:"default",baseUrl:"https://api.anthropic.com/v1/messages",urlSuffix:"?beta=true",authType:"oauth",authHeader:"x-api-key",defaultContextLength:2e5,headers:{"Anthropic-Version":"2023-06-01","Anthropic-Beta":"claude-code-20250219,oauth-2025-04-20,interleaved-thinking-2025-05-14,fine-grained-tool-streaming-2025-05-14,context-management-2025-06-27,prompt-caching-scope-2026-01-05","Anthropic-Dangerous-Direct-Browser-Access":"true","User-Agent":"claude-cli/2.1.63 (external, cli)","X-App":"cli","X-Stainless-Helper-Method":"stream","X-Stainless-Retry-Count":"0","X-Stainless-Runtime-Version":"v24.3.0","X-Stainless-Package-Version":"0.74.0","X-Stainless-Runtime":"node","X-Stainless-Lang":"js","X-Stainless-Arch":function(){switch((0,b.arch)()){case"x64":return"x64";case"arm64":return"arm64";case"ia32":return"x86";default:return`other::${(0,b.arch)()}`}}(),"X-Stainless-Os":function(){switch((0,b.platform)()){case"darwin":return"MacOS";case"win32":return"Windows";case"linux":return"Linux";default:return`Other::${(0,b.platform)()}`}}(),"X-Stainless-Timeout":"600"},oauth:{clientIdEnv:"CLAUDE_OAUTH_CLIENT_ID",clientIdDefault:"9d1c250a-e61b-44d9-88ed-5944d1962f5e",tokenUrl:"https://console.anthropic.com/v1/oauth/token"},models:[{id:"claude-opus-4-6",name:"Claude Opus 4.6"},{id:"claude-sonnet-4-6",name:"Claude 4.6 Sonnet"},{id:"claude-opus-4-5-20251101",name:"Claude 4.5 Opus"},{id:"claude-sonnet-4-5-20250929",name:"Claude 4.5 Sonnet"},{id:"claude-haiku-4-5-20251001",name:"Claude 4.5 Haiku"}]},gemini:{id:"gemini",alias:"gemini",format:"gemini",executor:"default",baseUrl:"https://generativelanguage.googleapis.com/v1beta/models",urlBuilder:(a,b,c)=>`${a}/${b}:${c?"streamGenerateContent?alt=sse":"generateContent"}`,authType:"apikey",authHeader:"x-goog-api-key",defaultContextLength:1e6,oauth:{clientIdEnv:"GEMINI_OAUTH_CLIENT_ID",clientIdDefault:"681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com",clientSecretEnv:"GEMINI_OAUTH_CLIENT_SECRET",clientSecretDefault:""},models:[{id:"gemini-3.1-pro-high",name:"Gemini 3.1 Pro High"},{id:"gemini-3.1-pro-low",name:"Gemini 3.1 Pro Low"},{id:"gemini-3.1-pro",name:"Gemini 3.1 Pro"},{id:"gemini-3-1-pro",name:"Gemini 3.1 Pro (Alt ID)"},{id:"gemini-3.1-pro-preview",name:"Gemini 3.1 Pro Preview"},{id:"gemini-3.1-flash-lite-preview",name:"Gemini 3.1 Flash Lite Preview"},{id:"gemini-3-flash-preview",name:"Gemini 3 Flash Preview"},{id:"gemini-2.5-pro",name:"Gemini 2.5 Pro"},{id:"gemini-2.5-flash",name:"Gemini 2.5 Flash"},{id:"gemini-2.5-flash-lite",name:"Gemini 2.5 Flash Lite"},{id:"gemini-2.0-flash",name:"Gemini 2.0 Flash"},{id:"gemini-2.0-flash-exp",name:"Gemini 2.0 Flash Exp"},{id:"gemini-1.5-pro",name:"Gemini 1.5 Pro"},{id:"gemini-1.5-flash",name:"Gemini 1.5 Flash"}]},"gemini-cli":{id:"gemini-cli",alias:"gemini-cli",format:"gemini-cli",executor:"gemini-cli",baseUrl:"https://cloudcode-pa.googleapis.com/v1internal",urlBuilder:(a,b,c)=>`${a}:${c?"streamGenerateContent?alt=sse":"generateContent"}`,authType:"oauth",authHeader:"bearer",defaultContextLength:1e6,oauth:{clientIdEnv:"GEMINI_CLI_OAUTH_CLIENT_ID",clientIdDefault:"681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com",clientSecretEnv:"GEMINI_OAUTH_CLIENT_SECRET",clientSecretDefault:""},models:[{id:"gemini-3-pro-preview",name:"Gemini 3 Pro Preview"},{id:"gemini-3.1-pro-preview",name:"Gemini 3.1 Pro Preview"},{id:"gemini-3.1-pro-preview-customtools",name:"Gemini 3.1 Pro Preview Custom Tools"},{id:"gemini-3-flash-preview",name:"Gemini 3 Flash Preview"},{id:"gemini-3.1-flash-lite-preview",name:"Gemini 3.1 Flash Lite Preview"},{id:"gemini-2.5-pro",name:"Gemini 2.5 Pro"},{id:"gemini-2.5-flash",name:"Gemini 2.5 Flash"},{id:"gemini-2.5-flash-lite",name:"Gemini 2.5 Flash Lite"}]},codex:{id:"codex",alias:"cx",format:"openai-responses",executor:"codex",baseUrl:"https://chatgpt.com/backend-api/codex/responses",authType:"oauth",authHeader:"bearer",defaultContextLength:4e5,headers:{Version:"0.92.0","Openai-Beta":"responses=experimental","User-Agent":"codex-cli/0.92.0 (Windows 10.0.26100; x64)"},oauth:{clientIdEnv:"CODEX_OAUTH_CLIENT_ID",clientIdDefault:"app_EMoamEEZ73f0CkXaXp7hrann",clientSecretEnv:"CODEX_OAUTH_CLIENT_SECRET",clientSecretDefault:"",tokenUrl:"https://auth.openai.com/oauth/token"},models:[{id:"gpt-5.4",name:"GPT 5.4"},{id:"gpt-5.4-mini",name:"GPT 5.4 Mini"},{id:"gpt-5.3-codex",name:"GPT 5.3 Codex"},{id:"gpt-5.3-codex-xhigh",name:"GPT 5.3 Codex (xHigh)"},{id:"gpt-5.3-codex-high",name:"GPT 5.3 Codex (High)"},{id:"gpt-5.3-codex-low",name:"GPT 5.3 Codex (Low)"},{id:"gpt-5.3-codex-none",name:"GPT 5.3 Codex (None)"},{id:"gpt-5.1-codex-mini",name:"GPT 5.1 Codex Mini"},{id:"gpt-5.1-codex-mini-high",name:"GPT 5.1 Codex Mini (High)"},{id:"gpt-5.2-codex",name:"GPT 5.2 Codex"},{id:"gpt-5.2",name:"GPT 5.2"},{id:"gpt-5.1-codex-max",name:"GPT 5.1 Codex Max"},{id:"gpt-5.1-codex",name:"GPT 5.1 Codex"},{id:"gpt-5.1",name:"GPT 5.1"},{id:"gpt-5-codex",name:"GPT 5 Codex"},{id:"gpt-5-codex-mini",name:"GPT 5 Codex Mini"}]},qwen:{id:"qwen",alias:"qw",format:"openai",executor:"default",baseUrl:"https://chat.qwen.ai/api/v1/services/aigc/text-generation/generation",authType:"oauth",authHeader:"bearer",headers:{"User-Agent":"QwenCode/0.12.3 (linux; x64)","X-Dashscope-AuthType":"qwen-oauth","X-Dashscope-CacheControl":"enable","X-Dashscope-UserAgent":"QwenCode/0.12.3 (linux; x64)","X-Stainless-Arch":"x64","X-Stainless-Lang":"js","X-Stainless-Os":"Linux","X-Stainless-Package-Version":"5.11.0","X-Stainless-Retry-Count":"1","X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":"v18.19.1",Connection:"keep-alive","Accept-Language":"*","Sec-Fetch-Mode":"cors"},oauth:{clientIdEnv:"QWEN_OAUTH_CLIENT_ID",clientIdDefault:"f0304373b74a44d2b584a3fb70ca9e56",tokenUrl:"https://chat.qwen.ai/api/v1/oauth2/token",authUrl:"https://chat.qwen.ai/api/v1/oauth2/device/code"},models:[{id:"qwen3-coder-plus",name:"Qwen3 Coder Plus"},{id:"qwen3-coder-flash",name:"Qwen3 Coder Flash"},{id:"vision-model",name:"Qwen3 Vision Model"},{id:"coder-model",name:"Qwen3.5 (Coder Model)"}]},qoder:{id:"qoder",alias:"if",format:"openai",executor:"qoder",baseUrl:"https://apis.qoder.cn/v1/chat/completions",authType:"oauth",authHeader:"bearer",headers:{"User-Agent":"Qoder-Cli"},oauth:{clientIdEnv:"QODER_OAUTH_CLIENT_ID",clientIdDefault:"10009311001",clientSecretEnv:"QODER_OAUTH_CLIENT_SECRET",clientSecretDefault:"",tokenUrl:"https://qoder.cn/oauth/token",authUrl:"https://qoder.cn/oauth"},models:[{id:"qoder-rome-30ba3b",name:"Qoder ROME"},{id:"qwen3-coder-plus",name:"Qwen3 Coder Plus"},{id:"qwen3-max",name:"Qwen3 Max"},{id:"qwen3-vl-plus",name:"Qwen3 Vision Plus"},{id:"kimi-k2-0905",name:"Kimi K2 0905"},{id:"qwen3-max-preview",name:"Qwen3 Max Preview"},{id:"kimi-k2",name:"Kimi K2"},{id:"deepseek-v3.2",name:"DeepSeek-V3.2-Exp"},{id:"deepseek-r1",name:"DeepSeek R1"},{id:"deepseek-v3",name:"DeepSeek V3"},{id:"qwen3-32b",name:"Qwen3 32B"},{id:"qwen3-235b-a22b-thinking-2507",name:"Qwen3 235B A22B Thinking 2507"},{id:"qwen3-235b-a22b-instruct",name:"Qwen3 235B A22B Instruct"},{id:"qwen3-235b",name:"Qwen3 235B"}]},antigravity:{id:"antigravity",alias:void 0,format:"antigravity",executor:"antigravity",baseUrls:["https://daily-cloudcode-pa.googleapis.com","https://daily-cloudcode-pa.sandbox.googleapis.com","https://cloudcode-pa.googleapis.com"],urlBuilder:(a,b,c)=>`${a}${c?"/v1internal:streamGenerateContent?alt=sse":"/v1internal:generateContent"}`,authType:"oauth",authHeader:"bearer",headers:{"User-Agent":`antigravity/1.107.0 ${(0,b.platform)()}/${(0,b.arch)()}`},oauth:{clientIdEnv:"ANTIGRAVITY_OAUTH_CLIENT_ID",clientIdDefault:"1071006060591-tmhssin2h21lcre235vtolojh4g403ep.apps.googleusercontent.com",clientSecretEnv:"ANTIGRAVITY_OAUTH_CLIENT_SECRET",clientSecretDefault:"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"},models:[{id:"claude-opus-4-6-thinking",name:"Claude Opus 4.6 Thinking"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6"},{id:"gemini-3-flash",name:"Gemini 3 Flash"},{id:"gemini-3.1-flash-image",name:"Gemini 3.1 Flash Image"},{id:"gemini-3.1-pro-high",name:"Gemini 3.1 Pro (High)"},{id:"gemini-3.1-pro-low",name:"Gemini 3.1 Pro (Low)"},{id:"gpt-oss-120b-medium",name:"GPT OSS 120B Medium"}],passthroughModels:!0},github:{id:"github",alias:"gh",format:"openai",executor:"github",baseUrl:"https://api.githubcopilot.com/chat/completions",responsesBaseUrl:"https://api.githubcopilot.com/responses",authType:"oauth",authHeader:"bearer",defaultContextLength:128e3,headers:{"copilot-integration-id":"vscode-chat","editor-version":"vscode/1.110.0","editor-plugin-version":"copilot-chat/0.38.0","user-agent":"GitHubCopilotChat/0.38.0","openai-intent":"conversation-panel","x-github-api-version":"2025-04-01","x-vscode-user-agent-library-version":"electron-fetch","X-Initiator":"user",Accept:"application/json","Content-Type":"application/json"},models:[{id:"gpt-4.1",name:"GPT-4.1"},{id:"gpt-4o",name:"GPT-4o"},{id:"gpt-4o-mini",name:"GPT-4o Mini"},{id:"gpt-4",name:"GPT-4"},{id:"gpt-3.5-turbo",name:"GPT-3.5 Turbo"},{id:"gpt-5",name:"GPT-5"},{id:"gpt-5-mini",name:"GPT-5 Mini"},{id:"gpt-5-codex",name:"GPT-5 Codex",targetFormat:"openai-responses"},{id:"gpt-5.1",name:"GPT-5.1"},{id:"gpt-5.1-codex",name:"GPT-5.1 Codex",targetFormat:"openai-responses"},{id:"gpt-5.1-codex-mini",name:"GPT-5.1 Codex Mini",targetFormat:"openai-responses"},{id:"gpt-5.1-codex-max",name:"GPT-5.1 Codex Max",targetFormat:"openai-responses"},{id:"gpt-5.2",name:"GPT-5.2"},{id:"gpt-5.2-codex",name:"GPT-5.2 Codex",targetFormat:"openai-responses"},{id:"claude-haiku-4.5",name:"Claude Haiku 4.5"},{id:"claude-opus-4.1",name:"Claude Opus 4.1"},{id:"claude-opus-4.6",name:"Claude Opus 4.6"},{id:"claude-opus-4-5-20251101",name:"Claude Opus 4.5 (Full ID)"},{id:"claude-sonnet-4",name:"Claude Sonnet 4"},{id:"claude-sonnet-4.5",name:"Claude Sonnet 4.5"},{id:"gemini-2.5-pro",name:"Gemini 2.5 Pro"},{id:"gemini-2.5-flash",name:"Gemini 2.5 Flash"},{id:"grok-code-fast-1",name:"Grok Code Fast 1"},{id:"oswe-vscode-prime",name:"Raptor Mini"}]},kiro:{id:"kiro",alias:"kr",format:"kiro",executor:"kiro",baseUrl:"https://codewhisperer.us-east-1.amazonaws.com/generateAssistantResponse",authType:"oauth",authHeader:"bearer",defaultContextLength:2e5,headers:{"Content-Type":"application/json",Accept:"application/vnd.amazon.eventstream","X-Amz-Target":"AmazonCodeWhispererStreamingService.GenerateAssistantResponse","User-Agent":"AWS-SDK-JS/3.0.0 kiro-ide/1.0.0","X-Amz-User-Agent":"aws-sdk-js/3.0.0 kiro-ide/1.0.0"},oauth:{tokenUrl:"https://prod.us-east-1.auth.desktop.kiro.dev/refreshToken",authUrl:"https://prod.us-east-1.auth.desktop.kiro.dev"},models:[{id:"claude-sonnet-4.5",name:"Claude Sonnet 4.5"},{id:"claude-haiku-4.5",name:"Claude Haiku 4.5"}]},cursor:{id:"cursor",alias:"cu",format:"cursor",executor:"cursor",baseUrl:"https://api2.cursor.sh",chatPath:"/aiserver.v1.ChatService/StreamUnifiedChatWithTools",authType:"oauth",authHeader:"bearer",defaultContextLength:2e5,headers:{"connect-accept-encoding":"gzip","connect-protocol-version":"1","Content-Type":"application/connect+proto","User-Agent":"connect-es/1.6.1"},clientVersion:"1.1.3",models:[{id:"default",name:"Auto (Server Picks)"},{id:"claude-4.6-opus-high-thinking",name:"Claude 4.6 Opus High Thinking"},{id:"claude-4.6-opus-high",name:"Claude 4.6 Opus High"},{id:"claude-4.6-sonnet-high-thinking",name:"Claude 4.6 Sonnet High Thinking"},{id:"claude-4.6-sonnet-high",name:"Claude 4.6 Sonnet High"},{id:"claude-4.6-haiku",name:"Claude 4.6 Haiku"},{id:"claude-4.6-opus",name:"Claude 4.6 Opus"},{id:"claude-4.5-opus-high-thinking",name:"Claude 4.5 Opus High Thinking"},{id:"claude-4.5-opus-high",name:"Claude 4.5 Opus High"},{id:"claude-4.5-sonnet-thinking",name:"Claude 4.5 Sonnet Thinking"},{id:"claude-4.5-sonnet",name:"Claude 4.5 Sonnet"},{id:"claude-4.5-haiku",name:"Claude 4.5 Haiku"},{id:"claude-4.5-opus",name:"Claude 4.5 Opus"},{id:"gpt-5.2-codex",name:"GPT 5.2 Codex"}]},openai:{id:"openai",alias:"openai",format:"openai",executor:"default",baseUrl:"https://api.openai.com/v1/chat/completions",authType:"apikey",authHeader:"bearer",defaultContextLength:128e3,models:[{id:"gpt-4o",name:"GPT-4o"},{id:"gpt-4o-mini",name:"GPT-4o Mini"},{id:"gpt-4-turbo",name:"GPT-4 Turbo"},{id:"o1",name:"O1",unsupportedParams:c},{id:"o1-mini",name:"O1 Mini",unsupportedParams:c},{id:"o1-pro",name:"O1 Pro",unsupportedParams:c},{id:"o3",name:"O3",unsupportedParams:c},{id:"o3-mini",name:"O3 Mini",unsupportedParams:c}]},anthropic:{id:"anthropic",alias:"anthropic",format:"claude",executor:"default",baseUrl:"https://api.anthropic.com/v1/messages",urlSuffix:"?beta=true",authType:"apikey",authHeader:"x-api-key",defaultContextLength:2e5,headers:{"Anthropic-Version":"2023-06-01"},models:[{id:"claude-haiku-4.5",name:"Claude Haiku 4.5"},{id:"claude-sonnet-4-20250514",name:"Claude Sonnet 4"},{id:"claude-sonnet-4-6-20251031",name:"Claude Sonnet 4.6 (Dated)"},{id:"claude-sonnet-4.6",name:"Claude Sonnet 4.6"},{id:"claude-opus-4-20250514",name:"Claude Opus 4"},{id:"claude-opus-4-6-20251031",name:"Claude Opus 4.6 (Dated)"},{id:"claude-opus-4.6",name:"Claude Opus 4.6"},{id:"claude-3-5-sonnet-20241022",name:"Claude 3.5 Sonnet"}]},"opencode-go":{id:"opencode-go",alias:"opencode-go",format:"openai",executor:"opencode",baseUrl:"https://opencode.ai/zen/go/v1",testKeyBaseUrl:"https://opencode.ai/zen/v1",authType:"apikey",authHeader:"Authorization",authPrefix:"Bearer",defaultContextLength:2e5,models:[{id:"glm-5",name:"GLM-5"},{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"minimax-m2.7",name:"MiniMax M2.7",targetFormat:"claude"},{id:"minimax-m2.5",name:"MiniMax M2.5",targetFormat:"claude"}]},"opencode-zen":{id:"opencode-zen",alias:"opencode-zen",format:"openai",executor:"opencode",baseUrl:"https://opencode.ai/zen/v1",modelsUrl:"https://opencode.ai/zen/v1/models",authType:"apikey",authHeader:"Authorization",authPrefix:"Bearer",defaultContextLength:2e5,models:[{id:"minimax-m2.5-free",name:"MiniMax M2.5 Free",contextLength:204800},{id:"big-pickle",name:"Big Pickle",contextLength:2e5},{id:"gpt-5-nano",name:"GPT 5 Nano",contextLength:4e5},{id:"mimo-v2-omni-free",name:"MiMo V2 Omni Free",contextLength:262144},{id:"mimo-v2-pro-free",name:"MiMo V2 Pro Free",contextLength:1048576},{id:"nemotron-3-super-free",name:"Nemotron 3 Super Free",contextLength:1e6},{id:"qwen3.6-plus-free",name:"Qwen 3.6 Plus Free",contextLength:1048576}]},openrouter:{id:"openrouter",alias:"openrouter",format:"openai",executor:"default",baseUrl:"https://openrouter.ai/api/v1/chat/completions",authType:"apikey",authHeader:"bearer",defaultContextLength:128e3,headers:{"HTTP-Referer":"https://endpoint-proxy.local","X-Title":"Endpoint Proxy"},models:[{id:"auto",name:"Auto (Best Available)"}]},glm:{id:"glm",alias:"glm",format:"claude",executor:"default",baseUrl:"https://api.z.ai/api/anthropic/v1/messages",defaultContextLength:2e5,urlSuffix:"?beta=true",authType:"apikey",authHeader:"x-api-key",headers:{"Anthropic-Version":"2023-06-01","Anthropic-Beta":"claude-code-20250219,interleaved-thinking-2025-05-14"},models:[{id:"glm-5.1",name:"GLM 5.1",contextLength:204800},{id:"glm-5",name:"GLM 5"},{id:"glm-5-turbo",name:"GLM 5 Turbo"},{id:"glm-4.7-flash",name:"GLM 4.7 Flash"},{id:"glm-4.7",name:"GLM 4.7"},{id:"glm-4.6v",name:"GLM 4.6V (Vision)",contextLength:128e3},{id:"glm-4.6",name:"GLM 4.6"},{id:"glm-4.5v",name:"GLM 4.5V (Vision)",contextLength:16e3},{id:"glm-4.5",name:"GLM 4.5",contextLength:128e3},{id:"glm-4.5-air",name:"GLM 4.5 Air",contextLength:128e3}]},"bailian-coding-plan":{id:"bailian-coding-plan",alias:"bcp",format:"claude",executor:"default",baseUrl:"https://coding-intl.dashscope.aliyuncs.com/apps/anthropic/v1/messages",chatPath:"/messages",urlSuffix:"?beta=true",authType:"apikey",authHeader:"x-api-key",headers:{"Anthropic-Version":"2023-06-01","Anthropic-Beta":"claude-code-20250219,interleaved-thinking-2025-05-14"},models:[{id:"qwen3.5-plus",name:"Qwen3.5 Plus"},{id:"qwen3-max-2026-01-23",name:"Qwen3 Max (2026-01-23)"},{id:"qwen3-coder-next",name:"Qwen3 Coder Next"},{id:"qwen3-coder-plus",name:"Qwen3 Coder Plus"},{id:"MiniMax-M2.5",name:"MiniMax M2.5"},{id:"glm-5",name:"GLM 5"},{id:"glm-4.7",name:"GLM 4.7"},{id:"kimi-k2.5",name:"Kimi K2.5"}]},zai:{id:"zai",alias:"zai",format:"claude",executor:"default",baseUrl:"https://api.z.ai/api/anthropic/v1/messages",urlSuffix:"?beta=true",authType:"apikey",authHeader:"x-api-key",headers:{"Anthropic-Version":"2023-06-01","Anthropic-Beta":"claude-code-20250219,interleaved-thinking-2025-05-14"},models:[{id:"glm-5",name:"GLM 5"},{id:"glm-5-turbo",name:"GLM 5 Turbo"}]},kimi:{id:"kimi",alias:"kimi",format:"openai",executor:"default",baseUrl:"https://api.moonshot.ai/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"kimi-k2.5-thinking",name:"Kimi K2.5 Thinking"},{id:"kimi-latest",name:"Kimi Latest"},{id:"kimi-for-coding",name:"Kimi For Coding"}]},"kimi-coding":{id:"kimi-coding",alias:"kmc",...d,urlSuffix:"?beta=true",authType:"oauth",oauth:{clientIdEnv:"KIMI_CODING_OAUTH_CLIENT_ID",clientIdDefault:"17e5f671-d194-4dfb-9706-5516cb48c098",tokenUrl:"https://auth.kimi.com/api/oauth/token",refreshUrl:"https://auth.kimi.com/api/oauth/token",authUrl:"https://auth.kimi.com/api/oauth/device_authorization"}},"kimi-coding-apikey":{id:"kimi-coding-apikey",alias:"kmca",...d,authType:"apikey"},kilocode:{id:"kilocode",alias:"kc",format:"openrouter",executor:"openrouter",baseUrl:"https://api.kilo.ai/api/openrouter/chat/completions",modelsUrl:"https://api.kilo.ai/api/openrouter/models",authType:"oauth",authHeader:"Authorization",authPrefix:"Bearer ",oauth:{initiateUrl:"https://api.kilo.ai/api/device-auth/codes",pollUrlBase:"https://api.kilo.ai/api/device-auth/codes"},models:[{id:"openrouter/free",name:"Free Models Router"},{id:"qwen/qwen3-vl-235b-a22b-thinking",name:"Qwen3 VL 235B A22B Thinking"},{id:"qwen/qwen3-235b-a22b-thinking-2507",name:"Qwen3 235B A22B Thinking 2507"},{id:"qwen/qwen3-vl-30b-a3b-thinking",name:"Qwen3 VL 30B A3B Thinking"},{id:"stepfun/step-3.5-flash:free",name:"StepFun Step 3.5 Flash"},{id:"arcee-ai/trinity-large-preview:free",name:"Arcee AI Trinity Large Preview"},{id:"openai/gpt-4o-mini",name:"GPT-4o Mini"},{id:"openai/gpt-4.1-nano",name:"GPT-4.1 Nano"},{id:"openai/gpt-5-nano",name:"GPT-5 Nano"},{id:"openai/gpt-5-mini",name:"GPT-5 Mini"},{id:"anthropic/claude-3-haiku",name:"Claude 3 Haiku"},{id:"google/gemini-2.0-flash",name:"Gemini 2.0 Flash"},{id:"google/gemini-2.5-flash-lite",name:"Gemini 2.5 Flash Lite"},{id:"deepseek/deepseek-chat-v3.1",name:"DeepSeek V3.1"},{id:"deepseek/deepseek-v3.2",name:"DeepSeek V3.2"},{id:"meta-llama/llama-3.3-70b-instruct",name:"Llama 3.3 70B"},{id:"meta-llama/llama-4-scout",name:"Llama 4 Scout"},{id:"meta-llama/llama-4-maverick",name:"Llama 4 Maverick"},{id:"qwen/qwen3-8b",name:"Qwen3 8B"},{id:"qwen/qwen3-32b",name:"Qwen3 32B"},{id:"qwen/qwen3-coder",name:"Qwen3 Coder 480B"},{id:"qwen/qwq-32b",name:"QwQ 32B"},{id:"mistralai/mistral-small-24b-instruct-2501",name:"Mistral Small 3"},{id:"mistralai/mistral-7b-instruct",name:"Mistral 7B"},{id:"x-ai/grok-code-fast-1",name:"Grok Code Fast 1"},{id:"moonshotai/kimi-k2.5",name:"Kimi K2.5"}],passthroughModels:!0},cline:{id:"cline",alias:"cl",format:"openai",executor:"openai",baseUrl:"https://api.cline.bot/api/v1/chat/completions",authType:"oauth",authHeader:"Authorization",authPrefix:"Bearer ",oauth:{tokenUrl:"https://api.cline.bot/api/v1/auth/token",refreshUrl:"https://api.cline.bot/api/v1/auth/refresh",authUrl:"https://api.cline.bot/api/v1/auth/authorize"},extraHeaders:{"HTTP-Referer":"https://cline.bot","X-Title":"Cline"},models:[{id:"anthropic/claude-sonnet-4-20250514",name:"Claude Sonnet 4"},{id:"anthropic/claude-opus-4-20250514",name:"Claude Opus 4"},{id:"google/gemini-2.5-pro",name:"Gemini 2.5 Pro"},{id:"google/gemini-2.5-flash",name:"Gemini 2.5 Flash"},{id:"openai/gpt-4.1",name:"GPT-4.1"},{id:"openai/o3",name:"o3"},{id:"deepseek/deepseek-chat",name:"DeepSeek Chat"}],passthroughModels:!0},minimax:{id:"minimax",alias:"minimax",format:"claude",executor:"default",baseUrl:"https://api.minimax.io/anthropic/v1/messages",urlSuffix:"?beta=true",authType:"apikey",authHeader:"x-api-key",headers:{"Anthropic-Version":"2023-06-01","Anthropic-Beta":"claude-code-20250219,interleaved-thinking-2025-05-14"},models:[{id:"minimax-m2.7",name:"MiniMax M2.7"},{id:"MiniMax-M2.7",name:"MiniMax M2.7 (Legacy Alias)"},{id:"minimax-m2.7-highspeed",name:"MiniMax M2.7 Highspeed"},{id:"minimax-m2.5",name:"MiniMax M2.5"},{id:"MiniMax-M2.5",name:"MiniMax M2.5 (Legacy Alias)"},{id:"MiniMax-M2.1",name:"MiniMax M2.1"}]},"minimax-cn":{id:"minimax-cn",alias:"minimax-cn",format:"claude",executor:"default",baseUrl:"https://api.minimaxi.com/anthropic/v1/messages",urlSuffix:"?beta=true",authType:"apikey",authHeader:"x-api-key",headers:{"Anthropic-Version":"2023-06-01","Anthropic-Beta":"claude-code-20250219,interleaved-thinking-2025-05-14"},models:[{id:"minimax-m2.7",name:"MiniMax M2.7"},{id:"MiniMax-M2.7",name:"MiniMax M2.7 (Legacy Alias)"},{id:"minimax-m2.7-highspeed",name:"MiniMax M2.7 Highspeed"},{id:"minimax-m2.5",name:"MiniMax M2.5"},{id:"MiniMax-M2.5",name:"MiniMax M2.5 (Legacy Alias)"},{id:"MiniMax-M2.1",name:"MiniMax M2.1"}]},alicode:{id:"alicode",alias:"alicode",format:"openai",executor:"default",baseUrl:"https://coding.dashscope.aliyuncs.com/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"qwen3.5-plus",name:"Qwen3.5 Plus"},{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"glm-5",name:"GLM 5"},{id:"MiniMax-M2.5",name:"MiniMax M2.5"},{id:"qwen3-max-2026-01-23",name:"Qwen3 Max"},{id:"qwen3-coder-next",name:"Qwen3 Coder Next"},{id:"qwen3-coder-plus",name:"Qwen3 Coder Plus"},{id:"glm-4.7",name:"GLM 4.7"}]},"alicode-intl":{id:"alicode-intl",alias:"alicode-intl",format:"openai",executor:"default",baseUrl:"https://coding-intl.dashscope.aliyuncs.com/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"qwen3.5-plus",name:"Qwen3.5 Plus"},{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"glm-5",name:"GLM 5"},{id:"MiniMax-M2.5",name:"MiniMax M2.5"},{id:"qwen3-max-2026-01-23",name:"Qwen3 Max"},{id:"qwen3-coder-next",name:"Qwen3 Coder Next"},{id:"qwen3-coder-plus",name:"Qwen3 Coder Plus"},{id:"glm-4.7",name:"GLM 4.7"}]},deepseek:{id:"deepseek",alias:"ds",format:"openai",executor:"default",baseUrl:"https://api.deepseek.com/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"deepseek-chat",name:"DeepSeek V3.2 Chat"},{id:"deepseek-reasoner",name:"DeepSeek V3.2 Reasoner"}]},groq:{id:"groq",alias:"groq",format:"openai",executor:"default",baseUrl:"https://api.groq.com/openai/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"llama-3.3-70b-versatile",name:"Llama 3.3 70B"},{id:"meta-llama/llama-4-maverick-17b-128e-instruct",name:"Llama 4 Maverick"},{id:"qwen/qwen3-32b",name:"Qwen3 32B"},{id:"openai/gpt-oss-120b",name:"GPT-OSS 120B"}]},blackbox:{id:"blackbox",alias:"bb",format:"openai",executor:"default",baseUrl:"https://api.blackbox.ai/v1/chat/completions",modelsUrl:"https://api.blackbox.ai/v1/models",authType:"apikey",authHeader:"bearer",models:[{id:"gpt-4o",name:"GPT-4o"},{id:"gemini-2.5-flash",name:"Gemini 2.5 Flash"},{id:"claude-sonnet-4",name:"Claude Sonnet 4"},{id:"deepseek-v3",name:"DeepSeek V3"},{id:"blackboxai",name:"Blackbox AI"},{id:"blackboxai-pro",name:"Blackbox AI Pro"}]},xai:{id:"xai",alias:"xai",format:"openai",executor:"default",baseUrl:"https://api.x.ai/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"grok-4-fast-non-reasoning",name:"Grok 4 Fast"},{id:"grok-4-fast-reasoning",name:"Grok 4 Fast Reasoning"},{id:"grok-4-1-fast-non-reasoning",name:"Grok 4.1 Fast"},{id:"grok-4-1-fast-reasoning",name:"Grok 4.1 Fast Reasoning"},{id:"grok-4-0709",name:"Grok 4 (0709)"},{id:"grok-4",name:"Grok 4"},{id:"grok-3",name:"Grok 3"},{id:"grok-3-mini",name:"Grok 3 Mini"}]},mistral:{id:"mistral",alias:"mistral",format:"openai",executor:"default",baseUrl:"https://api.mistral.ai/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"mistral-large-latest",name:"Mistral Large 3"},{id:"codestral-latest",name:"Codestral"},{id:"mistral-medium-latest",name:"Mistral Medium 3"}]},perplexity:{id:"perplexity",alias:"pplx",format:"openai",executor:"default",baseUrl:"https://api.perplexity.ai/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"sonar-pro",name:"Sonar Pro"},{id:"sonar",name:"Sonar"}]},together:{id:"together",alias:"together",format:"openai",executor:"default",baseUrl:"https://api.together.xyz/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"meta-llama/Llama-3.3-70B-Instruct-Turbo-Free",name:"Llama 3.3 70B Turbo (🆓 Free)"},{id:"meta-llama/Llama-Vision-Free",name:"Llama Vision (🆓 Free)"},{id:"deepseek-ai/DeepSeek-R1-Distill-Llama-70B-Free",name:"DeepSeek R1 Distill 70B (🆓 Free)"},{id:"meta-llama/Llama-3.3-70B-Instruct-Turbo",name:"Llama 3.3 70B Turbo"},{id:"deepseek-ai/DeepSeek-R1",name:"DeepSeek R1"},{id:"Qwen/Qwen3-235B-A22B",name:"Qwen3 235B"},{id:"meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8",name:"Llama 4 Maverick"}]},fireworks:{id:"fireworks",alias:"fireworks",format:"openai",executor:"default",baseUrl:"https://api.fireworks.ai/inference/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"accounts/fireworks/models/deepseek-v3p1",name:"DeepSeek V3.1"},{id:"accounts/fireworks/models/llama-v3p3-70b-instruct",name:"Llama 3.3 70B"},{id:"accounts/fireworks/models/qwen3-235b-a22b",name:"Qwen3 235B"}]},cerebras:{id:"cerebras",alias:"cerebras",format:"openai",executor:"default",baseUrl:"https://api.cerebras.ai/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"gpt-oss-120b",name:"GPT OSS 120B"},{id:"zai-glm-4.7",name:"ZAI GLM 4.7"},{id:"llama-3.3-70b",name:"Llama 3.3 70B"},{id:"llama-4-scout-17b-16e-instruct",name:"Llama 4 Scout"},{id:"qwen-3-235b-a22b-instruct-2507",name:"Qwen3 235B A22B"},{id:"qwen-3-32b",name:"Qwen3 32B"}]},"ollama-cloud":{id:"ollama-cloud",alias:"ollamacloud",format:"openai",executor:"default",baseUrl:"https://ollama.com/v1/chat/completions",modelsUrl:"https://ollama.com/api/tags",authType:"apikey",authHeader:"bearer",models:[{id:"gemma3:27b",name:"Gemma 3 27B"},{id:"llama3.3:70b",name:"Llama 3.3 70B"},{id:"qwen3:72b",name:"Qwen3 72B"},{id:"devstral:24b",name:"Devstral 24B"},{id:"deepseek-r2:671b",name:"DeepSeek R2 671B"},{id:"phi4:14b",name:"Phi 4 14B"},{id:"mistral-small3.2:24b",name:"Mistral Small 3.2 24B"}],passthroughModels:!0},cohere:{id:"cohere",alias:"cohere",format:"openai",executor:"default",baseUrl:"https://api.cohere.com/v2/chat",authType:"apikey",authHeader:"bearer",models:[{id:"command-r-plus-08-2024",name:"Command R+ (Aug 2024)"},{id:"command-r-08-2024",name:"Command R (Aug 2024)"},{id:"command-a-03-2025",name:"Command A (Mar 2025)"}]},nvidia:{id:"nvidia",alias:"nvidia",format:"openai",executor:"default",baseUrl:"https://integrate.api.nvidia.com/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"gpt-oss-120b",name:"GPT OSS 120B",toolCalling:!1},{id:"openai/gpt-oss-120b",name:"GPT OSS 120B (OpenAI Prefix)",toolCalling:!1},{id:"meta/llama-3.3-70b-instruct",name:"Llama 3.3 70B"},{id:"nvidia/llama-3.3-70b-instruct",name:"Llama 3.3 70B (NVIDIA Prefix)"},{id:"meta/llama-4-maverick-17b-128e-instruct",name:"Llama 4 Maverick"},{id:"moonshotai/kimi-k2.5",name:"Kimi K2.5"},{id:"z-ai/glm4.7",name:"GLM 4.7"},{id:"deepseek-ai/deepseek-v3.2",name:"DeepSeek V3.2"},{id:"deepseek/deepseek-r1",name:"DeepSeek R1"},{id:"nvidia/llama-3.1-70b-instruct",name:"Llama 3.1 70B"},{id:"nvidia/llama-3.1-405b-instruct",name:"Llama 3.1 405B"}]},nebius:{id:"nebius",alias:"nebius",format:"openai",executor:"default",baseUrl:"https://api.tokenfactory.nebius.com/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"meta-llama/Llama-3.3-70B-Instruct",name:"Llama 3.3 70B Instruct"}]},siliconflow:{id:"siliconflow",alias:"siliconflow",format:"openai",executor:"default",baseUrl:"https://api.siliconflow.com/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"deepseek-ai/DeepSeek-V3.2",name:"DeepSeek V3.2"},{id:"deepseek-ai/DeepSeek-V3.1",name:"DeepSeek V3.1"},{id:"deepseek-ai/DeepSeek-R1",name:"DeepSeek R1"},{id:"Qwen/Qwen3-235B-A22B-Instruct-2507",name:"Qwen3 235B"},{id:"Qwen/Qwen3-Coder-480B-A35B-Instruct",name:"Qwen3 Coder 480B"},{id:"Qwen/Qwen3-32B",name:"Qwen3 32B"},{id:"moonshotai/Kimi-K2.5",name:"Kimi K2.5"},{id:"zai-org/GLM-4.7",name:"GLM 4.7"},{id:"openai/gpt-oss-120b",name:"GPT OSS 120B"},{id:"baidu/ERNIE-4.5-300B-A47B",name:"ERNIE 4.5 300B"}]},hyperbolic:{id:"hyperbolic",alias:"hyp",format:"openai",executor:"default",baseUrl:"https://api.hyperbolic.xyz/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"Qwen/QwQ-32B",name:"QwQ 32B"},{id:"deepseek-ai/DeepSeek-R1",name:"DeepSeek R1"},{id:"deepseek-ai/DeepSeek-V3",name:"DeepSeek V3"},{id:"meta-llama/Llama-3.3-70B-Instruct",name:"Llama 3.3 70B"},{id:"meta-llama/Llama-3.2-3B-Instruct",name:"Llama 3.2 3B"},{id:"Qwen/Qwen2.5-72B-Instruct",name:"Qwen 2.5 72B"},{id:"Qwen/Qwen2.5-Coder-32B-Instruct",name:"Qwen 2.5 Coder 32B"},{id:"NousResearch/Hermes-3-Llama-3.1-70B",name:"Hermes 3 70B"}]},huggingface:{id:"huggingface",alias:"hf",format:"openai",executor:"default",baseUrl:"https://router.huggingface.co/hf-inference/models/meta-llama/Meta-Llama-3.1-70B-Instruct/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"meta-llama/Meta-Llama-3.1-70B-Instruct",name:"Llama 3.1 70B Instruct"},{id:"meta-llama/Meta-Llama-3.1-8B-Instruct",name:"Llama 3.1 8B Instruct"},{id:"Qwen/Qwen2.5-72B-Instruct",name:"Qwen 2.5 72B"},{id:"mistralai/Mistral-7B-Instruct-v0.3",name:"Mistral 7B v0.3"},{id:"microsoft/Phi-3.5-mini-instruct",name:"Phi-3.5 Mini"}]},synthetic:{id:"synthetic",alias:"synthetic",format:"openai",executor:"default",baseUrl:"https://api.synthetic.new/openai/v1/chat/completions",modelsUrl:"https://api.synthetic.new/openai/v1/models",authType:"apikey",authHeader:"bearer",models:[{id:"hf:nvidia/Kimi-K2.5-NVFP4",name:"Kimi K2.5 (NVFP4)"},{id:"hf:MiniMaxAI/MiniMax-M2.5",name:"MiniMax M2.5"},{id:"hf:zai-org/GLM-4.7-Flash",name:"GLM 4.7 Flash"},{id:"hf:zai-org/GLM-4.7",name:"GLM 4.7"},{id:"hf:moonshotai/Kimi-K2.5",name:"Kimi K2.5"},{id:"hf:deepseek-ai/DeepSeek-V3.2",name:"DeepSeek V3.2"}],passthroughModels:!0},"kilo-gateway":{id:"kilo-gateway",alias:"kg",format:"openai",executor:"default",baseUrl:"https://api.kilo.ai/api/gateway/chat/completions",modelsUrl:"https://api.kilo.ai/api/gateway/models",authType:"apikey",authHeader:"bearer",models:[{id:"kilo-auto/frontier",name:"Kilo Auto Frontier"},{id:"kilo-auto/balanced",name:"Kilo Auto Balanced"},{id:"kilo-auto/free",name:"Kilo Auto Free"},{id:"nvidia/nemotron-3-super-120b-a12b:free",name:"Nemotron 3 Super 120B (Free)"},{id:"minimax/minimax-m2.5:free",name:"MiniMax M2.5 (Free)"},{id:"arcee-ai/trinity-large-preview:free",name:"Trinity Large Preview (Free)"}],passthroughModels:!0},vertex:{id:"vertex",alias:"vertex",format:"gemini",executor:"vertex",baseUrl:"https://us-central1-aiplatform.googleapis.com/v1/projects",urlBuilder:(a,b,c)=>`https://generativelanguage.googleapis.com/v1beta/models/${b}:${c?"streamGenerateContent?alt=sse":"generateContent"}`,authType:"apikey",authHeader:"bearer",models:[{id:"gemini-3.1-pro-preview",name:"Gemini 3.1 Pro Preview (Vertex)"},{id:"gemini-3.1-flash-lite-preview",name:"Gemini 3.1 Flash Lite Preview (Vertex)"},{id:"gemini-3-flash-preview",name:"Gemini 3 Flash Preview (Vertex)"},{id:"gemini-2.5-pro",name:"Gemini 2.5 Pro (Vertex)"},{id:"gemini-2.5-flash",name:"Gemini 2.5 Flash (Vertex)"},{id:"gemini-2.0-flash-thinking-exp",name:"Gemini 2.0 Flash Thinking Exp (Vertex)"},{id:"gemma-2-27b-it",name:"Gemma 2 27B (Vertex)"},{id:"deepseek-v3.2",name:"DeepSeek V3.2 (Vertex Partner)"},{id:"qwen3-next-80b",name:"Qwen3 Next 80B (Vertex Partner)"},{id:"glm-5",name:"GLM-5 (Vertex Partner)"},{id:"claude-opus-4-5@20251101",name:"Claude Opus 4.5 (Vertex)"},{id:"claude-sonnet-4-5@20251101",name:"Claude Sonnet 4.5 (Vertex)"}]},alibaba:{id:"alibaba",alias:"ali",format:"openai",executor:"default",baseUrl:"https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions",modelsUrl:"https://dashscope-intl.aliyuncs.com/compatible-mode/v1/models",authType:"apikey",authHeader:"bearer",models:[{id:"qwen-max",name:"Qwen Max"},{id:"qwen-max-2025-01-25",name:"Qwen Max (2025-01-25)"},{id:"qwen-plus",name:"Qwen Plus"},{id:"qwen-plus-2025-07-14",name:"Qwen Plus (2025-07-14)"},{id:"qwen-turbo",name:"Qwen Turbo"},{id:"qwen-turbo-2025-11-01",name:"Qwen Turbo (2025-11-01)"},{id:"qwen3-coder-plus",name:"Qwen3 Coder Plus"},{id:"qwen3-coder-flash",name:"Qwen3 Coder Flash"},{id:"qwq-plus",name:"QwQ Plus (Reasoning)"},{id:"qwq-32b",name:"QwQ 32B"},{id:"qwen3-32b",name:"Qwen3 32B"},{id:"qwen3-235b-a22b",name:"Qwen3 235B A22B"}],passthroughModels:!0},longcat:{id:"longcat",alias:"lc",format:"openai",executor:"default",baseUrl:"https://api.longcat.chat/openai/v1/chat/completions",authType:"apikey",authHeader:"Authorization",authPrefix:"Bearer",models:[{id:"LongCat-Flash-Lite",name:"LongCat Flash-Lite (50M tok/day 🆓)"},{id:"LongCat-Flash-Chat",name:"LongCat Flash-Chat (500K tok/day 🆓)"},{id:"LongCat-Flash-Thinking",name:"LongCat Flash-Thinking (500K tok/day 🆓)"},{id:"LongCat-Flash-Thinking-2601",name:"LongCat Flash-Thinking-2601 (🆓)"},{id:"LongCat-Flash-Omni-2603",name:"LongCat Flash-Omni-2603 (🆓)"}]},pollinations:{id:"pollinations",alias:"pol",format:"openai",executor:"pollinations",baseUrl:"https://text.pollinations.ai/openai/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"openai",name:"GPT-5 via Pollinations (🆓)"},{id:"claude",name:"Claude via Pollinations (🆓)"},{id:"gemini",name:"Gemini via Pollinations (🆓)"},{id:"deepseek",name:"DeepSeek V3 via Pollinations (🆓)"},{id:"llama",name:"Llama 4 via Pollinations (🆓)"},{id:"mistral",name:"Mistral via Pollinations (🆓)"}]},puter:{id:"puter",alias:"pu",format:"openai",executor:"puter",baseUrl:"https://api.puter.com/puterai/openai/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"gpt-4o-mini",name:"GPT-4o Mini (🆓 Puter)"},{id:"gpt-4o",name:"GPT-4o (Puter)"},{id:"gpt-4.1",name:"GPT-4.1 (Puter)"},{id:"gpt-4.1-mini",name:"GPT-4.1 Mini (Puter)"},{id:"gpt-5-nano",name:"GPT-5 Nano (Puter)"},{id:"gpt-5-mini",name:"GPT-5 Mini (Puter)"},{id:"gpt-5",name:"GPT-5 (Puter)"},{id:"o3-mini",name:"OpenAI o3-mini (Puter)"},{id:"o3",name:"OpenAI o3 (Puter)"},{id:"o4-mini",name:"OpenAI o4-mini (Puter)"},{id:"claude-haiku-4-5",name:"Claude Haiku 4.5 (Puter)"},{id:"claude-sonnet-4-5",name:"Claude Sonnet 4.5 (Puter)"},{id:"claude-opus-4-5",name:"Claude Opus 4.5 (Puter)"},{id:"claude-sonnet-4",name:"Claude Sonnet 4 (Puter)"},{id:"claude-opus-4",name:"Claude Opus 4 (Puter)"},{id:"google/gemini-2.0-flash",name:"Gemini 2.0 Flash (Puter)"},{id:"google/gemini-2.5-flash",name:"Gemini 2.5 Flash (Puter)"},{id:"google/gemini-2.5-pro",name:"Gemini 2.5 Pro (Puter)"},{id:"google/gemini-3-flash",name:"Gemini 3 Flash (Puter)"},{id:"google/gemini-3-pro",name:"Gemini 3 Pro (Puter)"},{id:"deepseek/deepseek-chat",name:"DeepSeek Chat (Puter)"},{id:"deepseek/deepseek-r1",name:"DeepSeek R1 (Puter)"},{id:"deepseek/deepseek-v3.2",name:"DeepSeek V3.2 (Puter)"},{id:"x-ai/grok-3",name:"Grok 3 (Puter)"},{id:"x-ai/grok-3-mini",name:"Grok 3 Mini (Puter)"},{id:"x-ai/grok-4",name:"Grok 4 (Puter)"},{id:"x-ai/grok-4-fast",name:"Grok 4 Fast (Puter)"},{id:"llama-4-scout",name:"Llama 4 Scout (Puter)"},{id:"llama-4-maverick",name:"Llama 4 Maverick (Puter)"},{id:"llama-3.3-70b-instruct",name:"Llama 3.3 70B (Puter)"},{id:"mistral-small-latest",name:"Mistral Small (Puter)"},{id:"mistral-medium-latest",name:"Mistral Medium (Puter)"},{id:"open-mistral-nemo",name:"Mistral Nemo (Puter)"},{id:"qwen/qwen3-235b-a22b",name:"Qwen3 235B (Puter)"},{id:"qwen/qwen3-32b",name:"Qwen3 32B (Puter)"},{id:"qwen/qwen3-coder",name:"Qwen3 Coder 480B (Puter)"}],passthroughModels:!0},"cloudflare-ai":{id:"cloudflare-ai",alias:"cf",format:"openai",executor:"cloudflare-ai",baseUrl:"https://api.cloudflare.com/client/v4/accounts",authType:"apikey",authHeader:"bearer",models:[{id:"@cf/meta/llama-3.3-70b-instruct",name:"Llama 3.3 70B (🆓 ~150 resp/day)"},{id:"@cf/meta/llama-3.1-8b-instruct",name:"Llama 3.1 8B (🆓)"},{id:"@cf/google/gemma-3-12b-it",name:"Gemma 3 12B (🆓)"},{id:"@cf/mistral/mistral-7b-instruct-v0.2-lora",name:"Mistral 7B (🆓)"},{id:"@cf/qwen/qwen2.5-coder-15b-instruct",name:"Qwen 2.5 Coder 15B (🆓)"},{id:"@cf/deepseek-ai/deepseek-r1-distill-qwen-32b",name:"DeepSeek R1 Distill 32B (🆓)"}]},scaleway:{id:"scaleway",alias:"scw",format:"openai",executor:"default",baseUrl:"https://api.scaleway.ai/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"qwen3-235b-a22b-instruct-2507",name:"Qwen3 235B A22B (1M free tok 🆓)"},{id:"llama-3.1-70b-instruct",name:"Llama 3.1 70B (🆓 EU)"},{id:"llama-3.1-8b-instruct",name:"Llama 3.1 8B (🆓 EU)"},{id:"mistral-small-3.2-24b-instruct-2506",name:"Mistral Small 3.2 (🆓 EU)"},{id:"deepseek-v3-0324",name:"DeepSeek V3 (🆓 EU)"},{id:"gpt-oss-120b",name:"GPT-OSS 120B (🆓 EU)"}]},aimlapi:{id:"aimlapi",alias:"aiml",format:"openai",executor:"default",baseUrl:"https://api.aimlapi.com/v1/chat/completions",authType:"apikey",authHeader:"bearer",models:[{id:"gpt-4o",name:"GPT-4o (via AI/ML API)"},{id:"claude-3-5-sonnet-20241022",name:"Claude 3.5 Sonnet (via AI/ML API)"},{id:"gemini-1.5-pro",name:"Gemini 1.5 Pro (via AI/ML API)"},{id:"meta-llama/Meta-Llama-3.1-70B-Instruct-Turbo",name:"Llama 3.1 70B (via AI/ML API)"},{id:"deepseek-chat",name:"DeepSeek Chat (via AI/ML API)"},{id:"mistral-large-latest",name:"Mistral Large (via AI/ML API)"}],passthroughModels:!0}};[..."u">typeof process&&process.env.LOCAL_HOSTNAMES?process.env.LOCAL_HOSTNAMES.split(",").map(a=>a.trim()).filter(Boolean):[]],(()=>{try{let a=new Set;for(let b of Object.values(e))b.passthroughModels&&a.add(b.id);return a}catch{return null}})();let f=new Map;for(let a of Object.values(e))a.alias&&a.alias!==a.id&&f.set(a.alias,a);let g=new Map;for(let a of Object.values(e))for(let b of a.models)b.unsupportedParams&&!g.has(b.id)&&g.set(b.id,b.unsupportedParams);let h=function(){let a={};for(let b of Object.values(e))if(b.models&&b.models.length>0){let c=b.alias||b.id;a[c]||(a[c]=b.models)}return a}(),i=function(){let a={};for(let b of Object.values(e))a[b.id]=b.alias||b.id;return a}();a.s(["PROVIDER_ID_TO_ALIAS",0,i,"PROVIDER_MODELS",0,h,"getModelsByProviderId",0,function(a){return h[i[a]||a]||[]}],911655)},867933,a=>a.a(async(b,c)=>{try{var d=a.i(911655),e=a.i(662073),f=b([e]);[e]=f.then?(await f)():f,Object.entries(e.AI_PROVIDERS).filter(([,a])=>a.passthroughModels).map(([a])=>a),Object.entries(d.PROVIDER_MODELS).flatMap(([a,b])=>b.map(b=>({provider:a,model:b.id,name:b.name}))),a.s([]),c()}catch(a){c(a)}},!1),817648,a=>a.a(async(b,c)=>{try{var d=a.i(137849),e=a.i(662073),f=a.i(867933),g=b([e,f]);[e,f]=g.then?(await g)():g;let h={name:"OmniRoute",description:"AI Gateway for Multi-Provider LLMs",version:d.default.version};a.s(["APP_CONFIG",0,h,"THEME_CONFIG",0,{storageKey:"theme",defaultTheme:"system"}]),c()}catch(a){c(a)}},!1),788164,a=>a.a(async(b,c)=>{try{var d=a.i(920226),e=a.i(862435),f=a.i(817648),g=b([f]);[f]=g.then?(await g)():g;let j=(0,d.create)()((0,e.persist)((a,b)=>({theme:f.THEME_CONFIG.defaultTheme,colorTheme:"coral",customColor:"#3b82f6",setTheme:b=>{a({theme:b}),h(b)},setColorTheme:c=>{a({colorTheme:c}),i(c,b().customColor)},setCustomColorTheme:b=>{let c,d,e=(d=(c=(b||"").trim()).startsWith("#")?c:`#${c}`,/^#([0-9a-fA-F]{6})$/.test(d)?d.toLowerCase():"#3b82f6");a({colorTheme:"custom",customColor:e}),i("custom",e)},toggleTheme:()=>{let c=b().theme,d="dark"===c?"light":"dark";a({theme:d}),h(d)},initTheme:()=>{let{theme:a,colorTheme:c,customColor:d}=b();h(a),i(c,d)}}),{name:f.THEME_CONFIG.storageKey}));function h(a){}function i(a,b){}a.s(["COLOR_THEMES",0,{coral:"#e54d5e",blue:"#3b82f6",red:"#ef4444",green:"#22c55e",violet:"#8b5cf6",orange:"#f97316",cyan:"#06b6d4"},"default",0,j]),c()}catch(a){c(a)}},!1),561487,a=>a.a(async(b,c)=>{try{var d=a.i(187924),e=a.i(572131),f=a.i(788164),g=b([f]);[f]=g.then?(await g)():g,a.s(["ThemeProvider",0,function({children:a}){let{initTheme:b}=(0,f.default)();return(0,e.useEffect)(()=>{b()},[b]),(0,d.jsx)(d.Fragment,{children:a})}]),c()}catch(a){c(a)}},!1)];
3
3
 
4
4
  //# sourceMappingURL=_0oo1f90._.js.map