omniroute 1.6.3 → 1.6.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (226) hide show
  1. package/README.ar.md +131 -178
  2. package/README.bg.md +132 -259
  3. package/README.da.md +132 -259
  4. package/README.de.md +85 -129
  5. package/README.es.md +89 -129
  6. package/README.fi.md +133 -260
  7. package/README.fr.md +87 -129
  8. package/README.he.md +132 -259
  9. package/README.hu.md +132 -259
  10. package/README.id.md +132 -259
  11. package/README.in.md +75 -140
  12. package/README.it.md +85 -129
  13. package/README.ja.md +132 -178
  14. package/README.ko.md +132 -259
  15. package/README.md +172 -286
  16. package/README.ms.md +132 -259
  17. package/README.nl.md +132 -259
  18. package/README.no.md +132 -259
  19. package/README.phi.md +133 -260
  20. package/README.pl.md +133 -260
  21. package/README.pt-BR.md +100 -129
  22. package/README.pt.md +135 -262
  23. package/README.ro.md +133 -260
  24. package/README.ru.md +85 -129
  25. package/README.sk.md +132 -259
  26. package/README.sv.md +132 -259
  27. package/README.th.md +132 -259
  28. package/README.uk-UA.md +132 -259
  29. package/README.vi.md +132 -259
  30. package/README.zh-CN.md +85 -129
  31. package/app/.next/BUILD_ID +1 -1
  32. package/app/.next/app-path-routes-manifest.json +30 -30
  33. package/app/.next/build-manifest.json +2 -2
  34. package/app/.next/prerender-manifest.json +3 -3
  35. package/app/.next/server/app/(dashboard)/dashboard/analytics/page_client-reference-manifest.js +1 -1
  36. package/app/.next/server/app/(dashboard)/dashboard/api-manager/page_client-reference-manifest.js +1 -1
  37. package/app/.next/server/app/(dashboard)/dashboard/audit-log/page_client-reference-manifest.js +1 -1
  38. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  39. package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  40. package/app/.next/server/app/(dashboard)/dashboard/costs/page_client-reference-manifest.js +1 -1
  41. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  42. package/app/.next/server/app/(dashboard)/dashboard/health/page_client-reference-manifest.js +1 -1
  43. package/app/.next/server/app/(dashboard)/dashboard/limits/page_client-reference-manifest.js +1 -1
  44. package/app/.next/server/app/(dashboard)/dashboard/logs/page_client-reference-manifest.js +1 -1
  45. package/app/.next/server/app/(dashboard)/dashboard/onboarding/page_client-reference-manifest.js +1 -1
  46. package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  47. package/app/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  48. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  49. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  50. package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  51. package/app/.next/server/app/(dashboard)/dashboard/settings/page_client-reference-manifest.js +1 -1
  52. package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  53. package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  54. package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  55. package/app/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  56. package/app/.next/server/app/_global-error.html +2 -2
  57. package/app/.next/server/app/_global-error.rsc +1 -1
  58. package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  59. package/app/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  60. package/app/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  61. package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  62. package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  63. package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  64. package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  65. package/app/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  66. package/app/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  67. package/app/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  68. package/app/.next/server/app/api/cache/route.js +2 -2
  69. package/app/.next/server/app/api/cache/route_client-reference-manifest.js +1 -1
  70. package/app/.next/server/app/api/cache/stats/route.js +1 -1
  71. package/app/.next/server/app/api/cache/stats/route_client-reference-manifest.js +1 -1
  72. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
  73. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route_client-reference-manifest.js +1 -1
  74. package/app/.next/server/app/api/cli-tools/antigravity-mitm/route.js +2 -2
  75. package/app/.next/server/app/api/cli-tools/antigravity-mitm/route_client-reference-manifest.js +1 -1
  76. package/app/.next/server/app/api/cli-tools/backups/route.js +1 -1
  77. package/app/.next/server/app/api/cli-tools/backups/route_client-reference-manifest.js +1 -1
  78. package/app/.next/server/app/api/cli-tools/claude-settings/route.js +2 -2
  79. package/app/.next/server/app/api/cli-tools/claude-settings/route_client-reference-manifest.js +1 -1
  80. package/app/.next/server/app/api/cli-tools/cline-settings/route.js +1 -1
  81. package/app/.next/server/app/api/cli-tools/cline-settings/route_client-reference-manifest.js +1 -1
  82. package/app/.next/server/app/api/cli-tools/codex-profiles/route.js +2 -2
  83. package/app/.next/server/app/api/cli-tools/codex-profiles/route_client-reference-manifest.js +1 -1
  84. package/app/.next/server/app/api/cli-tools/codex-settings/route.js +2 -2
  85. package/app/.next/server/app/api/cli-tools/codex-settings/route_client-reference-manifest.js +1 -1
  86. package/app/.next/server/app/api/cli-tools/droid-settings/route.js +2 -2
  87. package/app/.next/server/app/api/cli-tools/droid-settings/route_client-reference-manifest.js +1 -1
  88. package/app/.next/server/app/api/cli-tools/guide-settings/[toolId]/route_client-reference-manifest.js +1 -1
  89. package/app/.next/server/app/api/cli-tools/kilo-settings/route.js +1 -1
  90. package/app/.next/server/app/api/cli-tools/kilo-settings/route_client-reference-manifest.js +1 -1
  91. package/app/.next/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
  92. package/app/.next/server/app/api/cli-tools/openclaw-settings/route_client-reference-manifest.js +1 -1
  93. package/app/.next/server/app/api/cli-tools/runtime/[toolId]/route.js +2 -2
  94. package/app/.next/server/app/api/cli-tools/runtime/[toolId]/route_client-reference-manifest.js +1 -1
  95. package/app/.next/server/app/api/cli-tools/status/route.js +1 -1
  96. package/app/.next/server/app/api/cli-tools/status/route_client-reference-manifest.js +1 -1
  97. package/app/.next/server/app/api/cloud/auth/route_client-reference-manifest.js +1 -1
  98. package/app/.next/server/app/api/cloud/credentials/update/route_client-reference-manifest.js +1 -1
  99. package/app/.next/server/app/api/cloud/model/resolve/route_client-reference-manifest.js +1 -1
  100. package/app/.next/server/app/api/cloud/models/alias/route_client-reference-manifest.js +1 -1
  101. package/app/.next/server/app/api/combos/[id]/route_client-reference-manifest.js +1 -1
  102. package/app/.next/server/app/api/combos/metrics/route_client-reference-manifest.js +1 -1
  103. package/app/.next/server/app/api/combos/route_client-reference-manifest.js +1 -1
  104. package/app/.next/server/app/api/combos/test/route_client-reference-manifest.js +1 -1
  105. package/app/.next/server/app/api/compliance/audit-log/route_client-reference-manifest.js +1 -1
  106. package/app/.next/server/app/api/db-backups/export/route_client-reference-manifest.js +1 -1
  107. package/app/.next/server/app/api/db-backups/exportAll/route_client-reference-manifest.js +1 -1
  108. package/app/.next/server/app/api/db-backups/import/route_client-reference-manifest.js +1 -1
  109. package/app/.next/server/app/api/db-backups/route_client-reference-manifest.js +1 -1
  110. package/app/.next/server/app/api/evals/[suiteId]/route_client-reference-manifest.js +1 -1
  111. package/app/.next/server/app/api/evals/route_client-reference-manifest.js +1 -1
  112. package/app/.next/server/app/api/fallback/chains/route_client-reference-manifest.js +1 -1
  113. package/app/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  114. package/app/.next/server/app/api/keys/[id]/route_client-reference-manifest.js +1 -1
  115. package/app/.next/server/app/api/keys/route_client-reference-manifest.js +1 -1
  116. package/app/.next/server/app/api/logs/console/route_client-reference-manifest.js +1 -1
  117. package/app/.next/server/app/api/models/alias/route_client-reference-manifest.js +1 -1
  118. package/app/.next/server/app/api/models/availability/route_client-reference-manifest.js +1 -1
  119. package/app/.next/server/app/api/models/catalog/route_client-reference-manifest.js +1 -1
  120. package/app/.next/server/app/api/models/route.js +1 -1
  121. package/app/.next/server/app/api/models/route_client-reference-manifest.js +1 -1
  122. package/app/.next/server/app/api/monitoring/health/route.js +1 -1
  123. package/app/.next/server/app/api/monitoring/health/route_client-reference-manifest.js +1 -1
  124. package/app/.next/server/app/api/oauth/[provider]/[action]/route_client-reference-manifest.js +1 -1
  125. package/app/.next/server/app/api/oauth/cursor/auto-import/route_client-reference-manifest.js +1 -1
  126. package/app/.next/server/app/api/oauth/cursor/import/route_client-reference-manifest.js +1 -1
  127. package/app/.next/server/app/api/oauth/kiro/auto-import/route_client-reference-manifest.js +1 -1
  128. package/app/.next/server/app/api/oauth/kiro/import/route_client-reference-manifest.js +1 -1
  129. package/app/.next/server/app/api/oauth/kiro/social-authorize/route_client-reference-manifest.js +1 -1
  130. package/app/.next/server/app/api/oauth/kiro/social-exchange/route_client-reference-manifest.js +1 -1
  131. package/app/.next/server/app/api/policies/route_client-reference-manifest.js +1 -1
  132. package/app/.next/server/app/api/pricing/defaults/route_client-reference-manifest.js +1 -1
  133. package/app/.next/server/app/api/pricing/models/route_client-reference-manifest.js +1 -1
  134. package/app/.next/server/app/api/pricing/route_client-reference-manifest.js +1 -1
  135. package/app/.next/server/app/api/provider-metrics/route_client-reference-manifest.js +1 -1
  136. package/app/.next/server/app/api/provider-models/route_client-reference-manifest.js +1 -1
  137. package/app/.next/server/app/api/provider-nodes/[id]/route_client-reference-manifest.js +1 -1
  138. package/app/.next/server/app/api/provider-nodes/route_client-reference-manifest.js +1 -1
  139. package/app/.next/server/app/api/provider-nodes/validate/route_client-reference-manifest.js +1 -1
  140. package/app/.next/server/app/api/providers/[id]/models/route_client-reference-manifest.js +1 -1
  141. package/app/.next/server/app/api/providers/[id]/route_client-reference-manifest.js +1 -1
  142. package/app/.next/server/app/api/providers/[id]/test/route_client-reference-manifest.js +1 -1
  143. package/app/.next/server/app/api/providers/client/route_client-reference-manifest.js +1 -1
  144. package/app/.next/server/app/api/providers/route.js +1 -1
  145. package/app/.next/server/app/api/providers/route_client-reference-manifest.js +1 -1
  146. package/app/.next/server/app/api/providers/test-batch/route_client-reference-manifest.js +1 -1
  147. package/app/.next/server/app/api/providers/validate/route_client-reference-manifest.js +1 -1
  148. package/app/.next/server/app/api/rate-limit/route_client-reference-manifest.js +1 -1
  149. package/app/.next/server/app/api/rate-limits/route_client-reference-manifest.js +1 -1
  150. package/app/.next/server/app/api/resilience/reset/route_client-reference-manifest.js +1 -1
  151. package/app/.next/server/app/api/resilience/route_client-reference-manifest.js +1 -1
  152. package/app/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
  153. package/app/.next/server/app/api/sessions/route_client-reference-manifest.js +1 -1
  154. package/app/.next/server/app/api/settings/combo-defaults/route_client-reference-manifest.js +1 -1
  155. package/app/.next/server/app/api/settings/ip-filter/route_client-reference-manifest.js +1 -1
  156. package/app/.next/server/app/api/settings/proxy/route_client-reference-manifest.js +1 -1
  157. package/app/.next/server/app/api/settings/proxy/test/route_client-reference-manifest.js +1 -1
  158. package/app/.next/server/app/api/settings/require-login/route_client-reference-manifest.js +1 -1
  159. package/app/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
  160. package/app/.next/server/app/api/settings/system-prompt/route_client-reference-manifest.js +1 -1
  161. package/app/.next/server/app/api/settings/thinking-budget/route_client-reference-manifest.js +1 -1
  162. package/app/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  163. package/app/.next/server/app/api/storage/health/route_client-reference-manifest.js +1 -1
  164. package/app/.next/server/app/api/sync/cloud/route_client-reference-manifest.js +1 -1
  165. package/app/.next/server/app/api/sync/initialize/route_client-reference-manifest.js +1 -1
  166. package/app/.next/server/app/api/tags/route_client-reference-manifest.js +1 -1
  167. package/app/.next/server/app/api/telemetry/summary/route_client-reference-manifest.js +1 -1
  168. package/app/.next/server/app/api/token-health/route_client-reference-manifest.js +1 -1
  169. package/app/.next/server/app/api/translator/detect/route_client-reference-manifest.js +1 -1
  170. package/app/.next/server/app/api/translator/history/route_client-reference-manifest.js +1 -1
  171. package/app/.next/server/app/api/translator/load/route_client-reference-manifest.js +1 -1
  172. package/app/.next/server/app/api/translator/save/route_client-reference-manifest.js +1 -1
  173. package/app/.next/server/app/api/translator/send/route_client-reference-manifest.js +1 -1
  174. package/app/.next/server/app/api/translator/translate/route_client-reference-manifest.js +1 -1
  175. package/app/.next/server/app/api/usage/[connectionId]/route_client-reference-manifest.js +1 -1
  176. package/app/.next/server/app/api/usage/analytics/route_client-reference-manifest.js +1 -1
  177. package/app/.next/server/app/api/usage/budget/route_client-reference-manifest.js +1 -1
  178. package/app/.next/server/app/api/usage/call-logs/[id]/route_client-reference-manifest.js +1 -1
  179. package/app/.next/server/app/api/usage/call-logs/route_client-reference-manifest.js +1 -1
  180. package/app/.next/server/app/api/usage/history/route_client-reference-manifest.js +1 -1
  181. package/app/.next/server/app/api/usage/logs/route_client-reference-manifest.js +1 -1
  182. package/app/.next/server/app/api/usage/proxy-logs/route.js +3 -3
  183. package/app/.next/server/app/api/usage/proxy-logs/route_client-reference-manifest.js +1 -1
  184. package/app/.next/server/app/api/usage/request-logs/route_client-reference-manifest.js +1 -1
  185. package/app/.next/server/app/api/v1/api/chat/route_client-reference-manifest.js +1 -1
  186. package/app/.next/server/app/api/v1/audio/speech/route_client-reference-manifest.js +1 -1
  187. package/app/.next/server/app/api/v1/audio/transcriptions/route_client-reference-manifest.js +1 -1
  188. package/app/.next/server/app/api/v1/chat/completions/route_client-reference-manifest.js +1 -1
  189. package/app/.next/server/app/api/v1/embeddings/route_client-reference-manifest.js +1 -1
  190. package/app/.next/server/app/api/v1/images/generations/route_client-reference-manifest.js +1 -1
  191. package/app/.next/server/app/api/v1/messages/count_tokens/route_client-reference-manifest.js +1 -1
  192. package/app/.next/server/app/api/v1/messages/route_client-reference-manifest.js +1 -1
  193. package/app/.next/server/app/api/v1/models/route_client-reference-manifest.js +1 -1
  194. package/app/.next/server/app/api/v1/moderations/route_client-reference-manifest.js +1 -1
  195. package/app/.next/server/app/api/v1/providers/[provider]/chat/completions/route_client-reference-manifest.js +1 -1
  196. package/app/.next/server/app/api/v1/providers/[provider]/embeddings/route_client-reference-manifest.js +1 -1
  197. package/app/.next/server/app/api/v1/providers/[provider]/images/generations/route_client-reference-manifest.js +1 -1
  198. package/app/.next/server/app/api/v1/rerank/route_client-reference-manifest.js +1 -1
  199. package/app/.next/server/app/api/v1/responses/route_client-reference-manifest.js +1 -1
  200. package/app/.next/server/app/api/v1/route_client-reference-manifest.js +1 -1
  201. package/app/.next/server/app/api/v1beta/models/[...path]/route_client-reference-manifest.js +1 -1
  202. package/app/.next/server/app/api/v1beta/models/route_client-reference-manifest.js +1 -1
  203. package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
  204. package/app/.next/server/app/docs/page.js +1 -1
  205. package/app/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  206. package/app/.next/server/app/forbidden/page_client-reference-manifest.js +1 -1
  207. package/app/.next/server/app/forgot-password/page_client-reference-manifest.js +1 -1
  208. package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
  209. package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
  210. package/app/.next/server/app/page_client-reference-manifest.js +1 -1
  211. package/app/.next/server/app/privacy/page_client-reference-manifest.js +1 -1
  212. package/app/.next/server/app/terms/page_client-reference-manifest.js +1 -1
  213. package/app/.next/server/app-paths-manifest.json +30 -30
  214. package/app/.next/server/chunks/2767.js +11 -11
  215. package/app/.next/server/chunks/5393.js +1 -1
  216. package/app/.next/server/chunks/7109.js +3 -3
  217. package/app/.next/server/chunks/7230.js +5 -5
  218. package/app/.next/server/pages/500.html +2 -2
  219. package/app/.next/server/server-reference-manifest.js +1 -1
  220. package/app/.next/server/server-reference-manifest.json +1 -1
  221. package/app/.next/static/chunks/{5846-8360aca41de8628b.js → 5846-79cfb6380345004d.js} +1 -1
  222. package/app/package.json +10 -2
  223. package/bin/omniroute.mjs +71 -7
  224. package/package.json +10 -2
  225. /package/app/.next/static/{iqSCUTEzH78lajJjqTmE_ → 3vFcTa-1x8yNMMbXwOlmb}/_buildManifest.js +0 -0
  226. /package/app/.next/static/{iqSCUTEzH78lajJjqTmE_ → 3vFcTa-1x8yNMMbXwOlmb}/_ssgManifest.js +0 -0
