n9router 0.4.50 → 0.4.52

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 (1206) hide show
  1. package/README.md +87 -17
  2. package/app/.next/BUILD_ID +1 -1
  3. package/app/.next/app-path-routes-manifest.json +13 -12
  4. package/app/.next/build-manifest.json +3 -3
  5. package/app/.next/prerender-manifest.json +3 -3
  6. package/app/.next/react-loadable-manifest.json +2 -2
  7. package/app/.next/required-server-files.json +2 -1
  8. package/app/.next/routes-manifest.json +6 -0
  9. package/app/.next/server/app/(dashboard)/dashboard/basic-chat/page.js +2 -2
  10. package/app/.next/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -1
  11. package/app/.next/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  12. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +24 -3
  13. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
  14. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  15. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page.js +2 -2
  16. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  17. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  18. package/app/.next/server/app/(dashboard)/dashboard/combos/page.js +2 -2
  19. package/app/.next/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
  20. package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  21. package/app/.next/server/app/(dashboard)/dashboard/console-log/page.js +2 -2
  22. package/app/.next/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
  23. package/app/.next/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  24. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page.js +2 -2
  25. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  26. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  27. package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js +10 -10
  28. package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js.nft.json +1 -1
  29. package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  30. package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js +2 -2
  31. package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js.nft.json +1 -1
  32. package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  33. package/app/.next/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js +3 -3
  34. package/app/.next/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js.nft.json +1 -1
  35. package/app/.next/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  36. package/app/.next/server/app/(dashboard)/dashboard/media-providers/web/page.js +2 -2
  37. package/app/.next/server/app/(dashboard)/dashboard/media-providers/web/page.js.nft.json +1 -1
  38. package/app/.next/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  39. package/app/.next/server/app/(dashboard)/dashboard/mitm/page.js +2 -2
  40. package/app/.next/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -1
  41. package/app/.next/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  42. package/app/.next/server/app/(dashboard)/dashboard/page.js +2 -2
  43. package/app/.next/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  44. package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  45. package/app/.next/server/app/(dashboard)/dashboard/profile/page.js +2 -2
  46. package/app/.next/server/app/(dashboard)/dashboard/profile/page.js.nft.json +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.js +7 -5
  49. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
  50. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  51. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page.js +2 -2
  52. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
  53. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  54. package/app/.next/server/app/(dashboard)/dashboard/providers/page.js +2 -2
  55. package/app/.next/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
  56. package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  57. package/app/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js +3 -3
  58. package/app/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
  59. package/app/.next/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  60. package/app/.next/server/app/(dashboard)/dashboard/pxpipe/page.js +2 -2
  61. package/app/.next/server/app/(dashboard)/dashboard/pxpipe/page.js.nft.json +1 -1
  62. package/app/.next/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
  63. package/app/.next/server/app/(dashboard)/dashboard/quota/page.js +2 -2
  64. package/app/.next/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
  65. package/app/.next/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  66. package/app/.next/server/app/(dashboard)/dashboard/skills/page.js +2 -2
  67. package/app/.next/server/app/(dashboard)/dashboard/skills/page.js.nft.json +1 -1
  68. package/app/.next/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
  69. package/app/.next/server/app/(dashboard)/dashboard/token-saver/page.js +2 -2
  70. package/app/.next/server/app/(dashboard)/dashboard/token-saver/page.js.nft.json +1 -1
  71. package/app/.next/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  72. package/app/.next/server/app/(dashboard)/dashboard/translator/page.js +2 -2
  73. package/app/.next/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
  74. package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  75. package/app/.next/server/app/(dashboard)/dashboard/usage/page.js +3 -3
  76. package/app/.next/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
  77. package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  78. package/app/.next/server/app/_global-error/page.js +2 -2
  79. package/app/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  80. package/app/.next/server/app/_global-error.html +1 -1
  81. package/app/.next/server/app/_global-error.rsc +1 -1
  82. package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  83. package/app/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  84. package/app/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  85. package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  86. package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  87. package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  88. package/app/.next/server/app/_not-found/page.js +2 -2
  89. package/app/.next/server/app/_not-found/page.js.nft.json +1 -1
  90. package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  91. package/app/.next/server/app/_not-found.html +1 -1
  92. package/app/.next/server/app/_not-found.rsc +4 -4
  93. package/app/.next/server/app/_not-found.segments/_full.segment.rsc +4 -4
  94. package/app/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  95. package/app/.next/server/app/_not-found.segments/_index.segment.rsc +4 -4
  96. package/app/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  97. package/app/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  98. package/app/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  99. package/app/.next/server/app/api/antigravity-app/route.js +1 -1
  100. package/app/.next/server/app/api/antigravity-app-v2/route.js +1 -1
  101. package/app/.next/server/app/api/antigravity-ide/route.js +1 -1
  102. package/app/.next/server/app/api/antigravity-targets/route.js +1 -1
  103. package/app/.next/server/app/api/antigravity-tools/import/route.js +1 -1
  104. package/app/.next/server/app/api/antigravity-tools/import/route.js.nft.json +1 -1
  105. package/app/.next/server/app/api/antigravity-tools/import-refresh-tokens/route.js +1 -1
  106. package/app/.next/server/app/api/antigravity-tools/import-refresh-tokens/route.js.nft.json +1 -1
  107. package/app/.next/server/app/api/auth/login/route.js +1 -1
  108. package/app/.next/server/app/api/auth/logout/route.js +1 -1
  109. package/app/.next/server/app/api/auth/oidc/callback/route.js +1 -1
  110. package/app/.next/server/app/api/auth/oidc/start/route.js +1 -1
  111. package/app/.next/server/app/api/auth/oidc/test/route.js +1 -1
  112. package/app/.next/server/app/api/auth/reset-password/route.js +1 -1
  113. package/app/.next/server/app/api/auth/status/route.js +1 -1
  114. package/app/.next/server/app/api/cli-tools/all-statuses/route.js +18 -12
  115. package/app/.next/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
  116. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
  117. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  118. package/app/.next/server/app/api/cli-tools/antigravity-mitm/route.js +1 -1
  119. package/app/.next/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
  120. package/app/.next/server/app/api/cli-tools/claude-settings/route.js +2 -2
  121. package/app/.next/server/app/api/cli-tools/cline-settings/route.js +2 -2
  122. package/app/.next/server/app/api/cli-tools/codex-settings/route.js +1 -1
  123. package/app/.next/server/app/api/cli-tools/copilot-settings/route.js +2 -2
  124. package/app/.next/server/app/api/cli-tools/cowork-mcp-registry/route.js +1 -1
  125. package/app/.next/server/app/api/cli-tools/cowork-mcp-tools/route.js +1 -1
  126. package/app/.next/server/app/api/cli-tools/cowork-settings/route.js +2 -2
  127. package/app/.next/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
  128. package/app/.next/server/app/api/cli-tools/cursor-byok/jobs/[jobId]/events/route.js +2 -2
  129. package/app/.next/server/app/api/cli-tools/cursor-byok/jobs/[jobId]/sudo/route.js +1 -1
  130. package/app/.next/server/app/api/cli-tools/cursor-byok/jobs/route.js +1 -1
  131. package/app/.next/server/app/api/cli-tools/cursor-byok/route.js +2 -1
  132. package/app/.next/server/app/api/cli-tools/deepseek-tui-settings/route.js +2 -2
  133. package/app/.next/server/app/api/cli-tools/devin-settings/route.js +2 -0
  134. package/app/.next/server/app/api/cli-tools/devin-settings/route.js.nft.json +1 -0
  135. package/app/.next/server/app/api/cli-tools/devin-settings/route_client-reference-manifest.js +1 -0
  136. package/app/.next/server/app/api/cli-tools/droid-settings/route.js +2 -2
  137. package/app/.next/server/app/api/cli-tools/grok-build-settings/route.js +15 -10
  138. package/app/.next/server/app/api/cli-tools/grok-build-settings/route.js.nft.json +1 -1
  139. package/app/.next/server/app/api/cli-tools/hermes-settings/route.js +2 -2
  140. package/app/.next/server/app/api/cli-tools/jcode-settings/route.js +2 -2
  141. package/app/.next/server/app/api/cli-tools/kilo-settings/route.js +2 -2
  142. package/app/.next/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
  143. package/app/.next/server/app/api/cli-tools/opencode-settings/route.js +2 -2
  144. package/app/.next/server/app/api/combos/[id]/route.js +1 -1
  145. package/app/.next/server/app/api/combos/route.js +1 -1
  146. package/app/.next/server/app/api/donate/route.js +1 -1
  147. package/app/.next/server/app/api/headroom/extras/route.js +1 -1
  148. package/app/.next/server/app/api/headroom/proxy/[...path]/route.js +1 -1
  149. package/app/.next/server/app/api/headroom/restart/route.js +1 -1
  150. package/app/.next/server/app/api/headroom/start/route.js +1 -1
  151. package/app/.next/server/app/api/headroom/status/route.js +1 -1
  152. package/app/.next/server/app/api/headroom/stop/route.js +1 -1
  153. package/app/.next/server/app/api/health/route.js +1 -1
  154. package/app/.next/server/app/api/init/route.js +1 -1
  155. package/app/.next/server/app/api/internal/account-health/route.js +1 -1
  156. package/app/.next/server/app/api/internal/request-detail/route.js +1 -1
  157. package/app/.next/server/app/api/internal/usage/route.js +1 -1
  158. package/app/.next/server/app/api/keys/[id]/reset-usage/route.js +1 -1
  159. package/app/.next/server/app/api/keys/[id]/route.js +1 -1
  160. package/app/.next/server/app/api/keys/[id]/usage/route.js +1 -1
  161. package/app/.next/server/app/api/keys/route.js +1 -1
  162. package/app/.next/server/app/api/locale/route.js +1 -1
  163. package/app/.next/server/app/api/mcp/[plugin]/message/route.js +1 -1
  164. package/app/.next/server/app/api/mcp/[plugin]/sse/route.js +5 -5
  165. package/app/.next/server/app/api/media-providers/tts/deepgram/voices/route.js +1 -1
  166. package/app/.next/server/app/api/media-providers/tts/elevenlabs/voices/route.js +1 -1
  167. package/app/.next/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
  168. package/app/.next/server/app/api/media-providers/tts/inworld/voices/route.js +1 -1
  169. package/app/.next/server/app/api/media-providers/tts/minimax/voices/route.js +1 -1
  170. package/app/.next/server/app/api/media-providers/tts/voices/route.js +1 -1
  171. package/app/.next/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -1
  172. package/app/.next/server/app/api/models/alias/route.js +1 -1
  173. package/app/.next/server/app/api/models/availability/route.js +1 -1
  174. package/app/.next/server/app/api/models/custom/route.js +1 -1
  175. package/app/.next/server/app/api/models/disabled/route.js +1 -1
  176. package/app/.next/server/app/api/models/route.js +1 -1
  177. package/app/.next/server/app/api/models/route.js.nft.json +1 -1
  178. package/app/.next/server/app/api/models/test/route.js +1 -1
  179. package/app/.next/server/app/api/models/test/route.js.nft.json +1 -1
  180. package/app/.next/server/app/api/oauth/[provider]/[action]/route.js +1 -1
  181. package/app/.next/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  182. package/app/.next/server/app/api/oauth/codex/bulk-import/route.js +1 -1
  183. package/app/.next/server/app/api/oauth/codex/bulk-import/route.js.nft.json +1 -1
  184. package/app/.next/server/app/api/oauth/codex/import-token/route.js +1 -1
  185. package/app/.next/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
  186. package/app/.next/server/app/api/oauth/cursor/auto-import/route.js +2 -2
  187. package/app/.next/server/app/api/oauth/cursor/import/route.js +1 -1
  188. package/app/.next/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  189. package/app/.next/server/app/api/oauth/gitlab/pat/route.js +1 -1
  190. package/app/.next/server/app/api/oauth/iflow/cookie/route.js +1 -1
  191. package/app/.next/server/app/api/oauth/kiro/api-key/route.js +1 -1
  192. package/app/.next/server/app/api/oauth/kiro/api-key/route.js.nft.json +1 -1
  193. package/app/.next/server/app/api/oauth/kiro/auto-import/route.js +1 -1
  194. package/app/.next/server/app/api/oauth/kiro/import/route.js +1 -1
  195. package/app/.next/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  196. package/app/.next/server/app/api/oauth/kiro/import-cli-proxy/route.js +1 -1
  197. package/app/.next/server/app/api/oauth/kiro/social-authorize/route.js +1 -1
  198. package/app/.next/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +1 -1
  199. package/app/.next/server/app/api/oauth/kiro/social-exchange/route.js +1 -1
  200. package/app/.next/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  201. package/app/.next/server/app/api/pricing/route.js +1 -1
  202. package/app/.next/server/app/api/provider-nodes/[id]/route.js +1 -1
  203. package/app/.next/server/app/api/provider-nodes/route.js +1 -1
  204. package/app/.next/server/app/api/provider-nodes/route.js.nft.json +1 -1
  205. package/app/.next/server/app/api/provider-nodes/validate/route.js +1 -1
  206. package/app/.next/server/app/api/providers/[id]/models/route.js +1 -1
  207. package/app/.next/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  208. package/app/.next/server/app/api/providers/[id]/route.js +1 -1
  209. package/app/.next/server/app/api/providers/[id]/test/route.js +1 -1
  210. package/app/.next/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  211. package/app/.next/server/app/api/providers/[id]/test-models/route.js +1 -1
  212. package/app/.next/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  213. package/app/.next/server/app/api/providers/client/route.js +1 -1
  214. package/app/.next/server/app/api/providers/client/route.js.nft.json +1 -1
  215. package/app/.next/server/app/api/providers/kilo/free-models/route.js +1 -1
  216. package/app/.next/server/app/api/providers/route.js +1 -1
  217. package/app/.next/server/app/api/providers/route.js.nft.json +1 -1
  218. package/app/.next/server/app/api/providers/suggested-models/route.js +1 -1
  219. package/app/.next/server/app/api/providers/test-batch/route.js +1 -1
  220. package/app/.next/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  221. package/app/.next/server/app/api/providers/validate/route.js +1 -1
  222. package/app/.next/server/app/api/providers/validate/route.js.nft.json +1 -1
  223. package/app/.next/server/app/api/proxy-pools/[id]/route.js +1 -1
  224. package/app/.next/server/app/api/proxy-pools/[id]/test/route.js +1 -1
  225. package/app/.next/server/app/api/proxy-pools/cloudflare-deploy/route.js +2 -2
  226. package/app/.next/server/app/api/proxy-pools/deno-deploy/route.js +2 -2
  227. package/app/.next/server/app/api/proxy-pools/route.js +1 -1
  228. package/app/.next/server/app/api/proxy-pools/vercel-deploy/route.js +2 -2
  229. package/app/.next/server/app/api/pxpipe/health/route.js +2 -2
  230. package/app/.next/server/app/api/pxpipe/install/route.js +2 -2
  231. package/app/.next/server/app/api/pxpipe/logs/route.js +2 -2
  232. package/app/.next/server/app/api/pxpipe/restart/route.js +2 -2
  233. package/app/.next/server/app/api/pxpipe/start/route.js +2 -2
  234. package/app/.next/server/app/api/pxpipe/stats/route.js +2 -2
  235. package/app/.next/server/app/api/pxpipe/status/route.js +2 -2
  236. package/app/.next/server/app/api/pxpipe/stop/route.js +2 -2
  237. package/app/.next/server/app/api/settings/database/route.js +1 -1
  238. package/app/.next/server/app/api/settings/database/selective/route.js +1 -1
  239. package/app/.next/server/app/api/settings/proxy-test/route.js +1 -1
  240. package/app/.next/server/app/api/settings/require-login/route.js +1 -1
  241. package/app/.next/server/app/api/settings/route.js +1 -1
  242. package/app/.next/server/app/api/settings/route.js.nft.json +1 -1
  243. package/app/.next/server/app/api/shutdown/route.js +1 -1
  244. package/app/.next/server/app/api/tags/route.js +1 -1
  245. package/app/.next/server/app/api/translator/console-logs/route.js +1 -1
  246. package/app/.next/server/app/api/translator/console-logs/route.js.nft.json +1 -1
  247. package/app/.next/server/app/api/translator/console-logs/stream/route.js +2 -2
  248. package/app/.next/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -1
  249. package/app/.next/server/app/api/translator/load/route.js +1 -1
  250. package/app/.next/server/app/api/translator/save/route.js +1 -1
  251. package/app/.next/server/app/api/translator/send/route.js +1 -1
  252. package/app/.next/server/app/api/translator/send/route.js.nft.json +1 -1
  253. package/app/.next/server/app/api/translator/translate/route.js +1 -1
  254. package/app/.next/server/app/api/translator/translate/route.js.nft.json +1 -1
  255. package/app/.next/server/app/api/tunnel/disable/route.js +1 -1
  256. package/app/.next/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  257. package/app/.next/server/app/api/tunnel/enable/route.js +1 -1
  258. package/app/.next/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  259. package/app/.next/server/app/api/tunnel/status/route.js +1 -1
  260. package/app/.next/server/app/api/tunnel/status/route.js.nft.json +1 -1
  261. package/app/.next/server/app/api/tunnel/tailscale-check/route.js +1 -1
  262. package/app/.next/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
  263. package/app/.next/server/app/api/tunnel/tailscale-disable/route.js +1 -1
  264. package/app/.next/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
  265. package/app/.next/server/app/api/tunnel/tailscale-enable/route.js +1 -1
  266. package/app/.next/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
  267. package/app/.next/server/app/api/tunnel/tailscale-install/route.js +3 -3
  268. package/app/.next/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
  269. package/app/.next/server/app/api/usage/[connectionId]/codex-reset-credits/route.js +1 -1
  270. package/app/.next/server/app/api/usage/[connectionId]/codex-reset-credits/route.js.nft.json +1 -1
  271. package/app/.next/server/app/api/usage/[connectionId]/route.js +1 -1
  272. package/app/.next/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  273. package/app/.next/server/app/api/usage/chart/route.js +1 -1
  274. package/app/.next/server/app/api/usage/history/route.js +1 -1
  275. package/app/.next/server/app/api/usage/logs/route.js +1 -1
  276. package/app/.next/server/app/api/usage/providers/route.js +1 -1
  277. package/app/.next/server/app/api/usage/providers/route.js.nft.json +1 -1
  278. package/app/.next/server/app/api/usage/report/route.js +1 -1
  279. package/app/.next/server/app/api/usage/request-details/route.js +1 -1
  280. package/app/.next/server/app/api/usage/request-logs/route.js +1 -1
  281. package/app/.next/server/app/api/usage/stats/route.js +1 -1
  282. package/app/.next/server/app/api/usage/stream/route.js +2 -2
  283. package/app/.next/server/app/api/v1/api/chat/route.js +1 -1
  284. package/app/.next/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  285. package/app/.next/server/app/api/v1/audio/speech/route.js +1 -1
  286. package/app/.next/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  287. package/app/.next/server/app/api/v1/audio/transcriptions/route.js +1 -1
  288. package/app/.next/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  289. package/app/.next/server/app/api/v1/audio/voices/route.js +1 -1
  290. package/app/.next/server/app/api/v1/audio/voices/route.js.nft.json +1 -1
  291. package/app/.next/server/app/api/v1/chat/completions/route.js +1 -1
  292. package/app/.next/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  293. package/app/.next/server/app/api/v1/embeddings/route.js +1 -1
  294. package/app/.next/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  295. package/app/.next/server/app/api/v1/images/generations/route.js +2 -2
  296. package/app/.next/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  297. package/app/.next/server/app/api/v1/messages/count_tokens/route.js +1 -1
  298. package/app/.next/server/app/api/v1/messages/route.js +1 -1
  299. package/app/.next/server/app/api/v1/messages/route.js.nft.json +1 -1
  300. package/app/.next/server/app/api/v1/models/[kind]/route.js +1 -1
  301. package/app/.next/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
  302. package/app/.next/server/app/api/v1/models/info/route.js +1 -1
  303. package/app/.next/server/app/api/v1/models/info/route.js.nft.json +1 -1
  304. package/app/.next/server/app/api/v1/models/route.js +1 -1
  305. package/app/.next/server/app/api/v1/models/route.js.nft.json +1 -1
  306. package/app/.next/server/app/api/v1/responses/compact/route.js +1 -1
  307. package/app/.next/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
  308. package/app/.next/server/app/api/v1/responses/route.js +1 -1
  309. package/app/.next/server/app/api/v1/responses/route.js.nft.json +1 -1
  310. package/app/.next/server/app/api/v1/route.js +1 -1
  311. package/app/.next/server/app/api/v1/route.js.nft.json +1 -1
  312. package/app/.next/server/app/api/v1/search/route.js +1 -1
  313. package/app/.next/server/app/api/v1/search/route.js.nft.json +1 -1
  314. package/app/.next/server/app/api/v1/videos/[id]/route.js +1 -1
  315. package/app/.next/server/app/api/v1/videos/[id]/route.js.nft.json +1 -1
  316. package/app/.next/server/app/api/v1/videos/edits/route.js +1 -1
  317. package/app/.next/server/app/api/v1/videos/edits/route.js.nft.json +1 -1
  318. package/app/.next/server/app/api/v1/videos/extensions/route.js +1 -1
  319. package/app/.next/server/app/api/v1/videos/extensions/route.js.nft.json +1 -1
  320. package/app/.next/server/app/api/v1/videos/generations/route.js +1 -1
  321. package/app/.next/server/app/api/v1/videos/generations/route.js.nft.json +1 -1
  322. package/app/.next/server/app/api/v1/web/fetch/route.js +1 -1
  323. package/app/.next/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
  324. package/app/.next/server/app/api/v1beta/models/[...path]/route.js +1 -1
  325. package/app/.next/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  326. package/app/.next/server/app/api/v1beta/models/route.js +1 -1
  327. package/app/.next/server/app/api/v1beta/models/route.js.nft.json +1 -1
  328. package/app/.next/server/app/api/version/route.js +1 -1
  329. package/app/.next/server/app/api/version/shutdown/route.js +1 -1
  330. package/app/.next/server/app/api/version/shutdown/route.js.nft.json +1 -1
  331. package/app/.next/server/app/api/version/update/route.js +1 -1
  332. package/app/.next/server/app/api/version/update/route.js.nft.json +1 -1
  333. package/app/.next/server/app/callback/page.js +2 -2
  334. package/app/.next/server/app/callback/page.js.nft.json +1 -1
  335. package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
  336. package/app/.next/server/app/callback.html +1 -1
  337. package/app/.next/server/app/callback.rsc +4 -4
  338. package/app/.next/server/app/callback.segments/_full.segment.rsc +4 -4
  339. package/app/.next/server/app/callback.segments/_head.segment.rsc +1 -1
  340. package/app/.next/server/app/callback.segments/_index.segment.rsc +4 -4
  341. package/app/.next/server/app/callback.segments/_tree.segment.rsc +2 -2
  342. package/app/.next/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  343. package/app/.next/server/app/callback.segments/callback.segment.rsc +1 -1
  344. package/app/.next/server/app/dashboard/basic-chat.html +1 -1
  345. package/app/.next/server/app/dashboard/basic-chat.rsc +6 -6
  346. package/app/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
  347. package/app/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
  348. package/app/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  349. package/app/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  350. package/app/.next/server/app/dashboard/basic-chat.segments/_full.segment.rsc +6 -6
  351. package/app/.next/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
  352. package/app/.next/server/app/dashboard/basic-chat.segments/_index.segment.rsc +4 -4
  353. package/app/.next/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +2 -2
  354. package/app/.next/server/app/dashboard/cli-tools.html +1 -1
  355. package/app/.next/server/app/dashboard/cli-tools.rsc +6 -6
  356. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
  357. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
  358. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  359. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  360. package/app/.next/server/app/dashboard/cli-tools.segments/_full.segment.rsc +6 -6
  361. package/app/.next/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
  362. package/app/.next/server/app/dashboard/cli-tools.segments/_index.segment.rsc +4 -4
  363. package/app/.next/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +2 -2
  364. package/app/.next/server/app/dashboard/combos.html +1 -1
  365. package/app/.next/server/app/dashboard/combos.rsc +6 -6
  366. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
  367. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
  368. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  369. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  370. package/app/.next/server/app/dashboard/combos.segments/_full.segment.rsc +6 -6
  371. package/app/.next/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
  372. package/app/.next/server/app/dashboard/combos.segments/_index.segment.rsc +4 -4
  373. package/app/.next/server/app/dashboard/combos.segments/_tree.segment.rsc +2 -2
  374. package/app/.next/server/app/dashboard/endpoint.html +1 -1
  375. package/app/.next/server/app/dashboard/endpoint.rsc +6 -6
  376. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
  377. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
  378. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  379. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  380. package/app/.next/server/app/dashboard/endpoint.segments/_full.segment.rsc +6 -6
  381. package/app/.next/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
  382. package/app/.next/server/app/dashboard/endpoint.segments/_index.segment.rsc +4 -4
  383. package/app/.next/server/app/dashboard/endpoint.segments/_tree.segment.rsc +2 -2
  384. package/app/.next/server/app/dashboard/media-providers/web.html +1 -1
  385. package/app/.next/server/app/dashboard/media-providers/web.rsc +6 -6
  386. package/app/.next/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
  387. package/app/.next/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
  388. package/app/.next/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
  389. package/app/.next/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  390. package/app/.next/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  391. package/app/.next/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +6 -6
  392. package/app/.next/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
  393. package/app/.next/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +4 -4
  394. package/app/.next/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +2 -2
  395. package/app/.next/server/app/dashboard/mitm.html +1 -1
  396. package/app/.next/server/app/dashboard/mitm.rsc +6 -6
  397. package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
  398. package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
  399. package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  400. package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  401. package/app/.next/server/app/dashboard/mitm.segments/_full.segment.rsc +6 -6
  402. package/app/.next/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
  403. package/app/.next/server/app/dashboard/mitm.segments/_index.segment.rsc +4 -4
  404. package/app/.next/server/app/dashboard/mitm.segments/_tree.segment.rsc +2 -2
  405. package/app/.next/server/app/dashboard/profile.html +1 -1
  406. package/app/.next/server/app/dashboard/profile.rsc +6 -6
  407. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
  408. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
  409. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  410. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  411. package/app/.next/server/app/dashboard/profile.segments/_full.segment.rsc +6 -6
  412. package/app/.next/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
  413. package/app/.next/server/app/dashboard/profile.segments/_index.segment.rsc +4 -4
  414. package/app/.next/server/app/dashboard/profile.segments/_tree.segment.rsc +2 -2
  415. package/app/.next/server/app/dashboard/providers/new.html +1 -1
  416. package/app/.next/server/app/dashboard/providers/new.rsc +6 -6
  417. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
  418. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
  419. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  420. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  421. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  422. package/app/.next/server/app/dashboard/providers/new.segments/_full.segment.rsc +6 -6
  423. package/app/.next/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
  424. package/app/.next/server/app/dashboard/providers/new.segments/_index.segment.rsc +4 -4
  425. package/app/.next/server/app/dashboard/providers/new.segments/_tree.segment.rsc +2 -2
  426. package/app/.next/server/app/dashboard/providers.html +1 -1
  427. package/app/.next/server/app/dashboard/providers.rsc +6 -6
  428. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
  429. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  430. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  431. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  432. package/app/.next/server/app/dashboard/providers.segments/_full.segment.rsc +6 -6
  433. package/app/.next/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
  434. package/app/.next/server/app/dashboard/providers.segments/_index.segment.rsc +4 -4
  435. package/app/.next/server/app/dashboard/providers.segments/_tree.segment.rsc +2 -2
  436. package/app/.next/server/app/dashboard/proxy-pools.html +1 -1
  437. package/app/.next/server/app/dashboard/proxy-pools.rsc +6 -6
  438. package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
  439. package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
  440. package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  441. package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  442. package/app/.next/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +6 -6
  443. package/app/.next/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
  444. package/app/.next/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +4 -4
  445. package/app/.next/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +2 -2
  446. package/app/.next/server/app/dashboard/pxpipe.html +1 -1
  447. package/app/.next/server/app/dashboard/pxpipe.rsc +6 -6
  448. package/app/.next/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +2 -2
  449. package/app/.next/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe.segment.rsc +1 -1
  450. package/app/.next/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  451. package/app/.next/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  452. package/app/.next/server/app/dashboard/pxpipe.segments/_full.segment.rsc +6 -6
  453. package/app/.next/server/app/dashboard/pxpipe.segments/_head.segment.rsc +1 -1
  454. package/app/.next/server/app/dashboard/pxpipe.segments/_index.segment.rsc +4 -4
  455. package/app/.next/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +2 -2
  456. package/app/.next/server/app/dashboard/quota.html +2 -2
  457. package/app/.next/server/app/dashboard/quota.rsc +7 -7
  458. package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
  459. package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
  460. package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  461. package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  462. package/app/.next/server/app/dashboard/quota.segments/_full.segment.rsc +7 -7
  463. package/app/.next/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
  464. package/app/.next/server/app/dashboard/quota.segments/_index.segment.rsc +4 -4
  465. package/app/.next/server/app/dashboard/quota.segments/_tree.segment.rsc +2 -2
  466. package/app/.next/server/app/dashboard/settings/pricing/page.js +2 -2
  467. package/app/.next/server/app/dashboard/settings/pricing/page.js.nft.json +1 -1
  468. package/app/.next/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  469. package/app/.next/server/app/dashboard/settings/pricing.html +1 -1
  470. package/app/.next/server/app/dashboard/settings/pricing.rsc +5 -5
  471. package/app/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +5 -5
  472. package/app/.next/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  473. package/app/.next/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +4 -4
  474. package/app/.next/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
  475. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +2 -2
  476. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  477. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  478. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  479. package/app/.next/server/app/dashboard/skills.html +1 -1
  480. package/app/.next/server/app/dashboard/skills.rsc +6 -6
  481. package/app/.next/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +2 -2
  482. package/app/.next/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills.segment.rsc +1 -1
  483. package/app/.next/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  484. package/app/.next/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  485. package/app/.next/server/app/dashboard/skills.segments/_full.segment.rsc +6 -6
  486. package/app/.next/server/app/dashboard/skills.segments/_head.segment.rsc +1 -1
  487. package/app/.next/server/app/dashboard/skills.segments/_index.segment.rsc +4 -4
  488. package/app/.next/server/app/dashboard/skills.segments/_tree.segment.rsc +2 -2
  489. package/app/.next/server/app/dashboard/token-saver.html +1 -1
  490. package/app/.next/server/app/dashboard/token-saver.rsc +6 -6
  491. package/app/.next/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +2 -2
  492. package/app/.next/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver.segment.rsc +1 -1
  493. package/app/.next/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  494. package/app/.next/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  495. package/app/.next/server/app/dashboard/token-saver.segments/_full.segment.rsc +6 -6
  496. package/app/.next/server/app/dashboard/token-saver.segments/_head.segment.rsc +1 -1
  497. package/app/.next/server/app/dashboard/token-saver.segments/_index.segment.rsc +4 -4
  498. package/app/.next/server/app/dashboard/token-saver.segments/_tree.segment.rsc +2 -2
  499. package/app/.next/server/app/dashboard/translator.html +1 -1
  500. package/app/.next/server/app/dashboard/translator.rsc +6 -6
  501. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
  502. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
  503. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  504. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  505. package/app/.next/server/app/dashboard/translator.segments/_full.segment.rsc +6 -6
  506. package/app/.next/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
  507. package/app/.next/server/app/dashboard/translator.segments/_index.segment.rsc +4 -4
  508. package/app/.next/server/app/dashboard/translator.segments/_tree.segment.rsc +2 -2
  509. package/app/.next/server/app/dashboard/usage.html +1 -1
  510. package/app/.next/server/app/dashboard/usage.rsc +6 -6
  511. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
  512. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
  513. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  514. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  515. package/app/.next/server/app/dashboard/usage.segments/_full.segment.rsc +6 -6
  516. package/app/.next/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
  517. package/app/.next/server/app/dashboard/usage.segments/_index.segment.rsc +4 -4
  518. package/app/.next/server/app/dashboard/usage.segments/_tree.segment.rsc +2 -2
  519. package/app/.next/server/app/dashboard.html +1 -1
  520. package/app/.next/server/app/dashboard.rsc +6 -6
  521. package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
  522. package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  523. package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  524. package/app/.next/server/app/dashboard.segments/_full.segment.rsc +6 -6
  525. package/app/.next/server/app/dashboard.segments/_head.segment.rsc +1 -1
  526. package/app/.next/server/app/dashboard.segments/_index.segment.rsc +4 -4
  527. package/app/.next/server/app/dashboard.segments/_tree.segment.rsc +2 -2
  528. package/app/.next/server/app/favicon.ico/route.js +1 -1
  529. package/app/.next/server/app/index.html +1 -1
  530. package/app/.next/server/app/index.rsc +4 -4
  531. package/app/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  532. package/app/.next/server/app/index.segments/_full.segment.rsc +4 -4
  533. package/app/.next/server/app/index.segments/_head.segment.rsc +1 -1
  534. package/app/.next/server/app/index.segments/_index.segment.rsc +4 -4
  535. package/app/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  536. package/app/.next/server/app/landing/page.js +2 -2
  537. package/app/.next/server/app/landing/page.js.nft.json +1 -1
  538. package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
  539. package/app/.next/server/app/landing.html +1 -1
  540. package/app/.next/server/app/landing.rsc +5 -5
  541. package/app/.next/server/app/landing.segments/_full.segment.rsc +5 -5
  542. package/app/.next/server/app/landing.segments/_head.segment.rsc +1 -1
  543. package/app/.next/server/app/landing.segments/_index.segment.rsc +4 -4
  544. package/app/.next/server/app/landing.segments/_tree.segment.rsc +2 -2
  545. package/app/.next/server/app/landing.segments/landing/__PAGE__.segment.rsc +2 -2
  546. package/app/.next/server/app/landing.segments/landing.segment.rsc +1 -1
  547. package/app/.next/server/app/login/page.js +2 -2
  548. package/app/.next/server/app/login/page.js.nft.json +1 -1
  549. package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
  550. package/app/.next/server/app/login.html +1 -1
  551. package/app/.next/server/app/login.rsc +5 -5
  552. package/app/.next/server/app/login.segments/_full.segment.rsc +5 -5
  553. package/app/.next/server/app/login.segments/_head.segment.rsc +1 -1
  554. package/app/.next/server/app/login.segments/_index.segment.rsc +4 -4
  555. package/app/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  556. package/app/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  557. package/app/.next/server/app/login.segments/login.segment.rsc +1 -1
  558. package/app/.next/server/app/manifest.webmanifest/route.js +2 -2
  559. package/app/.next/server/app/page.js +2 -2
  560. package/app/.next/server/app/page.js.nft.json +1 -1
  561. package/app/.next/server/app/page_client-reference-manifest.js +1 -1
  562. package/app/.next/server/app-paths-manifest.json +13 -12
  563. package/app/.next/server/chunks/112.js +3 -0
  564. package/app/.next/server/chunks/1470.js +1 -0
  565. package/app/.next/server/chunks/1975.js +7 -6
  566. package/app/.next/server/chunks/2051.js +1 -0
  567. package/app/.next/server/chunks/2251.js +1 -1
  568. package/app/.next/server/chunks/318.js +75 -7
  569. package/app/.next/server/chunks/3225.js +10 -0
  570. package/app/.next/server/chunks/3481.js +1 -1
  571. package/app/.next/server/chunks/3535.js +1 -1
  572. package/app/.next/server/chunks/365.js +1 -0
  573. package/app/.next/server/chunks/3913.js +1 -0
  574. package/app/.next/server/chunks/3943.js +1 -1
  575. package/app/.next/server/chunks/3962.js +1 -1
  576. package/app/.next/server/chunks/4037.js +1 -0
  577. package/app/.next/server/chunks/412.js +5 -5
  578. package/app/.next/server/chunks/4123.js +7 -0
  579. package/app/.next/server/chunks/4125.js +1 -0
  580. package/app/.next/server/chunks/4443.js +1 -0
  581. package/app/.next/server/chunks/4676.js +1 -1
  582. package/app/.next/server/chunks/4705.js +1 -0
  583. package/app/.next/server/chunks/4963.js +1 -0
  584. package/app/.next/server/chunks/4975.js +1 -0
  585. package/app/.next/server/chunks/4989.js +1 -1
  586. package/app/.next/server/chunks/5612.js +1 -1
  587. package/app/.next/server/chunks/5615.js +3 -3
  588. package/app/.next/server/chunks/5619.js +1 -0
  589. package/app/.next/server/chunks/5699.js +1 -1
  590. package/app/.next/server/chunks/6070.js +1 -1
  591. package/app/.next/server/chunks/615.js +1 -1
  592. package/app/.next/server/chunks/63.js +3 -3
  593. package/app/.next/server/chunks/6306.js +1 -1
  594. package/app/.next/server/chunks/6457.js +1 -1
  595. package/app/.next/server/chunks/6671.js +1 -0
  596. package/app/.next/server/chunks/6763.js +1 -1
  597. package/app/.next/server/chunks/6777.js +1 -1
  598. package/app/.next/server/chunks/{1133.js → 6818.js} +1 -1
  599. package/app/.next/server/chunks/6877.js +1 -0
  600. package/app/.next/server/chunks/7137.js +1 -1
  601. package/app/.next/server/chunks/7211.js +1 -0
  602. package/app/.next/server/chunks/7828.js +1 -1
  603. package/app/.next/server/chunks/7994.js +1 -1
  604. package/app/.next/server/chunks/8145.js +1 -1
  605. package/app/.next/server/chunks/8301.js +91 -0
  606. package/app/.next/server/chunks/8499.js +71 -0
  607. package/app/.next/server/chunks/869.js +1 -0
  608. package/app/.next/server/chunks/8845.js +1 -0
  609. package/app/.next/server/chunks/8895.js +11 -11
  610. package/app/.next/server/chunks/8910.js +1 -1
  611. package/app/.next/server/chunks/8920.js +1 -1
  612. package/app/.next/server/instrumentation.js +1 -0
  613. package/app/.next/server/middleware-build-manifest.js +1 -1
  614. package/app/.next/server/middleware-react-loadable-manifest.js +1 -1
  615. package/app/.next/server/middleware.js +3 -3
  616. package/app/.next/server/pages/404.html +1 -1
  617. package/app/.next/server/pages/500.html +1 -1
  618. package/app/.next/server/server-reference-manifest.js +1 -1
  619. package/app/.next/server/server-reference-manifest.json +1 -1
  620. package/app/.next/static/chunks/1321-f70183ecee5bedb5.js +1 -0
  621. package/app/.next/static/chunks/1a258343.e25ce4decd2c9ea4.js +1 -0
  622. package/app/.next/static/chunks/3521.a9e2daf685420cc7.js +1 -0
  623. package/app/.next/static/chunks/4028-dd9deab6b8261f02.js +91 -0
  624. package/app/.next/static/chunks/5497-dd7adaddb5a1e51d.js +7 -0
  625. package/app/.next/static/chunks/705-10f93cd2550e6494.js +1 -0
  626. package/app/.next/static/chunks/{8198-e290466e54954f7b.js → 8198-b19a16e6810e84a2.js} +1 -1
  627. package/app/.next/static/chunks/app/(dashboard)/dashboard/basic-chat/{page-7fa7d21642523ca3.js → page-0fd819f7f5548f88.js} +1 -1
  628. package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/[toolId]/page-ddcb29448c366123.js +1 -0
  629. package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/page-bc35ad34049d7ff5.js +1 -0
  630. package/app/.next/static/chunks/app/(dashboard)/dashboard/combos/page-d6943540c8897df0.js +1 -0
  631. package/app/.next/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/[id]/{page-818b1bc14711e0a7.js → page-308fc8a3b8a069fe.js} +10 -10
  632. package/app/.next/static/chunks/app/(dashboard)/dashboard/media-providers/combo/[id]/page-81c185a6977c1eb4.js +4 -0
  633. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-2eaaf5721c2e8376.js +14 -0
  634. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/page-d6c97bcabadb38ca.js +1 -0
  635. package/app/.next/static/chunks/app/(dashboard)/dashboard/quota/page-6916d780a2d54b89.js +1 -0
  636. package/app/.next/static/chunks/app/_global-error/page-c74ff3c527010d28.js +1 -0
  637. package/app/.next/static/chunks/app/api/antigravity-app/route-c74ff3c527010d28.js +1 -0
  638. package/app/.next/static/chunks/app/api/antigravity-app-v2/route-c74ff3c527010d28.js +1 -0
  639. package/app/.next/static/chunks/app/api/antigravity-ide/route-c74ff3c527010d28.js +1 -0
  640. package/app/.next/static/chunks/app/api/antigravity-targets/route-c74ff3c527010d28.js +1 -0
  641. package/app/.next/static/chunks/app/api/antigravity-tools/import/route-c74ff3c527010d28.js +1 -0
  642. package/app/.next/static/chunks/app/api/antigravity-tools/import-refresh-tokens/route-c74ff3c527010d28.js +1 -0
  643. package/app/.next/static/chunks/app/api/auth/login/route-c74ff3c527010d28.js +1 -0
  644. package/app/.next/static/chunks/app/api/auth/logout/route-c74ff3c527010d28.js +1 -0
  645. package/app/.next/static/chunks/app/api/auth/oidc/callback/route-c74ff3c527010d28.js +1 -0
  646. package/app/.next/static/chunks/app/api/auth/oidc/start/route-c74ff3c527010d28.js +1 -0
  647. package/app/.next/static/chunks/app/api/auth/oidc/test/route-c74ff3c527010d28.js +1 -0
  648. package/app/.next/static/chunks/app/api/auth/reset-password/route-c74ff3c527010d28.js +1 -0
  649. package/app/.next/static/chunks/app/api/auth/status/route-c74ff3c527010d28.js +1 -0
  650. package/app/.next/static/chunks/app/api/cli-tools/all-statuses/route-c74ff3c527010d28.js +1 -0
  651. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-c74ff3c527010d28.js +1 -0
  652. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-c74ff3c527010d28.js +1 -0
  653. package/app/.next/static/chunks/app/api/cli-tools/claude-settings/route-c74ff3c527010d28.js +1 -0
  654. package/app/.next/static/chunks/app/api/cli-tools/cline-settings/route-c74ff3c527010d28.js +1 -0
  655. package/app/.next/static/chunks/app/api/cli-tools/codex-settings/route-c74ff3c527010d28.js +1 -0
  656. package/app/.next/static/chunks/app/api/cli-tools/copilot-settings/route-c74ff3c527010d28.js +1 -0
  657. package/app/.next/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-c74ff3c527010d28.js +1 -0
  658. package/app/.next/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-c74ff3c527010d28.js +1 -0
  659. package/app/.next/static/chunks/app/api/cli-tools/cowork-settings/route-c74ff3c527010d28.js +1 -0
  660. package/app/.next/static/chunks/app/api/cli-tools/cursor-byok/jobs/[jobId]/events/route-c74ff3c527010d28.js +1 -0
  661. package/app/.next/static/chunks/app/api/cli-tools/cursor-byok/jobs/[jobId]/sudo/route-c74ff3c527010d28.js +1 -0
  662. package/app/.next/static/chunks/app/api/cli-tools/cursor-byok/jobs/route-c74ff3c527010d28.js +1 -0
  663. package/app/.next/static/chunks/app/api/cli-tools/cursor-byok/route-c74ff3c527010d28.js +1 -0
  664. package/app/.next/static/chunks/app/api/cli-tools/deepseek-tui-settings/route-c74ff3c527010d28.js +1 -0
  665. package/app/.next/static/chunks/app/api/cli-tools/devin-settings/route-c74ff3c527010d28.js +1 -0
  666. package/app/.next/static/chunks/app/api/cli-tools/droid-settings/route-c74ff3c527010d28.js +1 -0
  667. package/app/.next/static/chunks/app/api/cli-tools/grok-build-settings/route-c74ff3c527010d28.js +1 -0
  668. package/app/.next/static/chunks/app/api/cli-tools/hermes-settings/route-c74ff3c527010d28.js +1 -0
  669. package/app/.next/static/chunks/app/api/cli-tools/jcode-settings/route-c74ff3c527010d28.js +1 -0
  670. package/app/.next/static/chunks/app/api/cli-tools/kilo-settings/route-c74ff3c527010d28.js +1 -0
  671. package/app/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-c74ff3c527010d28.js +1 -0
  672. package/app/.next/static/chunks/app/api/cli-tools/opencode-settings/route-c74ff3c527010d28.js +1 -0
  673. package/app/.next/static/chunks/app/api/combos/[id]/route-c74ff3c527010d28.js +1 -0
  674. package/app/.next/static/chunks/app/api/combos/route-c74ff3c527010d28.js +1 -0
  675. package/app/.next/static/chunks/app/api/donate/route-c74ff3c527010d28.js +1 -0
  676. package/app/.next/static/chunks/app/api/headroom/extras/route-c74ff3c527010d28.js +1 -0
  677. package/app/.next/static/chunks/app/api/headroom/proxy/[...path]/route-c74ff3c527010d28.js +1 -0
  678. package/app/.next/static/chunks/app/api/headroom/restart/route-c74ff3c527010d28.js +1 -0
  679. package/app/.next/static/chunks/app/api/headroom/start/route-c74ff3c527010d28.js +1 -0
  680. package/app/.next/static/chunks/app/api/headroom/status/route-c74ff3c527010d28.js +1 -0
  681. package/app/.next/static/chunks/app/api/headroom/stop/route-c74ff3c527010d28.js +1 -0
  682. package/app/.next/static/chunks/app/api/health/route-c74ff3c527010d28.js +1 -0
  683. package/app/.next/static/chunks/app/api/init/route-c74ff3c527010d28.js +1 -0
  684. package/app/.next/static/chunks/app/api/internal/account-health/route-c74ff3c527010d28.js +1 -0
  685. package/app/.next/static/chunks/app/api/internal/request-detail/route-c74ff3c527010d28.js +1 -0
  686. package/app/.next/static/chunks/app/api/internal/usage/route-c74ff3c527010d28.js +1 -0
  687. package/app/.next/static/chunks/app/api/keys/[id]/reset-usage/route-c74ff3c527010d28.js +1 -0
  688. package/app/.next/static/chunks/app/api/keys/[id]/route-c74ff3c527010d28.js +1 -0
  689. package/app/.next/static/chunks/app/api/keys/[id]/usage/route-c74ff3c527010d28.js +1 -0
  690. package/app/.next/static/chunks/app/api/keys/route-c74ff3c527010d28.js +1 -0
  691. package/app/.next/static/chunks/app/api/locale/route-c74ff3c527010d28.js +1 -0
  692. package/app/.next/static/chunks/app/api/mcp/[plugin]/message/route-c74ff3c527010d28.js +1 -0
  693. package/app/.next/static/chunks/app/api/mcp/[plugin]/sse/route-c74ff3c527010d28.js +1 -0
  694. package/app/.next/static/chunks/app/api/media-providers/tts/deepgram/voices/route-c74ff3c527010d28.js +1 -0
  695. package/app/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-c74ff3c527010d28.js +1 -0
  696. package/app/.next/static/chunks/app/api/media-providers/tts/inworld/voices/route-c74ff3c527010d28.js +1 -0
  697. package/app/.next/static/chunks/app/api/media-providers/tts/minimax/voices/route-c74ff3c527010d28.js +1 -0
  698. package/app/.next/static/chunks/app/api/media-providers/tts/voices/route-c74ff3c527010d28.js +1 -0
  699. package/app/.next/static/chunks/app/api/models/alias/route-c74ff3c527010d28.js +1 -0
  700. package/app/.next/static/chunks/app/api/models/availability/route-c74ff3c527010d28.js +1 -0
  701. package/app/.next/static/chunks/app/api/models/custom/route-c74ff3c527010d28.js +1 -0
  702. package/app/.next/static/chunks/app/api/models/disabled/route-c74ff3c527010d28.js +1 -0
  703. package/app/.next/static/chunks/app/api/models/route-c74ff3c527010d28.js +1 -0
  704. package/app/.next/static/chunks/app/api/models/test/route-c74ff3c527010d28.js +1 -0
  705. package/app/.next/static/chunks/app/api/oauth/[provider]/[action]/route-c74ff3c527010d28.js +1 -0
  706. package/app/.next/static/chunks/app/api/oauth/codex/bulk-import/route-c74ff3c527010d28.js +1 -0
  707. package/app/.next/static/chunks/app/api/oauth/codex/import-token/route-c74ff3c527010d28.js +1 -0
  708. package/app/.next/static/chunks/app/api/oauth/cursor/auto-import/route-c74ff3c527010d28.js +1 -0
  709. package/app/.next/static/chunks/app/api/oauth/cursor/import/route-c74ff3c527010d28.js +1 -0
  710. package/app/.next/static/chunks/app/api/oauth/gitlab/pat/route-c74ff3c527010d28.js +1 -0
  711. package/app/.next/static/chunks/app/api/oauth/iflow/cookie/route-c74ff3c527010d28.js +1 -0
  712. package/app/.next/static/chunks/app/api/oauth/kiro/api-key/route-c74ff3c527010d28.js +1 -0
  713. package/app/.next/static/chunks/app/api/oauth/kiro/auto-import/route-c74ff3c527010d28.js +1 -0
  714. package/app/.next/static/chunks/app/api/oauth/kiro/import/route-c74ff3c527010d28.js +1 -0
  715. package/app/.next/static/chunks/app/api/oauth/kiro/import-cli-proxy/route-c74ff3c527010d28.js +1 -0
  716. package/app/.next/static/chunks/app/api/oauth/kiro/social-authorize/route-c74ff3c527010d28.js +1 -0
  717. package/app/.next/static/chunks/app/api/oauth/kiro/social-exchange/route-c74ff3c527010d28.js +1 -0
  718. package/app/.next/static/chunks/app/api/pricing/route-c74ff3c527010d28.js +1 -0
  719. package/app/.next/static/chunks/app/api/provider-nodes/[id]/route-c74ff3c527010d28.js +1 -0
  720. package/app/.next/static/chunks/app/api/provider-nodes/route-c74ff3c527010d28.js +1 -0
  721. package/app/.next/static/chunks/app/api/provider-nodes/validate/route-c74ff3c527010d28.js +1 -0
  722. package/app/.next/static/chunks/app/api/providers/[id]/models/route-c74ff3c527010d28.js +1 -0
  723. package/app/.next/static/chunks/app/api/providers/[id]/route-c74ff3c527010d28.js +1 -0
  724. package/app/.next/static/chunks/app/api/providers/[id]/test/route-c74ff3c527010d28.js +1 -0
  725. package/app/.next/static/chunks/app/api/providers/[id]/test-models/route-c74ff3c527010d28.js +1 -0
  726. package/app/.next/static/chunks/app/api/providers/client/route-c74ff3c527010d28.js +1 -0
  727. package/app/.next/static/chunks/app/api/providers/kilo/free-models/route-c74ff3c527010d28.js +1 -0
  728. package/app/.next/static/chunks/app/api/providers/route-c74ff3c527010d28.js +1 -0
  729. package/app/.next/static/chunks/app/api/providers/suggested-models/route-c74ff3c527010d28.js +1 -0
  730. package/app/.next/static/chunks/app/api/providers/test-batch/route-c74ff3c527010d28.js +1 -0
  731. package/app/.next/static/chunks/app/api/providers/validate/route-c74ff3c527010d28.js +1 -0
  732. package/app/.next/static/chunks/app/api/proxy-pools/[id]/route-c74ff3c527010d28.js +1 -0
  733. package/app/.next/static/chunks/app/api/proxy-pools/[id]/test/route-c74ff3c527010d28.js +1 -0
  734. package/app/.next/static/chunks/app/api/proxy-pools/cloudflare-deploy/route-c74ff3c527010d28.js +1 -0
  735. package/app/.next/static/chunks/app/api/proxy-pools/deno-deploy/route-c74ff3c527010d28.js +1 -0
  736. package/app/.next/static/chunks/app/api/proxy-pools/route-c74ff3c527010d28.js +1 -0
  737. package/app/.next/static/chunks/app/api/proxy-pools/vercel-deploy/route-c74ff3c527010d28.js +1 -0
  738. package/app/.next/static/chunks/app/api/pxpipe/health/route-c74ff3c527010d28.js +1 -0
  739. package/app/.next/static/chunks/app/api/pxpipe/install/route-c74ff3c527010d28.js +1 -0
  740. package/app/.next/static/chunks/app/api/pxpipe/logs/route-c74ff3c527010d28.js +1 -0
  741. package/app/.next/static/chunks/app/api/pxpipe/restart/route-c74ff3c527010d28.js +1 -0
  742. package/app/.next/static/chunks/app/api/pxpipe/start/route-c74ff3c527010d28.js +1 -0
  743. package/app/.next/static/chunks/app/api/pxpipe/stats/route-c74ff3c527010d28.js +1 -0
  744. package/app/.next/static/chunks/app/api/pxpipe/status/route-c74ff3c527010d28.js +1 -0
  745. package/app/.next/static/chunks/app/api/pxpipe/stop/route-c74ff3c527010d28.js +1 -0
  746. package/app/.next/static/chunks/app/api/settings/database/route-c74ff3c527010d28.js +1 -0
  747. package/app/.next/static/chunks/app/api/settings/database/selective/route-c74ff3c527010d28.js +1 -0
  748. package/app/.next/static/chunks/app/api/settings/proxy-test/route-c74ff3c527010d28.js +1 -0
  749. package/app/.next/static/chunks/app/api/settings/require-login/route-c74ff3c527010d28.js +1 -0
  750. package/app/.next/static/chunks/app/api/settings/route-c74ff3c527010d28.js +1 -0
  751. package/app/.next/static/chunks/app/api/shutdown/route-c74ff3c527010d28.js +1 -0
  752. package/app/.next/static/chunks/app/api/tags/route-c74ff3c527010d28.js +1 -0
  753. package/app/.next/static/chunks/app/api/translator/console-logs/route-c74ff3c527010d28.js +1 -0
  754. package/app/.next/static/chunks/app/api/translator/console-logs/stream/route-c74ff3c527010d28.js +1 -0
  755. package/app/.next/static/chunks/app/api/translator/load/route-c74ff3c527010d28.js +1 -0
  756. package/app/.next/static/chunks/app/api/translator/save/route-c74ff3c527010d28.js +1 -0
  757. package/app/.next/static/chunks/app/api/translator/send/route-c74ff3c527010d28.js +1 -0
  758. package/app/.next/static/chunks/app/api/translator/translate/route-c74ff3c527010d28.js +1 -0
  759. package/app/.next/static/chunks/app/api/tunnel/disable/route-c74ff3c527010d28.js +1 -0
  760. package/app/.next/static/chunks/app/api/tunnel/enable/route-c74ff3c527010d28.js +1 -0
  761. package/app/.next/static/chunks/app/api/tunnel/status/route-c74ff3c527010d28.js +1 -0
  762. package/app/.next/static/chunks/app/api/tunnel/tailscale-check/route-c74ff3c527010d28.js +1 -0
  763. package/app/.next/static/chunks/app/api/tunnel/tailscale-disable/route-c74ff3c527010d28.js +1 -0
  764. package/app/.next/static/chunks/app/api/tunnel/tailscale-enable/route-c74ff3c527010d28.js +1 -0
  765. package/app/.next/static/chunks/app/api/tunnel/tailscale-install/route-c74ff3c527010d28.js +1 -0
  766. package/app/.next/static/chunks/app/api/usage/[connectionId]/codex-reset-credits/route-c74ff3c527010d28.js +1 -0
  767. package/app/.next/static/chunks/app/api/usage/[connectionId]/route-c74ff3c527010d28.js +1 -0
  768. package/app/.next/static/chunks/app/api/usage/chart/route-c74ff3c527010d28.js +1 -0
  769. package/app/.next/static/chunks/app/api/usage/history/route-c74ff3c527010d28.js +1 -0
  770. package/app/.next/static/chunks/app/api/usage/logs/route-c74ff3c527010d28.js +1 -0
  771. package/app/.next/static/chunks/app/api/usage/providers/route-c74ff3c527010d28.js +1 -0
  772. package/app/.next/static/chunks/app/api/usage/report/route-c74ff3c527010d28.js +1 -0
  773. package/app/.next/static/chunks/app/api/usage/request-details/route-c74ff3c527010d28.js +1 -0
  774. package/app/.next/static/chunks/app/api/usage/request-logs/route-c74ff3c527010d28.js +1 -0
  775. package/app/.next/static/chunks/app/api/usage/stats/route-c74ff3c527010d28.js +1 -0
  776. package/app/.next/static/chunks/app/api/usage/stream/route-c74ff3c527010d28.js +1 -0
  777. package/app/.next/static/chunks/app/api/v1/api/chat/route-c74ff3c527010d28.js +1 -0
  778. package/app/.next/static/chunks/app/api/v1/audio/speech/route-c74ff3c527010d28.js +1 -0
  779. package/app/.next/static/chunks/app/api/v1/audio/transcriptions/route-c74ff3c527010d28.js +1 -0
  780. package/app/.next/static/chunks/app/api/v1/audio/voices/route-c74ff3c527010d28.js +1 -0
  781. package/app/.next/static/chunks/app/api/v1/chat/completions/route-c74ff3c527010d28.js +1 -0
  782. package/app/.next/static/chunks/app/api/v1/embeddings/route-c74ff3c527010d28.js +1 -0
  783. package/app/.next/static/chunks/app/api/v1/images/generations/route-c74ff3c527010d28.js +1 -0
  784. package/app/.next/static/chunks/app/api/v1/messages/count_tokens/route-c74ff3c527010d28.js +1 -0
  785. package/app/.next/static/chunks/app/api/v1/messages/route-c74ff3c527010d28.js +1 -0
  786. package/app/.next/static/chunks/app/api/v1/models/[kind]/route-c74ff3c527010d28.js +1 -0
  787. package/app/.next/static/chunks/app/api/v1/models/info/route-c74ff3c527010d28.js +1 -0
  788. package/app/.next/static/chunks/app/api/v1/models/route-c74ff3c527010d28.js +1 -0
  789. package/app/.next/static/chunks/app/api/v1/responses/compact/route-c74ff3c527010d28.js +1 -0
  790. package/app/.next/static/chunks/app/api/v1/responses/route-c74ff3c527010d28.js +1 -0
  791. package/app/.next/static/chunks/app/api/v1/route-c74ff3c527010d28.js +1 -0
  792. package/app/.next/static/chunks/app/api/v1/search/route-c74ff3c527010d28.js +1 -0
  793. package/app/.next/static/chunks/app/api/v1/videos/[id]/route-c74ff3c527010d28.js +1 -0
  794. package/app/.next/static/chunks/app/api/v1/videos/edits/route-c74ff3c527010d28.js +1 -0
  795. package/app/.next/static/chunks/app/api/v1/videos/extensions/route-c74ff3c527010d28.js +1 -0
  796. package/app/.next/static/chunks/app/api/v1/videos/generations/route-c74ff3c527010d28.js +1 -0
  797. package/app/.next/static/chunks/app/api/v1/web/fetch/route-c74ff3c527010d28.js +1 -0
  798. package/app/.next/static/chunks/app/api/v1beta/models/[...path]/route-c74ff3c527010d28.js +1 -0
  799. package/app/.next/static/chunks/app/api/v1beta/models/route-c74ff3c527010d28.js +1 -0
  800. package/app/.next/static/chunks/app/api/version/route-c74ff3c527010d28.js +1 -0
  801. package/app/.next/static/chunks/app/api/version/shutdown/route-c74ff3c527010d28.js +1 -0
  802. package/app/.next/static/chunks/app/api/version/update/route-c74ff3c527010d28.js +1 -0
  803. package/app/.next/static/chunks/app/landing/page-a438c82535cc676a.js +1 -0
  804. package/app/.next/static/chunks/app/login/page-7b85623bf9ba8d60.js +1 -0
  805. package/app/.next/static/chunks/app/manifest.webmanifest/route-c74ff3c527010d28.js +1 -0
  806. package/app/.next/static/chunks/app/page-c74ff3c527010d28.js +1 -0
  807. package/app/.next/static/chunks/next/dist/client/components/builtin/app-error-c74ff3c527010d28.js +1 -0
  808. package/app/.next/static/chunks/next/dist/client/components/builtin/forbidden-c74ff3c527010d28.js +1 -0
  809. package/app/.next/static/chunks/next/dist/client/components/builtin/not-found-c74ff3c527010d28.js +1 -0
  810. package/app/.next/static/chunks/next/dist/client/components/builtin/unauthorized-c74ff3c527010d28.js +1 -0
  811. package/app/.next/static/chunks/{webpack-121fdf903e7acc97.js → webpack-6b46812a5ae291a1.js} +1 -1
  812. package/app/.next/static/css/d16761d8d90e43ab.css +1 -0
  813. package/app/.next/static/q96GO6bFy0GB26MaN-AFa/_buildManifest.js +1 -0
  814. package/app/open-sse/config/appConstants.js +58 -10
  815. package/app/open-sse/config/kiroConstants.js +123 -3
  816. package/app/open-sse/config/providerModels.js +7 -3
  817. package/app/open-sse/config/ttsModels.js +23 -0
  818. package/app/open-sse/executors/antigravity.js +5 -1
  819. package/app/open-sse/executors/base.js +3 -2
  820. package/app/open-sse/executors/codebuddy-cn.js +29 -0
  821. package/app/open-sse/executors/codebuddy-intl.js +44 -0
  822. package/app/open-sse/executors/codex.js +9 -4
  823. package/app/open-sse/executors/cursor.js +427 -2
  824. package/app/open-sse/executors/default.js +21 -27
  825. package/app/open-sse/executors/devin-cli.js +847 -0
  826. package/app/open-sse/executors/index.js +15 -3
  827. package/app/open-sse/executors/qoder.js +82 -41
  828. package/app/open-sse/executors/trae.js +339 -0
  829. package/app/open-sse/executors/windsurf.js +588 -0
  830. package/app/open-sse/executors/zed.js +304 -0
  831. package/app/open-sse/handlers/chatCore/nonStreamingHandler.js +92 -6
  832. package/app/open-sse/handlers/chatCore/sseToJsonHandler.js +131 -11
  833. package/app/open-sse/handlers/chatCore/streamingHandler.js +6 -6
  834. package/app/open-sse/handlers/chatCore.js +62 -8
  835. package/app/open-sse/handlers/embeddingProviders/index.js +7 -0
  836. package/app/open-sse/handlers/embeddingProviders/selfhostedEmbedding.js +46 -0
  837. package/app/open-sse/handlers/embeddingsCore.js +23 -8
  838. package/app/open-sse/handlers/fetch/index.js +11 -5
  839. package/app/open-sse/handlers/search/callers.js +0 -1
  840. package/app/open-sse/handlers/search/normalizers.js +0 -1
  841. package/app/open-sse/handlers/sttCore.js +9 -1
  842. package/app/open-sse/handlers/ttsCore.js +3 -3
  843. package/app/open-sse/handlers/ttsProviders/index.js +4 -0
  844. package/app/open-sse/handlers/ttsProviders/selfhostedTts.js +69 -0
  845. package/app/open-sse/handlers/ttsProviders/xiaomi-mimo.js +65 -0
  846. package/app/open-sse/index.js +0 -1
  847. package/app/open-sse/providers/capabilities.js +43 -3
  848. package/app/open-sse/providers/pricing.js +132 -1
  849. package/app/open-sse/providers/registry/alicode-intl.js +4 -4
  850. package/app/open-sse/providers/registry/alims-intl.js +32 -0
  851. package/app/open-sse/providers/registry/antigravity.js +7 -3
  852. package/app/open-sse/providers/registry/api-airforce.js +36 -0
  853. package/app/open-sse/providers/registry/baidu.js +33 -0
  854. package/app/open-sse/providers/registry/bazaarlink.js +47 -0
  855. package/app/open-sse/providers/registry/bluesminds.js +38 -0
  856. package/app/open-sse/providers/registry/claude.js +1 -5
  857. package/app/open-sse/providers/registry/cloudflare-ai.js +2 -0
  858. package/app/open-sse/providers/registry/codebuddy-intl.js +77 -0
  859. package/app/open-sse/providers/registry/cursor.js +3 -3
  860. package/app/open-sse/providers/registry/deepseek.js +4 -0
  861. package/app/open-sse/providers/registry/devin-cli.js +63 -0
  862. package/app/open-sse/providers/registry/gemini-cli.js +17 -6
  863. package/app/open-sse/providers/registry/gemini.js +4 -0
  864. package/app/open-sse/providers/registry/index.js +87 -49
  865. package/app/open-sse/providers/registry/kilo-gateway.js +34 -0
  866. package/app/open-sse/providers/registry/kimchi.js +1 -1
  867. package/app/open-sse/providers/registry/kimi.js +43 -7
  868. package/app/open-sse/providers/registry/kiro.js +4 -1
  869. package/app/open-sse/providers/registry/llm7.js +35 -0
  870. package/app/open-sse/providers/registry/mimo-free.js +3 -0
  871. package/app/open-sse/providers/registry/morph.js +29 -0
  872. package/app/open-sse/providers/registry/nvidia.js +2 -0
  873. package/app/open-sse/providers/registry/ollama.js +3 -0
  874. package/app/open-sse/providers/registry/openrouter.js +2 -0
  875. package/app/open-sse/providers/registry/poolside.js +30 -0
  876. package/app/open-sse/providers/registry/qoder.js +19 -15
  877. package/app/open-sse/providers/registry/sambanova.js +27 -0
  878. package/app/open-sse/providers/registry/selfhosted-embedding.js +73 -0
  879. package/app/open-sse/providers/registry/selfhosted-stt.js +48 -0
  880. package/app/open-sse/providers/registry/selfhosted-tts.js +44 -0
  881. package/app/open-sse/providers/registry/tencent.js +27 -0
  882. package/app/open-sse/providers/registry/tokenrouter.js +162 -0
  883. package/app/open-sse/providers/registry/trae.js +76 -0
  884. package/app/open-sse/providers/registry/windsurf.js +143 -0
  885. package/app/open-sse/providers/registry/xiaomi-mimo.js +9 -1
  886. package/app/open-sse/providers/registry/zed.js +71 -0
  887. package/app/open-sse/providers/shared.js +21 -1
  888. package/app/open-sse/providers/thinkingLevels.js +10 -3
  889. package/app/open-sse/rtk/headroom.js +12 -1
  890. package/app/open-sse/services/capacityAdapter.js +173 -0
  891. package/app/open-sse/services/combo.js +21 -4
  892. package/app/open-sse/services/cursorModels.js +187 -0
  893. package/app/open-sse/services/projectId.js +13 -10
  894. package/app/open-sse/services/provider.js +14 -8
  895. package/app/open-sse/services/qoderModels.js +146 -7
  896. package/app/open-sse/services/tokenRefresh/providers.js +221 -185
  897. package/app/open-sse/services/tokenRefresh.js +21 -5
  898. package/app/open-sse/services/usage/codebuddy-cn.js +14 -6
  899. package/app/open-sse/services/usage/deepseek.js +112 -0
  900. package/app/open-sse/services/usage/google.js +22 -58
  901. package/app/open-sse/services/usage/grok-cli.js +96 -0
  902. package/app/open-sse/services/usage/grokCliQuotaFrame.js +191 -0
  903. package/app/open-sse/services/usage/kimi.js +211 -0
  904. package/app/open-sse/services/usage/misc.js +78 -32
  905. package/app/open-sse/services/usage.js +14 -5
  906. package/app/open-sse/shared/qoder/constants.js +8 -0
  907. package/app/open-sse/shared/zedAuth.js +415 -0
  908. package/app/open-sse/translator/concerns/kiroConversation.js +435 -0
  909. package/app/open-sse/translator/concerns/thinkingUnified.js +22 -4
  910. package/app/open-sse/translator/formats/claude.js +3 -1
  911. package/app/open-sse/translator/formats/gemini.js +20 -1
  912. package/app/open-sse/translator/index.js +19 -4
  913. package/app/open-sse/translator/request/claude-to-kiro.js +93 -232
  914. package/app/open-sse/translator/request/openai-responses.js +51 -7
  915. package/app/open-sse/translator/request/openai-to-kiro.js +77 -252
  916. package/app/open-sse/translator/response/openai-responses.js +57 -18
  917. package/app/open-sse/translator/schema/blocks.js +3 -0
  918. package/app/open-sse/utils/clientDetector.js +5 -2
  919. package/app/open-sse/utils/cursorChecksum.js +2 -1
  920. package/app/open-sse/utils/kiroSessionReplay.js +144 -0
  921. package/app/open-sse/utils/sessionManager.js +48 -12
  922. package/app/open-sse/utils/stream.js +6 -2
  923. package/app/package.json +1 -1
  924. package/app/public/i18n/literals/ar.json +2 -0
  925. package/app/public/i18n/literals/bn.json +2 -0
  926. package/app/public/i18n/literals/cs.json +2 -0
  927. package/app/public/i18n/literals/da.json +2 -0
  928. package/app/public/i18n/literals/de.json +2 -0
  929. package/app/public/i18n/literals/el.json +2 -0
  930. package/app/public/i18n/literals/es.json +2 -0
  931. package/app/public/i18n/literals/fa.json +1369 -171
  932. package/app/public/i18n/literals/fi.json +2 -0
  933. package/app/public/i18n/literals/fr.json +2 -0
  934. package/app/public/i18n/literals/he.json +2 -0
  935. package/app/public/i18n/literals/hi.json +2 -0
  936. package/app/public/i18n/literals/hu.json +2 -0
  937. package/app/public/i18n/literals/id.json +2 -0
  938. package/app/public/i18n/literals/it.json +2 -0
  939. package/app/public/i18n/literals/ja.json +2 -0
  940. package/app/public/i18n/literals/km.json +1398 -0
  941. package/app/public/i18n/literals/ko.json +2 -0
  942. package/app/public/i18n/literals/nl.json +2 -0
  943. package/app/public/i18n/literals/no.json +2 -0
  944. package/app/public/i18n/literals/pl.json +2 -0
  945. package/app/public/i18n/literals/pt-BR.json +958 -163
  946. package/app/public/i18n/literals/pt-PT.json +2 -0
  947. package/app/public/i18n/literals/ro.json +2 -0
  948. package/app/public/i18n/literals/ru.json +2 -0
  949. package/app/public/i18n/literals/sv.json +2 -0
  950. package/app/public/i18n/literals/th.json +1374 -176
  951. package/app/public/i18n/literals/tl.json +2 -0
  952. package/app/public/i18n/literals/tr.json +2 -0
  953. package/app/public/i18n/literals/uk.json +2 -0
  954. package/app/public/i18n/literals/ur.json +2 -0
  955. package/app/public/i18n/literals/vi.json +2 -0
  956. package/app/public/i18n/literals/zh-CN.json +2 -0
  957. package/app/public/i18n/literals/zh-TW.json +2 -0
  958. package/app/public/providers/agentrouter.png +0 -0
  959. package/app/public/providers/api-airforce.png +0 -0
  960. package/app/public/providers/baidu.png +0 -0
  961. package/app/public/providers/bazaarlink.png +0 -0
  962. package/app/public/providers/bluesminds.png +0 -0
  963. package/app/public/providers/codebuddy-cn.png +0 -0
  964. package/app/public/providers/codebuddy-intl.png +0 -0
  965. package/app/public/providers/commandcode.png +0 -0
  966. package/app/public/providers/devin-cli.png +0 -0
  967. package/app/public/providers/featherless.png +0 -0
  968. package/app/public/providers/gitlab.png +0 -0
  969. package/app/public/providers/kilo-gateway.png +0 -0
  970. package/app/public/providers/llm7.png +0 -0
  971. package/app/public/providers/longcat.png +0 -0
  972. package/app/public/providers/mmf.png +0 -0
  973. package/app/public/providers/morph.png +0 -0
  974. package/app/public/providers/novita.png +0 -0
  975. package/app/public/providers/opendesign.png +0 -0
  976. package/app/public/providers/perplexity-agent.png +0 -0
  977. package/app/public/providers/poolside.png +0 -0
  978. package/app/public/providers/qoder.png +0 -0
  979. package/app/public/providers/reka.png +0 -0
  980. package/app/public/providers/sambanova.png +0 -0
  981. package/app/public/providers/tencent.png +0 -0
  982. package/app/public/providers/tokenrouter.png +0 -0
  983. package/app/public/providers/trae.png +0 -0
  984. package/app/public/providers/venice.png +0 -0
  985. package/app/public/providers/vercel-ai-gateway.png +0 -0
  986. package/app/public/providers/vercel.png +0 -0
  987. package/app/public/providers/windsurf.png +0 -0
  988. package/app/public/providers/workbuddy.png +0 -0
  989. package/app/public/providers/zed.png +0 -0
  990. package/app/src/mitm/config.js +42 -1
  991. package/app/src/shared/constants/cliTools.js +73 -5
  992. package/app/src/shared/constants/locales.js +1 -0
  993. package/app/src/shared/constants/ttsProviders.js +12 -0
  994. package/app/src/shared/services/quotaAutoPing.js +313 -0
  995. package/app/src/sse/services/backgroundTokenRefresh.js +196 -0
  996. package/package.json +1 -1
  997. package/app/.next/server/chunks/1051.js +0 -1
  998. package/app/.next/server/chunks/1185.js +0 -1
  999. package/app/.next/server/chunks/1806.js +0 -1
  1000. package/app/.next/server/chunks/2056.js +0 -1
  1001. package/app/.next/server/chunks/2701.js +0 -10
  1002. package/app/.next/server/chunks/3000.js +0 -63
  1003. package/app/.next/server/chunks/3588.js +0 -7
  1004. package/app/.next/server/chunks/4177.js +0 -1
  1005. package/app/.next/server/chunks/4632.js +0 -1
  1006. package/app/.next/server/chunks/7181.js +0 -1
  1007. package/app/.next/server/chunks/7467.js +0 -1
  1008. package/app/.next/server/chunks/75.js +0 -1
  1009. package/app/.next/server/chunks/8056.js +0 -1
  1010. package/app/.next/server/chunks/8271.js +0 -1
  1011. package/app/.next/server/chunks/8833.js +0 -79
  1012. package/app/.next/server/chunks/9489.js +0 -3
  1013. package/app/.next/static/chunks/1321-3154ab2bdf03d1b4.js +0 -1
  1014. package/app/.next/static/chunks/1a258343.5938f676ed376386.js +0 -1
  1015. package/app/.next/static/chunks/3521.8dce45f121472d5c.js +0 -1
  1016. package/app/.next/static/chunks/4028-f3b4a4505d1949d8.js +0 -63
  1017. package/app/.next/static/chunks/5497-696d58587d263478.js +0 -7
  1018. package/app/.next/static/chunks/705-979ff3eb195b9023.js +0 -1
  1019. package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/[toolId]/page-dfb62517e7b61da1.js +0 -1
  1020. package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/page-7aab1b038b0bfe64.js +0 -1
  1021. package/app/.next/static/chunks/app/(dashboard)/dashboard/combos/page-064162ae8176ea08.js +0 -1
  1022. package/app/.next/static/chunks/app/(dashboard)/dashboard/media-providers/combo/[id]/page-6079eec94c4ca9a9.js +0 -4
  1023. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-1039653250f6f4eb.js +0 -12
  1024. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/page-541efe7992c8e9d2.js +0 -1
  1025. package/app/.next/static/chunks/app/(dashboard)/dashboard/quota/page-690703b251694b65.js +0 -1
  1026. package/app/.next/static/chunks/app/_global-error/page-c1f9120475dadd61.js +0 -1
  1027. package/app/.next/static/chunks/app/api/antigravity-app/route-c1f9120475dadd61.js +0 -1
  1028. package/app/.next/static/chunks/app/api/antigravity-app-v2/route-c1f9120475dadd61.js +0 -1
  1029. package/app/.next/static/chunks/app/api/antigravity-ide/route-c1f9120475dadd61.js +0 -1
  1030. package/app/.next/static/chunks/app/api/antigravity-targets/route-c1f9120475dadd61.js +0 -1
  1031. package/app/.next/static/chunks/app/api/antigravity-tools/import/route-c1f9120475dadd61.js +0 -1
  1032. package/app/.next/static/chunks/app/api/antigravity-tools/import-refresh-tokens/route-c1f9120475dadd61.js +0 -1
  1033. package/app/.next/static/chunks/app/api/auth/login/route-c1f9120475dadd61.js +0 -1
  1034. package/app/.next/static/chunks/app/api/auth/logout/route-c1f9120475dadd61.js +0 -1
  1035. package/app/.next/static/chunks/app/api/auth/oidc/callback/route-c1f9120475dadd61.js +0 -1
  1036. package/app/.next/static/chunks/app/api/auth/oidc/start/route-c1f9120475dadd61.js +0 -1
  1037. package/app/.next/static/chunks/app/api/auth/oidc/test/route-c1f9120475dadd61.js +0 -1
  1038. package/app/.next/static/chunks/app/api/auth/reset-password/route-c1f9120475dadd61.js +0 -1
  1039. package/app/.next/static/chunks/app/api/auth/status/route-c1f9120475dadd61.js +0 -1
  1040. package/app/.next/static/chunks/app/api/cli-tools/all-statuses/route-c1f9120475dadd61.js +0 -1
  1041. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-c1f9120475dadd61.js +0 -1
  1042. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-c1f9120475dadd61.js +0 -1
  1043. package/app/.next/static/chunks/app/api/cli-tools/claude-settings/route-c1f9120475dadd61.js +0 -1
  1044. package/app/.next/static/chunks/app/api/cli-tools/cline-settings/route-c1f9120475dadd61.js +0 -1
  1045. package/app/.next/static/chunks/app/api/cli-tools/codex-settings/route-c1f9120475dadd61.js +0 -1
  1046. package/app/.next/static/chunks/app/api/cli-tools/copilot-settings/route-c1f9120475dadd61.js +0 -1
  1047. package/app/.next/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-c1f9120475dadd61.js +0 -1
  1048. package/app/.next/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-c1f9120475dadd61.js +0 -1
  1049. package/app/.next/static/chunks/app/api/cli-tools/cowork-settings/route-c1f9120475dadd61.js +0 -1
  1050. package/app/.next/static/chunks/app/api/cli-tools/cursor-byok/jobs/[jobId]/events/route-c1f9120475dadd61.js +0 -1
  1051. package/app/.next/static/chunks/app/api/cli-tools/cursor-byok/jobs/[jobId]/sudo/route-c1f9120475dadd61.js +0 -1
  1052. package/app/.next/static/chunks/app/api/cli-tools/cursor-byok/jobs/route-c1f9120475dadd61.js +0 -1
  1053. package/app/.next/static/chunks/app/api/cli-tools/cursor-byok/route-c1f9120475dadd61.js +0 -1
  1054. package/app/.next/static/chunks/app/api/cli-tools/deepseek-tui-settings/route-c1f9120475dadd61.js +0 -1
  1055. package/app/.next/static/chunks/app/api/cli-tools/droid-settings/route-c1f9120475dadd61.js +0 -1
  1056. package/app/.next/static/chunks/app/api/cli-tools/grok-build-settings/route-c1f9120475dadd61.js +0 -1
  1057. package/app/.next/static/chunks/app/api/cli-tools/hermes-settings/route-c1f9120475dadd61.js +0 -1
  1058. package/app/.next/static/chunks/app/api/cli-tools/jcode-settings/route-c1f9120475dadd61.js +0 -1
  1059. package/app/.next/static/chunks/app/api/cli-tools/kilo-settings/route-c1f9120475dadd61.js +0 -1
  1060. package/app/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-c1f9120475dadd61.js +0 -1
  1061. package/app/.next/static/chunks/app/api/cli-tools/opencode-settings/route-c1f9120475dadd61.js +0 -1
  1062. package/app/.next/static/chunks/app/api/combos/[id]/route-c1f9120475dadd61.js +0 -1
  1063. package/app/.next/static/chunks/app/api/combos/route-c1f9120475dadd61.js +0 -1
  1064. package/app/.next/static/chunks/app/api/donate/route-c1f9120475dadd61.js +0 -1
  1065. package/app/.next/static/chunks/app/api/headroom/extras/route-c1f9120475dadd61.js +0 -1
  1066. package/app/.next/static/chunks/app/api/headroom/proxy/[...path]/route-c1f9120475dadd61.js +0 -1
  1067. package/app/.next/static/chunks/app/api/headroom/restart/route-c1f9120475dadd61.js +0 -1
  1068. package/app/.next/static/chunks/app/api/headroom/start/route-c1f9120475dadd61.js +0 -1
  1069. package/app/.next/static/chunks/app/api/headroom/status/route-c1f9120475dadd61.js +0 -1
  1070. package/app/.next/static/chunks/app/api/headroom/stop/route-c1f9120475dadd61.js +0 -1
  1071. package/app/.next/static/chunks/app/api/health/route-c1f9120475dadd61.js +0 -1
  1072. package/app/.next/static/chunks/app/api/init/route-c1f9120475dadd61.js +0 -1
  1073. package/app/.next/static/chunks/app/api/internal/account-health/route-c1f9120475dadd61.js +0 -1
  1074. package/app/.next/static/chunks/app/api/internal/request-detail/route-c1f9120475dadd61.js +0 -1
  1075. package/app/.next/static/chunks/app/api/internal/usage/route-c1f9120475dadd61.js +0 -1
  1076. package/app/.next/static/chunks/app/api/keys/[id]/reset-usage/route-c1f9120475dadd61.js +0 -1
  1077. package/app/.next/static/chunks/app/api/keys/[id]/route-c1f9120475dadd61.js +0 -1
  1078. package/app/.next/static/chunks/app/api/keys/[id]/usage/route-c1f9120475dadd61.js +0 -1
  1079. package/app/.next/static/chunks/app/api/keys/route-c1f9120475dadd61.js +0 -1
  1080. package/app/.next/static/chunks/app/api/locale/route-c1f9120475dadd61.js +0 -1
  1081. package/app/.next/static/chunks/app/api/mcp/[plugin]/message/route-c1f9120475dadd61.js +0 -1
  1082. package/app/.next/static/chunks/app/api/mcp/[plugin]/sse/route-c1f9120475dadd61.js +0 -1
  1083. package/app/.next/static/chunks/app/api/media-providers/tts/deepgram/voices/route-c1f9120475dadd61.js +0 -1
  1084. package/app/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-c1f9120475dadd61.js +0 -1
  1085. package/app/.next/static/chunks/app/api/media-providers/tts/inworld/voices/route-c1f9120475dadd61.js +0 -1
  1086. package/app/.next/static/chunks/app/api/media-providers/tts/minimax/voices/route-c1f9120475dadd61.js +0 -1
  1087. package/app/.next/static/chunks/app/api/media-providers/tts/voices/route-c1f9120475dadd61.js +0 -1
  1088. package/app/.next/static/chunks/app/api/models/alias/route-c1f9120475dadd61.js +0 -1
  1089. package/app/.next/static/chunks/app/api/models/availability/route-c1f9120475dadd61.js +0 -1
  1090. package/app/.next/static/chunks/app/api/models/custom/route-c1f9120475dadd61.js +0 -1
  1091. package/app/.next/static/chunks/app/api/models/disabled/route-c1f9120475dadd61.js +0 -1
  1092. package/app/.next/static/chunks/app/api/models/route-c1f9120475dadd61.js +0 -1
  1093. package/app/.next/static/chunks/app/api/models/test/route-c1f9120475dadd61.js +0 -1
  1094. package/app/.next/static/chunks/app/api/oauth/[provider]/[action]/route-c1f9120475dadd61.js +0 -1
  1095. package/app/.next/static/chunks/app/api/oauth/codex/bulk-import/route-c1f9120475dadd61.js +0 -1
  1096. package/app/.next/static/chunks/app/api/oauth/codex/import-token/route-c1f9120475dadd61.js +0 -1
  1097. package/app/.next/static/chunks/app/api/oauth/cursor/auto-import/route-c1f9120475dadd61.js +0 -1
  1098. package/app/.next/static/chunks/app/api/oauth/cursor/import/route-c1f9120475dadd61.js +0 -1
  1099. package/app/.next/static/chunks/app/api/oauth/gitlab/pat/route-c1f9120475dadd61.js +0 -1
  1100. package/app/.next/static/chunks/app/api/oauth/iflow/cookie/route-c1f9120475dadd61.js +0 -1
  1101. package/app/.next/static/chunks/app/api/oauth/kiro/api-key/route-c1f9120475dadd61.js +0 -1
  1102. package/app/.next/static/chunks/app/api/oauth/kiro/auto-import/route-c1f9120475dadd61.js +0 -1
  1103. package/app/.next/static/chunks/app/api/oauth/kiro/import/route-c1f9120475dadd61.js +0 -1
  1104. package/app/.next/static/chunks/app/api/oauth/kiro/import-cli-proxy/route-c1f9120475dadd61.js +0 -1
  1105. package/app/.next/static/chunks/app/api/oauth/kiro/social-authorize/route-c1f9120475dadd61.js +0 -1
  1106. package/app/.next/static/chunks/app/api/oauth/kiro/social-exchange/route-c1f9120475dadd61.js +0 -1
  1107. package/app/.next/static/chunks/app/api/pricing/route-c1f9120475dadd61.js +0 -1
  1108. package/app/.next/static/chunks/app/api/provider-nodes/[id]/route-c1f9120475dadd61.js +0 -1
  1109. package/app/.next/static/chunks/app/api/provider-nodes/route-c1f9120475dadd61.js +0 -1
  1110. package/app/.next/static/chunks/app/api/provider-nodes/validate/route-c1f9120475dadd61.js +0 -1
  1111. package/app/.next/static/chunks/app/api/providers/[id]/models/route-c1f9120475dadd61.js +0 -1
  1112. package/app/.next/static/chunks/app/api/providers/[id]/route-c1f9120475dadd61.js +0 -1
  1113. package/app/.next/static/chunks/app/api/providers/[id]/test/route-c1f9120475dadd61.js +0 -1
  1114. package/app/.next/static/chunks/app/api/providers/[id]/test-models/route-c1f9120475dadd61.js +0 -1
  1115. package/app/.next/static/chunks/app/api/providers/client/route-c1f9120475dadd61.js +0 -1
  1116. package/app/.next/static/chunks/app/api/providers/kilo/free-models/route-c1f9120475dadd61.js +0 -1
  1117. package/app/.next/static/chunks/app/api/providers/route-c1f9120475dadd61.js +0 -1
  1118. package/app/.next/static/chunks/app/api/providers/suggested-models/route-c1f9120475dadd61.js +0 -1
  1119. package/app/.next/static/chunks/app/api/providers/test-batch/route-c1f9120475dadd61.js +0 -1
  1120. package/app/.next/static/chunks/app/api/providers/validate/route-c1f9120475dadd61.js +0 -1
  1121. package/app/.next/static/chunks/app/api/proxy-pools/[id]/route-c1f9120475dadd61.js +0 -1
  1122. package/app/.next/static/chunks/app/api/proxy-pools/[id]/test/route-c1f9120475dadd61.js +0 -1
  1123. package/app/.next/static/chunks/app/api/proxy-pools/cloudflare-deploy/route-c1f9120475dadd61.js +0 -1
  1124. package/app/.next/static/chunks/app/api/proxy-pools/deno-deploy/route-c1f9120475dadd61.js +0 -1
  1125. package/app/.next/static/chunks/app/api/proxy-pools/route-c1f9120475dadd61.js +0 -1
  1126. package/app/.next/static/chunks/app/api/proxy-pools/vercel-deploy/route-c1f9120475dadd61.js +0 -1
  1127. package/app/.next/static/chunks/app/api/pxpipe/health/route-c1f9120475dadd61.js +0 -1
  1128. package/app/.next/static/chunks/app/api/pxpipe/install/route-c1f9120475dadd61.js +0 -1
  1129. package/app/.next/static/chunks/app/api/pxpipe/logs/route-c1f9120475dadd61.js +0 -1
  1130. package/app/.next/static/chunks/app/api/pxpipe/restart/route-c1f9120475dadd61.js +0 -1
  1131. package/app/.next/static/chunks/app/api/pxpipe/start/route-c1f9120475dadd61.js +0 -1
  1132. package/app/.next/static/chunks/app/api/pxpipe/stats/route-c1f9120475dadd61.js +0 -1
  1133. package/app/.next/static/chunks/app/api/pxpipe/status/route-c1f9120475dadd61.js +0 -1
  1134. package/app/.next/static/chunks/app/api/pxpipe/stop/route-c1f9120475dadd61.js +0 -1
  1135. package/app/.next/static/chunks/app/api/settings/database/route-c1f9120475dadd61.js +0 -1
  1136. package/app/.next/static/chunks/app/api/settings/database/selective/route-c1f9120475dadd61.js +0 -1
  1137. package/app/.next/static/chunks/app/api/settings/proxy-test/route-c1f9120475dadd61.js +0 -1
  1138. package/app/.next/static/chunks/app/api/settings/require-login/route-c1f9120475dadd61.js +0 -1
  1139. package/app/.next/static/chunks/app/api/settings/route-c1f9120475dadd61.js +0 -1
  1140. package/app/.next/static/chunks/app/api/shutdown/route-c1f9120475dadd61.js +0 -1
  1141. package/app/.next/static/chunks/app/api/tags/route-c1f9120475dadd61.js +0 -1
  1142. package/app/.next/static/chunks/app/api/translator/console-logs/route-c1f9120475dadd61.js +0 -1
  1143. package/app/.next/static/chunks/app/api/translator/console-logs/stream/route-c1f9120475dadd61.js +0 -1
  1144. package/app/.next/static/chunks/app/api/translator/load/route-c1f9120475dadd61.js +0 -1
  1145. package/app/.next/static/chunks/app/api/translator/save/route-c1f9120475dadd61.js +0 -1
  1146. package/app/.next/static/chunks/app/api/translator/send/route-c1f9120475dadd61.js +0 -1
  1147. package/app/.next/static/chunks/app/api/translator/translate/route-c1f9120475dadd61.js +0 -1
  1148. package/app/.next/static/chunks/app/api/tunnel/disable/route-c1f9120475dadd61.js +0 -1
  1149. package/app/.next/static/chunks/app/api/tunnel/enable/route-c1f9120475dadd61.js +0 -1
  1150. package/app/.next/static/chunks/app/api/tunnel/status/route-c1f9120475dadd61.js +0 -1
  1151. package/app/.next/static/chunks/app/api/tunnel/tailscale-check/route-c1f9120475dadd61.js +0 -1
  1152. package/app/.next/static/chunks/app/api/tunnel/tailscale-disable/route-c1f9120475dadd61.js +0 -1
  1153. package/app/.next/static/chunks/app/api/tunnel/tailscale-enable/route-c1f9120475dadd61.js +0 -1
  1154. package/app/.next/static/chunks/app/api/tunnel/tailscale-install/route-c1f9120475dadd61.js +0 -1
  1155. package/app/.next/static/chunks/app/api/usage/[connectionId]/codex-reset-credits/route-c1f9120475dadd61.js +0 -1
  1156. package/app/.next/static/chunks/app/api/usage/[connectionId]/route-c1f9120475dadd61.js +0 -1
  1157. package/app/.next/static/chunks/app/api/usage/chart/route-c1f9120475dadd61.js +0 -1
  1158. package/app/.next/static/chunks/app/api/usage/history/route-c1f9120475dadd61.js +0 -1
  1159. package/app/.next/static/chunks/app/api/usage/logs/route-c1f9120475dadd61.js +0 -1
  1160. package/app/.next/static/chunks/app/api/usage/providers/route-c1f9120475dadd61.js +0 -1
  1161. package/app/.next/static/chunks/app/api/usage/report/route-c1f9120475dadd61.js +0 -1
  1162. package/app/.next/static/chunks/app/api/usage/request-details/route-c1f9120475dadd61.js +0 -1
  1163. package/app/.next/static/chunks/app/api/usage/request-logs/route-c1f9120475dadd61.js +0 -1
  1164. package/app/.next/static/chunks/app/api/usage/stats/route-c1f9120475dadd61.js +0 -1
  1165. package/app/.next/static/chunks/app/api/usage/stream/route-c1f9120475dadd61.js +0 -1
  1166. package/app/.next/static/chunks/app/api/v1/api/chat/route-c1f9120475dadd61.js +0 -1
  1167. package/app/.next/static/chunks/app/api/v1/audio/speech/route-c1f9120475dadd61.js +0 -1
  1168. package/app/.next/static/chunks/app/api/v1/audio/transcriptions/route-c1f9120475dadd61.js +0 -1
  1169. package/app/.next/static/chunks/app/api/v1/audio/voices/route-c1f9120475dadd61.js +0 -1
  1170. package/app/.next/static/chunks/app/api/v1/chat/completions/route-c1f9120475dadd61.js +0 -1
  1171. package/app/.next/static/chunks/app/api/v1/embeddings/route-c1f9120475dadd61.js +0 -1
  1172. package/app/.next/static/chunks/app/api/v1/images/generations/route-c1f9120475dadd61.js +0 -1
  1173. package/app/.next/static/chunks/app/api/v1/messages/count_tokens/route-c1f9120475dadd61.js +0 -1
  1174. package/app/.next/static/chunks/app/api/v1/messages/route-c1f9120475dadd61.js +0 -1
  1175. package/app/.next/static/chunks/app/api/v1/models/[kind]/route-c1f9120475dadd61.js +0 -1
  1176. package/app/.next/static/chunks/app/api/v1/models/info/route-c1f9120475dadd61.js +0 -1
  1177. package/app/.next/static/chunks/app/api/v1/models/route-c1f9120475dadd61.js +0 -1
  1178. package/app/.next/static/chunks/app/api/v1/responses/compact/route-c1f9120475dadd61.js +0 -1
  1179. package/app/.next/static/chunks/app/api/v1/responses/route-c1f9120475dadd61.js +0 -1
  1180. package/app/.next/static/chunks/app/api/v1/route-c1f9120475dadd61.js +0 -1
  1181. package/app/.next/static/chunks/app/api/v1/search/route-c1f9120475dadd61.js +0 -1
  1182. package/app/.next/static/chunks/app/api/v1/videos/[id]/route-c1f9120475dadd61.js +0 -1
  1183. package/app/.next/static/chunks/app/api/v1/videos/edits/route-c1f9120475dadd61.js +0 -1
  1184. package/app/.next/static/chunks/app/api/v1/videos/extensions/route-c1f9120475dadd61.js +0 -1
  1185. package/app/.next/static/chunks/app/api/v1/videos/generations/route-c1f9120475dadd61.js +0 -1
  1186. package/app/.next/static/chunks/app/api/v1/web/fetch/route-c1f9120475dadd61.js +0 -1
  1187. package/app/.next/static/chunks/app/api/v1beta/models/[...path]/route-c1f9120475dadd61.js +0 -1
  1188. package/app/.next/static/chunks/app/api/v1beta/models/route-c1f9120475dadd61.js +0 -1
  1189. package/app/.next/static/chunks/app/api/version/route-c1f9120475dadd61.js +0 -1
  1190. package/app/.next/static/chunks/app/api/version/shutdown/route-c1f9120475dadd61.js +0 -1
  1191. package/app/.next/static/chunks/app/api/version/update/route-c1f9120475dadd61.js +0 -1
  1192. package/app/.next/static/chunks/app/landing/page-cc37244748faf1e0.js +0 -1
  1193. package/app/.next/static/chunks/app/login/page-8c5c8f2f058d5e2f.js +0 -1
  1194. package/app/.next/static/chunks/app/manifest.webmanifest/route-c1f9120475dadd61.js +0 -1
  1195. package/app/.next/static/chunks/app/page-c1f9120475dadd61.js +0 -1
  1196. package/app/.next/static/chunks/next/dist/client/components/builtin/app-error-c1f9120475dadd61.js +0 -1
  1197. package/app/.next/static/chunks/next/dist/client/components/builtin/forbidden-c1f9120475dadd61.js +0 -1
  1198. package/app/.next/static/chunks/next/dist/client/components/builtin/not-found-c1f9120475dadd61.js +0 -1
  1199. package/app/.next/static/chunks/next/dist/client/components/builtin/unauthorized-c1f9120475dadd61.js +0 -1
  1200. package/app/.next/static/css/4aeebd461f2f3aec.css +0 -1
  1201. package/app/.next/static/lo-GnJQxxRLdCvA2oang1/_buildManifest.js +0 -1
  1202. package/app/open-sse/executors/qwen.js +0 -129
  1203. package/app/open-sse/providers/registry/kimi-coding.js +0 -65
  1204. package/app/open-sse/providers/registry/qwen.js +0 -33
  1205. package/app/open-sse/utils/claudeHeaderCache.js +0 -70
  1206. /package/app/.next/static/{lo-GnJQxxRLdCvA2oang1 → q96GO6bFy0GB26MaN-AFa}/_ssgManifest.js +0 -0