@@ -1,2 +1,2 @@
1
1
  exports.id=5393,exports.ids=[5393],exports.modules={3845:(a,b,c)=>{var d={"./ar.json":[48464,8464],"./bg.json":[60944,944],"./da.json":[18976,8976],"./de.json":[22372,2372],"./en.json":[31960,1960],"./es.json":[87011,7011],"./fi.json":[96118,6118],"./fr.json":[53911,3911],"./he.json":[51248,1248],"./hu.json":[50496,496],"./id.json":[16930,6930],"./in.json":[30708,708],"./it.json":[32594,2594],"./ja.json":[37650,7650],"./ko.json":[79837,9837],"./ms.json":[55752,3371],"./nl.json":[35097,5097],"./no.json":[88220,8220],"./phi.json":[28706,8706],"./pl.json":[99119,9119],"./pt-BR.json":[41990,1990],"./pt.json":[11623,1623],"./ro.json":[71880,1880],"./ru.json":[61526,1526],"./sk.json":[25945,5945],"./sv.json":[85094,5094],"./th.json":[55047,5047],"./uk-UA.json":[11584,1584],"./vi.json":[22214,2214],"./zh-CN.json":[65521,5521]};function e(a){if(!c.o(d,a))return Promise.resolve().then(()=>{var b=Error("Cannot find module '"+a+"'");throw b.code="MODULE_NOT_FOUND",b});var b=d[a],e=b[0];return c.e(b[1]).then(()=>c.t(e,19))}e.keys=()=>Object.keys(d),e.id=3845,a.exports=e},7224:(a,b,c)=>{Promise.resolve().then(c.bind(c,67045))},8979:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/home/runner/work/OmniRoute/OmniRoute/src/app/not-found.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/OmniRoute/OmniRoute/src/app/not-found.tsx","default")},12608:(a,b,c)=>{Promise.resolve().then(c.bind(c,8979))},17084:(a,b,c)=>{"use strict";c.d(b,{Q2:()=>o,DI:()=>l,fg:()=>j,MA:()=>p,IS:()=>h,zN:()=>i,JH:()=>k,wb:()=>s,wG:()=>r,zt:()=>q,gb:()=>n,mq:()=>m});var d=c(60258);let e=d.Ikc({id:d.YjP().min(1),alias:d.YjP().min(1),name:d.YjP().min(1),icon:d.YjP().min(1),color:d.YjP().regex(/^#[0-9A-Fa-f]{6}$/,"Must be a valid hex color (#RRGGBB)"),textIcon:d.YjP().optional(),website:d.YjP().url().optional(),passthroughModels:d.zMY().optional()}),f=d.g1P(d.YjP(),e);function g(a,b){let c=f.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
- ${a}`),Error(`Provider validation failed for ${b}`)}}let h={iflow:{id:"iflow",alias:"if",name:"iFlow AI",icon:"water_drop",color:"#6366F1"},qwen:{id:"qwen",alias:"qw",name:"Qwen Code",icon:"psychology",color:"#10B981"},"gemini-cli":{id:"gemini-cli",alias:"gc",name:"Gemini CLI",icon:"terminal",color:"#4285F4"},kiro:{id:"kiro",alias:"kr",name:"Kiro AI",icon:"psychology_alt",color:"#FF6B35"}},i={claude:{id:"claude",alias:"cc",name:"Claude Code",icon:"smart_toy",color:"#D97757"},antigravity:{id:"antigravity",alias:"ag",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"}},j={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"},kimi:{id:"kimi",alias:"kimi",name:"Kimi",icon:"psychology",color:"#1E3A8A",textIcon:"KM",website:"https://kimi.moonshot.cn"},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"},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",icon:"diamond",color:"#4285F4",textIcon:"GE",website:"https://ai.google.dev"},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"},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"},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://www.cerebras.ai"},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://developer.nvidia.com/nim"},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"}},k="openai-compatible-",l="anthropic-compatible-";function m(a){return"string"==typeof a&&a.startsWith(k)}function n(a){return"string"==typeof a&&a.startsWith(l)}let o={...h,...i,...j},p={oauth:{id:"oauth",name:"OAuth",icon:"lock"},apikey:{id:"apikey",name:"API Key",icon:"key"}};function q(a){for(let b of Object.values(o))if(b.alias===a||b.id===a)return b;return null}function r(a){let b=o[a];return b?.alias||a}Object.values(o).reduce((a,b)=>(a[b.alias]=b.id,a),{}),Object.values(o).reduce((a,b)=>(a[b.id]=b.alias,a),{});let s=["antigravity","kiro","github","codex","claude"];g(h,"FREE_PROVIDERS"),g(i,"OAUTH_PROVIDERS"),g(j,"APIKEY_PROVIDERS")},21280:(a,b,c)=>{"use strict";c.d(b,{S_:()=>m});var d=c(22901),e=c(87068);let f="[HealthCheck]",g=null,h=0,i=null;async function j(){let a=Date.now();return null!==g&&a-h<3e4?g:null!==i?i:i=(async()=>{try{let b=await (0,d.V7)();return g=!0===b.hideHealthCheckLogs,h=a,g}catch{return!1}finally{i=null}})()}function k(a,...b){j().then(c=>{c||console.log(a,...b)})}function l(a,...b){j().then(c=>{c||console.error(a,...b)})}function m(){g=null,h=0}let n=!1;async function o(){try{let a=await (0,d.getProviderConnections)({authType:"oauth"});if(!a||0===a.length)return;for(let b of a)try{await p(b)}catch(a){l(`${f} Error checking ${b.name||b.id}:`,a.message)}}catch(a){l(`${f} Sweep error:`,a.message)}}async function p(a){let b=a.healthCheckInterval??60;if(b<=0||!a.isActive||!a.refreshToken||"string"!=typeof a.refreshToken||"expired"===a.testStatus)return;if(!(0,e.Ny)(a.provider)){let b=new Date().toISOString();await (0,d.rj)(a.id,{lastHealthCheckAt:b}),k(`${f} Skipping ${a.provider}/${a.name||a.email||a.id} (refresh unsupported)`);return}let c=a.lastHealthCheckAt?new Date(a.lastHealthCheckAt).getTime():0;if(Date.now()-c<60*b*1e3)return;k(`${f} Refreshing ${a.provider}/${a.name||a.email||a.id} (interval: ${b}min)`);let g={refreshToken:a.refreshToken,accessToken:a.accessToken,expiresAt:a.tokenExpiresAt,providerSpecificData:a.providerSpecificData},h=await j(),i=await (0,e.iD)(a.provider,g,{info:(a,b)=>{h||console.log(`${f} [${a}] ${b}`)},warn:(a,b)=>{h||console.warn(`${f} [${a}] ${b}`)},error:(a,b,c)=>{h||console.error(`${f} [${a}] ${b}`,c||"")}}),m=new Date().toISOString();if((0,e.jT)(i)){await (0,d.rj)(a.id,{lastHealthCheckAt:m,testStatus:"expired",lastError:`Refresh token consumed (${i.error}). Please re-authenticate this account.`,lastErrorAt:m,lastErrorType:i.error,lastErrorSource:"oauth",errorCode:i.error,isActive:!1,refreshToken:null}),l(`${f} ✗ ${a.provider}/${a.name||a.email||a.id} — Refresh token is permanently invalid (${i.error}). Connection deactivated. Re-authenticate to restore.`);return}if(i&&i.accessToken){let b={accessToken:i.accessToken,lastHealthCheckAt:m,testStatus:"active",lastError:null,lastErrorAt:null,lastErrorType:null,lastErrorSource:null,errorCode:null};i.refreshToken&&(b.refreshToken=i.refreshToken),i.expiresIn&&(b.tokenExpiresAt=new Date(Date.now()+1e3*i.expiresIn).toISOString()),await (0,d.rj)(a.id,b),k(`${f} ✓ ${a.provider}/${a.name||a.email||a.id} refreshed`)}else await (0,d.rj)(a.id,{lastHealthCheckAt:m,testStatus:"error",lastError:"Health check: token refresh failed",lastErrorAt:m,lastErrorType:"token_refresh_failed",lastErrorSource:"oauth",errorCode:"refresh_failed"}),function(a,...b){j().then(c=>{c||console.warn(a,...b)})}(`${f} ✗ ${a.provider}/${a.name||a.email||a.id} refresh failed`)}n=!0,k(`${f} Starting proactive token health-check (tick every 60s)`),setTimeout(()=>{o(),setInterval(o,6e4)},1e4)},32444:(a,b,c)=>{"use strict";c.d(b,{ThemeProvider:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call ThemeProvider() from the server but ThemeProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/OmniRoute/OmniRoute/src/shared/components/ThemeProvider.tsx","ThemeProvider")},39710:(a,b,c)=>{Promise.resolve().then(c.bind(c,97507))},44438:(a,b,c)=>{Promise.resolve().then(c.bind(c,64385))},47695:(a,b,c)=>{"use strict";c.d(b,{A:()=>g});var d=c(31417),e=c(300),f=c(73959);let g=(0,d.v)()((0,e.Zr)((a,b)=>({theme:f.B2.defaultTheme,setTheme:b=>{a({theme:b})},toggleTheme:()=>{let c="dark"===b().theme?"light":"dark";a({theme:c})},initTheme:()=>{b().theme}}),{name:f.B2.storageKey}))},47825:(a,b,c)=>{"use strict";c.d(b,{KC:()=>d.KC,Xg:()=>d.Xg});var d=c(97319);Object.entries(c(17084).Q2).filter(([,a])=>a.passthroughModels).map(([a])=>a),Object.entries(d.vq).flatMap(([a,b])=>b.map(b=>({provider:a,model:b.id,name:b.name})))},49226:(a,b,c)=>{"use strict";c.d(b,{A:()=>l});var d=c(90357),e=c(22901);let{dashboardPort:f}=(0,c(83238).z)(),g=process.env.BASE_URL||process.env.NEXT_PUBLIC_BASE_URL||process.env.NEXT_PUBLIC_APP_URL||`http://localhost:${f}`;class h{constructor(a=null,b=15){this.machineId=a,this.intervalMinutes=b,this.intervalId=null}async initializeMachineId(){this.machineId||(this.machineId=await (0,d.Xj)())}async start(){this.intervalId||(await this.initializeMachineId(),setTimeout(()=>{this.syncWithRetry().catch(()=>{})},3e4),this.intervalId=setInterval(()=>{this.syncWithRetry().catch(()=>{})},60*this.intervalMinutes*1e3))}stop(){this.intervalId&&(clearInterval(this.intervalId),this.intervalId=null)}async syncWithRetry(a=1){for(let b=1;b<=a;b++)try{return await this.sync()}catch(d){if(b===a)return null;let c=Math.min(1e3*Math.pow(2,b),1e4);await new Promise(a=>setTimeout(a,c))}}async sync(){if(!await (0,e.Nx)())return null;await this.initializeMachineId();let a=await fetch(`${g}/api/sync/cloud`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({machineId:this.machineId,action:"sync"})});if(!a.ok)throw Error((await a.json().catch(()=>({}))).error||"Sync failed");return await a.json()}isRunning(){return null!==this.intervalId}}let i=null;async function j(a=null,b=15){return i||(i=new h(a,b)),i}async function k(){try{await (0,e.bI)();let a=await j(null,15);return await a.start(),a}catch(a){throw console.error("[CloudSync] Error initializing scheduler:",a),a}}a=c.hmd(a),c.c[c.s]===a&&k().catch(a=>console.error("[CloudSync] init failed:",a));let l=k},61135:()=>{},64385:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/home/runner/work/OmniRoute/OmniRoute/src/app/error.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/OmniRoute/OmniRoute/src/app/error.tsx","default")},67045:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>e});var d=c(48249);function e({error:a,reset:b}){return(0,d.jsx)("html",{lang:"en",children:(0,d.jsx)("body",{className:"flex flex-col items-center justify-center min-h-screen p-6 bg-[#0a0a0f] text-[#e0e0e0] font-[system-ui,-apple-system,sans-serif] text-center m-0",children:(0,d.jsxs)("main",{role:"alert","aria-live":"assertive",className:"flex flex-col items-center",children:[(0,d.jsx)("div",{className:"text-[64px] mb-4","aria-hidden":"true",children:"⚠️"}),(0,d.jsx)("h1",{className:"text-[28px] font-bold mb-2",children:"Something went wrong"}),(0,d.jsx)("p",{className:"text-[15px] text-[#888] max-w-[400px] leading-relaxed mb-6",children:"An unexpected error occurred. This has been logged and our team will investigate."}),!1,(0,d.jsx)("button",{onClick:b,"aria-label":"Retry loading the page",className:"px-8 py-3 rounded-[10px] text-white border-none text-sm font-semibold cursor-pointer transition-transform duration-200 shadow-[0_4px_16px_rgba(99,102,241,0.3)] hover:-translate-y-0.5 bg-gradient-to-br from-[#6366f1] to-[#8b5cf6] focus:outline-2 focus:outline-offset-2 focus:outline-[#6366f1]",children:"Try Again"})]})})})}},69199:(a,b,c)=>{Promise.resolve().then(c.bind(c,86392)),Promise.resolve().then(c.bind(c,32444))},73857:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>g});var d=c(48249),e=c(2116),f=c.n(e);function g(){return(0,d.jsxs)("div",{className:"flex flex-col items-center justify-center min-h-screen p-6 bg-bg text-text-main text-center",role:"main","aria-labelledby":"not-found-title",children:[(0,d.jsx)("div",{className:"text-[96px] font-extrabold leading-none mb-2 bg-gradient-to-br from-primary to-primary-hover bg-clip-text text-transparent","aria-hidden":"true",children:"404"}),(0,d.jsx)("h1",{id:"not-found-title",className:"text-2xl font-semibold mb-2",children:"Page not found"}),(0,d.jsx)("p",{className:"text-[15px] text-text-muted max-w-[400px] leading-relaxed mb-8",children:"The page you're looking for doesn't exist or has been moved."}),(0,d.jsx)(f(),{href:"/dashboard",className:"px-8 py-3 rounded-xl text-white text-sm font-medium no-underline transition-all duration-200 shadow-warm hover:-translate-y-0.5 bg-gradient-to-br from-primary to-primary-hover hover:shadow-elevated focus:outline-2 focus:outline-offset-2 focus:outline-primary","aria-label":"Return to dashboard",children:"Go to Dashboard"})]})}},73959:(a,b,c)=>{"use strict";c.d(b,{Q2:()=>d.Q2,fg:()=>d.fg,vQ:()=>e,MA:()=>d.MA,zN:()=>d.zN,B2:()=>f});var d=c(17084);c(47825);let e={name:"OmniRoute",description:"AI Gateway for Multi-Provider LLMs",version:"1.6.3"},f={storageKey:"theme",defaultTheme:"system"}},75146:(a,b,c)=>{"use strict";c.d(b,{ThemeProvider:()=>f});var d=c(48249);c(67484);var e=c(47695);function f({children:a}){let{initTheme:b}=(0,e.A)();return(0,d.jsx)(d.Fragment,{children:a})}},76160:(a,b,c)=>{Promise.resolve().then(c.bind(c,73857))},76537:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>m,metadata:()=>l});var d=c(5735),e=c(50609),f=c.n(e);c(61135);var g=c(32444);c(91057);var h=c(68625),i=c(62026),j=c(28440),k=c(83750);let l={title:"OmniRoute — AI Gateway for Multi-Provider LLMs",description:"OmniRoute is an AI gateway for multi-provider LLMs. One endpoint for all your AI providers.",icons:{icon:"/favicon.svg",apple:"/apple-touch-icon.svg"}};async function m({children:a}){let b=await (0,i.A)(),c=await (0,j.A)(),e=k.rB.includes(b);return(0,d.jsxs)("html",{lang:b,dir:e?"rtl":"ltr",suppressHydrationWarning:!0,children:[(0,d.jsxs)("head",{children:[(0,d.jsx)("link",{rel:"preconnect",href:"https://fonts.googleapis.com"}),(0,d.jsx)("link",{rel:"preconnect",href:"https://fonts.gstatic.com",crossOrigin:"anonymous"}),(0,d.jsx)("link",{href:"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=swap",rel:"stylesheet"})]}),(0,d.jsxs)("body",{className:`${f().variable} font-sans antialiased`,suppressHydrationWarning:!0,children:[(0,d.jsx)("a",{href:"#main-content",className:"sr-only focus:not-sr-only focus:absolute focus:top-2 focus:left-2 focus:z-50 focus:px-4 focus:py-2 focus:bg-[#6366f1] focus:text-white focus:rounded-lg focus:text-sm focus:font-semibold focus:shadow-lg",children:"Skip to content"}),(0,d.jsx)(h.A,{locale:b,messages:c,children:(0,d.jsx)(g.ThemeProvider,{children:a})})]})]})}},77447:(a,b,c)=>{Promise.resolve().then(c.bind(c,62626)),Promise.resolve().then(c.bind(c,75146))},79369:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,60440,23)),Promise.resolve().then(c.t.bind(c,84342,23)),Promise.resolve().then(c.t.bind(c,82265,23)),Promise.resolve().then(c.t.bind(c,35421,23)),Promise.resolve().then(c.t.bind(c,61335,23)),Promise.resolve().then(c.t.bind(c,70664,23)),Promise.resolve().then(c.bind(c,74661))},79803:(a,b,c)=>{"use strict";c.d(b,{A:()=>g});var d=c(29389),e=c(65573),f=c(83750);let g=(0,d.A)(async()=>{let a=await (0,e.UL)(),b=a.get(f.CL)?.value||"";b||(b=(await (0,e.b3)()).get("x-locale")||""),f.YZ.includes(b)||(b=f.Xn);let d=(await c(3845)(`./${b}.json`)).default;return{locale:b,messages:d}})},81227:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/home/runner/work/OmniRoute/OmniRoute/src/app/global-error.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/OmniRoute/OmniRoute/src/app/global-error.tsx","default")},83238:(a,b,c)=>{"use strict";function d(a,b){if(!a)return b;let c=Number.parseInt(String(a),10);return!Number.isFinite(c)||c<1||c>65535?b:c}function e(){let a=d(process.env.OMNIROUTE_PORT||process.env.PORT,20128),b=!!process.env.API_PORT,c=!!process.env.DASHBOARD_PORT;return{port:a,apiPort:d(process.env.API_PORT,a),dashboardPort:d(process.env.DASHBOARD_PORT,a),apiPortExplicit:b,dashboardPortExplicit:c}}c.d(b,{z:()=>e})},83750:(a,b,c)=>{"use strict";c.d(b,{CL:()=>g,Xn:()=>e,YZ:()=>d,rB:()=>f});let d=["en","pt-BR","es","fr","it","ru","zh-CN","de","in","th","uk-UA","ar","ja","vi","bg","da","fi","he","hu","id","ko","ms","nl","no","pt","ro","pl","sk","sv","phi"],e="en",f=["ar","he"],g="NEXT_LOCALE"},89097:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,15098,23)),Promise.resolve().then(c.t.bind(c,47644,23)),Promise.resolve().then(c.t.bind(c,33859,23)),Promise.resolve().then(c.t.bind(c,98099,23)),Promise.resolve().then(c.t.bind(c,16237,23)),Promise.resolve().then(c.t.bind(c,98562,23)),Promise.resolve().then(c.t.bind(c,36675,23))},90357:(a,b,c)=>{"use strict";c.d(b,{Xj:()=>e});var d=c(19713);async function e(a=null){let b=a||process.env.MACHINE_ID_SALT||"endpoint-proxy-salt";try{let a=(0,d.machineIdSync)();return(await Promise.resolve().then(c.t.bind(c,55511,23))).createHash("sha256").update(a+b).digest("hex").substring(0,16)}catch(a){return console.log("Error getting machine ID:",a),crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(a){let b=16*Math.random()|0;return("x"==a?b:3&b|8).toString(16)})}}},91057:(a,b,c)=>{"use strict";var d=c(49226);c(21280);let e=!1;(async function(){if(!e)try{await (0,d.A)(),e=!0}catch(a){console.error("[ServerInit] Error initializing cloud sync:",a)}return e})().catch(a=>console.error("[CloudSync] ensure failed:",a))},97319:(a,b,c)=>{"use strict";c.d(b,{Xg:()=>g,vq:()=>f,KC:()=>h});let d={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",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","Anthropic-Dangerous-Direct-Browser-Access":"true","User-Agent":"claude-cli/1.0.83 (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.55.1","X-Stainless-Runtime":"node","X-Stainless-Lang":"js","X-Stainless-Arch":"arm64","X-Stainless-Os":"MacOS","X-Stainless-Timeout":"60"},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-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",oauth:{clientIdEnv:"GEMINI_OAUTH_CLIENT_ID",clientIdDefault:"681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com",clientSecretEnv:"GEMINI_OAUTH_CLIENT_SECRET",clientSecretDefault:"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"},models:[{id:"gemini-3-pro-preview",name:"Gemini 3 Pro 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"}]},"gemini-cli":{id:"gemini-cli",alias:"gc",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",oauth:{clientIdEnv:"GEMINI_CLI_OAUTH_CLIENT_ID",clientIdDefault:"681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com",clientSecretEnv:"GEMINI_CLI_OAUTH_CLIENT_SECRET",clientSecretDefault:"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"},models:[{id:"gemini-3-flash-preview",name:"Gemini 3 Flash Preview"},{id:"gemini-3-pro-preview",name:"Gemini 3 Pro 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",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.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://portal.qwen.ai/v1/chat/completions",authType:"oauth",authHeader:"bearer",headers:{"User-Agent":"google-api-nodejs-client/9.15.1","X-Goog-Api-Client":"gl-node/22.17.0"},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"}]},iflow:{id:"iflow",alias:"if",format:"openai",executor:"iflow",baseUrl:"https://apis.iflow.cn/v1/chat/completions",authType:"oauth",authHeader:"bearer",headers:{"User-Agent":"iFlow-Cli"},oauth:{clientIdEnv:"IFLOW_OAUTH_CLIENT_ID",clientIdDefault:"10009311001",clientSecretEnv:"IFLOW_OAUTH_CLIENT_SECRET",clientSecretDefault:"4Z3YjXycVsQvyGF1etiNlIBB4RsqSDtW",tokenUrl:"https://iflow.cn/oauth/token",authUrl:"https://iflow.cn/oauth"},models:[{id:"qwen3-coder-plus",name:"Qwen3 Coder Plus"},{id:"kimi-k2",name:"Kimi K2"},{id:"kimi-k2-thinking",name:"Kimi K2 Thinking"},{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"deepseek-r1",name:"DeepSeek R1"},{id:"deepseek-v3.2-chat",name:"DeepSeek V3.2 Chat"},{id:"deepseek-v3.2-reasoner",name:"DeepSeek V3.2 Reasoner"},{id:"minimax-m2.1",name:"MiniMax M2.1"},{id:"glm-4.7",name:"GLM 4.7"}]},antigravity:{id:"antigravity",alias:"ag",format:"antigravity",executor:"antigravity",baseUrls:["https://daily-cloudcode-pa.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.104.0 darwin/arm64"},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.1-pro-high",name:"Gemini 3.1 Pro High"},{id:"gemini-3.1-pro-low",name:"Gemini 3.1 Pro Low"},{id:"gemini-3-flash",name:"Gemini 3 Flash"},{id:"gpt-oss-120b-medium",name:"GPT OSS 120B Medium"}]},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",headers:{"copilot-integration-id":"vscode-chat","editor-version":"vscode/1.107.1","editor-plugin-version":"copilot-chat/0.26.7","user-agent":"GitHubCopilotChat/0.26.7","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-3-flash-preview",name:"Gemini 3 Flash Preview"},{id:"gemini-3-pro-preview",name:"Gemini 3 Pro Preview"},{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",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",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.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",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"},{id:"o1-mini",name:"O1 Mini"}]},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",headers:{"Anthropic-Version":"2023-06-01"},models:[{id:"claude-sonnet-4-20250514",name:"Claude Sonnet 4"},{id:"claude-opus-4-20250514",name:"Claude Opus 4"},{id:"claude-3-5-sonnet-20241022",name:"Claude 3.5 Sonnet"}]},openrouter:{id:"openrouter",alias:"openrouter",format:"openai",executor:"default",baseUrl:"https://openrouter.ai/api/v1/chat/completions",authType:"apikey",authHeader:"bearer",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",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-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)"},{id:"glm-4.6",name:"GLM 4.6"},{id:"glm-4.5v",name:"GLM 4.5V (Vision)"},{id:"glm-4.5",name:"GLM 4.5"},{id:"glm-4.5-air",name:"GLM 4.5 Air"},{id:"glm-4-32b",name:"GLM 4 32B"}]},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"}]},"kimi-coding":{id:"kimi-coding",alias:"kmc",format:"claude",executor:"default",baseUrl:"https://api.kimi.com/coding/v1/messages",urlSuffix:"?beta=true",authType:"oauth",authHeader:"x-api-key",headers:{"Anthropic-Version":"2023-06-01","Anthropic-Beta":"claude-code-20250219,interleaved-thinking-2025-05-14"},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"},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"}]},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.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.1",name:"MiniMax M2.1"}]},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"}]},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",name:"Grok 4"},{id:"grok-4-fast-reasoning",name:"Grok 4 Fast Reasoning"},{id:"grok-code-fast-1",name:"Grok Code Fast"},{id:"grok-3",name:"Grok 3"}]},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",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"}]},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:"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:"nvidia/llama-3.3-70b-instruct",name:"Llama 3.3 70B"},{id:"meta/llama-4-maverick-17b-128e-instruct",name:"Llama 4 Maverick"},{id:"deepseek/deepseek-r1",name:"DeepSeek R1"}]},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"}]}},e=new Map;for(let a of Object.values(d))a.alias&&a.alias!==a.id&&e.set(a.alias,a);let f=function(){let a={};for(let b of Object.values(d))if(b.models&&b.models.length>0){let c=b.alias||b.id;a[c]||(a[c]=b.models)}return a}(),g=function(){let a={};for(let b of Object.values(d))a[b.id]=b.alias||b.id;return a}();function h(a){return f[g[a]||a]||[]}},97496:(a,b,c)=>{Promise.resolve().then(c.bind(c,81227))},97507:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>e});var d=c(48249);function e({error:a,reset:b}){return(0,d.jsxs)("div",{className:"flex flex-col items-center justify-center min-h-[60vh] p-6 text-center",role:"alert","aria-live":"assertive",children:[(0,d.jsx)("div",{className:"text-[64px] mb-4","aria-hidden":"true",children:"\uD83D\uDD27"}),(0,d.jsx)("h1",{className:"text-[28px] font-bold mb-2 text-[var(--color-text-main)]",children:"Internal Server Error"}),(0,d.jsx)("p",{className:"text-[15px] text-[var(--color-text-muted)] max-w-[400px] leading-relaxed mb-2",children:"Something went wrong while processing your request. Our team has been notified and is working on a fix."}),a?.digest&&(0,d.jsxs)("p",{className:"text-xs text-[var(--color-text-muted)] mb-6 font-mono",children:["Error ID: ",a.digest]}),!1,(0,d.jsxs)("div",{className:"flex gap-3",children:[(0,d.jsx)("button",{onClick:b,"aria-label":"Retry loading the page",className:"px-6 py-2.5 rounded-lg text-white text-sm font-semibold cursor-pointer transition-all duration-200 bg-[var(--color-accent)] hover:bg-[var(--color-accent-hover)] focus:outline-2 focus:outline-offset-2 focus:outline-[var(--color-accent)]",children:"Try Again"}),(0,d.jsx)("a",{href:"/dashboard",className:"px-6 py-2.5 rounded-lg text-[var(--color-text-main)] text-sm font-semibold cursor-pointer transition-all duration-200 border border-[var(--color-border)] hover:bg-[var(--color-bg-alt)] no-underline focus:outline-2 focus:outline-offset-2 focus:outline-[var(--color-accent)]","aria-label":"Return to dashboard",children:"Go to Dashboard"})]})]})}}};
2
+ ${a}`),Error(`Provider validation failed for ${b}`)}}let h={iflow:{id:"iflow",alias:"if",name:"iFlow AI",icon:"water_drop",color:"#6366F1"},qwen:{id:"qwen",alias:"qw",name:"Qwen Code",icon:"psychology",color:"#10B981"},"gemini-cli":{id:"gemini-cli",alias:"gc",name:"Gemini CLI",icon:"terminal",color:"#4285F4"},kiro:{id:"kiro",alias:"kr",name:"Kiro AI",icon:"psychology_alt",color:"#FF6B35"}},i={claude:{id:"claude",alias:"cc",name:"Claude Code",icon:"smart_toy",color:"#D97757"},antigravity:{id:"antigravity",alias:"ag",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"}},j={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"},kimi:{id:"kimi",alias:"kimi",name:"Kimi",icon:"psychology",color:"#1E3A8A",textIcon:"KM",website:"https://kimi.moonshot.cn"},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"},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",icon:"diamond",color:"#4285F4",textIcon:"GE",website:"https://ai.google.dev"},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"},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"},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://www.cerebras.ai"},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://developer.nvidia.com/nim"},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"}},k="openai-compatible-",l="anthropic-compatible-";function m(a){return"string"==typeof a&&a.startsWith(k)}function n(a){return"string"==typeof a&&a.startsWith(l)}let o={...h,...i,...j},p={oauth:{id:"oauth",name:"OAuth",icon:"lock"},apikey:{id:"apikey",name:"API Key",icon:"key"}};function q(a){for(let b of Object.values(o))if(b.alias===a||b.id===a)return b;return null}function r(a){let b=o[a];return b?.alias||a}Object.values(o).reduce((a,b)=>(a[b.alias]=b.id,a),{}),Object.values(o).reduce((a,b)=>(a[b.id]=b.alias,a),{});let s=["antigravity","kiro","github","codex","claude"];g(h,"FREE_PROVIDERS"),g(i,"OAUTH_PROVIDERS"),g(j,"APIKEY_PROVIDERS")},21280:(a,b,c)=>{"use strict";c.d(b,{S_:()=>m});var d=c(22901),e=c(87068);let f="[HealthCheck]",g=null,h=0,i=null;async function j(){let a=Date.now();return null!==g&&a-h<3e4?g:null!==i?i:i=(async()=>{try{let b=await (0,d.V7)();return g=!0===b.hideHealthCheckLogs,h=a,g}catch{return!1}finally{i=null}})()}function k(a,...b){j().then(c=>{c||console.log(a,...b)})}function l(a,...b){j().then(c=>{c||console.error(a,...b)})}function m(){g=null,h=0}let n=!1;async function o(){try{let a=await (0,d.getProviderConnections)({authType:"oauth"});if(!a||0===a.length)return;for(let b of a)try{await p(b)}catch(a){l(`${f} Error checking ${b.name||b.id}:`,a.message)}}catch(a){l(`${f} Sweep error:`,a.message)}}async function p(a){let b=a.healthCheckInterval??60;if(b<=0||!a.isActive||!a.refreshToken||"string"!=typeof a.refreshToken||"expired"===a.testStatus)return;if(!(0,e.Ny)(a.provider)){let b=new Date().toISOString();await (0,d.rj)(a.id,{lastHealthCheckAt:b}),k(`${f} Skipping ${a.provider}/${a.name||a.email||a.id} (refresh unsupported)`);return}let c=a.lastHealthCheckAt?new Date(a.lastHealthCheckAt).getTime():0;if(Date.now()-c<60*b*1e3)return;k(`${f} Refreshing ${a.provider}/${a.name||a.email||a.id} (interval: ${b}min)`);let g={refreshToken:a.refreshToken,accessToken:a.accessToken,expiresAt:a.tokenExpiresAt,providerSpecificData:a.providerSpecificData},h=await j(),i=await (0,e.iD)(a.provider,g,{info:(a,b)=>{h||console.log(`${f} [${a}] ${b}`)},warn:(a,b)=>{h||console.warn(`${f} [${a}] ${b}`)},error:(a,b,c)=>{h||console.error(`${f} [${a}] ${b}`,c||"")}}),m=new Date().toISOString();if((0,e.jT)(i)){await (0,d.rj)(a.id,{lastHealthCheckAt:m,testStatus:"expired",lastError:`Refresh token consumed (${i.error}). Please re-authenticate this account.`,lastErrorAt:m,lastErrorType:i.error,lastErrorSource:"oauth",errorCode:i.error,isActive:!1,refreshToken:null}),l(`${f} ✗ ${a.provider}/${a.name||a.email||a.id} — Refresh token is permanently invalid (${i.error}). Connection deactivated. Re-authenticate to restore.`);return}if(i&&i.accessToken){let b={accessToken:i.accessToken,lastHealthCheckAt:m,testStatus:"active",lastError:null,lastErrorAt:null,lastErrorType:null,lastErrorSource:null,errorCode:null};i.refreshToken&&(b.refreshToken=i.refreshToken),i.expiresIn&&(b.tokenExpiresAt=new Date(Date.now()+1e3*i.expiresIn).toISOString()),await (0,d.rj)(a.id,b),k(`${f} ✓ ${a.provider}/${a.name||a.email||a.id} refreshed`)}else await (0,d.rj)(a.id,{lastHealthCheckAt:m,testStatus:"error",lastError:"Health check: token refresh failed",lastErrorAt:m,lastErrorType:"token_refresh_failed",lastErrorSource:"oauth",errorCode:"refresh_failed"}),function(a,...b){j().then(c=>{c||console.warn(a,...b)})}(`${f} ✗ ${a.provider}/${a.name||a.email||a.id} refresh failed`)}n=!0,k(`${f} Starting proactive token health-check (tick every 60s)`),setTimeout(()=>{o(),setInterval(o,6e4)},1e4)},32444:(a,b,c)=>{"use strict";c.d(b,{ThemeProvider:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call ThemeProvider() from the server but ThemeProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/OmniRoute/OmniRoute/src/shared/components/ThemeProvider.tsx","ThemeProvider")},39710:(a,b,c)=>{Promise.resolve().then(c.bind(c,97507))},44438:(a,b,c)=>{Promise.resolve().then(c.bind(c,64385))},47695:(a,b,c)=>{"use strict";c.d(b,{A:()=>g});var d=c(31417),e=c(300),f=c(73959);let g=(0,d.v)()((0,e.Zr)((a,b)=>({theme:f.B2.defaultTheme,setTheme:b=>{a({theme:b})},toggleTheme:()=>{let c="dark"===b().theme?"light":"dark";a({theme:c})},initTheme:()=>{b().theme}}),{name:f.B2.storageKey}))},47825:(a,b,c)=>{"use strict";c.d(b,{KC:()=>d.KC,Xg:()=>d.Xg});var d=c(97319);Object.entries(c(17084).Q2).filter(([,a])=>a.passthroughModels).map(([a])=>a),Object.entries(d.vq).flatMap(([a,b])=>b.map(b=>({provider:a,model:b.id,name:b.name})))},49226:(a,b,c)=>{"use strict";c.d(b,{A:()=>l});var d=c(90357),e=c(22901);let{dashboardPort:f}=(0,c(83238).z)(),g=process.env.BASE_URL||process.env.NEXT_PUBLIC_BASE_URL||process.env.NEXT_PUBLIC_APP_URL||`http://localhost:${f}`;class h{constructor(a=null,b=15){this.machineId=a,this.intervalMinutes=b,this.intervalId=null}async initializeMachineId(){this.machineId||(this.machineId=await (0,d.Xj)())}async start(){this.intervalId||(await this.initializeMachineId(),setTimeout(()=>{this.syncWithRetry().catch(()=>{})},3e4),this.intervalId=setInterval(()=>{this.syncWithRetry().catch(()=>{})},60*this.intervalMinutes*1e3))}stop(){this.intervalId&&(clearInterval(this.intervalId),this.intervalId=null)}async syncWithRetry(a=1){for(let b=1;b<=a;b++)try{return await this.sync()}catch(d){if(b===a)return null;let c=Math.min(1e3*Math.pow(2,b),1e4);await new Promise(a=>setTimeout(a,c))}}async sync(){if(!await (0,e.Nx)())return null;await this.initializeMachineId();let a=await fetch(`${g}/api/sync/cloud`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({machineId:this.machineId,action:"sync"})});if(!a.ok)throw Error((await a.json().catch(()=>({}))).error||"Sync failed");return await a.json()}isRunning(){return null!==this.intervalId}}let i=null;async function j(a=null,b=15){return i||(i=new h(a,b)),i}async function k(){try{await (0,e.bI)();let a=await j(null,15);return await a.start(),a}catch(a){throw console.error("[CloudSync] Error initializing scheduler:",a),a}}a=c.hmd(a),c.c[c.s]===a&&k().catch(a=>console.error("[CloudSync] init failed:",a));let l=k},61135:()=>{},64385:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/home/runner/work/OmniRoute/OmniRoute/src/app/error.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/OmniRoute/OmniRoute/src/app/error.tsx","default")},67045:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>e});var d=c(48249);function e({error:a,reset:b}){return(0,d.jsx)("html",{lang:"en",children:(0,d.jsx)("body",{className:"flex flex-col items-center justify-center min-h-screen p-6 bg-[#0a0a0f] text-[#e0e0e0] font-[system-ui,-apple-system,sans-serif] text-center m-0",children:(0,d.jsxs)("main",{role:"alert","aria-live":"assertive",className:"flex flex-col items-center",children:[(0,d.jsx)("div",{className:"text-[64px] mb-4","aria-hidden":"true",children:"⚠️"}),(0,d.jsx)("h1",{className:"text-[28px] font-bold mb-2",children:"Something went wrong"}),(0,d.jsx)("p",{className:"text-[15px] text-[#888] max-w-[400px] leading-relaxed mb-6",children:"An unexpected error occurred. This has been logged and our team will investigate."}),!1,(0,d.jsx)("button",{onClick:b,"aria-label":"Retry loading the page",className:"px-8 py-3 rounded-[10px] text-white border-none text-sm font-semibold cursor-pointer transition-transform duration-200 shadow-[0_4px_16px_rgba(99,102,241,0.3)] hover:-translate-y-0.5 bg-gradient-to-br from-[#6366f1] to-[#8b5cf6] focus:outline-2 focus:outline-offset-2 focus:outline-[#6366f1]",children:"Try Again"})]})})})}},69199:(a,b,c)=>{Promise.resolve().then(c.bind(c,86392)),Promise.resolve().then(c.bind(c,32444))},73857:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>g});var d=c(48249),e=c(2116),f=c.n(e);function g(){return(0,d.jsxs)("div",{className:"flex flex-col items-center justify-center min-h-screen p-6 bg-bg text-text-main text-center",role:"main","aria-labelledby":"not-found-title",children:[(0,d.jsx)("div",{className:"text-[96px] font-extrabold leading-none mb-2 bg-gradient-to-br from-primary to-primary-hover bg-clip-text text-transparent","aria-hidden":"true",children:"404"}),(0,d.jsx)("h1",{id:"not-found-title",className:"text-2xl font-semibold mb-2",children:"Page not found"}),(0,d.jsx)("p",{className:"text-[15px] text-text-muted max-w-[400px] leading-relaxed mb-8",children:"The page you're looking for doesn't exist or has been moved."}),(0,d.jsx)(f(),{href:"/dashboard",className:"px-8 py-3 rounded-xl text-white text-sm font-medium no-underline transition-all duration-200 shadow-warm hover:-translate-y-0.5 bg-gradient-to-br from-primary to-primary-hover hover:shadow-elevated focus:outline-2 focus:outline-offset-2 focus:outline-primary","aria-label":"Return to dashboard",children:"Go to Dashboard"})]})}},73959:(a,b,c)=>{"use strict";c.d(b,{Q2:()=>d.Q2,fg:()=>d.fg,vQ:()=>e,MA:()=>d.MA,zN:()=>d.zN,B2:()=>f});var d=c(17084);c(47825);let e={name:"OmniRoute",description:"AI Gateway for Multi-Provider LLMs",version:"1.6.5"},f={storageKey:"theme",defaultTheme:"system"}},75146:(a,b,c)=>{"use strict";c.d(b,{ThemeProvider:()=>f});var d=c(48249);c(67484);var e=c(47695);function f({children:a}){let{initTheme:b}=(0,e.A)();return(0,d.jsx)(d.Fragment,{children:a})}},76160:(a,b,c)=>{Promise.resolve().then(c.bind(c,73857))},76537:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>m,metadata:()=>l});var d=c(5735),e=c(50609),f=c.n(e);c(61135);var g=c(32444);c(91057);var h=c(68625),i=c(62026),j=c(28440),k=c(83750);let l={title:"OmniRoute — AI Gateway for Multi-Provider LLMs",description:"OmniRoute is an AI gateway for multi-provider LLMs. One endpoint for all your AI providers.",icons:{icon:"/favicon.svg",apple:"/apple-touch-icon.svg"}};async function m({children:a}){let b=await (0,i.A)(),c=await (0,j.A)(),e=k.rB.includes(b);return(0,d.jsxs)("html",{lang:b,dir:e?"rtl":"ltr",suppressHydrationWarning:!0,children:[(0,d.jsxs)("head",{children:[(0,d.jsx)("link",{rel:"preconnect",href:"https://fonts.googleapis.com"}),(0,d.jsx)("link",{rel:"preconnect",href:"https://fonts.gstatic.com",crossOrigin:"anonymous"}),(0,d.jsx)("link",{href:"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=swap",rel:"stylesheet"})]}),(0,d.jsxs)("body",{className:`${f().variable} font-sans antialiased`,suppressHydrationWarning:!0,children:[(0,d.jsx)("a",{href:"#main-content",className:"sr-only focus:not-sr-only focus:absolute focus:top-2 focus:left-2 focus:z-50 focus:px-4 focus:py-2 focus:bg-[#6366f1] focus:text-white focus:rounded-lg focus:text-sm focus:font-semibold focus:shadow-lg",children:"Skip to content"}),(0,d.jsx)(h.A,{locale:b,messages:c,children:(0,d.jsx)(g.ThemeProvider,{children:a})})]})]})}},77447:(a,b,c)=>{Promise.resolve().then(c.bind(c,62626)),Promise.resolve().then(c.bind(c,75146))},79369:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,60440,23)),Promise.resolve().then(c.t.bind(c,84342,23)),Promise.resolve().then(c.t.bind(c,82265,23)),Promise.resolve().then(c.t.bind(c,35421,23)),Promise.resolve().then(c.t.bind(c,61335,23)),Promise.resolve().then(c.t.bind(c,70664,23)),Promise.resolve().then(c.bind(c,74661))},79803:(a,b,c)=>{"use strict";c.d(b,{A:()=>g});var d=c(29389),e=c(65573),f=c(83750);let g=(0,d.A)(async()=>{let a=await (0,e.UL)(),b=a.get(f.CL)?.value||"";b||(b=(await (0,e.b3)()).get("x-locale")||""),f.YZ.includes(b)||(b=f.Xn);let d=(await c(3845)(`./${b}.json`)).default;return{locale:b,messages:d}})},81227:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/home/runner/work/OmniRoute/OmniRoute/src/app/global-error.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/OmniRoute/OmniRoute/src/app/global-error.tsx","default")},83238:(a,b,c)=>{"use strict";function d(a,b){if(!a)return b;let c=Number.parseInt(String(a),10);return!Number.isFinite(c)||c<1||c>65535?b:c}function e(){let a=d(process.env.OMNIROUTE_PORT||process.env.PORT,20128),b=!!process.env.API_PORT,c=!!process.env.DASHBOARD_PORT;return{port:a,apiPort:d(process.env.API_PORT,a),dashboardPort:d(process.env.DASHBOARD_PORT,a),apiPortExplicit:b,dashboardPortExplicit:c}}c.d(b,{z:()=>e})},83750:(a,b,c)=>{"use strict";c.d(b,{CL:()=>g,Xn:()=>e,YZ:()=>d,rB:()=>f});let d=["en","pt-BR","es","fr","it","ru","zh-CN","de","in","th","uk-UA","ar","ja","vi","bg","da","fi","he","hu","id","ko","ms","nl","no","pt","ro","pl","sk","sv","phi"],e="en",f=["ar","he"],g="NEXT_LOCALE"},89097:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,15098,23)),Promise.resolve().then(c.t.bind(c,47644,23)),Promise.resolve().then(c.t.bind(c,33859,23)),Promise.resolve().then(c.t.bind(c,98099,23)),Promise.resolve().then(c.t.bind(c,16237,23)),Promise.resolve().then(c.t.bind(c,98562,23)),Promise.resolve().then(c.t.bind(c,36675,23))},90357:(a,b,c)=>{"use strict";c.d(b,{Xj:()=>e});var d=c(19713);async function e(a=null){let b=a||process.env.MACHINE_ID_SALT||"endpoint-proxy-salt";try{let a=(0,d.machineIdSync)();return(await Promise.resolve().then(c.t.bind(c,55511,23))).createHash("sha256").update(a+b).digest("hex").substring(0,16)}catch(a){return console.log("Error getting machine ID:",a),crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(a){let b=16*Math.random()|0;return("x"==a?b:3&b|8).toString(16)})}}},91057:(a,b,c)=>{"use strict";var d=c(49226);c(21280);let e=!1;(async function(){if(!e)try{await (0,d.A)(),e=!0}catch(a){console.error("[ServerInit] Error initializing cloud sync:",a)}return e})().catch(a=>console.error("[CloudSync] ensure failed:",a))},97319:(a,b,c)=>{"use strict";c.d(b,{Xg:()=>g,vq:()=>f,KC:()=>h});let d={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",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","Anthropic-Dangerous-Direct-Browser-Access":"true","User-Agent":"claude-cli/1.0.83 (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.55.1","X-Stainless-Runtime":"node","X-Stainless-Lang":"js","X-Stainless-Arch":"arm64","X-Stainless-Os":"MacOS","X-Stainless-Timeout":"60"},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-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",oauth:{clientIdEnv:"GEMINI_OAUTH_CLIENT_ID",clientIdDefault:"681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com",clientSecretEnv:"GEMINI_OAUTH_CLIENT_SECRET",clientSecretDefault:"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"},models:[{id:"gemini-3-pro-preview",name:"Gemini 3 Pro 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"}]},"gemini-cli":{id:"gemini-cli",alias:"gc",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",oauth:{clientIdEnv:"GEMINI_CLI_OAUTH_CLIENT_ID",clientIdDefault:"681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com",clientSecretEnv:"GEMINI_CLI_OAUTH_CLIENT_SECRET",clientSecretDefault:"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"},models:[{id:"gemini-3-flash-preview",name:"Gemini 3 Flash Preview"},{id:"gemini-3-pro-preview",name:"Gemini 3 Pro 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",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.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://portal.qwen.ai/v1/chat/completions",authType:"oauth",authHeader:"bearer",headers:{"User-Agent":"google-api-nodejs-client/9.15.1","X-Goog-Api-Client":"gl-node/22.17.0"},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"}]},iflow:{id:"iflow",alias:"if",format:"openai",executor:"iflow",baseUrl:"https://apis.iflow.cn/v1/chat/completions",authType:"oauth",authHeader:"bearer",headers:{"User-Agent":"iFlow-Cli"},oauth:{clientIdEnv:"IFLOW_OAUTH_CLIENT_ID",clientIdDefault:"10009311001",clientSecretEnv:"IFLOW_OAUTH_CLIENT_SECRET",clientSecretDefault:"4Z3YjXycVsQvyGF1etiNlIBB4RsqSDtW",tokenUrl:"https://iflow.cn/oauth/token",authUrl:"https://iflow.cn/oauth"},models:[{id:"qwen3-coder-plus",name:"Qwen3 Coder Plus"},{id:"kimi-k2",name:"Kimi K2"},{id:"kimi-k2-thinking",name:"Kimi K2 Thinking"},{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"deepseek-r1",name:"DeepSeek R1"},{id:"deepseek-v3.2-chat",name:"DeepSeek V3.2 Chat"},{id:"deepseek-v3.2-reasoner",name:"DeepSeek V3.2 Reasoner"},{id:"minimax-m2.1",name:"MiniMax M2.1"},{id:"glm-4.7",name:"GLM 4.7"}]},antigravity:{id:"antigravity",alias:"ag",format:"antigravity",executor:"antigravity",baseUrls:["https://daily-cloudcode-pa.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.104.0 darwin/arm64"},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.1-pro-high",name:"Gemini 3.1 Pro High"},{id:"gemini-3.1-pro-low",name:"Gemini 3.1 Pro Low"},{id:"gemini-3-flash",name:"Gemini 3 Flash"},{id:"gpt-oss-120b-medium",name:"GPT OSS 120B Medium"}]},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",headers:{"copilot-integration-id":"vscode-chat","editor-version":"vscode/1.107.1","editor-plugin-version":"copilot-chat/0.26.7","user-agent":"GitHubCopilotChat/0.26.7","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-3-flash-preview",name:"Gemini 3 Flash Preview"},{id:"gemini-3-pro-preview",name:"Gemini 3 Pro Preview"},{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",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",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.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",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"},{id:"o1-mini",name:"O1 Mini"}]},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",headers:{"Anthropic-Version":"2023-06-01"},models:[{id:"claude-sonnet-4-20250514",name:"Claude Sonnet 4"},{id:"claude-opus-4-20250514",name:"Claude Opus 4"},{id:"claude-3-5-sonnet-20241022",name:"Claude 3.5 Sonnet"}]},openrouter:{id:"openrouter",alias:"openrouter",format:"openai",executor:"default",baseUrl:"https://openrouter.ai/api/v1/chat/completions",authType:"apikey",authHeader:"bearer",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",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-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)"},{id:"glm-4.6",name:"GLM 4.6"},{id:"glm-4.5v",name:"GLM 4.5V (Vision)"},{id:"glm-4.5",name:"GLM 4.5"},{id:"glm-4.5-air",name:"GLM 4.5 Air"},{id:"glm-4-32b",name:"GLM 4 32B"}]},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"}]},"kimi-coding":{id:"kimi-coding",alias:"kmc",format:"claude",executor:"default",baseUrl:"https://api.kimi.com/coding/v1/messages",urlSuffix:"?beta=true",authType:"oauth",authHeader:"x-api-key",headers:{"Anthropic-Version":"2023-06-01","Anthropic-Beta":"claude-code-20250219,interleaved-thinking-2025-05-14"},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"},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"}]},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.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.1",name:"MiniMax M2.1"}]},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"}]},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",name:"Grok 4"},{id:"grok-4-fast-reasoning",name:"Grok 4 Fast Reasoning"},{id:"grok-code-fast-1",name:"Grok Code Fast"},{id:"grok-3",name:"Grok 3"}]},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",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"}]},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:"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:"nvidia/llama-3.3-70b-instruct",name:"Llama 3.3 70B"},{id:"meta/llama-4-maverick-17b-128e-instruct",name:"Llama 4 Maverick"},{id:"deepseek/deepseek-r1",name:"DeepSeek R1"}]},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"}]}},e=new Map;for(let a of Object.values(d))a.alias&&a.alias!==a.id&&e.set(a.alias,a);let f=function(){let a={};for(let b of Object.values(d))if(b.models&&b.models.length>0){let c=b.alias||b.id;a[c]||(a[c]=b.models)}return a}(),g=function(){let a={};for(let b of Object.values(d))a[b.id]=b.alias||b.id;return a}();function h(a){return f[g[a]||a]||[]}},97496:(a,b,c)=>{Promise.resolve().then(c.bind(c,81227))},97507:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>e});var d=c(48249);function e({error:a,reset:b}){return(0,d.jsxs)("div",{className:"flex flex-col items-center justify-center min-h-[60vh] p-6 text-center",role:"alert","aria-live":"assertive",children:[(0,d.jsx)("div",{className:"text-[64px] mb-4","aria-hidden":"true",children:"\uD83D\uDD27"}),(0,d.jsx)("h1",{className:"text-[28px] font-bold mb-2 text-[var(--color-text-main)]",children:"Internal Server Error"}),(0,d.jsx)("p",{className:"text-[15px] text-[var(--color-text-muted)] max-w-[400px] leading-relaxed mb-2",children:"Something went wrong while processing your request. Our team has been notified and is working on a fix."}),a?.digest&&(0,d.jsxs)("p",{className:"text-xs text-[var(--color-text-muted)] mb-6 font-mono",children:["Error ID: ",a.digest]}),!1,(0,d.jsxs)("div",{className:"flex gap-3",children:[(0,d.jsx)("button",{onClick:b,"aria-label":"Retry loading the page",className:"px-6 py-2.5 rounded-lg text-white text-sm font-semibold cursor-pointer transition-all duration-200 bg-[var(--color-accent)] hover:bg-[var(--color-accent-hover)] focus:outline-2 focus:outline-offset-2 focus:outline-[var(--color-accent)]",children:"Try Again"}),(0,d.jsx)("a",{href:"/dashboard",className:"px-6 py-2.5 rounded-lg text-[var(--color-text-main)] text-sm font-semibold cursor-pointer transition-all duration-200 border border-[var(--color-border)] hover:bg-[var(--color-bg-alt)] no-underline focus:outline-2 focus:outline-offset-2 focus:outline-[var(--color-accent)]","aria-label":"Return to dashboard",children:"Go to Dashboard"})]})]})}}};
@@ -1,8 +1,8 @@
1
- "use strict";exports.id=7109,exports.ids=[7109],exports.modules={17109:(a,b,c)=>{c.r(b),c.d(b,{POST:()=>z,testSingleConnection:()=>y});var d=c(45592),e=c(22901),f=c(90357),g=c(44963),h=c(38369),i=c(17916),j=c(87068),k=c(27230),l=c(34493),m=c(76340);let n={claude:{checkExpiry:!0},codex:{checkExpiry:!0,refreshable:!0},"gemini-cli":{url:"https://www.googleapis.com/oauth2/v1/userinfo?alt=json",method:"GET",authHeader:"Authorization",authPrefix:"Bearer ",refreshable:!0},antigravity:{url:"https://www.googleapis.com/oauth2/v1/userinfo?alt=json",method:"GET",authHeader:"Authorization",authPrefix:"Bearer ",refreshable:!0},github:{url:"https://api.github.com/user",method:"GET",authHeader:"Authorization",authPrefix:"Bearer ",extraHeaders:{"User-Agent":"OmniRoute",Accept:"application/vnd.github+json"}},iflow:{checkExpiry:!0,refreshable:!0},qwen:{checkExpiry:!0,refreshable:!0},cursor:{checkExpiry:!0},"kimi-coding":{checkExpiry:!0,refreshable:!0},kilocode:{checkExpiry:!0},cline:{checkExpiry:!0,refreshable:!0},kiro:{checkExpiry:!0,refreshable:!0}},o={cline:"cline",kilocode:"kilo"};function p(a,b="Unknown error"){return"string"!=typeof a?b:a.trim()||b}function q(a,b,c,d=null){return{type:a,source:b,message:c||null,code:d??null}}function r({error:a,statusCode:b=null,refreshFailed:c=!1,unsupported:d=!1}){let e=p(a,"Connection test failed"),f=e.toLowerCase(),g=Number.isFinite(b)?Number(b):null;return d?q("unsupported","validation",e,"unsupported"):c||f.includes("refresh failed")?q("token_refresh_failed","oauth",e,"refresh_failed"):401===g||403===g?q("upstream_auth_error","upstream",e,String(g)):429===g?q("upstream_rate_limited","upstream",e,"429"):g&&g>=500?q("upstream_unavailable","upstream",e,String(g)):f.includes("token expired")||f.includes("expired")?q("token_expired","oauth",e,"token_expired"):f.includes("invalid api key")||f.includes("token invalid")||f.includes("revoked")||f.includes("access denied")||f.includes("unauthorized")||f.includes("forbidden")?q("upstream_auth_error","upstream",e,g?String(g):"auth_failed"):f.includes("rate limit")||f.includes("quota")||f.includes("too many requests")?q("upstream_rate_limited","upstream",e,g?String(g):"rate_limited"):f.includes("fetch failed")||f.includes("network")||f.includes("timeout")||f.includes("econn")||f.includes("enotfound")||f.includes("socket")?q("network_error","upstream",e,"network_error"):q("upstream_error","upstream",e,g?String(g):"upstream_error")}async function s(a){let b=o[a];if(!b)return null;try{let a=await (0,i.V5)(b);if(a.installed&&a.runnable)return a;let c=a.installed?`Local CLI runtime is installed but not runnable (${a.reason||"healthcheck_failed"})`:"Local CLI runtime is not installed";return{...a,diagnosis:q("runtime_error","local",c,a.reason||"runtime_error"),error:c}}catch(b){let a=`Failed to check local CLI runtime: ${b?.message||"runtime_check_failed"}`;return{installed:!1,runnable:!1,reason:"runtime_check_failed",diagnosis:q("runtime_error","local",a,"runtime_check_failed"),error:a}}}async function t(a){let{provider:b,refreshToken:c}=a;if(!c)return null;try{let d={refreshToken:c,providerSpecificData:a.providerSpecificData||{}};return await (0,j.iD)(b,d,console)}catch(a){return console.log(`Error refreshing ${b} token:`,a.message),null}}function u(a){let b=a.expiresAt||a.tokenExpiresAt;return!!b&&new Date(b).getTime()<=Date.now()+3e5}async function v(){try{if(!await (0,e.Nx)())return;let a=await (0,f.Xj)();await (0,g.AF)(a)}catch(a){console.log("Error syncing to cloud after token refresh:",a)}}async function w(a){let b=n[a.provider];if(!b){let a="Provider test not supported";return{valid:!1,error:a,refreshed:!1,diagnosis:r({error:a,unsupported:!0})}}if(!a.accessToken){if(b.refreshable&&!a.refreshToken){let a="Refresh token expired. Please re-authenticate this account.";return{valid:!1,error:a,refreshed:!1,diagnosis:q("reauth_required","oauth",a,"reauth_required")}}let c="No access token";return{valid:!1,error:c,refreshed:!1,diagnosis:q("auth_missing","local",c,"missing_access_token")}}let c=a.accessToken,d=!1,e=null,f=u(a);if(b.refreshable&&f&&a.refreshToken){let b=await t(a);if(b)c=b.accessToken,d=!0,e=b;else{let a="Token expired and refresh failed";return{valid:!1,error:a,refreshed:!1,diagnosis:r({error:a,refreshFailed:!0})}}}if(b.checkExpiry){if(d)return{valid:!0,error:null,refreshed:d,newTokens:e,diagnosis:q("ok","oauth",null,null)};if(f){let a="Token expired";return{valid:!1,error:a,refreshed:!1,diagnosis:r({error:a})}}return{valid:!0,error:null,refreshed:!1,newTokens:null,diagnosis:q("ok","local",null,null)}}try{let f={[b.authHeader]:`${b.authPrefix}${c}`,...b.extraHeaders},g=await fetch(b.url,{method:b.method,headers:f});if(g.ok)return{valid:!0,error:null,refreshed:d,newTokens:e,diagnosis:q("ok","upstream",null,null)};if((401===g.status||403===g.status)&&!d&&u(a)&&a.refreshToken&&"string"==typeof a.refreshToken){let c=await t(a);if(c){let a=await fetch(b.url,{method:b.method,headers:{[b.authHeader]:`${b.authPrefix}${c.accessToken}`,...b.extraHeaders}});if(a.ok)return{valid:!0,error:null,refreshed:!0,newTokens:c,diagnosis:q("ok","upstream",null,null)};let d=`API returned ${a.status} after token refresh`;return{valid:!1,error:d,refreshed:!0,statusCode:a.status,diagnosis:r({error:d,statusCode:a.status})}}let d="Token expired and refresh failed";return{valid:!1,error:d,refreshed:!1,statusCode:401,diagnosis:r({error:d,statusCode:401,refreshFailed:!0})}}let h=401===g.status?"Token invalid or revoked":403===g.status?"Access denied":`API returned ${g.status}`;return{valid:!1,error:h,refreshed:d,statusCode:g.status,diagnosis:r({error:h,statusCode:g.status})}}catch(b){let a=p(b?.message,"Connection test failed");return{valid:!1,error:a,refreshed:d,diagnosis:r({error:a})}}}async function x(a){if(!a.apiKey){let a="Missing API key";return{valid:!1,error:a,diagnosis:q("auth_missing","local",a,"missing_api_key")}}let b=await (0,h.j)({provider:a.provider,apiKey:a.apiKey,providerSpecificData:a.providerSpecificData});if(b.unsupported){let a="Provider test not supported";return{valid:!1,error:a,diagnosis:r({error:a,unsupported:!0})}}let c=b.valid?null:b.error||"Invalid API key",d=b.valid?q("ok","upstream",null,null):r({error:c});return{valid:!!b.valid,error:c,diagnosis:d}}async function y(a){let b,c=await (0,e.Mc)(a);if(!c)return{valid:!1,error:"Connection not found",diagnosis:null,latencyMs:0};let d=null;try{d=await (0,e.YD)(a)}catch(b){console.log(`[ConnectionTest] Failed to resolve proxy for ${a}:`,b?.message)}let f=Date.now(),g=await s(c.provider);b=g?.diagnosis?{valid:!1,error:g.error,refreshed:!1,diagnosis:g.diagnosis}:"apikey"===c.authType?await (0,m.jf)(d?.proxy||null,()=>x(c)):await (0,m.jf)(d?.proxy||null,()=>w(c));let h=Date.now()-f,i=new Date().toISOString(),j=b.diagnosis||(b.valid?q("ok","local",null,null):r({error:b.error,statusCode:b.statusCode})),n={testStatus:b.valid?"active":"error",lastError:b.valid?null:b.error,lastErrorAt:b.valid?null:i,lastTested:i,lastErrorType:b.valid?null:j.type,lastErrorSource:b.valid?null:j.source,errorCode:b.valid?null:j.code||b.statusCode||null,rateLimitedUntil:b.valid?null:c.rateLimitedUntil||null};b.valid&&(n.backoffLevel=0),b.refreshed&&b.newTokens&&(n.accessToken=b.newTokens.accessToken,b.newTokens.refreshToken&&(n.refreshToken=b.newTokens.refreshToken),b.newTokens.expiresIn&&(n.expiresAt=new Date(Date.now()+1e3*b.newTokens.expiresIn).toISOString())),await (0,e.rj)(a,n),b.refreshed&&await v();try{(0,k.gK)({method:"POST",path:"/api/providers/test",status:b.valid?200:b.statusCode||401,model:"connection-test",provider:c.provider,connectionId:a,duration:h,error:b.valid?null:b.error||null,sourceFormat:"test",targetFormat:"test"}).catch(()=>{})}catch{}try{(0,l.pq)({status:b.valid?"success":"error",proxy:d?.proxy||null,level:d?.level||"provider-test",levelId:d?.levelId||null,provider:c.provider,targetUrl:`${c.provider}/connection-test`,latencyMs:h,error:b.valid?null:b.error||null,connectionId:a,comboId:null,account:a?.slice(0,8)||null,tlsFingerprint:!1})}catch{}return{valid:b.valid,error:b.error,refreshed:b.refreshed||!1,diagnosis:j,latencyMs:h,statusCode:b.statusCode||null,runtime:g||null,testedAt:i}}async function z(a,{params:b}){try{let{id:a}=await b,c=await y(a);if("Connection not found"===c.error)return d.NextResponse.json({error:"Connection not found"},{status:404});return d.NextResponse.json(c)}catch(a){return console.log("Error testing connection:",a),d.NextResponse.json({error:"Test failed"},{status:500})}}},17916:(a,b,c)=>{c.d(b,{CU:()=>s,MG:()=>u,V5:()=>v,XH:()=>w,hl:()=>t});var d=c(79748),e=c.n(d),f=c(21820),g=c.n(f),h=c(33873),i=c.n(h),j=c(79646);let k=new Set(["auto","host","container"]),l=new Set(["0","false","no","off"]),m={claude:{defaultCommand:"claude",envBinKey:"CLI_CLAUDE_BIN",requiresBinary:!0,healthcheckTimeoutMs:4e3,paths:{settings:".claude/settings.json"}},codex:{defaultCommand:"codex",envBinKey:"CLI_CODEX_BIN",requiresBinary:!0,healthcheckTimeoutMs:4e3,paths:{config:".codex/config.toml",auth:".codex/auth.json"}},droid:{defaultCommand:"droid",envBinKey:"CLI_DROID_BIN",requiresBinary:!0,healthcheckTimeoutMs:8e3,paths:{settings:".factory/settings.json"}},openclaw:{defaultCommand:"openclaw",envBinKey:"CLI_OPENCLAW_BIN",requiresBinary:!0,healthcheckTimeoutMs:12e3,paths:{settings:".openclaw/openclaw.json"}},cursor:{defaultCommands:["agent","cursor"],envBinKey:"CLI_CURSOR_BIN",requiresBinary:!0,healthcheckTimeoutMs:12e3,paths:{config:".cursor/cli-config.json",auth:".config/cursor/auth.json",state:".cursor/agent-cli-state.json"}},cline:{defaultCommand:"cline",envBinKey:"CLI_CLINE_BIN",requiresBinary:!0,healthcheckTimeoutMs:12e3,paths:{globalState:".cline/data/globalState.json",secrets:".cline/data/secrets.json"}},kilo:{defaultCommand:"kilocode",envBinKey:"CLI_KILO_BIN",requiresBinary:!0,healthcheckTimeoutMs:4e3,paths:{auth:".local/share/kilo/auth.json"}},continue:{defaultCommand:null,envBinKey:"CLI_CONTINUE_BIN",requiresBinary:!1,paths:{settings:".continue/config.json"}}},n=(a,b,{env:c,timeoutMs:d=3e3}={})=>new Promise(e=>{let f="",g="",h=!1,i=!1,k=(0,j.spawn)(a,b,{env:c,stdio:["ignore","pipe","pipe"]}),l=setTimeout(()=>{h=!0,k.kill("SIGKILL")},d),m=a=>{i||(i=!0,clearTimeout(l),e(a))};k.stdout.on("data",a=>{f+=a.toString()}),k.stderr.on("data",a=>{g+=a.toString()}),k.on("error",a=>{m({ok:!1,code:null,stdout:f.trim(),stderr:g.trim(),timedOut:h,error:a?.message||"spawn_error"})}),k.on("close",a=>{m({ok:!h&&0===a,code:a,stdout:f.trim(),stderr:g.trim(),timedOut:h,error:h?"timeout":null})})}),o=async a=>{try{await e().access(a,e().constants.F_OK)}catch{return{installed:!1,commandPath:null,reason:"not_found"}}try{return await e().access(a,e().constants.X_OK),{installed:!0,commandPath:a,reason:null}}catch{return{installed:!0,commandPath:a,reason:"not_executable"}}},p=async(a,b)=>{if(!a)return{installed:!1,commandPath:null,reason:"missing_command"};if(a.includes("/")||a.includes("\\"))return o(a);if("win32"===process.platform){let c=await n("where",[a],{env:b,timeoutMs:3e3});if(!c.ok||!c.stdout)return{installed:!1,commandPath:null,reason:"not_found"};let d=c.stdout.split(/\r?\n/).map(a=>a.trim()).find(Boolean)||null;return{installed:!!d,commandPath:d,reason:d?null:"not_found"}}let c=await n("sh",["-c",'command -v -- "$1"',"sh",a],{env:b,timeoutMs:3e3});if(!c.ok||!c.stdout)return{installed:!1,commandPath:null,reason:"not_found"};let d=c.stdout.split(/\r?\n/).map(a=>a.trim()).find(Boolean)||null;return{installed:!!d,commandPath:d,reason:d?null:"not_found"}},q=async(a,b)=>{if(!Array.isArray(a)||0===a.length)return{command:null,installed:!1,commandPath:null,reason:"missing_command"};for(let c of a){let a=await p(c,b);if(a.installed||"not_found"!==a.reason)return{command:c,...a}}return{command:a[0],installed:!1,commandPath:null,reason:"not_found"}},r=async(a,b,c=4e3)=>{for(let d of[["--version"],["-v"]])if((await n(a,d,{env:b,timeoutMs:c})).ok)return{runnable:!0,reason:null};return{runnable:!1,reason:"healthcheck_failed"}},s=()=>((a,b=!0)=>null==a||""===a?b:!l.has(String(a).trim().toLowerCase()))(process.env.CLI_ALLOW_CONFIG_WRITES,!0)?null:"CLI config writes are disabled (CLI_ALLOW_CONFIG_WRITES=false)",t=a=>{let b=m[a];if(!b)return null;let c=String(process.env.CLI_CONFIG_HOME||"").trim()||g().homedir();return Object.fromEntries(Object.entries(b.paths).map(([a,b])=>[a,i().join(c,b)]))},u=a=>{let b=t(a);if(!b)return null;let c=Object.keys(b)[0];return c?b[c]:null},v=async a=>{let b,c,d,e=m[a],f=(b=String(process.env.CLI_MODE||"auto").trim().toLowerCase(),k.has(b)?b:"auto");if(!e)return{installed:!1,runnable:!1,command:null,commandPath:null,reason:"unknown_tool",runtimeMode:f,requiresBinary:!1};let g=(c={...process.env},(d=String(process.env.CLI_EXTRA_PATHS||"").split(i().delimiter).map(a=>a.trim()).filter(Boolean)).length>0&&(c.PATH=[...d,c.PATH||""].filter(Boolean).join(i().delimiter)),c),h=(a=>{let b=m[a];if(!b)return[];let c=String(process.env[b.envBinKey]||"").trim();return c?[c]:Array.isArray(b.defaultCommands)&&b.defaultCommands.length>0?b.defaultCommands.filter(Boolean):b.defaultCommand?[b.defaultCommand]:[]})(a),j=!1!==e.requiresBinary;if(!j&&0===h.length)return{installed:!0,runnable:!0,command:null,commandPath:null,reason:"not_required",runtimeMode:f,requiresBinary:j};let l=await q(h,g),n=l.command;if(!l.installed)return{installed:!1,runnable:!1,command:n,commandPath:null,reason:l.reason||"not_found",runtimeMode:f,requiresBinary:j};if("not_executable"===l.reason)return{installed:!0,runnable:!1,command:n,commandPath:l.commandPath,reason:"not_executable",runtimeMode:f,requiresBinary:j};let o=await r(l.commandPath,g,Number(e.healthcheckTimeoutMs||4e3));return{installed:!0,runnable:o.runnable,command:n,commandPath:l.commandPath,reason:o.reason,runtimeMode:f,requiresBinary:j}},w=Object.keys(m)},34493:(a,b,c)=>{c.d(b,{GL:()=>i,XT:()=>j,pq:()=>h});var d=c(94755),e=c(42910);let f=!e.m1&&!e.I8,g=[];if(f)try{for(let a of(0,e.sm)().prepare("SELECT * FROM proxy_logs ORDER BY timestamp DESC LIMIT ?").all(500))g.push({id:a.id,timestamp:a.timestamp,status:a.status||"success",proxy:a.proxy_host?{type:a.proxy_type,host:a.proxy_host,port:a.proxy_port}:null,level:a.level||"direct",levelId:a.level_id||null,provider:a.provider||null,targetUrl:a.target_url||null,publicIp:a.public_ip||null,latencyMs:a.latency_ms||0,error:a.error||null,connectionId:a.connection_id||null,comboId:a.combo_id||null,account:a.account||null,tlsFingerprint:1===a.tls_fingerprint});g.length>0&&console.log(`[proxyLogger] Loaded ${g.length} proxy logs from SQLite`)}catch(a){console.warn("[proxyLogger] Failed to load from DB:",a.message)}function h(a){let b={id:(0,d.A)(),timestamp:new Date().toISOString(),status:a.status||"success",proxy:a.proxy||null,level:a.level||"direct",levelId:a.levelId||null,provider:a.provider||null,targetUrl:a.targetUrl||null,publicIp:a.publicIp||null,latencyMs:a.latencyMs||0,error:a.error||null,connectionId:a.connectionId||null,comboId:a.comboId||null,account:a.account||null,tlsFingerprint:a.tlsFingerprint||!1};if(g.unshift(b),g.length>500&&(g.length=500),f)try{let a=(0,e.sm)();a.prepare(`INSERT INTO proxy_logs (id, timestamp, status, proxy_type, proxy_host, proxy_port,
1
+ "use strict";exports.id=7109,exports.ids=[7109],exports.modules={17109:(a,b,c)=>{c.r(b),c.d(b,{POST:()=>z,testSingleConnection:()=>y});var d=c(45592),e=c(22901),f=c(90357),g=c(44963),h=c(38369),i=c(17916),j=c(87068),k=c(27230),l=c(34493),m=c(76340);let n={claude:{checkExpiry:!0},codex:{checkExpiry:!0,refreshable:!0},"gemini-cli":{url:"https://www.googleapis.com/oauth2/v1/userinfo?alt=json",method:"GET",authHeader:"Authorization",authPrefix:"Bearer ",refreshable:!0},antigravity:{url:"https://www.googleapis.com/oauth2/v1/userinfo?alt=json",method:"GET",authHeader:"Authorization",authPrefix:"Bearer ",refreshable:!0},github:{url:"https://api.github.com/user",method:"GET",authHeader:"Authorization",authPrefix:"Bearer ",extraHeaders:{"User-Agent":"OmniRoute",Accept:"application/vnd.github+json"}},iflow:{checkExpiry:!0,refreshable:!0},qwen:{checkExpiry:!0,refreshable:!0},cursor:{checkExpiry:!0},"kimi-coding":{checkExpiry:!0,refreshable:!0},kilocode:{checkExpiry:!0},cline:{checkExpiry:!0,refreshable:!0},kiro:{checkExpiry:!0,refreshable:!0}},o={cline:"cline",kilocode:"kilo"};function p(a,b="Unknown error"){return"string"!=typeof a?b:a.trim()||b}function q(a,b,c,d=null){return{type:a,source:b,message:c||null,code:d??null}}function r({error:a,statusCode:b=null,refreshFailed:c=!1,unsupported:d=!1}){let e=p(a,"Connection test failed"),f=e.toLowerCase(),g=Number.isFinite(b)?Number(b):null;return d?q("unsupported","validation",e,"unsupported"):c||f.includes("refresh failed")?q("token_refresh_failed","oauth",e,"refresh_failed"):401===g||403===g?q("upstream_auth_error","upstream",e,String(g)):429===g?q("upstream_rate_limited","upstream",e,"429"):g&&g>=500?q("upstream_unavailable","upstream",e,String(g)):f.includes("token expired")||f.includes("expired")?q("token_expired","oauth",e,"token_expired"):f.includes("invalid api key")||f.includes("token invalid")||f.includes("revoked")||f.includes("access denied")||f.includes("unauthorized")||f.includes("forbidden")?q("upstream_auth_error","upstream",e,g?String(g):"auth_failed"):f.includes("rate limit")||f.includes("quota")||f.includes("too many requests")?q("upstream_rate_limited","upstream",e,g?String(g):"rate_limited"):f.includes("fetch failed")||f.includes("network")||f.includes("timeout")||f.includes("econn")||f.includes("enotfound")||f.includes("socket")?q("network_error","upstream",e,"network_error"):q("upstream_error","upstream",e,g?String(g):"upstream_error")}async function s(a){let b=o[a];if(!b)return null;try{let a=await (0,i.V5)(b);if(a.installed&&a.runnable)return a;let c=a.installed?`Local CLI runtime is installed but not runnable (${a.reason||"healthcheck_failed"})`:"Local CLI runtime is not installed";return{...a,diagnosis:q("runtime_error","local",c,a.reason||"runtime_error"),error:c}}catch(b){let a=`Failed to check local CLI runtime: ${b?.message||"runtime_check_failed"}`;return{installed:!1,runnable:!1,reason:"runtime_check_failed",diagnosis:q("runtime_error","local",a,"runtime_check_failed"),error:a}}}async function t(a){let{provider:b,refreshToken:c}=a;if(!c)return null;try{let d={refreshToken:c,providerSpecificData:a.providerSpecificData||{}};return await (0,j.iD)(b,d,console)}catch(a){return console.log(`Error refreshing ${b} token:`,a.message),null}}function u(a){let b=a.expiresAt||a.tokenExpiresAt;return!!b&&new Date(b).getTime()<=Date.now()+3e5}async function v(){try{if(!await (0,e.Nx)())return;let a=await (0,f.Xj)();await (0,g.AF)(a)}catch(a){console.log("Error syncing to cloud after token refresh:",a)}}async function w(a){let b=n[a.provider];if(!b){let a="Provider test not supported";return{valid:!1,error:a,refreshed:!1,diagnosis:r({error:a,unsupported:!0})}}if(!a.accessToken){if(b.refreshable&&!a.refreshToken){let a="Refresh token expired. Please re-authenticate this account.";return{valid:!1,error:a,refreshed:!1,diagnosis:q("reauth_required","oauth",a,"reauth_required")}}let c="No access token";return{valid:!1,error:c,refreshed:!1,diagnosis:q("auth_missing","local",c,"missing_access_token")}}let c=a.accessToken,d=!1,e=null,f=u(a);if(b.refreshable&&f&&a.refreshToken){let b=await t(a);if(b)c=b.accessToken,d=!0,e=b;else{let a="Token expired and refresh failed";return{valid:!1,error:a,refreshed:!1,diagnosis:r({error:a,refreshFailed:!0})}}}if(b.checkExpiry){if(d)return{valid:!0,error:null,refreshed:d,newTokens:e,diagnosis:q("ok","oauth",null,null)};if(f){let a="Token expired";return{valid:!1,error:a,refreshed:!1,diagnosis:r({error:a})}}return{valid:!0,error:null,refreshed:!1,newTokens:null,diagnosis:q("ok","local",null,null)}}try{let f={[b.authHeader]:`${b.authPrefix}${c}`,...b.extraHeaders},g=await fetch(b.url,{method:b.method,headers:f});if(g.ok)return{valid:!0,error:null,refreshed:d,newTokens:e,diagnosis:q("ok","upstream",null,null)};if((401===g.status||403===g.status)&&!d&&u(a)&&a.refreshToken&&"string"==typeof a.refreshToken){let c=await t(a);if(c){let a=await fetch(b.url,{method:b.method,headers:{[b.authHeader]:`${b.authPrefix}${c.accessToken}`,...b.extraHeaders}});if(a.ok)return{valid:!0,error:null,refreshed:!0,newTokens:c,diagnosis:q("ok","upstream",null,null)};let d=`API returned ${a.status} after token refresh`;return{valid:!1,error:d,refreshed:!0,statusCode:a.status,diagnosis:r({error:d,statusCode:a.status})}}let d="Token expired and refresh failed";return{valid:!1,error:d,refreshed:!1,statusCode:401,diagnosis:r({error:d,statusCode:401,refreshFailed:!0})}}let h=401===g.status?"Token invalid or revoked":403===g.status?"Access denied":`API returned ${g.status}`;return{valid:!1,error:h,refreshed:d,statusCode:g.status,diagnosis:r({error:h,statusCode:g.status})}}catch(b){let a=p(b?.message,"Connection test failed");return{valid:!1,error:a,refreshed:d,diagnosis:r({error:a})}}}async function x(a){if(!a.apiKey){let a="Missing API key";return{valid:!1,error:a,diagnosis:q("auth_missing","local",a,"missing_api_key")}}let b=await (0,h.j)({provider:a.provider,apiKey:a.apiKey,providerSpecificData:a.providerSpecificData});if(b.unsupported){let a="Provider test not supported";return{valid:!1,error:a,diagnosis:r({error:a,unsupported:!0})}}let c=b.valid?null:b.error||"Invalid API key",d=b.valid?q("ok","upstream",null,null):r({error:c});return{valid:!!b.valid,error:c,diagnosis:d}}async function y(a){let b,c=await (0,e.Mc)(a);if(!c)return{valid:!1,error:"Connection not found",diagnosis:null,latencyMs:0};let d=null;try{d=await (0,e.YD)(a)}catch(b){console.log(`[ConnectionTest] Failed to resolve proxy for ${a}:`,b?.message)}let f=Date.now(),g=await s(c.provider);b=g?.diagnosis?{valid:!1,error:g.error,refreshed:!1,diagnosis:g.diagnosis}:"apikey"===c.authType?await (0,m.jf)(d?.proxy||null,()=>x(c)):await (0,m.jf)(d?.proxy||null,()=>w(c));let h=Date.now()-f,i=new Date().toISOString(),j=b.diagnosis||(b.valid?q("ok","local",null,null):r({error:b.error,statusCode:b.statusCode})),n={testStatus:b.valid?"active":"error",lastError:b.valid?null:b.error,lastErrorAt:b.valid?null:i,lastTested:i,lastErrorType:b.valid?null:j.type,lastErrorSource:b.valid?null:j.source,errorCode:b.valid?null:j.code||b.statusCode||null,rateLimitedUntil:b.valid?null:c.rateLimitedUntil||null};b.valid&&(n.backoffLevel=0),b.refreshed&&b.newTokens&&(n.accessToken=b.newTokens.accessToken,b.newTokens.refreshToken&&(n.refreshToken=b.newTokens.refreshToken),b.newTokens.expiresIn&&(n.expiresAt=new Date(Date.now()+1e3*b.newTokens.expiresIn).toISOString())),await (0,e.rj)(a,n),b.refreshed&&await v();try{(0,k.gK)({method:"POST",path:"/api/providers/test",status:b.valid?200:b.statusCode||401,model:"connection-test",provider:c.provider,connectionId:a,duration:h,error:b.valid?null:b.error||null,sourceFormat:"test",targetFormat:"test"}).catch(()=>{})}catch{}try{(0,l.pq)({status:b.valid?"success":"error",proxy:d?.proxy||null,level:d?.level||"provider-test",levelId:d?.levelId||null,provider:c.provider,targetUrl:`${c.provider}/connection-test`,latencyMs:h,error:b.valid?null:b.error||null,connectionId:a,comboId:null,account:a?.slice(0,8)||null,tlsFingerprint:!1})}catch{}return{valid:b.valid,error:b.error,refreshed:b.refreshed||!1,diagnosis:j,latencyMs:h,statusCode:b.statusCode||null,runtime:g||null,testedAt:i}}async function z(a,{params:b}){try{let{id:a}=await b,c=await y(a);if("Connection not found"===c.error)return d.NextResponse.json({error:"Connection not found"},{status:404});return d.NextResponse.json(c)}catch(a){return console.log("Error testing connection:",a),d.NextResponse.json({error:"Test failed"},{status:500})}}},17916:(a,b,c)=>{c.d(b,{CU:()=>s,MG:()=>u,V5:()=>v,XH:()=>w,hl:()=>t});var d=c(79748),e=c.n(d),f=c(21820),g=c.n(f),h=c(33873),i=c.n(h),j=c(79646);let k=new Set(["auto","host","container"]),l=new Set(["0","false","no","off"]),m={claude:{defaultCommand:"claude",envBinKey:"CLI_CLAUDE_BIN",requiresBinary:!0,healthcheckTimeoutMs:4e3,paths:{settings:".claude/settings.json"}},codex:{defaultCommand:"codex",envBinKey:"CLI_CODEX_BIN",requiresBinary:!0,healthcheckTimeoutMs:4e3,paths:{config:".codex/config.toml",auth:".codex/auth.json"}},droid:{defaultCommand:"droid",envBinKey:"CLI_DROID_BIN",requiresBinary:!0,healthcheckTimeoutMs:8e3,paths:{settings:".factory/settings.json"}},openclaw:{defaultCommand:"openclaw",envBinKey:"CLI_OPENCLAW_BIN",requiresBinary:!0,healthcheckTimeoutMs:12e3,paths:{settings:".openclaw/openclaw.json"}},cursor:{defaultCommands:["agent","cursor"],envBinKey:"CLI_CURSOR_BIN",requiresBinary:!0,healthcheckTimeoutMs:12e3,paths:{config:".cursor/cli-config.json",auth:".config/cursor/auth.json",state:".cursor/agent-cli-state.json"}},cline:{defaultCommand:"cline",envBinKey:"CLI_CLINE_BIN",requiresBinary:!0,healthcheckTimeoutMs:12e3,paths:{globalState:".cline/data/globalState.json",secrets:".cline/data/secrets.json"}},kilo:{defaultCommand:"kilocode",envBinKey:"CLI_KILO_BIN",requiresBinary:!0,healthcheckTimeoutMs:4e3,paths:{auth:".local/share/kilo/auth.json"}},continue:{defaultCommand:null,envBinKey:"CLI_CONTINUE_BIN",requiresBinary:!1,paths:{settings:".continue/config.json"}}},n=(a,b,{env:c,timeoutMs:d=3e3}={})=>new Promise(e=>{let f="",g="",h=!1,i=!1,k=(0,j.spawn)(a,b,{env:c,stdio:["ignore","pipe","pipe"]}),l=setTimeout(()=>{h=!0,k.kill("SIGKILL")},d),m=a=>{i||(i=!0,clearTimeout(l),e(a))};k.stdout.on("data",a=>{f+=a.toString()}),k.stderr.on("data",a=>{g+=a.toString()}),k.on("error",a=>{m({ok:!1,code:null,stdout:f.trim(),stderr:g.trim(),timedOut:h,error:a?.message||"spawn_error"})}),k.on("close",a=>{m({ok:!h&&0===a,code:a,stdout:f.trim(),stderr:g.trim(),timedOut:h,error:h?"timeout":null})})}),o=async a=>{try{await e().access(a,e().constants.F_OK)}catch{return{installed:!1,commandPath:null,reason:"not_found"}}try{return await e().access(a,e().constants.X_OK),{installed:!0,commandPath:a,reason:null}}catch{return{installed:!0,commandPath:a,reason:"not_executable"}}},p=async(a,b)=>{if(!a)return{installed:!1,commandPath:null,reason:"missing_command"};if(a.includes("/")||a.includes("\\"))return o(a);if("win32"===process.platform){let c=await n("where",[a],{env:b,timeoutMs:3e3});if(!c.ok||!c.stdout)return{installed:!1,commandPath:null,reason:"not_found"};let d=c.stdout.split(/\r?\n/).map(a=>a.trim()).find(Boolean)||null;return{installed:!!d,commandPath:d,reason:d?null:"not_found"}}let c=await n("sh",["-c",'command -v -- "$1"',"sh",a],{env:b,timeoutMs:3e3});if(!c.ok||!c.stdout)return{installed:!1,commandPath:null,reason:"not_found"};let d=c.stdout.split(/\r?\n/).map(a=>a.trim()).find(Boolean)||null;return{installed:!!d,commandPath:d,reason:d?null:"not_found"}},q=async(a,b)=>{if(!Array.isArray(a)||0===a.length)return{command:null,installed:!1,commandPath:null,reason:"missing_command"};for(let c of a){let a=await p(c,b);if(a.installed||"not_found"!==a.reason)return{command:c,...a}}return{command:a[0],installed:!1,commandPath:null,reason:"not_found"}},r=async(a,b,c=4e3)=>{for(let d of[["--version"],["-v"]])if((await n(a,d,{env:b,timeoutMs:c})).ok)return{runnable:!0,reason:null};return{runnable:!1,reason:"healthcheck_failed"}},s=()=>((a,b=!0)=>null==a||""===a?b:!l.has(String(a).trim().toLowerCase()))(process.env.CLI_ALLOW_CONFIG_WRITES,!0)?null:"CLI config writes are disabled (CLI_ALLOW_CONFIG_WRITES=false)",t=a=>{let b=m[a];if(!b)return null;let c=String(process.env.CLI_CONFIG_HOME||"").trim()||g().homedir();return Object.fromEntries(Object.entries(b.paths).map(([a,b])=>[a,i().join(c,b)]))},u=a=>{let b=t(a);if(!b)return null;let c=Object.keys(b)[0];return c?b[c]:null},v=async a=>{let b,c,d,e=m[a],f=(b=String(process.env.CLI_MODE||"auto").trim().toLowerCase(),k.has(b)?b:"auto");if(!e)return{installed:!1,runnable:!1,command:null,commandPath:null,reason:"unknown_tool",runtimeMode:f,requiresBinary:!1};let g=(c={...process.env},(d=String(process.env.CLI_EXTRA_PATHS||"").split(i().delimiter).map(a=>a.trim()).filter(Boolean)).length>0&&(c.PATH=[...d,c.PATH||""].filter(Boolean).join(i().delimiter)),c),h=(a=>{let b=m[a];if(!b)return[];let c=String(process.env[b.envBinKey]||"").trim();return c?[c]:Array.isArray(b.defaultCommands)&&b.defaultCommands.length>0?b.defaultCommands.filter(Boolean):b.defaultCommand?[b.defaultCommand]:[]})(a),j=!1!==e.requiresBinary;if(!j&&0===h.length)return{installed:!0,runnable:!0,command:null,commandPath:null,reason:"not_required",runtimeMode:f,requiresBinary:j};let l=await q(h,g),n=l.command;if(!l.installed)return{installed:!1,runnable:!1,command:n,commandPath:null,reason:l.reason||"not_found",runtimeMode:f,requiresBinary:j};if("not_executable"===l.reason)return{installed:!0,runnable:!1,command:n,commandPath:l.commandPath,reason:"not_executable",runtimeMode:f,requiresBinary:j};let o=await r(l.commandPath,g,Number(e.healthcheckTimeoutMs||4e3));return{installed:!0,runnable:o.runnable,command:n,commandPath:l.commandPath,reason:o.reason,runtimeMode:f,requiresBinary:j}},w=Object.keys(m)},34493:(a,b,c)=>{c.d(b,{GL:()=>j,XT:()=>k,pq:()=>i});var d=c(94755),e=c(42910);let f=!e.m1&&!e.I8,g=parseInt(process.env.PROXY_LOG_MAX_ENTRIES||"200",10),h=[];if(f)try{for(let a of(0,e.sm)().prepare("SELECT * FROM proxy_logs ORDER BY timestamp DESC LIMIT ?").all(g))h.push({id:a.id,timestamp:a.timestamp,status:a.status||"success",proxy:a.proxy_host?{type:a.proxy_type,host:a.proxy_host,port:a.proxy_port}:null,level:a.level||"direct",levelId:a.level_id||null,provider:a.provider||null,targetUrl:a.target_url||null,publicIp:a.public_ip||null,latencyMs:a.latency_ms||0,error:a.error||null,connectionId:a.connection_id||null,comboId:a.combo_id||null,account:a.account||null,tlsFingerprint:1===a.tls_fingerprint});h.length>0&&console.log(`[proxyLogger] Loaded ${h.length} proxy logs from SQLite`)}catch(a){console.warn("[proxyLogger] Failed to load from DB:",a.message)}function i(a){let b={id:(0,d.A)(),timestamp:new Date().toISOString(),status:a.status||"success",proxy:a.proxy||null,level:a.level||"direct",levelId:a.levelId||null,provider:a.provider||null,targetUrl:a.targetUrl||null,publicIp:a.publicIp||null,latencyMs:a.latencyMs||0,error:a.error||null,connectionId:a.connectionId||null,comboId:a.comboId||null,account:a.account||null,tlsFingerprint:a.tlsFingerprint||!1};if(h.unshift(b),h.length>g&&(h.length=g),f)try{let a=(0,e.sm)();a.prepare(`INSERT INTO proxy_logs (id, timestamp, status, proxy_type, proxy_host, proxy_port,
2
2
  level, level_id, provider, target_url, public_ip, latency_ms, error,
3
3
  connection_id, combo_id, account, tls_fingerprint)
4
4
  VALUES (@id, @timestamp, @status, @proxyType, @proxyHost, @proxyPort,
5
5
  @level, @levelId, @provider, @targetUrl, @publicIp, @latencyMs, @error,
6
- @connectionId, @comboId, @account, @tlsFingerprint)`).run({id:b.id,timestamp:b.timestamp,status:b.status,proxyType:b.proxy?.type||null,proxyHost:b.proxy?.host||null,proxyPort:b.proxy?.port||null,level:b.level,levelId:b.levelId,provider:b.provider,targetUrl:b.targetUrl,publicIp:b.publicIp,latencyMs:b.latencyMs,error:b.error,connectionId:b.connectionId,comboId:b.comboId,account:b.account,tlsFingerprint:+!!b.tlsFingerprint});let c=a.prepare("SELECT COUNT(*) as cnt FROM proxy_logs").get()?.cnt||0;c>500&&a.prepare(`DELETE FROM proxy_logs WHERE id IN (
6
+ @connectionId, @comboId, @account, @tlsFingerprint)`).run({id:b.id,timestamp:b.timestamp,status:b.status,proxyType:b.proxy?.type||null,proxyHost:b.proxy?.host||null,proxyPort:b.proxy?.port||null,level:b.level,levelId:b.levelId,provider:b.provider,targetUrl:b.targetUrl,publicIp:b.publicIp,latencyMs:b.latencyMs,error:b.error,connectionId:b.connectionId,comboId:b.comboId,account:b.account,tlsFingerprint:+!!b.tlsFingerprint});let c=a.prepare("SELECT COUNT(*) as cnt FROM proxy_logs").get()?.cnt||0;c>g&&a.prepare(`DELETE FROM proxy_logs WHERE id IN (
7
7
  SELECT id FROM proxy_logs ORDER BY timestamp ASC LIMIT ?
8
- )`).run(c-500)}catch(a){console.warn("[proxyLogger] Failed to persist:",a.message)}return b}function i(a={}){let b=[...g];if(a.status&&(b="ok"===a.status?b.filter(a=>"success"===a.status):b.filter(b=>b.status===a.status)),a.type&&(b=b.filter(b=>b.proxy?.type===a.type)),a.provider&&(b=b.filter(b=>b.provider===a.provider)),a.level&&(b=b.filter(b=>b.level===a.level)),a.search){let c=a.search.toLowerCase();b=b.filter(a=>(a.proxy?.host||"").toLowerCase().includes(c)||(a.provider||"").toLowerCase().includes(c)||(a.targetUrl||"").toLowerCase().includes(c)||(a.publicIp||"").toLowerCase().includes(c)||(a.level||"").toLowerCase().includes(c)||(a.error||"").toLowerCase().includes(c)||(a.account||"").toLowerCase().includes(c))}let c=a.limit||300;return b.slice(0,c)}function j(){if(g.length=0,f)try{(0,e.sm)().prepare("DELETE FROM proxy_logs").run()}catch(a){console.warn("[proxyLogger] Failed to clear DB:",a.message)}}},44963:(a,b,c)=>{c.d(b,{AF:()=>h,of:()=>e,u9:()=>g});var d=c(22901);let e=process.env.CLOUD_URL||process.env.NEXT_PUBLIC_CLOUD_URL,f=Number(process.env.CLOUD_SYNC_TIMEOUT_MS||12e3);async function g(a,b={},c=f){let d=new AbortController,e=setTimeout(()=>d.abort(),c);try{return await fetch(a,{...b,signal:d.signal})}finally{clearTimeout(e)}}async function h(a,b=null){let c;if(!e)return{error:"NEXT_PUBLIC_CLOUD_URL is not configured"};let f=await (0,d.getProviderConnections)(),j=await (0,d.OM)(),k=await (0,d.Uv)(),l=await (0,d.PX)();try{c=await g(`${e}/sync/${a}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({providers:f,modelAliases:j,combos:k,apiKeys:l})})}catch(a){return{error:a?.name==="AbortError"?"Cloud sync timeout":"Cloud sync request failed"}}if(!c.ok){let a=await c.text(),b=a.length>200?a.slice(0,200)+"…":a;return console.log(`Cloud sync failed (${c.status}):`,b),{error:"Cloud sync failed"}}let m=await c.json();m.data&&m.data.providers&&await i(m.data.providers);let n={success:!0,message:"Synced successfully",changes:m.changes};return b&&(n.createdKey=b),n}async function i(a){for(let b of(await (0,d.getProviderConnections)())){let c=a[b.id];if(c){if(new Date(c.updatedAt||0).getTime()>new Date(b.updatedAt||0).getTime()){let a={accessToken:c.accessToken,refreshToken:c.refreshToken,expiresAt:c.expiresAt,expiresIn:c.expiresIn,providerSpecificData:c.providerSpecificData||b.providerSpecificData,testStatus:c.status||"active",lastError:c.lastError,lastErrorAt:c.lastErrorAt,errorCode:c.errorCode,rateLimitedUntil:c.rateLimitedUntil,updatedAt:c.updatedAt};await (0,d.rj)(b.id,a)}}}}},76340:(a,b,c)=>{let d;c.d(b,{Wk:()=>s,jf:()=>p,qT:()=>r});var e=c(16698),f=c(79522);try{({createSession:d}=c(22546))}catch{d=null}class g{constructor(){this.session=null,this.available=!!d}async getSession(){if(!this.available)return null;if(this.session)return this.session;let a=process.env.HTTPS_PROXY||process.env.https_proxy||process.env.HTTP_PROXY||process.env.http_proxy||process.env.ALL_PROXY||process.env.all_proxy||void 0,b={browser:"chrome_124",os:"macos"};return a&&(b.proxy=a,console.log(`[TlsClient] Using proxy: ${a}`)),this.session=await d(b),console.log("[TlsClient] Session created (Chrome 124 TLS fingerprint)"),this.session}async fetch(a,b={}){let c=await this.getSession();if(!c)throw Error("wreq-js not available");let d={method:(b.method||"GET").toUpperCase(),headers:b.headers,body:b.body,redirect:"manual"===b.redirect?"manual":"follow"};return b.signal&&(d.signal=b.signal),await c.fetch(a,d)}async exit(){this.session&&(await this.session.close(),this.session=null)}}let h=new g;function i(){return"true"===process.env.ENABLE_TLS_FINGERPRINT}let j=new e.AsyncLocalStorage,k="u">typeof caches&&"object"==typeof caches,l=Symbol.for("omniroute.proxyFetch.state"),m=(globalThis[l]||(globalThis[l]={originalFetch:globalThis.fetch,proxyContext:new e.AsyncLocalStorage,isPatched:!1}),globalThis[l]),n=m.originalFetch,o=m.proxyContext;async function p(a,b){if("function"!=typeof b)throw TypeError("runWithProxyContext requires a callback function");let c=a?(0,f.HN)(a):null;return o.run(a||null,async()=>(c&&console.log(`[ProxyFetch] Applied request proxy context: ${(0,f.OK)(c)}`),b()))}async function q(a,b={}){let c;if(b?.dispatcher)return n(a,b);let d="string"==typeof a?a:a&&"string"==typeof a.url?a.url:String(a);try{c=function(a){let b=o.getStore();if(b)return{source:"context",proxyUrl:(0,f.HN)(b)};let c=function(a){let b;if(function(a){let b,c=process.env.NO_PROXY||process.env.no_proxy;if(!c)return!1;try{b=new URL(a)}catch{return!1}let d=b.hostname.toLowerCase(),e=b.port||("https:"===b.protocol?"443":"80");return c.split(",").map(a=>a.trim().toLowerCase()).filter(Boolean).some(a=>{if("*"===a)return!0;let[b,c]=a.split(":");return(!c||c===e)&&!!b&&(b.startsWith(".")?d.endsWith(b)||d===b.slice(1):d===b||d.endsWith(`.${b}`))})}(a))return null;try{b=new URL(a).protocol}catch{return null}let c="https:"===b?process.env.HTTPS_PROXY||process.env.https_proxy||process.env.ALL_PROXY||process.env.all_proxy:process.env.HTTP_PROXY||process.env.http_proxy||process.env.ALL_PROXY||process.env.all_proxy;return c?(0,f.zP)(c,"environment proxy"):null}(a);return c?{source:"env",proxyUrl:c}:{source:"direct",proxyUrl:null}}(d)}catch(b){let a=b instanceof Error?b.message:String(b);throw console.error(`[ProxyFetch] Proxy configuration error: ${a}`),b}let{source:e,proxyUrl:g}=c;if(!g){if(i()&&h.available)try{let a=j.getStore();return a&&(a.used=!0),await h.fetch(d,b)}catch(c){let a=c instanceof Error?c.message:String(c);console.warn(`[ProxyFetch] TLS fingerprint failed, falling back to native fetch: ${a}`);let b=j.getStore();b&&(b.used=!1)}return n(a,b)}try{let c=(0,f.I_)(g);return await n(a,{...b,dispatcher:c})}catch(b){let a=b instanceof Error?b.message:String(b);throw console.error(`[ProxyFetch] Proxy request failed (${e}, fail-closed): ${a}`),b}}async function r(a){let b={used:!1};return{result:await j.run(b,a),tlsFingerprintUsed:b.used}}function s(){return i()&&h.available}k||m.isPatched||(globalThis.fetch=q,m.isPatched=!0)},79522:(a,b,c)=>{c.d(b,{HN:()=>m,I_:()=>n,OK:()=>k,QX:()=>j,zP:()=>l});var d=c(47774),e=c(20406);let f=Symbol.for("omniroute.proxyDispatcher.cache"),g=new Set(["http:","https:","socks5:"]);function h(a){return"https:"===a||"wss:"===a?"443":"socks5:"===a?"1080":"8080"}function i(a,b){if(!a)return h(b);let c=Number(a);if(!Number.isInteger(c)||c<1||c>65535)throw Error("[ProxyDispatcher] Invalid proxy port");return String(c)}function j(){return"true"===process.env.ENABLE_SOCKS5_PROXY}function k(a){let b=new URL(a),c=b.port||h(b.protocol);return`${b.protocol}//${b.hostname}:${c}`}function l(a,b="proxy",{allowSocks5:c=j()}={}){let d;try{d=new URL(a)}catch{throw Error(`[ProxyDispatcher] Invalid ${b} URL`)}if(!g.has(d.protocol))throw Error(`[ProxyDispatcher] Unsupported ${b} protocol: ${d.protocol.replace(":","")}`);if("socks5:"===d.protocol&&!c)throw Error("[ProxyDispatcher] SOCKS5 proxy is disabled (set ENABLE_SOCKS5_PROXY=true to enable)");if(!d.hostname)throw Error(`[ProxyDispatcher] Invalid ${b} host`);return d.port=i(d.port,d.protocol),d.toString()}function m(a,{allowSocks5:b=j()}={}){if(!a)return null;if("string"==typeof a)return l(a,"context proxy",{allowSocks5:b});if("object"!=typeof a||Array.isArray(a))throw Error("[ProxyDispatcher] Invalid context proxy config");let c=String(a.type||"http").toLowerCase(),d=`${c}:`;if(!g.has(d))throw Error(`[ProxyDispatcher] Unsupported context proxy protocol: ${c}`);if("socks5:"===d&&!b)throw Error("[ProxyDispatcher] SOCKS5 proxy is disabled (set ENABLE_SOCKS5_PROXY=true to enable)");if(!a.host)throw Error("[ProxyDispatcher] Context proxy host is required");let e=i(a.port,d),f=new URL(`${c}://${a.host}:${e}`);return a.username&&(f.username=a.username,f.password=a.password||""),l(f.toString(),"context proxy",{allowSocks5:b})}function n(a){let b=l(a,"proxy dispatcher"),c=(globalThis[f]||(globalThis[f]=new Map),globalThis[f]),g=c.get(b);if(g)return g;let h=new URL(b);if("socks5:"===h.protocol){let a={type:5,host:h.hostname,port:Number(i(h.port,h.protocol))};h.username&&(a.userId=decodeURIComponent(h.username)),h.password&&(a.password=decodeURIComponent(h.password)),g=(0,e.vI)(a)}else g=new d.ProxyAgent(b);return c.set(b,g),g}},90357:(a,b,c)=>{c.d(b,{Xj:()=>e});var d=c(19713);async function e(a=null){let b=a||process.env.MACHINE_ID_SALT||"endpoint-proxy-salt";try{let a=(0,d.machineIdSync)();return(await Promise.resolve().then(c.t.bind(c,55511,23))).createHash("sha256").update(a+b).digest("hex").substring(0,16)}catch(a){return console.log("Error getting machine ID:",a),crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(a){let b=16*Math.random()|0;return("x"==a?b:3&b|8).toString(16)})}}}};
8
+ )`).run(c-g)}catch(a){console.warn("[proxyLogger] Failed to persist:",a.message)}return b}function j(a={}){let b=[...h];if(a.status&&(b="ok"===a.status?b.filter(a=>"success"===a.status):b.filter(b=>b.status===a.status)),a.type&&(b=b.filter(b=>b.proxy?.type===a.type)),a.provider&&(b=b.filter(b=>b.provider===a.provider)),a.level&&(b=b.filter(b=>b.level===a.level)),a.search){let c=a.search.toLowerCase();b=b.filter(a=>(a.proxy?.host||"").toLowerCase().includes(c)||(a.provider||"").toLowerCase().includes(c)||(a.targetUrl||"").toLowerCase().includes(c)||(a.publicIp||"").toLowerCase().includes(c)||(a.level||"").toLowerCase().includes(c)||(a.error||"").toLowerCase().includes(c)||(a.account||"").toLowerCase().includes(c))}let c=a.limit||300;return b.slice(0,c)}function k(){if(h.length=0,f)try{(0,e.sm)().prepare("DELETE FROM proxy_logs").run()}catch(a){console.warn("[proxyLogger] Failed to clear DB:",a.message)}}},44963:(a,b,c)=>{c.d(b,{AF:()=>h,of:()=>e,u9:()=>g});var d=c(22901);let e=process.env.CLOUD_URL||process.env.NEXT_PUBLIC_CLOUD_URL,f=Number(process.env.CLOUD_SYNC_TIMEOUT_MS||12e3);async function g(a,b={},c=f){let d=new AbortController,e=setTimeout(()=>d.abort(),c);try{return await fetch(a,{...b,signal:d.signal})}finally{clearTimeout(e)}}async function h(a,b=null){let c;if(!e)return{error:"NEXT_PUBLIC_CLOUD_URL is not configured"};let f=await (0,d.getProviderConnections)(),j=await (0,d.OM)(),k=await (0,d.Uv)(),l=await (0,d.PX)();try{c=await g(`${e}/sync/${a}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({providers:f,modelAliases:j,combos:k,apiKeys:l})})}catch(a){return{error:a?.name==="AbortError"?"Cloud sync timeout":"Cloud sync request failed"}}if(!c.ok){let a=await c.text(),b=a.length>200?a.slice(0,200)+"…":a;return console.log(`Cloud sync failed (${c.status}):`,b),{error:"Cloud sync failed"}}let m=await c.json();m.data&&m.data.providers&&await i(m.data.providers);let n={success:!0,message:"Synced successfully",changes:m.changes};return b&&(n.createdKey=b),n}async function i(a){for(let b of(await (0,d.getProviderConnections)())){let c=a[b.id];if(c){if(new Date(c.updatedAt||0).getTime()>new Date(b.updatedAt||0).getTime()){let a={accessToken:c.accessToken,refreshToken:c.refreshToken,expiresAt:c.expiresAt,expiresIn:c.expiresIn,providerSpecificData:c.providerSpecificData||b.providerSpecificData,testStatus:c.status||"active",lastError:c.lastError,lastErrorAt:c.lastErrorAt,errorCode:c.errorCode,rateLimitedUntil:c.rateLimitedUntil,updatedAt:c.updatedAt};await (0,d.rj)(b.id,a)}}}}},76340:(a,b,c)=>{let d;c.d(b,{Wk:()=>s,jf:()=>p,qT:()=>r});var e=c(16698),f=c(79522);try{({createSession:d}=c(22546))}catch{d=null}class g{constructor(){this.session=null,this.available=!!d}async getSession(){if(!this.available)return null;if(this.session)return this.session;let a=process.env.HTTPS_PROXY||process.env.https_proxy||process.env.HTTP_PROXY||process.env.http_proxy||process.env.ALL_PROXY||process.env.all_proxy||void 0,b={browser:"chrome_124",os:"macos"};return a&&(b.proxy=a,console.log(`[TlsClient] Using proxy: ${a}`)),this.session=await d(b),console.log("[TlsClient] Session created (Chrome 124 TLS fingerprint)"),this.session}async fetch(a,b={}){let c=await this.getSession();if(!c)throw Error("wreq-js not available");let d={method:(b.method||"GET").toUpperCase(),headers:b.headers,body:b.body,redirect:"manual"===b.redirect?"manual":"follow"};return b.signal&&(d.signal=b.signal),await c.fetch(a,d)}async exit(){this.session&&(await this.session.close(),this.session=null)}}let h=new g;function i(){return"true"===process.env.ENABLE_TLS_FINGERPRINT}let j=new e.AsyncLocalStorage,k="u">typeof caches&&"object"==typeof caches,l=Symbol.for("omniroute.proxyFetch.state"),m=(globalThis[l]||(globalThis[l]={originalFetch:globalThis.fetch,proxyContext:new e.AsyncLocalStorage,isPatched:!1}),globalThis[l]),n=m.originalFetch,o=m.proxyContext;async function p(a,b){if("function"!=typeof b)throw TypeError("runWithProxyContext requires a callback function");let c=a?(0,f.HN)(a):null;return o.run(a||null,async()=>(c&&console.log(`[ProxyFetch] Applied request proxy context: ${(0,f.OK)(c)}`),b()))}async function q(a,b={}){let c;if(b?.dispatcher)return n(a,b);let d="string"==typeof a?a:a&&"string"==typeof a.url?a.url:String(a);try{c=function(a){let b=o.getStore();if(b)return{source:"context",proxyUrl:(0,f.HN)(b)};let c=function(a){let b;if(function(a){let b,c=process.env.NO_PROXY||process.env.no_proxy;if(!c)return!1;try{b=new URL(a)}catch{return!1}let d=b.hostname.toLowerCase(),e=b.port||("https:"===b.protocol?"443":"80");return c.split(",").map(a=>a.trim().toLowerCase()).filter(Boolean).some(a=>{if("*"===a)return!0;let[b,c]=a.split(":");return(!c||c===e)&&!!b&&(b.startsWith(".")?d.endsWith(b)||d===b.slice(1):d===b||d.endsWith(`.${b}`))})}(a))return null;try{b=new URL(a).protocol}catch{return null}let c="https:"===b?process.env.HTTPS_PROXY||process.env.https_proxy||process.env.ALL_PROXY||process.env.all_proxy:process.env.HTTP_PROXY||process.env.http_proxy||process.env.ALL_PROXY||process.env.all_proxy;return c?(0,f.zP)(c,"environment proxy"):null}(a);return c?{source:"env",proxyUrl:c}:{source:"direct",proxyUrl:null}}(d)}catch(b){let a=b instanceof Error?b.message:String(b);throw console.error(`[ProxyFetch] Proxy configuration error: ${a}`),b}let{source:e,proxyUrl:g}=c;if(!g){if(i()&&h.available)try{let a=j.getStore();return a&&(a.used=!0),await h.fetch(d,b)}catch(c){let a=c instanceof Error?c.message:String(c);console.warn(`[ProxyFetch] TLS fingerprint failed, falling back to native fetch: ${a}`);let b=j.getStore();b&&(b.used=!1)}return n(a,b)}try{let c=(0,f.I_)(g);return await n(a,{...b,dispatcher:c})}catch(b){let a=b instanceof Error?b.message:String(b);throw console.error(`[ProxyFetch] Proxy request failed (${e}, fail-closed): ${a}`),b}}async function r(a){let b={used:!1};return{result:await j.run(b,a),tlsFingerprintUsed:b.used}}function s(){return i()&&h.available}k||m.isPatched||(globalThis.fetch=q,m.isPatched=!0)},79522:(a,b,c)=>{c.d(b,{HN:()=>m,I_:()=>n,OK:()=>k,QX:()=>j,zP:()=>l});var d=c(47774),e=c(20406);let f=Symbol.for("omniroute.proxyDispatcher.cache"),g=new Set(["http:","https:","socks5:"]);function h(a){return"https:"===a||"wss:"===a?"443":"socks5:"===a?"1080":"8080"}function i(a,b){if(!a)return h(b);let c=Number(a);if(!Number.isInteger(c)||c<1||c>65535)throw Error("[ProxyDispatcher] Invalid proxy port");return String(c)}function j(){return"true"===process.env.ENABLE_SOCKS5_PROXY}function k(a){let b=new URL(a),c=b.port||h(b.protocol);return`${b.protocol}//${b.hostname}:${c}`}function l(a,b="proxy",{allowSocks5:c=j()}={}){let d;try{d=new URL(a)}catch{throw Error(`[ProxyDispatcher] Invalid ${b} URL`)}if(!g.has(d.protocol))throw Error(`[ProxyDispatcher] Unsupported ${b} protocol: ${d.protocol.replace(":","")}`);if("socks5:"===d.protocol&&!c)throw Error("[ProxyDispatcher] SOCKS5 proxy is disabled (set ENABLE_SOCKS5_PROXY=true to enable)");if(!d.hostname)throw Error(`[ProxyDispatcher] Invalid ${b} host`);return d.port=i(d.port,d.protocol),d.toString()}function m(a,{allowSocks5:b=j()}={}){if(!a)return null;if("string"==typeof a)return l(a,"context proxy",{allowSocks5:b});if("object"!=typeof a||Array.isArray(a))throw Error("[ProxyDispatcher] Invalid context proxy config");let c=String(a.type||"http").toLowerCase(),d=`${c}:`;if(!g.has(d))throw Error(`[ProxyDispatcher] Unsupported context proxy protocol: ${c}`);if("socks5:"===d&&!b)throw Error("[ProxyDispatcher] SOCKS5 proxy is disabled (set ENABLE_SOCKS5_PROXY=true to enable)");if(!a.host)throw Error("[ProxyDispatcher] Context proxy host is required");let e=i(a.port,d),f=new URL(`${c}://${a.host}:${e}`);return a.username&&(f.username=a.username,f.password=a.password||""),l(f.toString(),"context proxy",{allowSocks5:b})}function n(a){let b=l(a,"proxy dispatcher"),c=(globalThis[f]||(globalThis[f]=new Map),globalThis[f]),g=c.get(b);if(g)return g;let h=new URL(b);if("socks5:"===h.protocol){let a={type:5,host:h.hostname,port:Number(i(h.port,h.protocol))};h.username&&(a.userId=decodeURIComponent(h.username)),h.password&&(a.password=decodeURIComponent(h.password)),g=(0,e.vI)(a)}else g=new d.ProxyAgent(b);return c.set(b,g),g}},90357:(a,b,c)=>{c.d(b,{Xj:()=>e});var d=c(19713);async function e(a=null){let b=a||process.env.MACHINE_ID_SALT||"endpoint-proxy-salt";try{let a=(0,d.machineIdSync)();return(await Promise.resolve().then(c.t.bind(c,55511,23))).createHash("sha256").update(a+b).digest("hex").substring(0,16)}catch(a){return console.log("Error getting machine ID:",a),crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(a){let b=16*Math.random()|0;return("x"==a?b:3&b|8).toString(16)})}}}};
@@ -1,4 +1,4 @@
1
- "use strict";exports.id=7230,exports.ids=[7230],exports.modules={27230:(a,b,c)=>{c.d(b,{E5:()=>y,yN:()=>A,jE:()=>H,kh:()=>G,Zx:()=>z,uO:()=>w,BY:()=>B,gK:()=>F,sZ:()=>x,uw:()=>v});var d=c(33873),e=c.n(d),f=c(29021),g=c.n(f),h=c(42910),i=c(88189);let j=!h.m1&&!h.I8,k=h.m1?null:(0,i.sm)(),l=h.m1?null:e().join(h.nJ,"log.txt"),m=h.m1?null:e().join(h.nJ,"call_logs"),n=h.m1||!k?null:e().join(k,"usage.json"),o=h.m1||!k?null:e().join(k,"log.txt"),p=h.m1||!k?null:e().join(k,"call_logs.json"),q=h.m1||!k?null:e().join(k,"call_logs"),r=h.m1?null:e().join(h.nJ,"usage.json"),s=h.m1?null:e().join(h.nJ,"call_logs.json");function t(a,b,c){!a||!b||!g().existsSync(a)||g().existsSync(b)||(g().statSync(a).isDirectory()?g().cpSync(a,b,{recursive:!0}):g().copyFileSync(a,b),console.log(`[usageDb] Migrated ${c}: ${a} -> ${b}`))}if(!function(){if(j&&k&&!(0,i.ys)(h.nJ,k))try{t(n,r,"usage history"),t(o,l,"request log"),t(p,s,"call log index"),t(q,m,"call log files")}catch(a){console.error("[usageDb] Legacy migration failed:",a.message)}}(),j)try{!function(){if(!j)return;let a=(0,h.sm)();if(r&&g().existsSync(r))try{let b=g().readFileSync(r,"utf-8"),c=JSON.parse(b).history||[];if(c.length>0){console.log(`[usageDb] Migrating ${c.length} usage entries from JSON → SQLite...`);let b=a.prepare(`
1
+ "use strict";exports.id=7230,exports.ids=[7230],exports.modules={27230:(a,b,c)=>{c.d(b,{E5:()=>y,yN:()=>A,jE:()=>I,kh:()=>H,Zx:()=>z,uO:()=>w,BY:()=>B,gK:()=>G,sZ:()=>x,uw:()=>v});var d=c(33873),e=c.n(d),f=c(29021),g=c.n(f),h=c(42910),i=c(88189);let j=!h.m1&&!h.I8,k=h.m1?null:(0,i.sm)(),l=h.m1?null:e().join(h.nJ,"log.txt"),m=h.m1?null:e().join(h.nJ,"call_logs"),n=h.m1||!k?null:e().join(k,"usage.json"),o=h.m1||!k?null:e().join(k,"log.txt"),p=h.m1||!k?null:e().join(k,"call_logs.json"),q=h.m1||!k?null:e().join(k,"call_logs"),r=h.m1?null:e().join(h.nJ,"usage.json"),s=h.m1?null:e().join(h.nJ,"call_logs.json");function t(a,b,c){!a||!b||!g().existsSync(a)||g().existsSync(b)||(g().statSync(a).isDirectory()?g().cpSync(a,b,{recursive:!0}):g().copyFileSync(a,b),console.log(`[usageDb] Migrated ${c}: ${a} -> ${b}`))}if(!function(){if(j&&k&&!(0,i.ys)(h.nJ,k))try{t(n,r,"usage history"),t(o,l,"request log"),t(p,s,"call log index"),t(q,m,"call log files")}catch(a){console.error("[usageDb] Legacy migration failed:",a.message)}}(),j)try{!function(){if(!j)return;let a=(0,h.sm)();if(r&&g().existsSync(r))try{let b=g().readFileSync(r,"utf-8"),c=JSON.parse(b).history||[];if(c.length>0){console.log(`[usageDb] Migrating ${c.length} usage entries from JSON → SQLite...`);let b=a.prepare(`
2
2
  INSERT INTO usage_history (provider, model, connection_id, api_key_id, api_key_name,
3
3
  tokens_input, tokens_output, tokens_cache_read, tokens_cache_creation, tokens_reasoning,
4
4
  status, timestamp)
@@ -18,19 +18,19 @@
18
18
  status, timestamp)
19
19
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
20
20
  `).run(a.provider||null,a.model||null,a.connectionId||null,a.apiKeyId||null,a.apiKeyName||null,a.tokens?.input??a.tokens?.prompt_tokens??0,a.tokens?.output??a.tokens?.completion_tokens??0,a.tokens?.cacheRead??a.tokens?.cached_tokens??0,a.tokens?.cacheCreation??a.tokens?.cache_creation_input_tokens??0,a.tokens?.reasoning??a.tokens?.reasoning_tokens??0,a.status||null,c)}catch(a){console.error("Failed to save usage stats:",a)}}async function y({model:a,provider:b,connectionId:d,tokens:e,status:f}){if(j)try{let h=function(a=new Date){let b=a=>String(a).padStart(2,"0"),c=b(a.getDate()),d=b(a.getMonth()+1),e=a.getFullYear(),f=b(a.getHours()),g=b(a.getMinutes()),h=b(a.getSeconds());return`${c}-${d}-${e} ${f}:${g}:${h}`}(),i=b?.toUpperCase()||"-",j=d?d.slice(0,8):"-";try{let{getProviderConnections:a}=await Promise.all([c.e(3596),c.e(2901),c.e(4755)]).then(c.bind(c,22901)),b=(await a()).find(a=>a.id===d);b&&(j=b.name||b.email||j)}catch{}let k=e?.input!==void 0?e.input:e?.prompt_tokens!==void 0?e.prompt_tokens:"-",m=e?.output!==void 0?e.output:e?.completion_tokens!==void 0?e.completion_tokens:"-",n=`${h} | ${a||"-"} | ${i} | ${j} | ${k} | ${m} | ${f}
21
- `;g().appendFileSync(l,n);let o=g().readFileSync(l,"utf-8").trim().split("\n");o.length>200&&g().writeFileSync(l,o.slice(-200).join("\n")+"\n")}catch(a){console.error("Failed to append to log.txt:",a.message)}}async function z(a=200){if(!j||!g()||"function"!=typeof g().existsSync||!l||!g().existsSync(l))return[];try{return g().readFileSync(l,"utf-8").trim().split("\n").slice(-a).reverse()}catch(a){return console.error("[usageDb] Failed to read log.txt:",a.message),[]}}async function A(a,b,d){if(!d||!a||!b)return 0;try{let{getPricingForModel:e}=await Promise.all([c.e(3596),c.e(2901),c.e(4755)]).then(c.bind(c,22901)),f=await e(a,b);if(!f){let c=function(a){if(!a||!a.includes("/"))return a;let b=a.split("/");return b[b.length-1]}(b);c!==b&&(f=await e(a,c))}if(!f)return 0;let g=0,h=d.input??d.prompt_tokens??d.input_tokens??0,i=d.cacheRead??d.cached_tokens??d.cache_read_input_tokens??0,j=Math.max(0,h-i);g+=j*(f.input/1e6),i>0&&(g+=i*((f.cached||f.input)/1e6));let k=d.output??d.completion_tokens??d.output_tokens??0;g+=k*(f.output/1e6);let l=d.reasoning??d.reasoning_tokens??0;l>0&&(g+=l*((f.reasoning||f.output)/1e6));let m=d.cacheCreation??d.cache_creation_input_tokens??0;return m>0&&(g+=m*((f.cache_creation||f.input)/1e6)),g}catch(a){return console.error("Error calculating cost:",a),0}}async function B(){let a=(0,h.sm)().prepare("SELECT * FROM usage_history ORDER BY timestamp ASC").all(),{getProviderConnections:b}=await Promise.all([c.e(3596),c.e(2901),c.e(4755)]).then(c.bind(c,22901)),d=[];try{d=await b()}catch{}let e={};for(let a of d)e[a.id]=a.name||a.email||a.id;let f={totalRequests:a.length,totalPromptTokens:0,totalCompletionTokens:0,totalCost:0,byProvider:{},byModel:{},byAccount:{},byApiKey:{},last10Minutes:[],pending:u,activeRequests:[]};for(let[a,b]of Object.entries(u.byAccount))for(let[c,d]of Object.entries(b))if(d>0){let b=e[a]||`Account ${a.slice(0,8)}...`,g=c.match(/^(.*) \((.*)\)$/);f.activeRequests.push({model:g?g[1]:c,provider:g?g[2]:"unknown",account:b,count:d})}let g=new Date,i=new Date(6e4*Math.floor(g.getTime()/6e4)),j={};for(let a=0;a<10;a++){let b=new Date(i.getTime()-(9-a)*6e4).getTime();j[b]={requests:0,promptTokens:0,completionTokens:0,cost:0},f.last10Minutes.push(j[b])}let k=new Date(i.getTime()-54e4);for(let b of a){let a=b.tokens_input||0,c=b.tokens_output||0,d=new Date(b.timestamp),h={input:b.tokens_input,output:b.tokens_output,cacheRead:b.tokens_cache_read,cacheCreation:b.tokens_cache_creation,reasoning:b.tokens_reasoning},i=await A(b.provider,b.model,h);if(f.totalPromptTokens+=a,f.totalCompletionTokens+=c,f.totalCost+=i,d>=k&&d<=g){let b=6e4*Math.floor(d.getTime()/6e4);j[b]&&(j[b].requests++,j[b].promptTokens+=a,j[b].completionTokens+=c,j[b].cost+=i)}f.byProvider[b.provider]||(f.byProvider[b.provider]={requests:0,promptTokens:0,completionTokens:0,cost:0}),f.byProvider[b.provider].requests++,f.byProvider[b.provider].promptTokens+=a,f.byProvider[b.provider].completionTokens+=c,f.byProvider[b.provider].cost+=i;let l=b.provider?`${b.model} (${b.provider})`:b.model;if(f.byModel[l]||(f.byModel[l]={requests:0,promptTokens:0,completionTokens:0,cost:0,rawModel:b.model,provider:b.provider,lastUsed:b.timestamp}),f.byModel[l].requests++,f.byModel[l].promptTokens+=a,f.byModel[l].completionTokens+=c,f.byModel[l].cost+=i,new Date(b.timestamp)>new Date(f.byModel[l].lastUsed)&&(f.byModel[l].lastUsed=b.timestamp),b.connection_id){let d=e[b.connection_id]||`Account ${b.connection_id.slice(0,8)}...`,g=`${b.model} (${b.provider} - ${d})`;f.byAccount[g]||(f.byAccount[g]={requests:0,promptTokens:0,completionTokens:0,cost:0,rawModel:b.model,provider:b.provider,connectionId:b.connection_id,accountName:d,lastUsed:b.timestamp}),f.byAccount[g].requests++,f.byAccount[g].promptTokens+=a,f.byAccount[g].completionTokens+=c,f.byAccount[g].cost+=i,new Date(b.timestamp)>new Date(f.byAccount[g].lastUsed)&&(f.byAccount[g].lastUsed=b.timestamp)}if(b.api_key_id||b.api_key_name){let d=b.api_key_name||b.api_key_id||"unknown",e=b.api_key_id||null,g=e?`${d} (${e})`:d;f.byApiKey[g]||(f.byApiKey[g]={requests:0,promptTokens:0,completionTokens:0,cost:0,apiKeyId:e,apiKeyName:d,lastUsed:b.timestamp}),f.byApiKey[g].requests++,f.byApiKey[g].promptTokens+=a,f.byApiKey[g].completionTokens+=c,f.byApiKey[g].cost+=i,new Date(b.timestamp)>new Date(f.byApiKey[g].lastUsed)&&(f.byApiKey[g].lastUsed=b.timestamp)}}return f}let C=parseInt(process.env.LOG_RETENTION_DAYS||"7",10),D=new Set(["api_key","apiKey","api-key","authorization","Authorization","x-api-key","X-Api-Key","access_token","accessToken","refresh_token","refreshToken","password","secret","token"]),E=0;async function F(a){if(j)try{let b=a.connectionId?a.connectionId.slice(0,8):"-";try{let{getProviderConnections:d}=await Promise.all([c.e(3596),c.e(2901),c.e(4755)]).then(c.bind(c,22901)),e=(await d()).find(b=>b.id===a.connectionId);e&&(b=e.name||e.email||b)}catch{}let d=a=>{if(!a)return null;let b=function a(b){if(!b||"object"!=typeof b)return b;if(Array.isArray(b))return b.map(a);let c={};for(let[d,e]of Object.entries(b))D.has(d)?c[d]="[REDACTED]":"string"==typeof e&&e.startsWith("Bearer ")?c[d]="Bearer [REDACTED]":"object"==typeof e&&null!==e?c[d]=a(e):c[d]=e;return c}(a),c=JSON.stringify(b);if(c.length<=8192)return c;try{return JSON.stringify({_truncated:!0,_originalSize:c.length,_preview:c.slice(0,8192)+"..."})}catch{return JSON.stringify({_truncated:!0})}},f={id:(E++,`${Date.now()}-${E}`),timestamp:new Date().toISOString(),method:a.method||"POST",path:a.path||"/v1/chat/completions",status:a.status||0,model:a.model||"-",provider:a.provider||"-",account:b,connectionId:a.connectionId||null,duration:a.duration||0,tokensIn:a.tokens?.prompt_tokens||0,tokensOut:a.tokens?.completion_tokens||0,sourceFormat:a.sourceFormat||null,targetFormat:a.targetFormat||null,apiKeyId:a.apiKeyId||null,apiKeyName:a.apiKeyName||null,comboName:a.comboName||null,requestBody:d(a.requestBody),responseBody:d(a.responseBody),error:a.error||null},i=(0,h.sm)();i.prepare(`
21
+ `;g().appendFileSync(l,n);let o=g().readFileSync(l,"utf-8").trim().split("\n");o.length>200&&g().writeFileSync(l,o.slice(-200).join("\n")+"\n")}catch(a){console.error("Failed to append to log.txt:",a.message)}}async function z(a=200){if(!j||!g()||"function"!=typeof g().existsSync||!l||!g().existsSync(l))return[];try{return g().readFileSync(l,"utf-8").trim().split("\n").slice(-a).reverse()}catch(a){return console.error("[usageDb] Failed to read log.txt:",a.message),[]}}async function A(a,b,d){if(!d||!a||!b)return 0;try{let{getPricingForModel:e}=await Promise.all([c.e(3596),c.e(2901),c.e(4755)]).then(c.bind(c,22901)),f=await e(a,b);if(!f){let c=function(a){if(!a||!a.includes("/"))return a;let b=a.split("/");return b[b.length-1]}(b);c!==b&&(f=await e(a,c))}if(!f)return 0;let g=0,h=d.input??d.prompt_tokens??d.input_tokens??0,i=d.cacheRead??d.cached_tokens??d.cache_read_input_tokens??0,j=Math.max(0,h-i);g+=j*(f.input/1e6),i>0&&(g+=i*((f.cached||f.input)/1e6));let k=d.output??d.completion_tokens??d.output_tokens??0;g+=k*(f.output/1e6);let l=d.reasoning??d.reasoning_tokens??0;l>0&&(g+=l*((f.reasoning||f.output)/1e6));let m=d.cacheCreation??d.cache_creation_input_tokens??0;return m>0&&(g+=m*((f.cache_creation||f.input)/1e6)),g}catch(a){return console.error("Error calculating cost:",a),0}}async function B(){let a=(0,h.sm)().prepare("SELECT * FROM usage_history ORDER BY timestamp ASC").all(),{getProviderConnections:b}=await Promise.all([c.e(3596),c.e(2901),c.e(4755)]).then(c.bind(c,22901)),d=[];try{d=await b()}catch{}let e={};for(let a of d)e[a.id]=a.name||a.email||a.id;let f={totalRequests:a.length,totalPromptTokens:0,totalCompletionTokens:0,totalCost:0,byProvider:{},byModel:{},byAccount:{},byApiKey:{},last10Minutes:[],pending:u,activeRequests:[]};for(let[a,b]of Object.entries(u.byAccount))for(let[c,d]of Object.entries(b))if(d>0){let b=e[a]||`Account ${a.slice(0,8)}...`,g=c.match(/^(.*) \((.*)\)$/);f.activeRequests.push({model:g?g[1]:c,provider:g?g[2]:"unknown",account:b,count:d})}let g=new Date,i=new Date(6e4*Math.floor(g.getTime()/6e4)),j={};for(let a=0;a<10;a++){let b=new Date(i.getTime()-(9-a)*6e4).getTime();j[b]={requests:0,promptTokens:0,completionTokens:0,cost:0},f.last10Minutes.push(j[b])}let k=new Date(i.getTime()-54e4);for(let b of a){let a=b.tokens_input||0,c=b.tokens_output||0,d=new Date(b.timestamp),h={input:b.tokens_input,output:b.tokens_output,cacheRead:b.tokens_cache_read,cacheCreation:b.tokens_cache_creation,reasoning:b.tokens_reasoning},i=await A(b.provider,b.model,h);if(f.totalPromptTokens+=a,f.totalCompletionTokens+=c,f.totalCost+=i,d>=k&&d<=g){let b=6e4*Math.floor(d.getTime()/6e4);j[b]&&(j[b].requests++,j[b].promptTokens+=a,j[b].completionTokens+=c,j[b].cost+=i)}f.byProvider[b.provider]||(f.byProvider[b.provider]={requests:0,promptTokens:0,completionTokens:0,cost:0}),f.byProvider[b.provider].requests++,f.byProvider[b.provider].promptTokens+=a,f.byProvider[b.provider].completionTokens+=c,f.byProvider[b.provider].cost+=i;let l=b.provider?`${b.model} (${b.provider})`:b.model;if(f.byModel[l]||(f.byModel[l]={requests:0,promptTokens:0,completionTokens:0,cost:0,rawModel:b.model,provider:b.provider,lastUsed:b.timestamp}),f.byModel[l].requests++,f.byModel[l].promptTokens+=a,f.byModel[l].completionTokens+=c,f.byModel[l].cost+=i,new Date(b.timestamp)>new Date(f.byModel[l].lastUsed)&&(f.byModel[l].lastUsed=b.timestamp),b.connection_id){let d=e[b.connection_id]||`Account ${b.connection_id.slice(0,8)}...`,g=`${b.model} (${b.provider} - ${d})`;f.byAccount[g]||(f.byAccount[g]={requests:0,promptTokens:0,completionTokens:0,cost:0,rawModel:b.model,provider:b.provider,connectionId:b.connection_id,accountName:d,lastUsed:b.timestamp}),f.byAccount[g].requests++,f.byAccount[g].promptTokens+=a,f.byAccount[g].completionTokens+=c,f.byAccount[g].cost+=i,new Date(b.timestamp)>new Date(f.byAccount[g].lastUsed)&&(f.byAccount[g].lastUsed=b.timestamp)}if(b.api_key_id||b.api_key_name){let d=b.api_key_name||b.api_key_id||"unknown",e=b.api_key_id||null,g=e?`${d} (${e})`:d;f.byApiKey[g]||(f.byApiKey[g]={requests:0,promptTokens:0,completionTokens:0,cost:0,apiKeyId:e,apiKeyName:d,lastUsed:b.timestamp}),f.byApiKey[g].requests++,f.byApiKey[g].promptTokens+=a,f.byApiKey[g].completionTokens+=c,f.byApiKey[g].cost+=i,new Date(b.timestamp)>new Date(f.byApiKey[g].lastUsed)&&(f.byApiKey[g].lastUsed=b.timestamp)}}return f}let C=parseInt(process.env.CALL_LOGS_MAX||"200",10),D=parseInt(process.env.LOG_RETENTION_DAYS||"7",10),E=new Set(["api_key","apiKey","api-key","authorization","Authorization","x-api-key","X-Api-Key","access_token","accessToken","refresh_token","refreshToken","password","secret","token"]),F=0;async function G(a){if(j)try{let b=a.connectionId?a.connectionId.slice(0,8):"-";try{let{getProviderConnections:d}=await Promise.all([c.e(3596),c.e(2901),c.e(4755)]).then(c.bind(c,22901)),e=(await d()).find(b=>b.id===a.connectionId);e&&(b=e.name||e.email||b)}catch{}let d=a=>{if(!a)return null;let b=function a(b){if(!b||"object"!=typeof b)return b;if(Array.isArray(b))return b.map(a);let c={};for(let[d,e]of Object.entries(b))E.has(d)?c[d]="[REDACTED]":"string"==typeof e&&e.startsWith("Bearer ")?c[d]="Bearer [REDACTED]":"object"==typeof e&&null!==e?c[d]=a(e):c[d]=e;return c}(a),c=JSON.stringify(b);if(c.length<=8192)return c;try{return JSON.stringify({_truncated:!0,_originalSize:c.length,_preview:c.slice(0,8192)+"..."})}catch{return JSON.stringify({_truncated:!0})}},f={id:(F++,`${Date.now()}-${F}`),timestamp:new Date().toISOString(),method:a.method||"POST",path:a.path||"/v1/chat/completions",status:a.status||0,model:a.model||"-",provider:a.provider||"-",account:b,connectionId:a.connectionId||null,duration:a.duration||0,tokensIn:a.tokens?.prompt_tokens||0,tokensOut:a.tokens?.completion_tokens||0,sourceFormat:a.sourceFormat||null,targetFormat:a.targetFormat||null,apiKeyId:a.apiKeyId||null,apiKeyName:a.apiKeyName||null,comboName:a.comboName||null,requestBody:d(a.requestBody),responseBody:d(a.responseBody),error:a.error||null},i=(0,h.sm)();i.prepare(`
22
22
  INSERT INTO call_logs (id, timestamp, method, path, status, model, provider,
23
23
  account, connection_id, duration, tokens_in, tokens_out, source_format, target_format,
24
24
  api_key_id, api_key_name, combo_name, request_body, response_body, error)
25
25
  VALUES (@id, @timestamp, @method, @path, @status, @model, @provider,
26
26
  @account, @connectionId, @duration, @tokensIn, @tokensOut, @sourceFormat, @targetFormat,
27
27
  @apiKeyId, @apiKeyName, @comboName, @requestBody, @responseBody, @error)
28
- `).run(f);let j=i.prepare("SELECT COUNT(*) as cnt FROM call_logs").get()?.cnt||0;j>500&&i.prepare(`
28
+ `).run(f);let j=i.prepare("SELECT COUNT(*) as cnt FROM call_logs").get()?.cnt||0;j>C&&i.prepare(`
29
29
  DELETE FROM call_logs WHERE id IN (
30
30
  SELECT id FROM call_logs ORDER BY timestamp ASC LIMIT ?
31
31
  )
32
- `).run(j-500),function(a,b,c){if(m)try{let d=new Date,f=`${d.getFullYear()}-${String(d.getMonth()+1).padStart(2,"0")}-${String(d.getDate()).padStart(2,"0")}`,h=e().join(m,f);g().existsSync(h)||g().mkdirSync(h,{recursive:!0});let i=(a.model||"unknown").replace(/[/:]/g,"-"),j=`${String(d.getHours()).padStart(2,"0")}${String(d.getMinutes()).padStart(2,"0")}${String(d.getSeconds()).padStart(2,"0")}`,k=`${j}_${i}_${a.status}.json`,l={...a,requestBody:b||null,responseBody:c||null};g().writeFileSync(e().join(h,k),JSON.stringify(l,null,2))}catch(a){console.error("[callLogs] Failed to write disk log:",a.message)}}({...f,tokens:{in:f.tokensIn,out:f.tokensOut}},a.requestBody,a.responseBody)}catch(a){console.error("[callLogs] Failed to save call log:",a.message)}}if(j)try{!function(){if(m&&g().existsSync(m))try{let a=g().readdirSync(m),b=Date.now(),c=24*C*36e5;for(let d of a){let a=e().join(m,d),f=g().statSync(a);f.isDirectory()&&b-f.mtimeMs>c&&(g().rmSync(a,{recursive:!0,force:!0}),console.log(`[callLogs] Rotated old logs: ${d}`))}}catch(a){console.error("[callLogs] Failed to rotate logs:",a.message)}}()}catch{}async function G(a={}){let b=(0,h.sm)(),c="SELECT * FROM call_logs",d=[],e={};if(a.status)if("error"===a.status)d.push("(status >= 400 OR error IS NOT NULL)");else if("ok"===a.status)d.push("status >= 200 AND status < 300");else{let b=parseInt(a.status);isNaN(b)||(d.push("status = @statusCode"),e.statusCode=b)}a.model&&(d.push("model LIKE @modelQ"),e.modelQ=`%${a.model}%`),a.provider&&(d.push("provider LIKE @providerQ"),e.providerQ=`%${a.provider}%`),a.account&&(d.push("account LIKE @accountQ"),e.accountQ=`%${a.account}%`),a.apiKey&&(d.push("(api_key_name LIKE @apiKeyQ OR api_key_id LIKE @apiKeyQ)"),e.apiKeyQ=`%${a.apiKey}%`),a.combo&&d.push("combo_name IS NOT NULL"),a.search&&(d.push(`(
32
+ `).run(j-C),function(a,b,c){if(m)try{let d=new Date,f=`${d.getFullYear()}-${String(d.getMonth()+1).padStart(2,"0")}-${String(d.getDate()).padStart(2,"0")}`,h=e().join(m,f);g().existsSync(h)||g().mkdirSync(h,{recursive:!0});let i=(a.model||"unknown").replace(/[/:]/g,"-"),j=`${String(d.getHours()).padStart(2,"0")}${String(d.getMinutes()).padStart(2,"0")}${String(d.getSeconds()).padStart(2,"0")}`,k=`${j}_${i}_${a.status}.json`,l={...a,requestBody:b||null,responseBody:c||null};g().writeFileSync(e().join(h,k),JSON.stringify(l,null,2))}catch(a){console.error("[callLogs] Failed to write disk log:",a.message)}}({...f,tokens:{in:f.tokensIn,out:f.tokensOut}},a.requestBody,a.responseBody)}catch(a){console.error("[callLogs] Failed to save call log:",a.message)}}if(j)try{!function(){if(m&&g().existsSync(m))try{let a=g().readdirSync(m),b=Date.now(),c=24*D*36e5;for(let d of a){let a=e().join(m,d),f=g().statSync(a);f.isDirectory()&&b-f.mtimeMs>c&&(g().rmSync(a,{recursive:!0,force:!0}),console.log(`[callLogs] Rotated old logs: ${d}`))}}catch(a){console.error("[callLogs] Failed to rotate logs:",a.message)}}()}catch{}async function H(a={}){let b=(0,h.sm)(),c="SELECT * FROM call_logs",d=[],e={};if(a.status)if("error"===a.status)d.push("(status >= 400 OR error IS NOT NULL)");else if("ok"===a.status)d.push("status >= 200 AND status < 300");else{let b=parseInt(a.status);isNaN(b)||(d.push("status = @statusCode"),e.statusCode=b)}a.model&&(d.push("model LIKE @modelQ"),e.modelQ=`%${a.model}%`),a.provider&&(d.push("provider LIKE @providerQ"),e.providerQ=`%${a.provider}%`),a.account&&(d.push("account LIKE @accountQ"),e.accountQ=`%${a.account}%`),a.apiKey&&(d.push("(api_key_name LIKE @apiKeyQ OR api_key_id LIKE @apiKeyQ)"),e.apiKeyQ=`%${a.apiKey}%`),a.combo&&d.push("combo_name IS NOT NULL"),a.search&&(d.push(`(
33
33
  model LIKE @searchQ OR path LIKE @searchQ OR account LIKE @searchQ OR
34
34
  provider LIKE @searchQ OR api_key_name LIKE @searchQ OR api_key_id LIKE @searchQ OR
35
35
  combo_name LIKE @searchQ OR CAST(status AS TEXT) LIKE @searchQ
36
- )`),e.searchQ=`%${a.search}%`),d.length>0&&(c+=" WHERE "+d.join(" AND "));let f=a.limit||200;return c+=` ORDER BY timestamp DESC LIMIT ${f}`,b.prepare(c).all(e).map(a=>({id:a.id,timestamp:a.timestamp,method:a.method,path:a.path,status:a.status,model:a.model,provider:a.provider,account:a.account,duration:a.duration,tokens:{in:a.tokens_in,out:a.tokens_out},sourceFormat:a.source_format,targetFormat:a.target_format,error:a.error,comboName:a.combo_name||null,apiKeyId:a.api_key_id||null,apiKeyName:a.api_key_name||null,hasRequestBody:!!a.request_body,hasResponseBody:!!a.response_body}))}async function H(a){let b=(0,h.sm)().prepare("SELECT * FROM call_logs WHERE id = ?").get(a);if(!b)return null;let c={id:b.id,timestamp:b.timestamp,method:b.method,path:b.path,status:b.status,model:b.model,provider:b.provider,account:b.account,connectionId:b.connection_id,duration:b.duration,tokens:{in:b.tokens_in,out:b.tokens_out},sourceFormat:b.source_format,targetFormat:b.target_format,apiKeyId:b.api_key_id,apiKeyName:b.api_key_name,comboName:b.combo_name,requestBody:b.request_body?JSON.parse(b.request_body):null,responseBody:b.response_body?JSON.parse(b.response_body):null,error:b.error};if((c.requestBody?._truncated||c.responseBody?._truncated)&&m)try{let a=function(a){if(!m||!a.timestamp)return null;try{let b=new Date(a.timestamp),c=`${b.getFullYear()}-${String(b.getMonth()+1).padStart(2,"0")}-${String(b.getDate()).padStart(2,"0")}`,d=e().join(m,c);if(!g().existsSync(d))return null;let f=`${String(b.getHours()).padStart(2,"0")}${String(b.getMinutes()).padStart(2,"0")}${String(b.getSeconds()).padStart(2,"0")}`,h=(a.model||"unknown").replace(/[/:]/g,"-"),i=`${f}_${h}_${a.status}.json`,j=e().join(d,i);if(g().existsSync(j))return JSON.parse(g().readFileSync(j,"utf8"));let k=g().readdirSync(d).filter(b=>b.startsWith(f)&&b.endsWith(`_${a.status}.json`));if(k.length>0)return JSON.parse(g().readFileSync(e().join(d,k[0]),"utf8"))}catch(a){console.error("[callLogs] Disk log read error:",a.message)}return null}(c);if(a)return{...c,requestBody:a.requestBody??c.requestBody,responseBody:a.responseBody??c.responseBody}}catch(a){console.error("[callLogs] Failed to read full log from disk:",a.message)}return c}}};
36
+ )`),e.searchQ=`%${a.search}%`),d.length>0&&(c+=" WHERE "+d.join(" AND "));let f=a.limit||200;return c+=` ORDER BY timestamp DESC LIMIT ${f}`,b.prepare(c).all(e).map(a=>({id:a.id,timestamp:a.timestamp,method:a.method,path:a.path,status:a.status,model:a.model,provider:a.provider,account:a.account,duration:a.duration,tokens:{in:a.tokens_in,out:a.tokens_out},sourceFormat:a.source_format,targetFormat:a.target_format,error:a.error,comboName:a.combo_name||null,apiKeyId:a.api_key_id||null,apiKeyName:a.api_key_name||null,hasRequestBody:!!a.request_body,hasResponseBody:!!a.response_body}))}async function I(a){let b=(0,h.sm)().prepare("SELECT * FROM call_logs WHERE id = ?").get(a);if(!b)return null;let c={id:b.id,timestamp:b.timestamp,method:b.method,path:b.path,status:b.status,model:b.model,provider:b.provider,account:b.account,connectionId:b.connection_id,duration:b.duration,tokens:{in:b.tokens_in,out:b.tokens_out},sourceFormat:b.source_format,targetFormat:b.target_format,apiKeyId:b.api_key_id,apiKeyName:b.api_key_name,comboName:b.combo_name,requestBody:b.request_body?JSON.parse(b.request_body):null,responseBody:b.response_body?JSON.parse(b.response_body):null,error:b.error};if((c.requestBody?._truncated||c.responseBody?._truncated)&&m)try{let a=function(a){if(!m||!a.timestamp)return null;try{let b=new Date(a.timestamp),c=`${b.getFullYear()}-${String(b.getMonth()+1).padStart(2,"0")}-${String(b.getDate()).padStart(2,"0")}`,d=e().join(m,c);if(!g().existsSync(d))return null;let f=`${String(b.getHours()).padStart(2,"0")}${String(b.getMinutes()).padStart(2,"0")}${String(b.getSeconds()).padStart(2,"0")}`,h=(a.model||"unknown").replace(/[/:]/g,"-"),i=`${f}_${h}_${a.status}.json`,j=e().join(d,i);if(g().existsSync(j))return JSON.parse(g().readFileSync(j,"utf8"));let k=g().readdirSync(d).filter(b=>b.startsWith(f)&&b.endsWith(`_${a.status}.json`));if(k.length>0)return JSON.parse(g().readFileSync(e().join(d,k[0]),"utf8"))}catch(a){console.error("[callLogs] Disk log read error:",a.message)}return null}(c);if(a)return{...c,requestBody:a.requestBody??c.requestBody,responseBody:a.responseBody??c.responseBody}}catch(a){console.error("[callLogs] Failed to read full log from disk:",a.message)}return c}}};
@@ -1,2 +1,2 @@
1
- <!DOCTYPE html><!--iqSCUTEzH78lajJjqTmE_--><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-9837b0fbf7de0b62.js"/><script src="/_next/static/chunks/4bd1b696-e5d7c65570c947b7.js" async=""></script><script src="/_next/static/chunks/3794-337d1ca25ad99a89.js" async=""></script><script src="/_next/static/chunks/main-app-c9da11a8061df107.js" async=""></script><script src="/_next/static/chunks/app/error-0d59fc4efafbc38c.js" async=""></script><script src="/_next/static/chunks/8500-98e13bcce54aa7a0.js" async=""></script><script src="/_next/static/chunks/app/not-found-1dbd8c3e506fe00f.js" async=""></script><script src="/_next/static/chunks/app/global-error-41eef2a698918fc1.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: Internal Server Error.</title><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}
2
- @media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-9837b0fbf7de0b62.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[57121,[],\"\"]\n3:I[17267,[\"8039\",\"static/chunks/app/error-0d59fc4efafbc38c.js\"],\"default\"]\n4:I[74581,[],\"\"]\n5:I[37145,[\"8500\",\"static/chunks/8500-98e13bcce54aa7a0.js\",\"4345\",\"static/chunks/app/not-found-1dbd8c3e506fe00f.js\"],\"default\"]\n6:I[90484,[],\"OutletBoundary\"]\n7:\"$Sreact.suspense\"\n9:I[90484,[],\"ViewportBoundary\"]\nb:I[90484,[],\"MetadataBoundary\"]\nd:I[26719,[\"4219\",\"static/chunks/app/global-error-41eef2a698918fc1.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"iqSCUTEzH78lajJjqTmE_\",\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_global-error\",{\"children\":[\"__PAGE__\",{}]}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$3\",\"errorStyles\":[],\"errorScripts\":[],\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"$L5\",null,{}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"title\",null,{\"children\":\"500: Internal Server Error.\"}]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"lineHeight\":\"48px\"},\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}\\n@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"paddingRight\":23,\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\"},\"children\":\"500\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"28px\"},\"children\":\"Internal Server Error.\"}]}]]}]}]}]]}],null,[\"$\",\"$L6\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@8\"}]}]]}],{},null,false,false]},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L9\",null,{\"children\":\"$La\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Lb\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lc\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$d\",[]],\"S\":true}\n"])</script><script>self.__next_f.push([1,"a:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"8:null\nc:[]\n"])</script></body></html>
1
+ <!DOCTYPE html><!--3vFcTa_1x8yNMMbXwOlmb--><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-9837b0fbf7de0b62.js"/><script src="/_next/static/chunks/4bd1b696-e5d7c65570c947b7.js" async=""></script><script src="/_next/static/chunks/3794-337d1ca25ad99a89.js" async=""></script><script src="/_next/static/chunks/main-app-c9da11a8061df107.js" async=""></script><script src="/_next/static/chunks/app/error-0d59fc4efafbc38c.js" async=""></script><script src="/_next/static/chunks/8500-98e13bcce54aa7a0.js" async=""></script><script src="/_next/static/chunks/app/not-found-1dbd8c3e506fe00f.js" async=""></script><script src="/_next/static/chunks/app/global-error-41eef2a698918fc1.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: Internal Server Error.</title><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}
2
+ @media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-9837b0fbf7de0b62.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[57121,[],\"\"]\n3:I[17267,[\"8039\",\"static/chunks/app/error-0d59fc4efafbc38c.js\"],\"default\"]\n4:I[74581,[],\"\"]\n5:I[37145,[\"8500\",\"static/chunks/8500-98e13bcce54aa7a0.js\",\"4345\",\"static/chunks/app/not-found-1dbd8c3e506fe00f.js\"],\"default\"]\n6:I[90484,[],\"OutletBoundary\"]\n7:\"$Sreact.suspense\"\n9:I[90484,[],\"ViewportBoundary\"]\nb:I[90484,[],\"MetadataBoundary\"]\nd:I[26719,[\"4219\",\"static/chunks/app/global-error-41eef2a698918fc1.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"3vFcTa-1x8yNMMbXwOlmb\",\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_global-error\",{\"children\":[\"__PAGE__\",{}]}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$3\",\"errorStyles\":[],\"errorScripts\":[],\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"$L5\",null,{}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"title\",null,{\"children\":\"500: Internal Server Error.\"}]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"lineHeight\":\"48px\"},\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}\\n@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"paddingRight\":23,\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\"},\"children\":\"500\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"28px\"},\"children\":\"Internal Server Error.\"}]}]]}]}]}]]}],null,[\"$\",\"$L6\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@8\"}]}]]}],{},null,false,false]},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L9\",null,{\"children\":\"$La\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Lb\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lc\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$d\",[]],\"S\":true}\n"])</script><script>self.__next_f.push([1,"a:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"8:null\nc:[]\n"])</script></body></html>