@@ -0,0 +1,313 @@
1
+ // Quota auto-ping scheduler: warms 5h windows by sending tiny opt-in requests right after reset.
2
+ import "open-sse/index.js";
3
+
4
+ import { getSettings, getProviderConnections, updateProviderConnection } from "@/lib/localDb";
5
+ import { getClaudeUsage } from "open-sse/services/usage/claude.js";
6
+ import { getCodexUsage } from "open-sse/services/usage/codex.js";
7
+ import { getExecutor } from "open-sse/executors/index.js";
8
+ import { CLAUDE_CLI_SPOOF_HEADERS } from "open-sse/providers/shared.js";
9
+ import { proxyAwareFetch } from "open-sse/utils/proxyFetch.js";
10
+ import { resolveConnectionProxyConfig } from "@/lib/network/connectionProxy";
11
+ import { refreshAndUpdateCredentials } from "@/app/api/usage/[connectionId]/route.js";
12
+ import { QUOTA_AUTOPING_CONFIG } from "@/shared/constants/config";
13
+
14
+ const C = QUOTA_AUTOPING_CONFIG;
15
+ const CLAUDE_PING_URL = "https://api.anthropic.com/v1/messages?beta=true";
16
+
17
+ const providerHandlers = {
18
+ claude: {
19
+ getUsage: getClaudeUsage,
20
+ sendPing: sendClaudePing,
21
+ },
22
+ codex: {
23
+ getUsage: getCodexUsage,
24
+ sendPing: sendCodexPing,
25
+ },
26
+ };
27
+
28
+ // Survive Next.js hot reload and keep one scheduler per server process.
29
+ const g = (global.__quotaAutoPing ??= {
30
+ interval: null,
31
+ running: false,
32
+ resetCache: {},
33
+ failureCache: {},
34
+ });
35
+
36
+ function cacheKey(provider, connectionId) {
37
+ return `${provider}:${connectionId}`;
38
+ }
39
+
40
+ function normalizeResetKey(resetAt) {
41
+ const ms = new Date(resetAt).getTime();
42
+ if (!Number.isFinite(ms)) return resetAt;
43
+ return new Date(Math.floor(ms / 60000) * 60000).toISOString();
44
+ }
45
+
46
+ function getResetDriftMs(previousResetAt, nextResetAt) {
47
+ const previousMs = new Date(previousResetAt).getTime();
48
+ const nextMs = new Date(nextResetAt).getTime();
49
+ if (!Number.isFinite(previousMs) || !Number.isFinite(nextMs)) return 0;
50
+ return nextMs - previousMs;
51
+ }
52
+
53
+ function toFiniteNumber(value, fallback = null) {
54
+ if (typeof value === "number" && Number.isFinite(value)) return value;
55
+ if (typeof value === "string" && value.trim()) {
56
+ const parsed = Number(value);
57
+ if (Number.isFinite(parsed)) return parsed;
58
+ }
59
+ return fallback;
60
+ }
61
+
62
+ function isQuotaExhausted(quota) {
63
+ if (!quota || quota.unlimited === true) return false;
64
+ const remaining = toFiniteNumber(quota.remaining);
65
+ if (remaining !== null) return remaining <= 0;
66
+
67
+ const used = toFiniteNumber(quota.used);
68
+ const total = toFiniteNumber(quota.total);
69
+ return total !== null && total > 0 && used !== null && used >= total;
70
+ }
71
+
72
+ function wasPingedRecently(connection, intervalMs, nowMs = Date.now()) {
73
+ if (!intervalMs) return false;
74
+ const lastPingAtMs = new Date(connection.lastPingAt).getTime();
75
+ return Number.isFinite(lastPingAtMs) && nowMs - lastPingAtMs < intervalMs;
76
+ }
77
+
78
+ function isBlockingQuotaName(name, sessionKey) {
79
+ if (name === sessionKey) return false;
80
+ return !String(name).toLowerCase().includes("session");
81
+ }
82
+
83
+ function hasExhaustedBlockingQuota(quotas, sessionKey) {
84
+ return Object.entries(quotas || {}).some(([name, quota]) => isBlockingQuotaName(name, sessionKey) && isQuotaExhausted(quota));
85
+ }
86
+
87
+ function shouldPingForReset(providerConfig, cachedReset, resetAt, now) {
88
+ if (providerConfig.pingWhenResetAtSlides) {
89
+ return Boolean(cachedReset) && getResetDriftMs(cachedReset, resetAt) >= (providerConfig.resetAtDriftMs || 0);
90
+ }
91
+
92
+ const resetMs = new Date(resetAt).getTime();
93
+ return Number.isFinite(resetMs) && now >= resetMs - C.pingLeadMs;
94
+ }
95
+
96
+ function buildProxyOptions(cfg) {
97
+ return {
98
+ connectionProxyEnabled: cfg.connectionProxyEnabled === true,
99
+ connectionProxyUrl: cfg.connectionProxyUrl || "",
100
+ connectionNoProxy: cfg.connectionNoProxy || "",
101
+ vercelRelayUrl: cfg.vercelRelayUrl || "",
102
+ strictProxy: false,
103
+ };
104
+ }
105
+
106
+ async function sendClaudePing(connection, providerConfig, proxyOptions, deps) {
107
+ const res = await deps.proxyAwareFetch(CLAUDE_PING_URL, {
108
+ method: "POST",
109
+ headers: {
110
+ ...CLAUDE_CLI_SPOOF_HEADERS,
111
+ "Authorization": `Bearer ${connection.accessToken}`,
112
+ "content-type": "application/json",
113
+ },
114
+ body: JSON.stringify({
115
+ model: providerConfig.pingModel,
116
+ max_tokens: providerConfig.pingMaxTokens,
117
+ messages: [{ role: "user", content: providerConfig.pingText }],
118
+ }),
119
+ }, proxyOptions);
120
+ return res.ok;
121
+ }
122
+
123
+ function buildCodexPingInput(text) {
124
+ return [{
125
+ type: "message",
126
+ role: "user",
127
+ content: [{ type: "input_text", text }],
128
+ }];
129
+ }
130
+
131
+ async function drainResponseBody(response) {
132
+ if (typeof response?.text === "function") {
133
+ await response.text();
134
+ return;
135
+ }
136
+
137
+ const reader = response?.body?.getReader?.();
138
+ if (!reader) return;
139
+
140
+ try {
141
+ while (true) {
142
+ const { done } = await reader.read();
143
+ if (done) return;
144
+ }
145
+ } finally {
146
+ reader.releaseLock?.();
147
+ }
148
+ }
149
+
150
+ async function sendCodexPing(connection, providerConfig, proxyOptions, deps) {
151
+ const executor = deps.getExecutor("codex");
152
+ const { response } = await executor.execute({
153
+ model: providerConfig.pingModel,
154
+ stream: true,
155
+ credentials: {
156
+ accessToken: connection.accessToken,
157
+ connectionId: connection.id,
158
+ providerSpecificData: connection.providerSpecificData,
159
+ },
160
+ proxyOptions,
161
+ log: console,
162
+ body: {
163
+ model: providerConfig.pingModel,
164
+ input: buildCodexPingInput(providerConfig.pingText),
165
+ instructions: providerConfig.pingInstructions,
166
+ reasoning: providerConfig.pingReasoningEffort
167
+ ? { effort: providerConfig.pingReasoningEffort, summary: "auto" }
168
+ : undefined,
169
+ store: false,
170
+ stream: true,
171
+ },
172
+ });
173
+ if (!response.ok) {
174
+ try { await response.body?.cancel?.(); } catch { /* noop */ }
175
+ return false;
176
+ }
177
+
178
+ // Codex only starts the 5h window after the streaming response completes.
179
+ await drainResponseBody(response);
180
+ return true;
181
+ }
182
+
183
+ function shouldSkipAfterFailure(state, key, nowMs = Date.now()) {
184
+ const failedAt = state.failureCache[key];
185
+ return failedAt && nowMs - failedAt < C.failureCooldownMs;
186
+ }
187
+
188
+ async function pingConnection(conn, provider, providerConfig, handler, deps, state = g) {
189
+ const key = cacheKey(provider, conn.id);
190
+
191
+ // resetAt is stable for time-based windows; Codex polls every tick because inactive windows slide forward.
192
+ const cachedReset = state.resetCache[key];
193
+ if (!providerConfig.pingWhenResetAtSlides && cachedReset && Date.now() < new Date(cachedReset).getTime() - C.refreshAheadMs) return;
194
+
195
+ // Avoid hammering provider auth/quota endpoints if a ping failed recently.
196
+ if (shouldSkipAfterFailure(state, key)) return;
197
+
198
+ const proxyCfg = await deps.resolveConnectionProxyConfig(conn.providerSpecificData);
199
+ const proxyOptions = buildProxyOptions(proxyCfg);
200
+
201
+ let connection = conn;
202
+ try {
203
+ const r = await deps.refreshAndUpdateCredentials(connection, false, proxyOptions);
204
+ connection = r.connection;
205
+ } catch (e) {
206
+ state.failureCache[key] = Date.now();
207
+ console.warn(`[AutoPing] ${provider}:${conn.id}: refresh failed: ${e.message}`);
208
+ return;
209
+ }
210
+
211
+ const usage = await handler.getUsage(connection.accessToken, proxyOptions);
212
+ const quotas = usage?.quotas || {};
213
+ const quota = quotas?.[providerConfig.quotaKey];
214
+ const resetAt = quota?.resetAt;
215
+ if (!resetAt) return;
216
+
217
+ state.resetCache[key] = resetAt;
218
+
219
+ if (providerConfig.skipWhenBlockingQuotaExhausted && hasExhaustedBlockingQuota(quotas, providerConfig.quotaKey)) return;
220
+ if (isQuotaExhausted(quota)) return;
221
+
222
+ const now = Date.now();
223
+ const resetKey = normalizeResetKey(resetAt);
224
+ const lastPingedResetKey = connection.lastPingedResetKey || normalizeResetKey(connection.lastPingedResetAt);
225
+
226
+ // Claude waits for reset. Codex pings only when resetAt slides, which means the 5h window is inactive.
227
+ if (!shouldPingForReset(providerConfig, cachedReset, resetAt, now)) return;
228
+ if (wasPingedRecently(connection, providerConfig.minPingIntervalMs, now)) return;
229
+ if (lastPingedResetKey === resetKey) return;
230
+
231
+ const ok = await handler.sendPing(connection, providerConfig, proxyOptions, deps);
232
+ if (!ok) {
233
+ // Do not mark reset as pinged unless upstream accepted the tiny request.
234
+ state.failureCache[key] = Date.now();
235
+ console.warn(`[AutoPing] ${provider}:${connection.id}: ping failed (reset ${resetAt})`);
236
+ return;
237
+ }
238
+
239
+ delete state.failureCache[key];
240
+ await deps.updateProviderConnection(connection.id, {
241
+ lastPingedResetAt: resetAt,
242
+ lastPingedResetKey: resetKey,
243
+ lastPingAt: new Date().toISOString(),
244
+ updatedAt: new Date().toISOString(),
245
+ });
246
+ console.log(`[AutoPing] ${provider}:${connection.id}: ping sent (reset ${resetAt})`);
247
+ }
248
+
249
+ function createDefaultDeps() {
250
+ return {
251
+ getSettings,
252
+ getProviderConnections,
253
+ updateProviderConnection,
254
+ resolveConnectionProxyConfig,
255
+ refreshAndUpdateCredentials,
256
+ proxyAwareFetch,
257
+ getExecutor,
258
+ };
259
+ }
260
+
261
+ export async function runQuotaAutoPingTick(deps = createDefaultDeps(), state = g) {
262
+ if (state.running) return;
263
+ state.running = true;
264
+ try {
265
+ const settings = await deps.getSettings();
266
+
267
+ for (const [provider, providerConfig] of Object.entries(C.providers)) {
268
+ const handler = providerHandlers[provider];
269
+ if (!handler) continue;
270
+
271
+ const enabledMap = settings?.[providerConfig.settingsKey]?.connections || {};
272
+ if (Object.keys(enabledMap).length === 0) continue;
273
+
274
+ const conns = await deps.getProviderConnections({ provider, isActive: true });
275
+ const targets = conns.filter((conn) => conn.authType === "oauth" && enabledMap[conn.id] === true);
276
+ for (const conn of targets) {
277
+ try {
278
+ await pingConnection(conn, provider, providerConfig, handler, deps, state);
279
+ } catch (e) {
280
+ state.failureCache[cacheKey(provider, conn.id)] = Date.now();
281
+ console.warn(`[AutoPing] ${provider}:${conn.id}: ${e.message}`);
282
+ }
283
+ }
284
+ }
285
+ } catch (e) {
286
+ console.warn("[AutoPing] tick error:", e.message);
287
+ } finally {
288
+ state.running = false;
289
+ }
290
+ }
291
+
292
+ export function startQuotaAutoPing() {
293
+ if (g.interval) return;
294
+ console.log("[AutoPing] scheduler started");
295
+ runQuotaAutoPingTick().catch(() => {});
296
+ g.interval = setInterval(() => { runQuotaAutoPingTick().catch(() => {}); }, C.tickIntervalMs);
297
+ if (g.interval.unref) g.interval.unref();
298
+ }
299
+
300
+ export function stopQuotaAutoPing() {
301
+ if (!g.interval) return;
302
+ clearInterval(g.interval);
303
+ g.interval = null;
304
+ console.log("[AutoPing] scheduler stopped");
305
+ }
306
+
307
+ export function configureQuotaAutoPing(settings) {
308
+ const enabled = Object.values(C.providers).some((providerConfig) =>
309
+ Object.values(settings?.[providerConfig.settingsKey]?.connections || {}).some(Boolean)
310
+ );
311
+ if (enabled) startQuotaAutoPing();
312
+ else stopQuotaAutoPing();
313
+ }
@@ -0,0 +1,196 @@
1
+ // Background proactive OAuth token refresh — independent of inbound requests.
2
+ // Fail-open everywhere: tick errors and per-connection failures never kill the interval.
3
+
4
+ import * as log from "../utils/logger.js";
5
+ import { getRefreshLeadMs } from "open-sse/services/tokenRefresh.js";
6
+ import { getCredentialExpiryMs } from "open-sse/services/oauthCredentialManager.js";
7
+
8
+ /** Refresh when expiry is within 30 minutes (or the provider on-request lead, whichever larger). */
9
+ export const BACKGROUND_REFRESH_LEAD_MS = 30 * 60 * 1000;
10
+ const DEFAULT_INTERVAL_MS = 5 * 60 * 1000;
11
+ const INITIAL_DELAY_MS = 10 * 1000;
12
+
13
+ let started = false;
14
+ let intervalHandle = null;
15
+ let initialTimeoutHandle = null;
16
+ let tickRunning = false;
17
+
18
+ function isTruthyEnv(value) {
19
+ if (value == null || value === "") return false;
20
+ const v = String(value).trim().toLowerCase();
21
+ return v === "1" || v === "true" || v === "yes" || v === "on";
22
+ }
23
+
24
+ function isNonServerRuntime() {
25
+ if (typeof window !== "undefined") return true;
26
+ const phase = process.env.NEXT_PHASE || "";
27
+ if (
28
+ phase === "phase-production-build" ||
29
+ phase === "phase-export" ||
30
+ phase === "phase-static"
31
+ ) {
32
+ return true;
33
+ }
34
+ // Next.js build / static generation markers
35
+ if (process.env.NEXT_RUNTIME === "edge") return true;
36
+ return false;
37
+ }
38
+
39
+ /**
40
+ * Pure selection: OAuth connections with a refreshToken whose access token
41
+ * expires within max(provider on-request lead, BACKGROUND_REFRESH_LEAD_MS).
42
+ *
43
+ * @param {Array<object>} connections
44
+ * @param {number} [nowMs]
45
+ * @returns {Array<object>}
46
+ */
47
+ export function selectConnectionsNeedingRefresh(connections, nowMs = Date.now()) {
48
+ if (!Array.isArray(connections) || connections.length === 0) return [];
49
+
50
+ const out = [];
51
+ for (const conn of connections) {
52
+ if (!conn) continue;
53
+
54
+ const authType = String(conn.authType || "").toLowerCase().replace(/_/g, "");
55
+ if (authType !== "oauth") continue;
56
+ if (!conn.refreshToken) continue;
57
+
58
+ const expiresAtMs = getCredentialExpiryMs(conn);
59
+ if (expiresAtMs === null) continue;
60
+
61
+ const providerLead = getRefreshLeadMs(conn.provider);
62
+ const leadMs = Math.max(
63
+ Number.isFinite(providerLead) ? providerLead : 0,
64
+ BACKGROUND_REFRESH_LEAD_MS
65
+ );
66
+
67
+ if (expiresAtMs - nowMs < leadMs) {
68
+ out.push(conn);
69
+ }
70
+ }
71
+ return out;
72
+ }
73
+
74
+ async function loadActiveConnections() {
75
+ // Dynamic import avoids a circular load with the app graph at module eval time.
76
+ // n9router persists provider connections in lowdb/db.json, not SQLite.
77
+ const { getProviderConnections } = await import("../../lib/localDb.js");
78
+ return getProviderConnections({ isActive: true });
79
+ }
80
+
81
+ async function refreshOne(connection) {
82
+ const { checkAndRefreshToken } = await import("./tokenRefresh.js");
83
+ return checkAndRefreshToken(connection.provider, connection, { force: true });
84
+ }
85
+
86
+ /**
87
+ * One scheduler tick. Fail-open at top level and per connection.
88
+ * @param {{ loadConnections?: Function, refreshConnection?: Function }} [deps]
89
+ */
90
+ export async function runBackgroundTokenRefreshTick(deps = {}) {
91
+ if (tickRunning) {
92
+ log.debug("BG_TOKEN_REFRESH", "Tick already running, skip");
93
+ return;
94
+ }
95
+ tickRunning = true;
96
+ try {
97
+ const load = deps.loadConnections || loadActiveConnections;
98
+ const refresh = deps.refreshConnection || refreshOne;
99
+
100
+ const connections = await load();
101
+ const due = selectConnectionsNeedingRefresh(connections, Date.now());
102
+
103
+ if (due.length === 0) {
104
+ log.debug("BG_TOKEN_REFRESH", "No connections due for refresh", {
105
+ active: Array.isArray(connections) ? connections.length : 0,
106
+ });
107
+ return;
108
+ }
109
+
110
+ log.info("BG_TOKEN_REFRESH", "Refreshing due OAuth connections", {
111
+ due: due.length,
112
+ ids: due.map((c) => c.id).filter(Boolean),
113
+ });
114
+
115
+ await Promise.allSettled(
116
+ due.map(async (conn) => {
117
+ try {
118
+ await refresh(conn);
119
+ log.info("BG_TOKEN_REFRESH", "Connection refresh finished", {
120
+ id: conn.id,
121
+ provider: conn.provider,
122
+ });
123
+ } catch (err) {
124
+ log.warn("BG_TOKEN_REFRESH", "Connection refresh failed (swallowed)", {
125
+ id: conn?.id,
126
+ provider: conn?.provider,
127
+ error: err?.message ?? String(err),
128
+ });
129
+ }
130
+ })
131
+ );
132
+ } catch (err) {
133
+ log.warn("BG_TOKEN_REFRESH", "Tick failed (swallowed)", {
134
+ error: err?.message ?? String(err),
135
+ });
136
+ } finally {
137
+ tickRunning = false;
138
+ }
139
+ }
140
+
141
+ /**
142
+ * Start the background interval. Safe to call multiple times (no-op if already started).
143
+ * @param {{ intervalMs?: number }} [opts]
144
+ * @returns {boolean} true if started this call
145
+ */
146
+ export function startBackgroundTokenRefresh({ intervalMs } = {}) {
147
+ if (started) return false;
148
+ if (isTruthyEnv(process.env.DISABLE_BACKGROUND_TOKEN_REFRESH)) {
149
+ log.info("BG_TOKEN_REFRESH", "Disabled via DISABLE_BACKGROUND_TOKEN_REFRESH");
150
+ return false;
151
+ }
152
+ if (isNonServerRuntime()) {
153
+ log.debug("BG_TOKEN_REFRESH", "Skip start outside long-running server runtime");
154
+ return false;
155
+ }
156
+
157
+ started = true;
158
+ const period = Number.isFinite(intervalMs) && intervalMs > 0 ? intervalMs : DEFAULT_INTERVAL_MS;
159
+
160
+ const safeTick = () => {
161
+ runBackgroundTokenRefreshTick().catch((err) => {
162
+ log.warn("BG_TOKEN_REFRESH", "Unhandled tick rejection (swallowed)", {
163
+ error: err?.message ?? String(err),
164
+ });
165
+ });
166
+ };
167
+
168
+ // First pass soon after boot so idle connections don't wait a full interval.
169
+ initialTimeoutHandle = setTimeout(safeTick, INITIAL_DELAY_MS);
170
+ if (initialTimeoutHandle.unref) initialTimeoutHandle.unref();
171
+
172
+ intervalHandle = setInterval(safeTick, period);
173
+ if (intervalHandle.unref) intervalHandle.unref();
174
+
175
+ log.info("BG_TOKEN_REFRESH", "Scheduler started", {
176
+ intervalMs: period,
177
+ initialDelayMs: INITIAL_DELAY_MS,
178
+ leadMs: BACKGROUND_REFRESH_LEAD_MS,
179
+ });
180
+ return true;
181
+ }
182
+
183
+ export function stopBackgroundTokenRefresh() {
184
+ if (initialTimeoutHandle) {
185
+ clearTimeout(initialTimeoutHandle);
186
+ initialTimeoutHandle = null;
187
+ }
188
+ if (intervalHandle) {
189
+ clearInterval(intervalHandle);
190
+ intervalHandle = null;
191
+ }
192
+ if (started) {
193
+ started = false;
194
+ log.info("BG_TOKEN_REFRESH", "Scheduler stopped");
195
+ }
196
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "n9router",
3
- "version": "0.4.50",
3
+ "version": "0.4.52",
4
4
  "description": "Self-hosted AI routing gateway — local proxy for Claude, Gemini, OpenAI and 40+ providers",
5
5
  "keywords": [
6
6
  "ai",
@@ -1 +0,0 @@
1
- "use strict";exports.id=1051,exports.ids=[1051],exports.modules={19225:(a,b,c)=>{a.exports=c(44870)},80238:(a,b,c)=>{c.d(b,{Pt:()=>m,Tr:()=>n,c1:()=>k,kI:()=>o,vk:()=>l});var d=c(89718),e=c(39326),f=c(12557),g=c(3662),h=c(40615),i=c(7803);let j=Promise.resolve();async function k(a,b=null,c=null,g={}){let l,m=b instanceof Set?b:b?new Set([b]):new Set,n=g?.preferredConnectionId||null,o=j;j=new Promise(a=>{l=a});try{let b;await o;let g=(0,h.rs)(a);if(h.IS[g]?.noAuth){let a=((await (0,d.getSettings)()).providerStrategies||{})[g]||{},b=a.rotateStrategy||"none",c=a.proxyPoolId||null;if("none"!==b){let a=(await (0,d.ui)({isActive:!0})).filter(a=>a.proxyUrl).map(a=>a.id);c=(0,e.p)(a,b,g)}let f=await (0,e.B)({proxyPoolId:c||""});return{id:"noauth",connectionName:"Public",isActive:!0,accessToken:"public",providerSpecificData:{connectionProxyEnabled:f.connectionProxyEnabled,connectionProxyUrl:f.connectionProxyUrl,connectionNoProxy:f.connectionNoProxy,connectionProxyPoolId:f.proxyPoolId||null,vercelRelayUrl:f.vercelRelayUrl||""}}}let j=await (0,d.getProviderConnections)({provider:g,isActive:!0});if(i.debug("AUTH",`${a} | total connections: ${j.length}, excludeIds: ${m.size>0?[...m].join(","):"none"}, model: ${c||"any"}`),0===j.length)return i.warn("AUTH",`No credentials for ${a}`),null;let k=j.filter(a=>!(m.has(a.id)||(0,f.Bl)(a,c)));if(i.debug("AUTH",`${a} | available: ${k.length}/${j.length}`),j.forEach(a=>{let b=m.has(a.id),d=(0,f.Bl)(a,c);if(b||d){let e=(0,f.kJ)(a);i.debug("AUTH",` → ${a.id?.slice(0,8)} | ${b?"excluded":""} ${d?`modelLocked(${c}) until ${e}`:""}`)}}),0===k.length){let b=j.filter(a=>(0,f.Bl)(a,c)),d=b.map(a=>(0,f.kJ)(a)).filter(Boolean).sort()[0]||null;if(d){let e=b[0];return i.warn("AUTH",`${a} | all ${j.length} accounts locked for ${c||"all"} (${(0,f.Qo)(d)}) | lastError=${e?.lastError?.slice(0,50)}`),{allRateLimited:!0,retryAfter:d,retryAfterHuman:(0,f.Qo)(d),lastError:e?.lastError||null,lastErrorCode:e?.errorCode||null}}return i.warn("AUTH",`${a} | all ${j.length} accounts unavailable`),null}let l=await (0,d.getSettings)(),p=(l.providerStrategies||{})[g]||{},q=p.fallbackStrategy||l.fallbackStrategy||"fill-first";if(n&&(b=k.find(a=>a.id===n))&&i.info("AUTH",`${a} | pinned to ${b.id?.slice(0,8)} (${b.name||b.email||"unnamed"})`),b);else if("round-robin"===q){let a=p.stickyRoundRobinLimit||l.stickyRoundRobinLimit||3,c=[...k].sort((a,b)=>a.lastUsedAt||b.lastUsedAt?a.lastUsedAt?b.lastUsedAt?new Date(b.lastUsedAt)-new Date(a.lastUsedAt):-1:1:(a.priority||999)-(b.priority||999))[0],e=c?.consecutiveUseCount||0;c&&c.lastUsedAt&&e<a?(b=c,await (0,d.updateProviderConnection)(b.id,{lastUsedAt:new Date().toISOString(),consecutiveUseCount:(b.consecutiveUseCount||0)+1})):(b=[...k].sort((a,b)=>a.lastUsedAt||b.lastUsedAt?a.lastUsedAt?b.lastUsedAt?new Date(a.lastUsedAt)-new Date(b.lastUsedAt):1:-1:(a.priority||999)-(b.priority||999))[0],await (0,d.updateProviderConnection)(b.id,{lastUsedAt:new Date().toISOString(),consecutiveUseCount:1}))}else b=k[0];let r=await (0,e.B)(b.providerSpecificData||{});return{authType:b.authType,apiKey:b.apiKey,accessToken:b.accessToken,refreshToken:b.refreshToken,idToken:b.idToken,expiresAt:b.expiresAt,expiresIn:b.expiresIn,lastRefreshAt:b.lastRefreshAt,projectId:b.projectId,connectionName:b.displayName||b.name||b.email||b.id,copilotToken:b.providerSpecificData?.copilotToken,providerSpecificData:{...b.providerSpecificData||{},connectionProxyEnabled:r.connectionProxyEnabled,connectionProxyUrl:r.connectionProxyUrl,connectionNoProxy:r.connectionNoProxy,connectionProxyPoolId:r.proxyPoolId||null,vercelRelayUrl:r.vercelRelayUrl||""},connectionId:b.id,testStatus:b.testStatus,lastError:b.lastError,antigravity503RetryCount:null!=b.antigravity503RetryCount?b.antigravity503RetryCount:l.antigravity503RetryCount??null,kiroRetryCount:null!=b.kiroRetryCount?b.kiroRetryCount:l.kiroRetryCount??null,_connection:b}}finally{l&&l()}}async function l(a,b,c,e=null,h=null,j=null){let k,m,n;if(!a||"noauth"===a)return{shouldFallback:!1,cooldownMs:0};let o=(await (0,d.getProviderConnections)({provider:e})).find(b=>b.id===a),p=o?.backoffLevel||0;if(j&&j>Date.now()?(k=!0,m=Math.min(j-Date.now(),g.fh),n=0):{shouldFallback:k,cooldownMs:m,newBackoffLevel:n}=(0,f.hk)(b,c,p),!k)return{shouldFallback:!1,cooldownMs:0};let q="string"==typeof c?c.slice(0,100):"Provider error",r=(0,f.S5)(h,m);await (0,d.updateProviderConnection)(a,{...r,testStatus:"unavailable",lastError:q,errorCode:b,lastErrorAt:new Date().toISOString(),backoffLevel:n??p});let s=Object.keys(r)[0],t=o?.displayName||o?.name||o?.email||a.slice(0,8);return i.warn("AUTH",`${t} locked ${s} for ${Math.round(m/1e3)}s [${b}]`),e&&b&&q&&console.error(`❌ ${e} [${b}]: ${q}`),{shouldFallback:!0,cooldownMs:m}}async function m(a,b,c=null){if(!a||"noauth"===a)return;let e=b._connection||b,f=Date.now(),g=Object.keys(e).filter(a=>a.startsWith("modelLock_"));if(!e.testStatus&&!e.lastError&&0===g.length)return;let h=g.filter(a=>{if(c&&a===`modelLock_${c}`||c&&"modelLock___all"===a)return!0;let b=e[a];return b&&new Date(b).getTime()<=f});if(0===h.length&&"unavailable"!==e.testStatus&&!e.lastError)return;let i=g.filter(a=>{if(h.includes(a))return!1;let b=e[a];return b&&new Date(b).getTime()>f}),j=Object.fromEntries(h.map(a=>[a,null]));0===i.length&&Object.assign(j,{testStatus:"active",lastError:null,lastErrorAt:null,backoffLevel:0}),await (0,d.updateProviderConnection)(a,j)}function n(a){let b=a.headers.get("Authorization");if(b?.startsWith("Bearer "))return b.slice(7);let c=a.headers.get("x-api-key");return c||null}async function o(a){return!!a&&await (0,d.ek)(a)}},92280:(a,b,c)=>{Object.defineProperty(b,"I",{enumerable:!0,get:function(){return g}});let d=c(28208),e=c(47617),f=c(62018);async function g(a,b,c,g){if((0,d.isNodeNextResponse)(b)){var h;b.statusCode=c.status,b.statusMessage=c.statusText;let d=["set-cookie","www-authenticate","proxy-authenticate","vary"];null==(h=c.headers)||h.forEach((a,c)=>{if("x-middleware-set-cookie"!==c.toLowerCase())if("set-cookie"===c.toLowerCase())for(let d of(0,f.splitCookiesString)(a))b.appendHeader(c,d);else{let e=void 0!==b.getHeader(c);(d.includes(c.toLowerCase())||!e)&&b.appendHeader(c,a)}});let{originalResponse:i}=b;c.body&&"HEAD"!==a.method?await (0,e.pipeToNodeResponse)(c.body,i,g):i.end()}}}};
@@ -1 +0,0 @@
1
- "use strict";exports.id=1185,exports.ids=[1185],exports.modules={12557:(a,b,c)=>{c.d(b,{Bl:()=>j,Qo:()=>f,S5:()=>l,hk:()=>e,kJ:()=>k});var d=c(3662);function e(a,b,c=0){let f=b?("string"==typeof b?b:JSON.stringify(b)).toLowerCase():"";for(let b of d.t2)if(b.text&&f&&f.includes(b.text)||b.status&&b.status===a){if(b.backoff){let a=Math.min(c+1,d.EQ.maxLevel);return{shouldFallback:!0,cooldownMs:function(a=0){let b=Math.max(0,a-1);return Math.min(d.EQ.base*Math.pow(2,b),d.EQ.max)}(a),newBackoffLevel:a}}return{shouldFallback:!0,cooldownMs:b.cooldownMs}}return{shouldFallback:!0,cooldownMs:d.wf}}function f(a){if(!a)return"";let b=new Date(a).getTime()-Date.now();if(b<=0)return"reset after 0s";let c=Math.ceil(b/1e3),d=Math.floor(c/3600),e=Math.floor(c%3600/60),f=c%60,g=[];return d>0&&g.push(`${d}h`),e>0&&g.push(`${e}m`),(f>0||0===g.length)&&g.push(`${f}s`),`reset after ${g.join(" ")}`}let g="modelLock_",h=`${g}__all`;function i(a){return a?`${g}${a}`:h}function j(a,b){let c=a[i(b)]||a[h];return!!c&&new Date(c).getTime()>Date.now()}function k(a){if(!a)return null;let b=null,c=Date.now();for(let[d,e]of Object.entries(a)){if(!d.startsWith(g)||!e)continue;let a=new Date(e).getTime();a<=c||(!b||a<b)&&(b=a)}return b?new Date(b).toISOString():null}function l(a,b){return{[i(a)]:new Date(Date.now()+b).toISOString()}}},20669:(a,b,c)=>{c.d(b,{g:()=>w,s:()=>x});var d=c(80238),e=c(89718),f=c(38775),g=c(43659),h=c(41004),i=c(8521),j=c(26070);let k=Number(process.env.VIDEO_FETCH_TIMEOUT_MS||12e4),l=new Set(["generations","edits","extensions"]);function m(a){return j.B$[a]?.videoConfig||null}function n(a,b=null){if(!a)return a;let c=String(a).replace(/Bearer\s+[A-Za-z0-9._~+/=-]{8,}/gi,"Bearer [redacted]");for(let a of["accessToken","refreshToken","apiKey"]){let d=b?.[a];"string"==typeof d&&d.length>=8&&(c=c.split(d).join("[redacted]"))}return c}async function o({provider:a,action:b=null,requestId:c=null,rawBody:d=null,contentType:e=null,idempotencyKey:f=null,credentials:j,signal:p,timeoutMs:q=k,log:r,onCredentialsRefreshed:s}){let t,u,v,w=m(a);if(!w)return(0,g.A1)(h.gx.BAD_REQUEST,`Provider '${a}' does not support video generation`);if(!c&&!l.has(b))return(0,g.A1)(h.gx.BAD_REQUEST,`Unknown video action: ${b}`);let x=c?"GET":"POST",y=(u=w.baseUrl.replace(/\/$/,""),c?`${u}/${encodeURIComponent(c)}`:`${u}/${b}`),z=(v="function"==typeof AbortSignal?.timeout?AbortSignal.timeout(q):null,p&&v&&"function"==typeof AbortSignal.any?AbortSignal.any([p,v]):p||v||void 0),A=a=>fetch(y,{method:x,headers:function({token:a,contentType:b,idempotencyKey:c}){let d={Accept:"application/json"};return a&&(d.Authorization=`Bearer ${a}`),b&&(d["Content-Type"]=b),c&&(d["Idempotency-Key"]=c),d}({token:a,contentType:"POST"===x?e:null,idempotencyKey:"POST"===x?f:null}),body:"POST"===x?d:void 0,signal:z});try{t=await A(j?.accessToken||j?.apiKey)}catch(b){if(b?.name==="AbortError"||b?.name==="TimeoutError")return(0,g.A1)(h.gx.REQUEST_TIMEOUT,`[${a}] video ${x} aborted: ${b.message}`);return(0,g.A1)(h.gx.BAD_GATEWAY,n(`[${a}] video upstream fetch failed: ${b.message}`,j))}if((t.status===h.gx.UNAUTHORIZED||t.status===h.gx.FORBIDDEN)&&j?.refreshToken){let b=null;try{b=await (0,i.$B)(a,j,r)}catch(b){r?.warn?.("TOKEN",`${a} | video refresh error: ${n(b.message,j)}`)}if(b?.accessToken){r?.info?.("TOKEN",`${a.toUpperCase()} | refreshed for video ${x}`),Object.assign(j,b),s&&await s(b);try{await t.body?.cancel?.()}catch{}try{t=await A(j.accessToken||j.apiKey)}catch(b){return(0,g.A1)(h.gx.BAD_GATEWAY,n(`[${a}] video retry after refresh failed: ${b.message}`,j))}}else r?.warn?.("TOKEN",`${a.toUpperCase()} | video refresh failed — account needs re-auth`)}let B=await t.text().catch(()=>"");if(!t.ok){let b=n(B||`HTTP ${t.status}`,j);return(0,g.A1)(t.status,`[${a}] ${b.slice(0,2e3)}`)}return{success:!0,response:new Response(B,{status:t.status,headers:{"Content-Type":t.headers.get("content-type")||"application/json","Access-Control-Allow-Origin":"*"}})}}var p=c(67828),q=c(7803);let r=new Set([h.gx.UNAUTHORIZED,h.gx.FORBIDDEN,h.gx.RATE_LIMITED]);async function s(a){let b=(0,d.Tr)(a);if((await (0,e.getSettings)()).requireApiKey){if(!b)return(0,g.yj)(h.gx.UNAUTHORIZED,"Missing API key");if(!await (0,d.kI)(b))return(0,g.yj)(h.gx.UNAUTHORIZED,"Invalid API key")}return null}async function t(a){let b=a.headers.get("content-type")||"";if(b.includes("application/json")){let c,d=await a.text();try{c=JSON.parse(d)}catch{return{error:(0,g.yj)(h.gx.BAD_REQUEST,"Invalid JSON body")}}return{raw:d,parsed:c,contentType:b}}return{raw:Buffer.from(await a.arrayBuffer()),parsed:null,contentType:b}}async function u(a){if(!a?.model)return{provider:"xai",model:null};let b=String(a.model),c=await (0,f.mA)(b);return c.provider?m(c.provider)?{provider:c.provider,model:c.model}:b.includes("/")?{error:(0,g.yj)(h.gx.BAD_REQUEST,`Provider '${c.provider}' does not support video generation`)}:{provider:"xai",model:b}:{error:(0,g.yj)(h.gx.BAD_REQUEST,"Combos are not supported for video generation")}}function v(a,b){if(!b)return a;let c=new Headers(a.headers);return c.set("x-9router-connection-id",String(b)),new Response(a.body,{status:a.status,headers:c})}async function w(a,b){let c=await s(a);if(c)return c;let e=await t(a);if(e.error)return e.error;let f=await u(e.parsed);if(f.error)return f.error;let{provider:i,model:j}=f,k=e.raw;e.parsed&&j&&e.parsed.model!==j&&(k=JSON.stringify({...e.parsed,model:j}));let l=a.headers.get("x-connection-id")||null,m=a.headers.get("idempotency-key")||null,w=new Set,x=null,y=null;for(;;){let c=await (0,d.c1)(i,w,j,{preferredConnectionId:l});if(!c||c.allRateLimited){if(c?.allRateLimited){let a=x||c.lastError||"Unavailable",b=y||Number(c.lastErrorCode)||h.gx.SERVICE_UNAVAILABLE;return(0,g.wO)(b,`[${i}/${j||"video"}] ${a}`,c.retryAfter,c.retryAfterHuman)}if(0===w.size)return(0,g.yj)(h.gx.BAD_REQUEST,`No credentials for provider: ${i}`);return(0,g.yj)(y||h.gx.SERVICE_UNAVAILABLE,x||"All accounts unavailable")}let f=await (0,p.eU)(i,c),s=await o({provider:i,action:b,rawBody:k,contentType:e.contentType||null,idempotencyKey:m,credentials:f,signal:a.signal,log:q,onCredentialsRefreshed:async a=>{await (0,p.vN)(c.connectionId,{accessToken:a.accessToken,refreshToken:a.refreshToken,providerSpecificData:a.providerSpecificData,testStatus:"active"})}});if(s.success)return await (0,d.Pt)(c.connectionId,c,j),q.info("VIDEO",`${i.toUpperCase()} | ${b} accepted (connection ${c.connectionId})`),v(s.response,c.connectionId);let{shouldFallback:t}=await (0,d.vk)(c.connectionId,s.status,n(s.error,f),i,j);if(t&&r.has(s.status)){w.add(c.connectionId),x=s.error,y=s.status;continue}return s.response}}async function x(a,b){let c=await s(a);if(c)return c;if(!b)return(0,g.yj)(h.gx.BAD_REQUEST,"Missing video request id");let e=a.headers.get("x-connection-id")||null,f=await (0,d.c1)("xai",null,null,{preferredConnectionId:e});if(!f||f.allRateLimited)return(0,g.yj)(h.gx.BAD_REQUEST,"No credentials for provider: xai");let i=await (0,p.eU)("xai",f),j=await o({provider:"xai",requestId:b,credentials:i,signal:a.signal,log:q,onCredentialsRefreshed:async a=>{await (0,p.vN)(f.connectionId,{accessToken:a.accessToken,refreshToken:a.refreshToken,providerSpecificData:a.providerSpecificData,testStatus:"active"})}});return j.success?(await (0,d.Pt)(f.connectionId,f,null),v(j.response,f.connectionId)):(await (0,d.vk)(f.connectionId,j.status,n(j.error,i),"xai",null),j.response)}},38775:(a,b,c)=>{c.d(b,{d_:()=>j,mA:()=>i});var d=c(89718),e=c(40669),f=c(52056);let g={xmtp:"xiaomi-tokenplan","xiaomi-tokenplan":"xiaomi-tokenplan"},h=new Set(Object.keys(g));for(let a of f.A)for(let b of(h.add(a.id),a.alias&&h.add(a.alias),a.aliases||[]))h.add(b);async function i(a){let b,c=(b=(0,e.Xh)(a),b?.providerAlias&&g[b.providerAlias]?{...b,provider:g[b.providerAlias]}:b);if(!c.isAlias){if(!h.has(c.providerAlias)){let a=(await (0,d.getProviderNodes)({type:"openai-compatible"})).find(a=>a.prefix===c.providerAlias);if(a)return{provider:a.id,model:c.model};let b=(await (0,d.getProviderNodes)({type:"anthropic-compatible"})).find(a=>a.prefix===c.providerAlias);if(b)return{provider:b.id,model:c.model};let e=(await (0,d.getProviderNodes)({type:"custom-embedding"})).find(a=>a.prefix===c.providerAlias);if(e)return{provider:e.id,model:c.model}}return{provider:c.provider,model:c.model}}return await (0,d.Dj)(c.model)?{provider:null,model:c.model}:(0,e.js)(a,d.OM)}async function j(a){if(a.includes("/"))return null;let b=await (0,d.Dj)(a);return b&&b.models&&b.models.length>0?b.models:null}},40669:(a,b,c)=>{c.d(b,{Xh:()=>g,js:()=>i});var d=c(52056);let e={el:"elevenlabs",jina:"jina-ai","jina-ai":"jina-ai",polly:"aws-polly","aws-polly":"aws-polly"};for(let a of d.A)for(let b of(e[a.id]=a.id,a.alias&&(e[a.alias]=a.id),a.aliases||[]))e[b]=a.id;let f={"grok-build":"gcli/grok-build"};function g(a){if(!a)return{provider:null,model:null,isAlias:!1,providerAlias:null};if(a.includes("/")){let b=a.indexOf("/"),c=a.slice(0,b),d=a.slice(b+1);return{provider:e[c]||c,model:d,isAlias:!1,providerAlias:c}}return{provider:null,model:a,isAlias:!0,providerAlias:null}}function h(a,b){var c,d;if(!b)return null;let f=b[a];if(!f)return null;if("string"==typeof f&&f.includes("/")){let a=f.indexOf("/");return{provider:e[c=f.slice(0,a)]||c,model:f.slice(a+1)}}return"object"==typeof f&&f.provider&&f.model?{provider:e[d=f.provider]||d,model:f.model}:null}async function i(a,b){let c=g(a);if(!c.isAlias)return{provider:c.provider,model:c.model};let d="function"==typeof b?await b():b,e=h(c.model,d)||h(c.model,f);return e||{provider:function(a){if(!a)return"openai";let b=a.toLowerCase();return j.find(([a])=>a.test(b))?.[1]||"openai"}(c.model),model:c.model}}let j=[[/^claude-/,"anthropic"],[/^gemini-/,"gemini"],[/^gpt-/,"openai"],[/^o[134]/,"openai"],[/^deepseek-/,"openrouter"]]},43659:(a,b,c)=>{c.d(b,{A1:()=>g,lR:()=>i,wO:()=>h,yj:()=>e,zL:()=>f});var d=c(3662);function e(a,b){let c;return new Response(JSON.stringify((c=d.LY[a]||(a>=500?{type:"server_error",code:"internal_server_error"}:{type:"invalid_request_error",code:""}),{error:{message:b||d.O[a]||"An error occurred",type:c.type,code:c.code}})),{status:a,headers:{"Content-Type":"application/json","Access-Control-Allow-Origin":"*"}})}async function f(a,b=null){let c="";try{c=await a.text()}catch{c=""}if(b&&"function"==typeof b.parseError)try{let e=b.parseError(a,c);if(e&&"object"==typeof e){let b=e.message||d.O[a.status]||`Upstream error: ${a.status}`;return{statusCode:e.status||a.status,message:b,resetsAtMs:e.resetsAtMs}}}catch{}let e="";try{let a=JSON.parse(c);e=a.error?.message||a.message||a.error||c}catch{e=c}let g=("string"==typeof e?e:JSON.stringify(e))||d.O[a.status]||`Upstream error: ${a.status}`;return{statusCode:a.status,message:g}}function g(a,b,c){return{success:!1,status:a,error:b,resetsAtMs:c,response:e(a,b)}}function h(a,b,c,d){let e=Math.max(Math.ceil((new Date(c).getTime()-Date.now())/1e3),1);return new Response(JSON.stringify({error:{message:`${b} (${d})`}}),{status:a,headers:{"Content-Type":"application/json","Retry-After":String(e)}})}function i(a,b,c,d){let e=d||a.code||"FETCH_FAILED",f=a.message||"Unknown error",g=a.cause?.code,h=a.cause?.message,i=g||h?` (cause: ${[g,h].filter(Boolean).join(": ")})`:"";return`[${e}]: ${f}${i}`}}};
@@ -1 +0,0 @@
1
- exports.id=1806,exports.ids=[615,1806,5699],exports.modules={3662:(a,b,c)=>{"use strict";c.d(b,{EQ:()=>f,LY:()=>d,O:()=>e,fh:()=>h,t2:()=>i,wf:()=>g});let d={400:{type:"invalid_request_error",code:"bad_request"},401:{type:"authentication_error",code:"invalid_api_key"},402:{type:"billing_error",code:"payment_required"},403:{type:"permission_error",code:"insufficient_quota"},404:{type:"invalid_request_error",code:"model_not_found"},406:{type:"invalid_request_error",code:"model_not_supported"},429:{type:"rate_limit_error",code:"rate_limit_exceeded"},500:{type:"server_error",code:"internal_server_error"},502:{type:"server_error",code:"bad_gateway"},503:{type:"server_error",code:"service_unavailable"},504:{type:"server_error",code:"gateway_timeout"}},e={400:"Bad request",401:"Invalid API key provided",402:"Payment required",403:"You exceeded your current quota",404:"Model not found",406:"Model not supported",429:"Rate limit exceeded",500:"Internal server error",502:"Bad gateway - upstream provider error",503:"Service temporarily unavailable",504:"Gateway timeout"},f={base:2e3,max:3e5,maxLevel:15},g=3e4,h=18e5,i=[{text:"no credentials",cooldownMs:12e4},{text:"request not allowed",cooldownMs:5e3},{text:"improperly formed request",cooldownMs:12e4},{text:"rate limit",backoff:!0},{text:"too many requests",backoff:!0},{text:"quota exceeded",backoff:!0},{text:"capacity",backoff:!0},{text:"overloaded",backoff:!0},{status:401,cooldownMs:12e4},{status:402,cooldownMs:12e4},{status:403,cooldownMs:12e4},{status:404,cooldownMs:12e4},{status:429,backoff:!0}]},21719:(a,b,c)=>{"use strict";c.d(b,{g:()=>m,l:()=>l});var d=c(79646),e=c(33873),f=c.n(e),g=c(29021),h=c.n(g),i=c(21820),j=c.n(i),k=c(30869);async function l(){!function(){try{let a=f().join("win32"===process.platform?f().join(process.env.APPDATA||"","9router"):f().join(j().homedir(),".9router"),"mitm",".mitm.pid");if(!h().existsSync(a))return;let b=parseInt(h().readFileSync(a,"utf8").trim(),10);if(!b)return;if("win32"===process.platform)try{(0,d.execSync)(`taskkill /F /T /PID ${b}`,{stdio:"ignore",windowsHide:!0,timeout:3e3})}catch{try{(0,d.execSync)(`powershell -NonInteractive -WindowStyle Hidden -Command "Stop-Process -Id ${b} -Force"`,{stdio:"ignore",windowsHide:!0,timeout:3e3})}catch{}}else try{(0,d.execSync)(`sudo -n kill -9 ${b} 2>/dev/null`,{stdio:"ignore",timeout:3e3})}catch{try{process.kill(b,"SIGKILL")}catch{}}try{h().unlinkSync(a)}catch{}}catch{}}();let a=function(){let a=[];if("win32"===process.platform){try{(0,d.execSync)('powershell -NonInteractive -WindowStyle Hidden -Command "Get-WmiObject Win32_Process -Filter \'Name=\\"node.exe\\"\' | Select-Object ProcessId,CommandLine | ConvertTo-Csv -NoTypeInformation"',{encoding:"utf8",windowsHide:!0,timeout:5e3}).split("\n").slice(1).filter(a=>a.trim()).forEach(b=>{let c=b.toLowerCase();if(c.includes("9router")||c.includes("next-server")||c.includes("\\bin\\app\\")||c.includes("/bin/app/")||c.includes("cli.js")){let c=b.match(/^"(\d+)"/);c&&c[1]&&c[1]!==process.pid.toString()&&a.push(c[1])}})}catch{}for(let b of["cloudflared","tray_windows_release"])try{let c=`powershell -NonInteractive -WindowStyle Hidden -Command "Get-Process ${b} -ErrorAction SilentlyContinue | Select-Object -ExpandProperty Id"`;(0,d.execSync)(c,{encoding:"utf8",windowsHide:!0,timeout:5e3}).split("\n").forEach(b=>{let c=b.trim();c&&!isNaN(c)&&a.push(c)})}catch{}}else try{(0,d.execSync)("ps aux 2>/dev/null",{encoding:"utf8",timeout:5e3}).split("\n").forEach(b=>{if(b.includes("9router")||b.includes("next-server")||b.includes("cloudflared")||b.includes("/bin/app/")||b.includes("tray_darwin")||b.includes("tray_linux")){let c=b.trim().split(/\s+/)[1];c&&!isNaN(c)&&c!==process.pid.toString()&&a.push(c)}})}catch{}return a}(),b=process.platform;a.forEach(a=>{try{"win32"===b?(0,d.execSync)(`taskkill /F /PID ${a} 2>nul`,{stdio:"ignore",shell:!0,windowsHide:!0,timeout:3e3}):(0,d.execSync)(`kill -9 ${a} 2>/dev/null`,{stdio:"ignore",timeout:3e3})}catch{}}),a.length>0&&await new Promise(a=>setTimeout(a,1500))}function m(a=k.h0.npmPackageName){let b=function(a){try{if(!a||!h().existsSync(a))return a;let b=f().join(process.env.DATA_DIR?process.env.DATA_DIR:"win32"===process.platform?f().join(process.env.APPDATA||f().join(j().homedir(),"AppData","Roaming"),"9router"):f().join(j().homedir(),".9router"),"runtime","updater"),c=f().join(b,"updater.js");if(h().existsSync(c))try{if(h().statSync(a).size===h().statSync(c).size)return c}catch{}return h().mkdirSync(b,{recursive:!0}),h().copyFileSync(a,c),c}catch{return a}}(function(){if(process.env.UPDATER_SCRIPT_PATH&&h().existsSync(process.env.UPDATER_SCRIPT_PATH))return process.env.UPDATER_SCRIPT_PATH;let a=f().join(process.cwd(),"src","lib","updater","updater.js");if(h().existsSync(a))return a;let b=f().join(process.cwd(),"..","src","lib","updater","updater.js");return h().existsSync(b)?b:a}()),c="1"===process.env.TRAY_MODE,e={cmd:"win32"===process.platform?"npx.cmd":"npx",args:[k.h0.npmPackageName]},g=c?[...e.args,"--tray","--skip-update"]:[...e.args,"--skip-update"];(0,d.spawn)(process.execPath,[b],{detached:!0,stdio:"ignore",windowsHide:!0,env:{...process.env,UPDATER_PKG_NAME:a,UPDATER_PORT:String(k.h0.statusPort),UPDATER_TAIL_LINES:String(k.h0.statusLogTailLines),UPDATER_RETRIES:String(k.h0.installRetries),UPDATER_RETRY_DELAY_MS:String(k.h0.installRetryDelayMs),UPDATER_LINGER_MS:String(k.h0.lingerAfterDoneMs),UPDATER_WAIT_MIN_MS:String(k.h0.waitForExitMinMs),UPDATER_WAIT_MAX_MS:String(k.h0.waitForExitMaxMs),UPDATER_WAIT_CHECK_MS:String(k.h0.waitForExitCheckMs),UPDATER_APP_PORT:String(k.h0.appPort),UPDATER_RELAUNCH:"1",UPDATER_RELAUNCH_CMD:e.cmd,UPDATER_RELAUNCH_ARGS:JSON.stringify(g)}}).unref(),setTimeout(()=>process.exit(0),k.h0.exitDelayMs)}},30869:(a,b,c)=>{"use strict";c.d(b,{UY:()=>h,eh:()=>f.eh,fg:()=>e.fg,h0:()=>g,oc:()=>i});var d=c(39006),e=c(40615),f=c(81329);d.rE;let g={npmPackageName:"n9router",installCmd:"npm i -g n9router",installCmdLatest:"npm i -g n9router@latest --prefer-online",shutdownCountdownSec:3,exitDelayMs:500,statusPort:20129,statusPollIntervalMs:1e3,statusLogTailLines:8,installRetries:3,installRetryDelayMs:5e3,lingerAfterDoneMs:3e4,waitForExitMinMs:5e3,waitForExitMaxMs:2e4,waitForExitCheckMs:500,appPort:20128},h={maxLines:200,pollIntervalMs:1e3},i={tickIntervalMs:6e4,pingLeadMs:5e3,refreshAheadMs:3e5,failureCooldownMs:9e5,providers:{claude:{settingsKey:"claudeAutoPing",quotaKey:"session (5h)",pingModel:"claude-haiku-4-5-20251001",pingText:"hi",pingMaxTokens:1},codex:{settingsKey:"codexAutoPing",quotaKey:"session",pingWhenResetAtSlides:!0,resetAtDriftMs:3e4,minPingIntervalMs:6e5,skipWhenBlockingQuotaExhausted:!0,pingModel:"gpt-5.5",pingText:"hi",pingInstructions:"Reply with OK.",pingReasoningEffort:"none"}}}},35024:(a,b,c)=>{"use strict";c.d(b,{Ak:()=>e,Yg:()=>h,sr:()=>d.sr,xq:()=>d.xq});var d=c(26070);function e(a){return(a?.providerSpecificData?.baseUrl?.trim()||"http://localhost:11434").replace(/\/$/,"")}let f=d.xq["xiaomi-tokenplan"]?.regions||{},g=d.xq["xiaomi-tokenplan"]?.defaultRegion;function h(a){return f[a?.providerSpecificData?.region]||f[g]}},39006:a=>{"use strict";a.exports={rE:"0.4.50"}},40615:(a,b,c)=>{"use strict";c.d(b,{AI_PROVIDERS:()=>s,js:()=>w,DI:()=>n,fg:()=>k,Pd:()=>o,IS:()=>h,nJ:()=>i,zN:()=>j,JH:()=>m,jO:()=>y,wb:()=>x,br:()=>l,wG:()=>v,zt:()=>t,gb:()=>q,gC:()=>r,mq:()=>p,rs:()=>u});var d=c(52056);let e="⚠️ Risk Notice: This provider uses a subscription/OAuth session not officially licensed for proxy/router use. Account may be restricted or banned. Use at your own risk.";Object.fromEntries(d.A.filter(a=>a.display).map(a=>{let b;return[a.id,"RISK_NOTICE"===(b=a.display).deprecationNotice?{...b,deprecationNotice:e}:b]}));let f=["serviceKinds","ttsConfig","sttConfig","embeddingConfig","imageConfig","imageToTextConfig","videoConfig","musicConfig","searchViaChat","searchConfig","fetchConfig","modelsFetcher","mediaPriority","hiddenKinds"],g=a=>Object.fromEntries(d.A.filter(b=>b.category===a).map(a=>[a.id,function(a){let b={};for(let c of(a.media&&Object.assign(b,a.media),f))void 0!==a[c]&&(b[c]=a[c]);let c={...a.display||{}};return"RISK_NOTICE"===c.deprecationNotice&&(c.deprecationNotice=e),{...c,id:a.id,alias:a.uiAlias||a.alias,...a.hidden?{hidden:!0}:{},...b,...void 0!==a.priority?{priority:a.priority}:{},...a.hasFree?{hasFree:!0}:{},...a.thinkingConfig?{thinkingConfig:a.thinkingConfig}:{},...a.regions?{regions:a.regions,defaultRegion:a.defaultRegion}:{},...a.hasProviderSpecificData?{hasProviderSpecificData:!0}:{},...a.noAuth?{noAuth:!0}:{},...a.passthroughModels?{passthroughModels:!0}:{},...a.hasOAuth?{hasOAuth:!0}:{},...a.authModes?{authModes:a.authModes}:{},...a.authType?{authType:a.authType}:{},...a.authHint?{authHint:a.authHint}:{}}}(a)])),h=g("free"),i=g("freeTier"),j=g("oauth"),k=g("apikey"),l=g("webCookie"),m="openai-compatible-",n="anthropic-compatible-",o="custom-embedding-";function p(a){return"string"==typeof a&&a.startsWith(m)}function q(a){return"string"==typeof a&&a.startsWith(n)}function r(a){return"string"==typeof a&&a.startsWith(o)}let s={...h,...i,...j,...k,...l};function t(a){for(let b of Object.values(s))if(b.alias===a||b.id===a)return b;return null}function u(a){let b=t(a);return b?.id||a}function v(a){let b=s[a];return b?.alias||a}let w=Object.values(s).reduce((a,b)=>(a[b.alias]=b.id,a),{});Object.values(s).reduce((a,b)=>(a[b.id]=b.alias,a),{});let x=d.A.filter(a=>a.features?.usage).map(a=>a.id),y=d.A.filter(a=>a.features?.usageApikey).map(a=>a.id)},45699:(a,b,c)=>{"use strict";c.d(b,{Xg:()=>q,PROVIDER_MODELS:()=>f.vq,fZ:()=>j,cY:()=>s,ux:()=>m,OA:()=>n,kt:()=>o,KC:()=>r,SM:()=>i});var d=c(35024),e=c(52056),f=c(26070),g=c(99511);let h="-review";function i(a){return f.vq[a]||[]}function j(a){let b=f.vq[a];return b?.[0]?.id||null}let k=new Set(["kr","kiro"]);function l(a,b,c){if(!a)return;let d=a.find(a=>a.id===b);if(d)return d;if(!k.has(c))return;let e=(0,g.Kq)(b);if(e!==b)return a.find(a=>a.id===e)}function m(a,b){let c=f.vq[a];return c?(0,g.gr)(l(c,b,a)):null}function n(a,b){let c=f.vq[a];if(!c)return null;let d=l(c,b,a);return d?.kind||d?.type||null}function o(a,b){let c="string"==typeof b?b.match(/\([^()]+\)\s*$/):null,d=c?c[0]:"",e=d?b.slice(0,c.index).trim():b,g=l(f.vq[a],e,a);return g?.upstreamModelId?g.upstreamModelId+d:g?.id?g.id+d:"cx"===a&&"string"==typeof e&&e.endsWith(h)?e.slice(0,-h.length)+d:e+d}let p=Object.fromEntries(e.A.filter(a=>a.alias&&a.alias!==a.id).map(a=>[a.id,a.alias])),q=Object.fromEntries(Object.keys(d.xq).map(a=>[a,p[a]||a]));function r(a){let b=q[a]||a;return f.vq[b]||[]}function s(a,b){return(0,g.g5)(l(f.vq[a],b,a))}},78335:()=>{},81329:(a,b,c)=>{"use strict";c.d(b,{CP:()=>f,Xg:()=>d.Xg,eh:()=>e,vq:()=>d.PROVIDER_MODELS});var d=c(45699);Object.entries(c(40615).AI_PROVIDERS).filter(([,a])=>a.passthroughModels).map(([a])=>a);let e=Object.entries(d.PROVIDER_MODELS).flatMap(([a,b])=>b.map(b=>({provider:a,model:b.id,name:b.name}))),f=(a,b=null)=>a?.kind||a?.type||b},96487:()=>{}};