tokenhop 1.0.0 → 1.0.3

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 (622) hide show
  1. package/app/.next-cli-build/BUILD_ID +1 -1
  2. package/app/.next-cli-build/app-path-routes-manifest.json +4 -4
  3. package/app/.next-cli-build/build-manifest.json +3 -3
  4. package/app/.next-cli-build/prerender-manifest.json +3 -3
  5. package/app/.next-cli-build/react-loadable-manifest.json +43 -43
  6. package/app/.next-cli-build/required-server-files.json +1 -0
  7. package/app/.next-cli-build/server/app/(dashboard)/dashboard/[...missing]/page.js +1 -1
  8. package/app/.next-cli-build/server/app/(dashboard)/dashboard/[...missing]/page.js.nft.json +1 -1
  9. package/app/.next-cli-build/server/app/(dashboard)/dashboard/[...missing]/page_client-reference-manifest.js +1 -1
  10. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js +1 -1
  11. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -1
  12. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  13. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +1 -1
  14. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
  15. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  16. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js +1 -1
  17. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  18. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  19. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js +1 -1
  20. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
  21. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  22. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js +1 -1
  23. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
  24. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  25. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js +1 -1
  26. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  27. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  28. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js +1 -1
  29. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js.nft.json +1 -1
  30. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  31. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js +1 -1
  32. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js.nft.json +1 -1
  33. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  34. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js +1 -1
  35. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js.nft.json +1 -1
  36. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  37. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/page.js +1 -1
  38. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/page.js.nft.json +1 -1
  39. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/page_client-reference-manifest.js +1 -1
  40. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js +1 -1
  41. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js.nft.json +1 -1
  42. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  43. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js +1 -1
  44. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -1
  45. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  46. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js +1 -1
  47. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  48. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  49. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js +1 -1
  50. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
  51. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  52. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js +2 -2
  53. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
  54. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  55. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js +1 -1
  56. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
  57. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  58. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js +1 -1
  59. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
  60. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  61. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js +1 -1
  62. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
  63. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  64. package/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page.js +1 -1
  65. package/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page.js.nft.json +1 -1
  66. package/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
  67. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js +1 -1
  68. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
  69. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  70. package/app/.next-cli-build/server/app/(dashboard)/dashboard/settings/page.js +1 -1
  71. package/app/.next-cli-build/server/app/(dashboard)/dashboard/settings/page.js.nft.json +1 -1
  72. package/app/.next-cli-build/server/app/(dashboard)/dashboard/settings/page_client-reference-manifest.js +1 -1
  73. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js +1 -1
  74. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js.nft.json +1 -1
  75. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
  76. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page.js +1 -1
  77. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page.js.nft.json +1 -1
  78. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  79. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js +1 -1
  80. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
  81. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  82. package/app/.next-cli-build/server/app/(dashboard)/dashboard/ui-kit/page.js +1 -1
  83. package/app/.next-cli-build/server/app/(dashboard)/dashboard/ui-kit/page.js.nft.json +1 -1
  84. package/app/.next-cli-build/server/app/(dashboard)/dashboard/ui-kit/page_client-reference-manifest.js +1 -1
  85. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js +1 -1
  86. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
  87. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  88. package/app/.next-cli-build/server/app/_global-error/page.js.nft.json +1 -1
  89. package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  90. package/app/.next-cli-build/server/app/_global-error.html +1 -1
  91. package/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  92. package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  93. package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  94. package/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  95. package/app/.next-cli-build/server/app/_not-found/page.js +1 -1
  96. package/app/.next-cli-build/server/app/_not-found/page.js.nft.json +1 -1
  97. package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  98. package/app/.next-cli-build/server/app/_not-found.html +1 -1
  99. package/app/.next-cli-build/server/app/_not-found.rsc +5 -5
  100. package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +5 -5
  101. package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +5 -5
  102. package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  103. package/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
  104. package/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
  105. package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
  106. package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
  107. package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
  108. package/app/.next-cli-build/server/app/api/auth/reset-password/route.js.nft.json +1 -1
  109. package/app/.next-cli-build/server/app/api/auth/saml/acs/route.js.nft.json +1 -1
  110. package/app/.next-cli-build/server/app/api/auth/saml/metadata/route.js.nft.json +1 -1
  111. package/app/.next-cli-build/server/app/api/auth/saml/start/route.js.nft.json +1 -1
  112. package/app/.next-cli-build/server/app/api/auth/saml/test/route.js.nft.json +1 -1
  113. package/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
  114. package/app/.next-cli-build/server/app/api/cli-tool-settings/[toolId]/route.js.nft.json +1 -1
  115. package/app/.next-cli-build/server/app/api/cli-tool-settings/route.js.nft.json +1 -1
  116. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js +4 -4
  117. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
  118. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
  119. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  120. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
  121. package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js +2 -2
  122. package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
  123. package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js +2 -2
  124. package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js.nft.json +1 -1
  125. package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js +3 -3
  126. package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
  127. package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js +2 -2
  128. package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
  129. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js +1 -1
  130. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js.nft.json +1 -1
  131. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js +2 -2
  132. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js.nft.json +1 -1
  133. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js +1 -1
  134. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
  135. package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js +3 -3
  136. package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js.nft.json +1 -1
  137. package/app/.next-cli-build/server/app/api/cli-tools/devin-settings/route.js +2 -2
  138. package/app/.next-cli-build/server/app/api/cli-tools/devin-settings/route.js.nft.json +1 -1
  139. package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js +2 -2
  140. package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
  141. package/app/.next-cli-build/server/app/api/cli-tools/grok-build-settings/route.js +2 -2
  142. package/app/.next-cli-build/server/app/api/cli-tools/grok-build-settings/route.js.nft.json +1 -1
  143. package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js +3 -3
  144. package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js.nft.json +1 -1
  145. package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js +3 -3
  146. package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js.nft.json +1 -1
  147. package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js +2 -2
  148. package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js.nft.json +1 -1
  149. package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
  150. package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
  151. package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js +2 -2
  152. package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js.nft.json +1 -1
  153. package/app/.next-cli-build/server/app/api/combos/[id]/headroom/route.js +1 -1
  154. package/app/.next-cli-build/server/app/api/combos/[id]/headroom/route.js.nft.json +1 -1
  155. package/app/.next-cli-build/server/app/api/combos/[id]/route.js +1 -1
  156. package/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
  157. package/app/.next-cli-build/server/app/api/combos/[id]/test/route.js +1 -1
  158. package/app/.next-cli-build/server/app/api/combos/[id]/test/route.js.nft.json +1 -1
  159. package/app/.next-cli-build/server/app/api/combos/route.js +1 -1
  160. package/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
  161. package/app/.next-cli-build/server/app/api/gateway/status/route.js.nft.json +1 -1
  162. package/app/.next-cli-build/server/app/api/headroom/extras/route.js.nft.json +1 -1
  163. package/app/.next-cli-build/server/app/api/headroom/proxy/[...path]/route.js.nft.json +1 -1
  164. package/app/.next-cli-build/server/app/api/headroom/restart/route.js.nft.json +1 -1
  165. package/app/.next-cli-build/server/app/api/headroom/start/route.js.nft.json +1 -1
  166. package/app/.next-cli-build/server/app/api/headroom/status/route.js.nft.json +1 -1
  167. package/app/.next-cli-build/server/app/api/headroom/stop/route.js.nft.json +1 -1
  168. package/app/.next-cli-build/server/app/api/health/route.js.nft.json +1 -1
  169. package/app/.next-cli-build/server/app/api/home/live-routes/route.js.nft.json +1 -1
  170. package/app/.next-cli-build/server/app/api/home/quota/route.js +1 -1
  171. package/app/.next-cli-build/server/app/api/home/quota/route.js.nft.json +1 -1
  172. package/app/.next-cli-build/server/app/api/home/summary/route.js.nft.json +1 -1
  173. package/app/.next-cli-build/server/app/api/init/route.js.nft.json +1 -1
  174. package/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
  175. package/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
  176. package/app/.next-cli-build/server/app/api/locale/route.js.nft.json +1 -1
  177. package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
  178. package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
  179. package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
  180. package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js +1 -1
  181. package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
  182. package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
  183. package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
  184. package/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js +1 -1
  185. package/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -1
  186. package/app/.next-cli-build/server/app/api/models/alias/route.js +1 -1
  187. package/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
  188. package/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
  189. package/app/.next-cli-build/server/app/api/models/catalog-sync/route.js +1 -1
  190. package/app/.next-cli-build/server/app/api/models/catalog-sync/route.js.nft.json +1 -1
  191. package/app/.next-cli-build/server/app/api/models/custom/route.js +1 -1
  192. package/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
  193. package/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
  194. package/app/.next-cli-build/server/app/api/models/route.js +1 -1
  195. package/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
  196. package/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
  197. package/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
  198. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js +1 -1
  199. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  200. package/app/.next-cli-build/server/app/api/oauth/codex/bulk-import/route.js +1 -1
  201. package/app/.next-cli-build/server/app/api/oauth/codex/bulk-import/route.js.nft.json +1 -1
  202. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js +1 -1
  203. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
  204. package/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
  205. package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js +1 -1
  206. package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  207. package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
  208. package/app/.next-cli-build/server/app/api/oauth/grok-cli/bulk-import/route.js.nft.json +1 -1
  209. package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
  210. package/app/.next-cli-build/server/app/api/oauth/kiro/api-key/route.js +1 -1
  211. package/app/.next-cli-build/server/app/api/oauth/kiro/api-key/route.js.nft.json +1 -1
  212. package/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -1
  213. package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js +1 -1
  214. package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  215. package/app/.next-cli-build/server/app/api/oauth/kiro/import-cli-proxy/route.js.nft.json +1 -1
  216. package/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js +1 -1
  217. package/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +1 -1
  218. package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js +1 -1
  219. package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  220. package/app/.next-cli-build/server/app/api/oauth/xiaomi-mimo/api-key/route.js.nft.json +1 -1
  221. package/app/.next-cli-build/server/app/api/oauth/xiaomi-mimo/auto-import/route.js +1 -1
  222. package/app/.next-cli-build/server/app/api/oauth/xiaomi-mimo/auto-import/route.js.nft.json +1 -1
  223. package/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
  224. package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  225. package/app/.next-cli-build/server/app/api/provider-nodes/route.js +1 -1
  226. package/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
  227. package/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js +1 -1
  228. package/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js.nft.json +1 -1
  229. package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js +1 -1
  230. package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  231. package/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
  232. package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js +1 -1
  233. package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  234. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
  235. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  236. package/app/.next-cli-build/server/app/api/providers/client/route.js +1 -1
  237. package/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
  238. package/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js.nft.json +1 -1
  239. package/app/.next-cli-build/server/app/api/providers/route.js +1 -1
  240. package/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
  241. package/app/.next-cli-build/server/app/api/providers/suggested-models/route.js.nft.json +1 -1
  242. package/app/.next-cli-build/server/app/api/providers/test-batch/route.js +1 -1
  243. package/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  244. package/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
  245. package/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
  246. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
  247. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
  248. package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
  249. package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
  250. package/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
  251. package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
  252. package/app/.next-cli-build/server/app/api/pxpipe/health/route.js.nft.json +1 -1
  253. package/app/.next-cli-build/server/app/api/pxpipe/install/route.js.nft.json +1 -1
  254. package/app/.next-cli-build/server/app/api/pxpipe/logs/route.js.nft.json +1 -1
  255. package/app/.next-cli-build/server/app/api/pxpipe/restart/route.js.nft.json +1 -1
  256. package/app/.next-cli-build/server/app/api/pxpipe/start/route.js.nft.json +1 -1
  257. package/app/.next-cli-build/server/app/api/pxpipe/stats/route.js.nft.json +1 -1
  258. package/app/.next-cli-build/server/app/api/pxpipe/status/route.js.nft.json +1 -1
  259. package/app/.next-cli-build/server/app/api/pxpipe/stop/route.js.nft.json +1 -1
  260. package/app/.next-cli-build/server/app/api/settings/config/export/route.js.nft.json +1 -1
  261. package/app/.next-cli-build/server/app/api/settings/config/import/route.js +1 -1
  262. package/app/.next-cli-build/server/app/api/settings/config/import/route.js.nft.json +1 -1
  263. package/app/.next-cli-build/server/app/api/settings/database/route.js +1 -1
  264. package/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
  265. package/app/.next-cli-build/server/app/api/settings/environment/route.js.nft.json +1 -1
  266. package/app/.next-cli-build/server/app/api/settings/proxy-test/route.js.nft.json +1 -1
  267. package/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
  268. package/app/.next-cli-build/server/app/api/settings/route.js +1 -1
  269. package/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
  270. package/app/.next-cli-build/server/app/api/shell/savings-milestone/route.js.nft.json +1 -1
  271. package/app/.next-cli-build/server/app/api/shell/summary/route.js +1 -1
  272. package/app/.next-cli-build/server/app/api/shell/summary/route.js.nft.json +1 -1
  273. package/app/.next-cli-build/server/app/api/shutdown/route.js.nft.json +1 -1
  274. package/app/.next-cli-build/server/app/api/tags/route.js.nft.json +1 -1
  275. package/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
  276. package/app/.next-cli-build/server/app/api/translator/console-logs/route.js.nft.json +1 -1
  277. package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
  278. package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -1
  279. package/app/.next-cli-build/server/app/api/translator/load/route.js.nft.json +1 -1
  280. package/app/.next-cli-build/server/app/api/translator/save/route.js.nft.json +1 -1
  281. package/app/.next-cli-build/server/app/api/translator/send/route.js +9 -1
  282. package/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
  283. package/app/.next-cli-build/server/app/api/translator/translate/route.js +9 -1
  284. package/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
  285. package/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  286. package/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  287. package/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
  288. package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
  289. package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
  290. package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
  291. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js +2 -2
  292. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
  293. package/app/.next-cli-build/server/app/api/usage/[connectionId]/codex-reset-credits/route.js +9 -1
  294. package/app/.next-cli-build/server/app/api/usage/[connectionId]/codex-reset-credits/route.js.nft.json +1 -1
  295. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js +9 -1
  296. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  297. package/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
  298. package/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
  299. package/app/.next-cli-build/server/app/api/usage/last-activity/route.js.nft.json +1 -1
  300. package/app/.next-cli-build/server/app/api/usage/logs/route.js.nft.json +1 -1
  301. package/app/.next-cli-build/server/app/api/usage/providers/route.js +1 -1
  302. package/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
  303. package/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
  304. package/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  305. package/app/.next-cli-build/server/app/api/usage/savings/route.js.nft.json +1 -1
  306. package/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
  307. package/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
  308. package/app/.next-cli-build/server/app/api/v1/api/chat/route.js +1 -1
  309. package/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  310. package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js +1 -1
  311. package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  312. package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js +1 -1
  313. package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  314. package/app/.next-cli-build/server/app/api/v1/audio/voices/route.js +1 -1
  315. package/app/.next-cli-build/server/app/api/v1/audio/voices/route.js.nft.json +1 -1
  316. package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js +1 -1
  317. package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  318. package/app/.next-cli-build/server/app/api/v1/embeddings/route.js +9 -1
  319. package/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  320. package/app/.next-cli-build/server/app/api/v1/images/generations/route.js +2 -2
  321. package/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  322. package/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js +1 -1
  323. package/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -1
  324. package/app/.next-cli-build/server/app/api/v1/messages/route.js +1 -1
  325. package/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
  326. package/app/.next-cli-build/server/app/api/v1/models/[...model]/route.js +1 -1
  327. package/app/.next-cli-build/server/app/api/v1/models/[...model]/route.js.nft.json +1 -1
  328. package/app/.next-cli-build/server/app/api/v1/models/info/route.js +1 -1
  329. package/app/.next-cli-build/server/app/api/v1/models/info/route.js.nft.json +1 -1
  330. package/app/.next-cli-build/server/app/api/v1/models/route.js +1 -1
  331. package/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
  332. package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js +1 -1
  333. package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
  334. package/app/.next-cli-build/server/app/api/v1/responses/route.js +1 -1
  335. package/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
  336. package/app/.next-cli-build/server/app/api/v1/route.js +1 -1
  337. package/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
  338. package/app/.next-cli-build/server/app/api/v1/search/route.js +2 -2
  339. package/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
  340. package/app/.next-cli-build/server/app/api/v1/videos/[id]/route.js +1 -1
  341. package/app/.next-cli-build/server/app/api/v1/videos/[id]/route.js.nft.json +1 -1
  342. package/app/.next-cli-build/server/app/api/v1/videos/edits/route.js +1 -1
  343. package/app/.next-cli-build/server/app/api/v1/videos/edits/route.js.nft.json +1 -1
  344. package/app/.next-cli-build/server/app/api/v1/videos/extensions/route.js +1 -1
  345. package/app/.next-cli-build/server/app/api/v1/videos/extensions/route.js.nft.json +1 -1
  346. package/app/.next-cli-build/server/app/api/v1/videos/generations/route.js +1 -1
  347. package/app/.next-cli-build/server/app/api/v1/videos/generations/route.js.nft.json +1 -1
  348. package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js +1 -1
  349. package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
  350. package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js +1 -1
  351. package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  352. package/app/.next-cli-build/server/app/api/v1beta/models/route.js +1 -1
  353. package/app/.next-cli-build/server/app/api/v1beta/models/route.js.nft.json +1 -1
  354. package/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
  355. package/app/.next-cli-build/server/app/callback/page.js +1 -1
  356. package/app/.next-cli-build/server/app/callback/page.js.nft.json +1 -1
  357. package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  358. package/app/.next-cli-build/server/app/callback.html +1 -1
  359. package/app/.next-cli-build/server/app/callback.rsc +5 -5
  360. package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +5 -5
  361. package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +2 -2
  362. package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +5 -5
  363. package/app/.next-cli-build/server/app/dashboard/basic-chat.html +2 -2
  364. package/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +11 -11
  365. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +11 -11
  366. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +11 -11
  367. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +2 -2
  368. package/app/.next-cli-build/server/app/dashboard/combos.html +2 -2
  369. package/app/.next-cli-build/server/app/dashboard/combos.rsc +11 -11
  370. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +11 -11
  371. package/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +11 -11
  372. package/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +2 -2
  373. package/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
  374. package/app/.next-cli-build/server/app/dashboard/endpoint.rsc +9 -9
  375. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +8 -8
  376. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +9 -9
  377. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +2 -2
  378. package/app/.next-cli-build/server/app/dashboard/media-providers/web.html +2 -2
  379. package/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +11 -11
  380. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +11 -11
  381. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +11 -11
  382. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +2 -2
  383. package/app/.next-cli-build/server/app/dashboard/media-providers.html +1 -1
  384. package/app/.next-cli-build/server/app/dashboard/media-providers.rsc +10 -10
  385. package/app/.next-cli-build/server/app/dashboard/media-providers.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/__PAGE__.segment.rsc +10 -10
  386. package/app/.next-cli-build/server/app/dashboard/media-providers.segments/_full.segment.rsc +10 -10
  387. package/app/.next-cli-build/server/app/dashboard/media-providers.segments/_tree.segment.rsc +2 -2
  388. package/app/.next-cli-build/server/app/dashboard/mitm.html +2 -2
  389. package/app/.next-cli-build/server/app/dashboard/mitm.rsc +11 -11
  390. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +11 -11
  391. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +11 -11
  392. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +2 -2
  393. package/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
  394. package/app/.next-cli-build/server/app/dashboard/profile.rsc +10 -10
  395. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +10 -10
  396. package/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +10 -10
  397. package/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +2 -2
  398. package/app/.next-cli-build/server/app/dashboard/providers/new.html +2 -2
  399. package/app/.next-cli-build/server/app/dashboard/providers/new.rsc +11 -11
  400. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +11 -11
  401. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +11 -11
  402. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +2 -2
  403. package/app/.next-cli-build/server/app/dashboard/proxy-pools.html +2 -2
  404. package/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +10 -10
  405. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +10 -10
  406. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +10 -10
  407. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +2 -2
  408. package/app/.next-cli-build/server/app/dashboard/pxpipe.html +2 -2
  409. package/app/.next-cli-build/server/app/dashboard/pxpipe.rsc +10 -10
  410. package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +10 -10
  411. package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_full.segment.rsc +10 -10
  412. package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +2 -2
  413. package/app/.next-cli-build/server/app/dashboard/quota.html +1 -1
  414. package/app/.next-cli-build/server/app/dashboard/quota.rsc +11 -11
  415. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +11 -11
  416. package/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +11 -11
  417. package/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +2 -2
  418. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js +1 -1
  419. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js.nft.json +1 -1
  420. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  421. package/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  422. package/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +5 -5
  423. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +5 -5
  424. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
  425. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +5 -5
  426. package/app/.next-cli-build/server/app/dashboard/settings.html +2 -2
  427. package/app/.next-cli-build/server/app/dashboard/settings.rsc +11 -11
  428. package/app/.next-cli-build/server/app/dashboard/settings.segments/!KGRhc2hib2FyZCk/dashboard/settings/__PAGE__.segment.rsc +11 -11
  429. package/app/.next-cli-build/server/app/dashboard/settings.segments/_full.segment.rsc +11 -11
  430. package/app/.next-cli-build/server/app/dashboard/settings.segments/_tree.segment.rsc +2 -2
  431. package/app/.next-cli-build/server/app/dashboard/skills.html +2 -2
  432. package/app/.next-cli-build/server/app/dashboard/skills.rsc +8 -8
  433. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +8 -8
  434. package/app/.next-cli-build/server/app/dashboard/skills.segments/_full.segment.rsc +8 -8
  435. package/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.segment.rsc +2 -2
  436. package/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
  437. package/app/.next-cli-build/server/app/dashboard/token-saver.rsc +11 -11
  438. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +11 -11
  439. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +11 -11
  440. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +2 -2
  441. package/app/.next-cli-build/server/app/dashboard/translator.html +2 -2
  442. package/app/.next-cli-build/server/app/dashboard/translator.rsc +11 -11
  443. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +11 -11
  444. package/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +11 -11
  445. package/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +2 -2
  446. package/app/.next-cli-build/server/app/dashboard/ui-kit.html +1 -1
  447. package/app/.next-cli-build/server/app/dashboard/ui-kit.rsc +10 -10
  448. package/app/.next-cli-build/server/app/dashboard/ui-kit.segments/!KGRhc2hib2FyZCk/dashboard/ui-kit/__PAGE__.segment.rsc +10 -10
  449. package/app/.next-cli-build/server/app/dashboard/ui-kit.segments/_full.segment.rsc +10 -10
  450. package/app/.next-cli-build/server/app/dashboard/ui-kit.segments/_tree.segment.rsc +2 -2
  451. package/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
  452. package/app/.next-cli-build/server/app/dashboard/usage.rsc +11 -11
  453. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +11 -11
  454. package/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +11 -11
  455. package/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +2 -2
  456. package/app/.next-cli-build/server/app/dashboard.html +1 -1
  457. package/app/.next-cli-build/server/app/dashboard.rsc +11 -11
  458. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +11 -11
  459. package/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +11 -11
  460. package/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +2 -2
  461. package/app/.next-cli-build/server/app/index.html +1 -1
  462. package/app/.next-cli-build/server/app/index.rsc +5 -5
  463. package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +5 -5
  464. package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +5 -5
  465. package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +2 -2
  466. package/app/.next-cli-build/server/app/landing/page.js +1 -1
  467. package/app/.next-cli-build/server/app/landing/page.js.nft.json +1 -1
  468. package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  469. package/app/.next-cli-build/server/app/landing.html +1 -1
  470. package/app/.next-cli-build/server/app/landing.rsc +6 -6
  471. package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +6 -6
  472. package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +2 -2
  473. package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +6 -6
  474. package/app/.next-cli-build/server/app/login/page.js +1 -1
  475. package/app/.next-cli-build/server/app/login/page.js.nft.json +1 -1
  476. package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  477. package/app/.next-cli-build/server/app/login.html +1 -1
  478. package/app/.next-cli-build/server/app/login.rsc +5 -5
  479. package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +5 -5
  480. package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +2 -2
  481. package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +5 -5
  482. package/app/.next-cli-build/server/app/manifest.webmanifest/route.js.nft.json +1 -1
  483. package/app/.next-cli-build/server/app/page.js +1 -1
  484. package/app/.next-cli-build/server/app/page.js.nft.json +1 -1
  485. package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  486. package/app/.next-cli-build/server/app/skills/[...slug]/route.js.nft.json +1 -1
  487. package/app/.next-cli-build/server/app-paths-manifest.json +4 -4
  488. package/app/.next-cli-build/server/chunks/1004.js +1 -0
  489. package/app/.next-cli-build/server/chunks/1152.js +1 -1
  490. package/app/.next-cli-build/server/chunks/1215.js +1 -0
  491. package/app/.next-cli-build/server/chunks/1336.js +1 -1
  492. package/app/.next-cli-build/server/chunks/1432.js +1 -1
  493. package/app/.next-cli-build/server/chunks/1533.js +1 -1
  494. package/app/.next-cli-build/server/chunks/2217.js +1 -1
  495. package/app/.next-cli-build/server/chunks/2380.js +7 -7
  496. package/app/.next-cli-build/server/chunks/24.js +1 -1
  497. package/app/.next-cli-build/server/chunks/2460.js +1 -1
  498. package/app/.next-cli-build/server/chunks/257.js +10 -0
  499. package/app/.next-cli-build/server/chunks/2592.js +1 -1
  500. package/app/.next-cli-build/server/chunks/2705.js +9 -0
  501. package/app/.next-cli-build/server/chunks/318.js +9 -16
  502. package/app/.next-cli-build/server/chunks/3593.js +1 -1
  503. package/app/.next-cli-build/server/chunks/3919.js +1 -1
  504. package/app/.next-cli-build/server/chunks/3943.js +1 -1
  505. package/app/.next-cli-build/server/chunks/4123.js +1 -1
  506. package/app/.next-cli-build/server/chunks/4125.js +1 -1
  507. package/app/.next-cli-build/server/chunks/4334.js +1 -1
  508. package/app/.next-cli-build/server/chunks/4406.js +2 -2
  509. package/app/.next-cli-build/server/chunks/4521.js +1 -1
  510. package/app/.next-cli-build/server/chunks/4730.js +1 -1
  511. package/app/.next-cli-build/server/chunks/4780.js +1 -1
  512. package/app/.next-cli-build/server/chunks/5055.js +1 -0
  513. package/app/.next-cli-build/server/chunks/5230.js +1 -0
  514. package/app/.next-cli-build/server/chunks/{1026.js → 5260.js} +1 -1
  515. package/app/.next-cli-build/server/chunks/5335.js +1 -0
  516. package/app/.next-cli-build/server/chunks/5559.js +9 -0
  517. package/app/.next-cli-build/server/chunks/5615.js +1 -1
  518. package/app/.next-cli-build/server/chunks/5649.js +1 -0
  519. package/app/.next-cli-build/server/chunks/5765.js +1 -0
  520. package/app/.next-cli-build/server/chunks/5827.js +1 -0
  521. package/app/.next-cli-build/server/chunks/5869.js +9 -0
  522. package/app/.next-cli-build/server/chunks/5908.js +1 -0
  523. package/app/.next-cli-build/server/chunks/620.js +1 -0
  524. package/app/.next-cli-build/server/chunks/6252.js +1 -1
  525. package/app/.next-cli-build/server/chunks/6328.js +1 -0
  526. package/app/.next-cli-build/server/chunks/6355.js +1 -0
  527. package/app/.next-cli-build/server/chunks/6493.js +1 -0
  528. package/app/.next-cli-build/server/chunks/6496.js +1 -1
  529. package/app/.next-cli-build/server/chunks/7211.js +1 -1
  530. package/app/.next-cli-build/server/chunks/7485.js +9 -0
  531. package/app/.next-cli-build/server/chunks/7616.js +1 -1
  532. package/app/.next-cli-build/server/chunks/7695.js +1 -0
  533. package/app/.next-cli-build/server/chunks/7716.js +1 -1
  534. package/app/.next-cli-build/server/chunks/7819.js +1 -1
  535. package/app/.next-cli-build/server/chunks/7828.js +1 -1
  536. package/app/.next-cli-build/server/chunks/8171.js +1 -1
  537. package/app/.next-cli-build/server/chunks/8255.js +1 -1
  538. package/app/.next-cli-build/server/chunks/8261.js +1 -0
  539. package/app/.next-cli-build/server/chunks/8416.js +1 -1
  540. package/app/.next-cli-build/server/chunks/878.js +1 -0
  541. package/app/.next-cli-build/server/chunks/8895.js +13 -13
  542. package/app/.next-cli-build/server/chunks/8954.js +1 -0
  543. package/app/.next-cli-build/server/chunks/8988.js +1 -0
  544. package/app/.next-cli-build/server/chunks/9016.js +9 -0
  545. package/app/.next-cli-build/server/chunks/9243.js +1 -0
  546. package/app/.next-cli-build/server/chunks/9326.js +1 -0
  547. package/app/.next-cli-build/server/chunks/9343.js +1 -1
  548. package/app/.next-cli-build/server/chunks/9421.js +1 -1
  549. package/app/.next-cli-build/server/chunks/9489.js +3 -0
  550. package/app/.next-cli-build/server/chunks/9578.js +1 -1
  551. package/app/.next-cli-build/server/chunks/9594.js +1 -0
  552. package/app/.next-cli-build/server/chunks/965.js +1 -1
  553. package/app/.next-cli-build/server/chunks/9899.js +1 -1
  554. package/app/.next-cli-build/server/instrumentation.js +1 -1
  555. package/app/.next-cli-build/server/instrumentation.js.nft.json +1 -1
  556. package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  557. package/app/.next-cli-build/server/middleware-react-loadable-manifest.js +1 -1
  558. package/app/.next-cli-build/server/middleware.js.nft.json +1 -1
  559. package/app/.next-cli-build/server/pages/404.html +1 -1
  560. package/app/.next-cli-build/server/pages/500.html +1 -1
  561. package/app/.next-cli-build/server/server-reference-manifest.js +1 -1
  562. package/app/.next-cli-build/server/server-reference-manifest.json +1 -1
  563. package/app/.next-cli-build/static/chunks/{198-145d0ed2ec3c54f5.js → 198-7c5bbea89ef8bc14.js} +1 -1
  564. package/app/.next-cli-build/static/chunks/{3670-e7a22341025498f8.js → 3670-d6dc44bc181c9b8a.js} +1 -1
  565. package/app/.next-cli-build/static/chunks/5014-a5d960f4c6bc6297.js +1 -0
  566. package/app/.next-cli-build/static/chunks/{6174.18e2c57e892d721a.js → 6174.a18fedfa3d765b1e.js} +1 -1
  567. package/app/.next-cli-build/static/chunks/6448-71a8c2ac8d9ecc09.js +1 -0
  568. package/app/.next-cli-build/static/chunks/7899-a12f962af02edf7f.js +1 -0
  569. package/app/.next-cli-build/static/chunks/8105-71d1aea9708976db.js +1 -0
  570. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/combos/{page-8147ae8fa9c04381.js → page-42bfc760fbea3b96.js} +1 -1
  571. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/console-log/{page-9cbf62f78701882a.js → page-1df6ad7d9adfc2a7.js} +1 -1
  572. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/[id]/{page-5f91e148400a241b.js → page-59ee0b412f972940.js} +3 -3
  573. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/new/{page-dac4ab98fc595054.js → page-25d06b77bd1a5edb.js} +1 -1
  574. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/page-463f9fa33be9426a.js +1 -0
  575. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/translator/{page-06f4e52ee3b63f82.js → page-5bb99ecaf48bde39.js} +1 -1
  576. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/ui-kit/{page-6c982cc50b6af101.js → page-1bc393f267badc04.js} +1 -1
  577. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/usage/page-923f864ec0be0fc8.js +1 -0
  578. package/app/.next-cli-build/static/chunks/app/(dashboard)/{layout-dd9d1e49b2f69197.js → layout-a94f45e334f1841b.js} +1 -1
  579. package/app/.next-cli-build/static/chunks/app/landing/{page-02b7bfebd65c41f1.js → page-98f05847e3372b16.js} +1 -1
  580. package/app/.next-cli-build/static/chunks/app/{layout-c266f1acedfb4651.js → layout-29d74e164758a126.js} +1 -1
  581. package/app/.next-cli-build/static/chunks/webpack-1e19a4b05298b49d.js +1 -0
  582. package/app/.next-cli-build/static/css/{9f0b95a0d0bc5e51.css → ffa1d9c3cbb4e959.css} +1 -1
  583. package/app/custom-server.js +0 -37
  584. package/app/package.json +4 -5
  585. package/app/server.js +1 -1
  586. package/app/src/lib/db/adapters/sqljsAdapter.js +39 -4
  587. package/app/src/lib/oauth/services/xai.js +19 -12
  588. package/app/src/shared/services/quotaAutoPing.js +43 -8
  589. package/app/src/shared/services/quotaSnapshotPoller.js +2 -1
  590. package/app/src/sse/services/backgroundTokenRefresh.js +13 -1
  591. package/package.json +1 -1
  592. package/src/cli/menus/combos.js +3 -1
  593. package/app/.next-cli-build/server/chunks/1764.js +0 -1
  594. package/app/.next-cli-build/server/chunks/2384.js +0 -1
  595. package/app/.next-cli-build/server/chunks/3093.js +0 -1
  596. package/app/.next-cli-build/server/chunks/3306.js +0 -1
  597. package/app/.next-cli-build/server/chunks/331.js +0 -1
  598. package/app/.next-cli-build/server/chunks/3414.js +0 -1
  599. package/app/.next-cli-build/server/chunks/3558.js +0 -1
  600. package/app/.next-cli-build/server/chunks/3586.js +0 -1
  601. package/app/.next-cli-build/server/chunks/3676.js +0 -1
  602. package/app/.next-cli-build/server/chunks/4037.js +0 -1
  603. package/app/.next-cli-build/server/chunks/4199.js +0 -2
  604. package/app/.next-cli-build/server/chunks/4278.js +0 -1
  605. package/app/.next-cli-build/server/chunks/6158.js +0 -1
  606. package/app/.next-cli-build/server/chunks/6354.js +0 -1
  607. package/app/.next-cli-build/server/chunks/6734.js +0 -1
  608. package/app/.next-cli-build/server/chunks/6769.js +0 -1
  609. package/app/.next-cli-build/server/chunks/7261.js +0 -1
  610. package/app/.next-cli-build/server/chunks/7901.js +0 -1
  611. package/app/.next-cli-build/server/chunks/8372.js +0 -1
  612. package/app/.next-cli-build/server/chunks/8635.js +0 -3
  613. package/app/.next-cli-build/server/chunks/994.js +0 -1
  614. package/app/.next-cli-build/static/chunks/5014-a441cde708542153.js +0 -1
  615. package/app/.next-cli-build/static/chunks/6448-4eabf683083596e6.js +0 -1
  616. package/app/.next-cli-build/static/chunks/7899-e6a70cb9d3684f7f.js +0 -1
  617. package/app/.next-cli-build/static/chunks/8105-5c7e7c73b4bd532d.js +0 -1
  618. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/page-9fadf2c38665c20c.js +0 -1
  619. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/usage/page-7571538830147099.js +0 -1
  620. package/app/.next-cli-build/static/chunks/webpack-187fa25c98ba99f3.js +0 -1
  621. /package/app/.next-cli-build/static/{3Qm_WgU2xvFJ9U_G7SKhT → gdVYVwJMM6JES9Y1KPQyw}/_buildManifest.js +0 -0
  622. /package/app/.next-cli-build/static/{3Qm_WgU2xvFJ9U_G7SKhT → gdVYVwJMM6JES9Y1KPQyw}/_ssgManifest.js +0 -0
@@ -2,7 +2,6 @@ const http = require("http");
2
2
  const path = require("path");
3
3
  const fs = require("fs");
4
4
  const crypto = require("crypto");
5
- const { pathToFileURL } = require("url");
6
5
 
7
6
  // Repo checkout and Docker keep the brand module beside this file; the CLI package
8
7
  // ships custom-server.js in app/ and its packed copy one level up.
@@ -75,39 +74,6 @@ function parseBodySizeLimit(value) {
75
74
  }
76
75
  const MAX_H2C_BODY_BYTES = parseBodySizeLimit(readEnv("PROXY_CLIENT_MAX_BODY_SIZE"));
77
76
 
78
- let backgroundRefreshStarted = false;
79
-
80
- function startBackgroundTokenRefreshFromCustomServer() {
81
- if (backgroundRefreshStarted) return;
82
- backgroundRefreshStarted = true;
83
- // Prefer source path (repo / standalone that still has src). Fail-open if missing
84
- // — initializeApp also starts the same scheduler when the Next app boots.
85
- const modPath = path.join(__dirname, "src", "sse", "services", "backgroundTokenRefresh.js");
86
- import(pathToFileURL(modPath).href)
87
- .then((m) => {
88
- try {
89
- m.startBackgroundTokenRefresh();
90
- } catch (e) {
91
- console.error("[BackgroundTokenRefresh] start failed:", e && e.message ? e.message : e);
92
- }
93
- const stop = () => {
94
- try {
95
- m.stopBackgroundTokenRefresh();
96
- } catch {
97
- /* ignore */
98
- }
99
- };
100
- process.once("SIGINT", stop);
101
- process.once("SIGTERM", stop);
102
- })
103
- .catch((e) => {
104
- // Expected in published CLI standalone (src/ not on disk). App bootstrap covers it.
105
- if (process.env.DEBUG_BACKGROUND_TOKEN_REFRESH) {
106
- console.error("[BackgroundTokenRefresh] import failed:", e && e.message ? e.message : e);
107
- }
108
- });
109
- }
110
-
111
77
  function rightmostForwardedIp(xff) {
112
78
  if (!xff) return "";
113
79
  const hops = String(xff)
@@ -148,9 +114,6 @@ http.createServer = (...args) => {
148
114
  return handler(req, res);
149
115
  };
150
116
  const server = origCreate(...rest, wrapped);
151
- server.once("listening", () => {
152
- startBackgroundTokenRefreshFromCustomServer();
153
- });
154
117
  const origEmit = server.emit;
155
118
  // JBR 25 sends h2c upgrades that the HTTP/1.1 server would otherwise close.
156
119
  server.emit = function (event, ...eventArgs) {
package/app/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tokenhop-app",
3
- "version": "1.0.0",
3
+ "version": "1.0.3",
4
4
  "description": "tokenhop web dashboard",
5
5
  "private": true,
6
6
  "engines": {
@@ -13,12 +13,12 @@
13
13
  "postbuild": "node scripts/copy-standalone-assets.mjs",
14
14
  "postbuild:bun": "node scripts/copy-standalone-assets.mjs",
15
15
  "start": "node custom-server.js --port 20127",
16
- "dev:env": "dotenvx run -f .env.encrypted -- next dev --port 20127",
17
- "start:env": "dotenvx run -f .env.encrypted -- node custom-server.js --port 20127",
16
+ "dev:env": "op run --env-file=.env.local -- next dev --port 20127",
17
+ "start:env": "op run --env-file=.env.local -- node custom-server.js --port 20127",
18
18
  "dev:bun": "bun --bun next dev --webpack --port 20127",
19
19
  "build:bun": "bun --bun next build --webpack",
20
20
  "start:bun": "bun ./.next/standalone/custom-server.js",
21
- "dev:docker": "docker compose -f compose.dev.yml up",
21
+ "dev:docker": "op run --env-file=.env.local -- docker compose -f compose.dev.yml up",
22
22
  "dev:docker:down": "docker compose -f compose.dev.yml down",
23
23
  "cli:pack": "npm --prefix cli run pack:cli",
24
24
  "cli:publish": "node -e \"console.error('The CLI is published only by CI (.github/workflows/release-npm.yml) with npm trusted publishing. Do not publish manually.')\" && exit 1",
@@ -76,7 +76,6 @@
76
76
  "@biomejs/biome": "2.5.14",
77
77
  "@commitlint/cli": "21.2.3",
78
78
  "@commitlint/config-conventional": "21.2.3",
79
- "@dotenvx/dotenvx": "2.30.0",
80
79
  "@tailwindcss/postcss": "^4.1.18",
81
80
  "lefthook": "2.1.14",
82
81
  "markdownlint-cli": "0.49.1",
package/app/server.js CHANGED
@@ -9,7 +9,7 @@ const currentPort = parseInt(process.env.PORT, 10) || 3000
9
9
  const hostname = process.env.HOSTNAME || '0.0.0.0'
10
10
 
11
11
  let keepAliveTimeout = parseInt(process.env.KEEP_ALIVE_TIMEOUT, 10)
12
- const nextConfig = {"env":{},"typescript":{"ignoreBuildErrors":false},"typedRoutes":false,"distDir":"./.next-cli-build","cleanDistDir":true,"assetPrefix":"","cacheMaxMemorySize":52428800,"configOrigin":"next.config.mjs","useFileSystemPublicRoutes":true,"generateEtags":true,"pageExtensions":["tsx","ts","jsx","js"],"instrumentationClientInject":[],"poweredByHeader":true,"compress":true,"images":{"deviceSizes":[640,750,828,1080,1200,1920,2048,3840],"imageSizes":[32,48,64,96,128,256,384],"path":"/_next/image","loader":"default","loaderFile":"","domains":[],"disableStaticImages":false,"minimumCacheTTL":14400,"formats":["image/webp"],"maximumRedirects":3,"maximumResponseBody":50000000,"dangerouslyAllowLocalIP":false,"dangerouslyAllowSVG":false,"contentSecurityPolicy":"script-src 'none'; frame-src 'none'; sandbox;","contentDispositionType":"attachment","localPatterns":[{"pathname":"**","search":""}],"remotePatterns":[],"qualities":[75],"unoptimized":true,"customCacheHandler":false},"devIndicators":{"position":"bottom-left"},"onDemandEntries":{"maxInactiveAge":60000,"pagesBufferLength":5},"basePath":"","sassOptions":{},"trailingSlash":false,"i18n":null,"productionBrowserSourceMaps":false,"excludeDefaultMomentLocales":true,"reactProductionProfiling":false,"reactStrictMode":null,"reactMaxHeadersLength":6000,"httpAgentOptions":{"keepAlive":true},"logging":{"serverFunctions":true,"browserToTerminal":"warn"},"compiler":{},"expireTime":31536000,"staticPageGenerationTimeout":60,"output":"standalone","modularizeImports":{"@mui/icons-material":{"transform":"@mui/icons-material/{{member}}"},"lodash":{"transform":"lodash/{{member}}"}},"outputFileTracingRoot":"/home/runner/work/tokenhop","enablePrerenderSourceMaps":true,"cacheComponents":false,"cacheLife":{"default":{"stale":300,"revalidate":900,"expire":4294967294},"seconds":{"stale":30,"revalidate":1,"expire":60},"minutes":{"stale":300,"revalidate":60,"expire":3600},"hours":{"stale":300,"revalidate":3600,"expire":86400},"days":{"stale":300,"revalidate":86400,"expire":604800},"weeks":{"stale":300,"revalidate":604800,"expire":2592000},"max":{"stale":300,"revalidate":2592000,"expire":31536000}},"cacheHandlers":{},"experimental":{"appNewScrollHandler":true,"coldCacheBadge":false,"devValidationWorker":true,"useSkewCookie":false,"cssChunking":true,"multiZoneDraftMode":false,"appNavFailHandling":false,"prerenderEarlyExit":true,"serverMinification":true,"linkNoTouchStart":false,"caseSensitiveRoutes":false,"cachedNavigations":false,"dynamicOnHover":false,"useOffline":false,"varyParams":true,"optimisticRouting":true,"instrumentationClientRouterTransitionEvents":false,"prefetchInlining":{"maxSize":2048,"maxBundleSize":10240},"preloadEntriesOnStart":true,"clientRouterFilter":true,"clientRouterFilterRedirects":false,"fetchCacheKeyPrefix":"","proxyPrefetch":"flexible","optimisticClientCache":true,"manualClientBasePath":false,"cpus":3,"memoryBasedWorkersCount":false,"imgOptConcurrency":null,"imgOptOperationCache":null,"imgOptTimeoutInSeconds":7,"imgOptMaxInputPixels":268402689,"imgOptSequentialRead":null,"isrFlushToDisk":true,"workerThreads":false,"optimizeCss":false,"nextScriptWorkers":false,"scrollRestoration":false,"externalDir":false,"devMemoryThresholdRestart":true,"disableOptimizedLoading":false,"gzipSize":true,"craCompat":false,"esmExternals":true,"fullySpecified":false,"swcTraceProfiling":false,"forceSwcTransforms":false,"requestInsights":false,"largePageDataBytes":128000,"typedEnv":false,"parallelServerCompiles":false,"parallelServerBuildTraces":false,"ppr":false,"authInterrupts":false,"webpackMemoryOptimizations":false,"optimizeServerReact":true,"strictRouteTypes":false,"useTypeScriptCli":true,"removeUncaughtErrorAndRejectionListeners":false,"validateRSCRequestHeaders":true,"staleTimes":{"dynamic":0,"static":300},"reactDebugChannel":true,"serverComponentsHmrCache":true,"serverComponentsHmrCancellation":false,"staticGenerationMaxConcurrency":8,"staticGenerationMinPagesPerWorker":25,"transitionIndicator":false,"gestureTransition":false,"inlineCss":false,"useCache":false,"globalNotFound":false,"browserDebugInfoInTerminal":"warn","lockDistDir":true,"proxyClientMaxBodySize":134217728,"hideLogsAfterAbort":false,"mcpServer":true,"turbopackFileSystemCacheForDev":true,"turbopackFileSystemCacheForBuild":true,"turbopackInferModuleSideEffects":true,"turbopackPluginRuntimeStrategy":"childProcesses","optimizePackageImports":["@dnd-kit/core","@dnd-kit/sortable","marked","lucide-react","date-fns","lodash-es","ramda","antd","react-bootstrap","ahooks","@ant-design/icons","@headlessui/react","@headlessui-float/react","@heroicons/react/20/solid","@heroicons/react/24/solid","@heroicons/react/24/outline","@visx/visx","@tremor/react","rxjs","@mui/material","@mui/icons-material","recharts","react-use","effect","@effect/schema","@effect/platform","@effect/platform-node","@effect/platform-browser","@effect/platform-bun","@effect/sql","@effect/sql-mssql","@effect/sql-mysql2","@effect/sql-pg","@effect/sql-sqlite-node","@effect/sql-sqlite-bun","@effect/sql-sqlite-wasm","@effect/sql-sqlite-react-native","@effect/rpc","@effect/rpc-http","@effect/typeclass","@effect/experimental","@effect/opentelemetry","@material-ui/core","@material-ui/icons","@tabler/icons-react","mui-core","react-icons/ai","react-icons/bi","react-icons/bs","react-icons/cg","react-icons/ci","react-icons/di","react-icons/fa","react-icons/fa6","react-icons/fc","react-icons/fi","react-icons/gi","react-icons/go","react-icons/gr","react-icons/hi","react-icons/hi2","react-icons/im","react-icons/io","react-icons/io5","react-icons/lia","react-icons/lib","react-icons/lu","react-icons/md","react-icons/pi","react-icons/ri","react-icons/rx","react-icons/si","react-icons/sl","react-icons/tb","react-icons/tfi","react-icons/ti","react-icons/vsc","react-icons/wi"],"turbopackMemoryEvictionMode":"auto","useCacheTimeout":54,"instantInsights":{"validationLevel":"warning"},"trustHostHeader":false,"isExperimentalCompile":false},"htmlLimitedBots":"[\\w-]+-Google|Google-[\\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight","bundlePagesRouterDependencies":false,"configFileName":"next.config.mjs","serverExternalPackages":["better-sqlite3","sql.js","node:sqlite","bun:sqlite","open"],"turbopack":{"root":"/home/runner/work/tokenhop"},"outputFileTracingIncludes":{"/skills/[...slug]":["./skills/**/*.md"]},"outputFileTracingExcludes":{"*":["./gitbook/**/*"]},"repoRoot":"/home/runner/work/tokenhop/tokenhop","distDirRoot":".next-cli-build","supportsImmutableAssets":false,"_originalRewrites":{"beforeFiles":[],"afterFiles":[{"source":"/v1/v1/:path*","destination":"/api/v1/:path*"},{"source":"/v1/v1","destination":"/api/v1"},{"source":"/codex/:path*","destination":"/api/v1/responses"},{"source":"/responses","destination":"/api/v1/responses"},{"source":"/v1beta/:path*","destination":"/api/v1beta/:path*"},{"source":"/v1beta","destination":"/api/v1beta"},{"source":"/v1/:path*","destination":"/api/v1/:path*"},{"source":"/v1","destination":"/api/v1"}],"fallback":[]}}
12
+ const nextConfig = {"env":{},"typescript":{"ignoreBuildErrors":false},"typedRoutes":false,"distDir":"./.next-cli-build","cleanDistDir":true,"assetPrefix":"","cacheMaxMemorySize":52428800,"configOrigin":"next.config.mjs","useFileSystemPublicRoutes":true,"generateEtags":true,"pageExtensions":["tsx","ts","jsx","js"],"instrumentationClientInject":[],"poweredByHeader":true,"compress":true,"images":{"deviceSizes":[640,750,828,1080,1200,1920,2048,3840],"imageSizes":[32,48,64,96,128,256,384],"path":"/_next/image","loader":"default","loaderFile":"","domains":[],"disableStaticImages":false,"minimumCacheTTL":14400,"formats":["image/webp"],"maximumRedirects":3,"maximumResponseBody":50000000,"dangerouslyAllowLocalIP":false,"dangerouslyAllowSVG":false,"contentSecurityPolicy":"script-src 'none'; frame-src 'none'; sandbox;","contentDispositionType":"attachment","localPatterns":[{"pathname":"**","search":""}],"remotePatterns":[],"qualities":[75],"unoptimized":true,"customCacheHandler":false},"devIndicators":{"position":"bottom-left"},"onDemandEntries":{"maxInactiveAge":60000,"pagesBufferLength":5},"basePath":"","sassOptions":{},"trailingSlash":false,"i18n":null,"productionBrowserSourceMaps":false,"excludeDefaultMomentLocales":true,"reactProductionProfiling":false,"reactStrictMode":null,"reactMaxHeadersLength":6000,"httpAgentOptions":{"keepAlive":true},"logging":{"serverFunctions":true,"browserToTerminal":"warn"},"compiler":{},"expireTime":31536000,"staticPageGenerationTimeout":60,"output":"standalone","modularizeImports":{"@mui/icons-material":{"transform":"@mui/icons-material/{{member}}"},"lodash":{"transform":"lodash/{{member}}"}},"outputFileTracingRoot":"/home/runner/work/tokenhop","enablePrerenderSourceMaps":true,"cacheComponents":false,"cacheLife":{"default":{"stale":300,"revalidate":900,"expire":4294967294},"seconds":{"stale":30,"revalidate":1,"expire":60},"minutes":{"stale":300,"revalidate":60,"expire":3600},"hours":{"stale":300,"revalidate":3600,"expire":86400},"days":{"stale":300,"revalidate":86400,"expire":604800},"weeks":{"stale":300,"revalidate":604800,"expire":2592000},"max":{"stale":300,"revalidate":2592000,"expire":31536000}},"cacheHandlers":{},"experimental":{"appNewScrollHandler":true,"coldCacheBadge":false,"devValidationWorker":true,"useSkewCookie":false,"cssChunking":true,"multiZoneDraftMode":false,"appNavFailHandling":false,"prerenderEarlyExit":true,"serverMinification":true,"linkNoTouchStart":false,"caseSensitiveRoutes":false,"cachedNavigations":false,"dynamicOnHover":false,"useOffline":false,"varyParams":true,"optimisticRouting":true,"instrumentationClientRouterTransitionEvents":false,"prefetchInlining":{"maxSize":2048,"maxBundleSize":10240},"preloadEntriesOnStart":true,"clientRouterFilter":true,"clientRouterFilterRedirects":false,"fetchCacheKeyPrefix":"","proxyPrefetch":"flexible","optimisticClientCache":true,"manualClientBasePath":false,"cpus":3,"memoryBasedWorkersCount":false,"imgOptConcurrency":null,"imgOptOperationCache":null,"imgOptTimeoutInSeconds":7,"imgOptMaxInputPixels":268402689,"imgOptSequentialRead":null,"isrFlushToDisk":true,"workerThreads":false,"optimizeCss":false,"nextScriptWorkers":false,"scrollRestoration":false,"externalDir":false,"devMemoryThresholdRestart":true,"disableOptimizedLoading":false,"gzipSize":true,"craCompat":false,"esmExternals":true,"fullySpecified":false,"swcTraceProfiling":false,"forceSwcTransforms":false,"requestInsights":false,"largePageDataBytes":128000,"typedEnv":false,"parallelServerCompiles":false,"parallelServerBuildTraces":false,"ppr":false,"authInterrupts":false,"webpackMemoryOptimizations":false,"optimizeServerReact":true,"strictRouteTypes":false,"useTypeScriptCli":true,"removeUncaughtErrorAndRejectionListeners":false,"validateRSCRequestHeaders":true,"staleTimes":{"dynamic":0,"static":300},"reactDebugChannel":true,"serverComponentsHmrCache":true,"serverComponentsHmrCancellation":false,"staticGenerationMaxConcurrency":8,"staticGenerationMinPagesPerWorker":25,"transitionIndicator":false,"gestureTransition":false,"inlineCss":false,"useCache":false,"globalNotFound":false,"browserDebugInfoInTerminal":"warn","lockDistDir":true,"proxyClientMaxBodySize":134217728,"hideLogsAfterAbort":false,"mcpServer":true,"turbopackFileSystemCacheForDev":true,"turbopackFileSystemCacheForBuild":true,"turbopackInferModuleSideEffects":true,"turbopackPluginRuntimeStrategy":"childProcesses","optimizePackageImports":["@dnd-kit/core","@dnd-kit/sortable","marked","lucide-react","date-fns","lodash-es","ramda","antd","react-bootstrap","ahooks","@ant-design/icons","@headlessui/react","@headlessui-float/react","@heroicons/react/20/solid","@heroicons/react/24/solid","@heroicons/react/24/outline","@visx/visx","@tremor/react","rxjs","@mui/material","@mui/icons-material","recharts","react-use","effect","@effect/schema","@effect/platform","@effect/platform-node","@effect/platform-browser","@effect/platform-bun","@effect/sql","@effect/sql-mssql","@effect/sql-mysql2","@effect/sql-pg","@effect/sql-sqlite-node","@effect/sql-sqlite-bun","@effect/sql-sqlite-wasm","@effect/sql-sqlite-react-native","@effect/rpc","@effect/rpc-http","@effect/typeclass","@effect/experimental","@effect/opentelemetry","@material-ui/core","@material-ui/icons","@tabler/icons-react","mui-core","react-icons/ai","react-icons/bi","react-icons/bs","react-icons/cg","react-icons/ci","react-icons/di","react-icons/fa","react-icons/fa6","react-icons/fc","react-icons/fi","react-icons/gi","react-icons/go","react-icons/gr","react-icons/hi","react-icons/hi2","react-icons/im","react-icons/io","react-icons/io5","react-icons/lia","react-icons/lib","react-icons/lu","react-icons/md","react-icons/pi","react-icons/ri","react-icons/rx","react-icons/si","react-icons/sl","react-icons/tb","react-icons/tfi","react-icons/ti","react-icons/vsc","react-icons/wi"],"turbopackMemoryEvictionMode":"auto","useCacheTimeout":54,"instantInsights":{"validationLevel":"warning"},"trustHostHeader":false,"isExperimentalCompile":false},"htmlLimitedBots":"[\\w-]+-Google|Google-[\\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight","bundlePagesRouterDependencies":false,"configFileName":"next.config.mjs","agentRules":false,"serverExternalPackages":["better-sqlite3","sql.js","node:sqlite","bun:sqlite","open"],"turbopack":{"root":"/home/runner/work/tokenhop"},"outputFileTracingIncludes":{"/skills/[...slug]":["./skills/**/*.md"]},"outputFileTracingExcludes":{"*":["./gitbook/**/*"]},"repoRoot":"/home/runner/work/tokenhop/tokenhop","distDirRoot":".next-cli-build","supportsImmutableAssets":false,"_originalRewrites":{"beforeFiles":[],"afterFiles":[{"source":"/v1/v1/:path*","destination":"/api/v1/:path*"},{"source":"/v1/v1","destination":"/api/v1"},{"source":"/codex/:path*","destination":"/api/v1/responses"},{"source":"/responses","destination":"/api/v1/responses"},{"source":"/v1beta/:path*","destination":"/api/v1beta/:path*"},{"source":"/v1beta","destination":"/api/v1beta"},{"source":"/v1/:path*","destination":"/api/v1/:path*"},{"source":"/v1","destination":"/api/v1"}],"fallback":[]}}
13
13
 
14
14
  process.env.__NEXT_PRIVATE_STANDALONE_CONFIG = JSON.stringify(nextConfig)
15
15
 
@@ -1,4 +1,5 @@
1
1
  import fs from "node:fs";
2
+ import path from "node:path";
2
3
  import initSqlJs from "sql.js";
3
4
  import { PRAGMA_SQL } from "../schema.js";
4
5
  import { runShutdownFlushers } from "../shutdownFlushers.js";
@@ -23,8 +24,39 @@ export async function createSqlJsAdapter(filePath) {
23
24
  const SAVE_DEBOUNCE_MS = 100;
24
25
 
25
26
  function persist() {
26
- const data = db.export();
27
- fs.writeFileSync(filePath, Buffer.from(data));
27
+ const data = Buffer.from(db.export());
28
+ // Write a sibling temp file, fsync, then rename over the target so a crash mid-write
29
+ // never leaves a truncated DB. rename replaces an existing file on POSIX and Windows.
30
+ // Unique per writer so two processes on one DATA_DIR never share a temp file.
31
+ const tmpPath = `${filePath}.${process.pid}.${Math.random().toString(36).slice(2, 10)}.tmp`;
32
+ let fd = null;
33
+ try {
34
+ fd = fs.openSync(tmpPath, "wx");
35
+ fs.writeSync(fd, data, 0, data.length, 0);
36
+ fs.fsyncSync(fd);
37
+ fs.closeSync(fd);
38
+ fd = null;
39
+ fs.renameSync(tmpPath, filePath);
40
+ // Make the rename itself durable. Directories can't be fsynced on Windows.
41
+ try {
42
+ const dirFd = fs.openSync(path.dirname(filePath), "r");
43
+ try {
44
+ fs.fsyncSync(dirFd);
45
+ } finally {
46
+ fs.closeSync(dirFd);
47
+ }
48
+ } catch {}
49
+ } catch (e) {
50
+ if (fd !== null) {
51
+ try {
52
+ fs.closeSync(fd);
53
+ } catch {}
54
+ }
55
+ try {
56
+ fs.rmSync(tmpPath, { force: true });
57
+ } catch {}
58
+ throw e;
59
+ }
28
60
  dirty = false;
29
61
  }
30
62
 
@@ -110,8 +142,11 @@ export async function createSqlJsAdapter(filePath) {
110
142
 
111
143
  function close() {
112
144
  if (saveTimer) clearTimeout(saveTimer);
113
- if (dirty) persist();
114
- db.close();
145
+ try {
146
+ if (dirty) persist();
147
+ } finally {
148
+ db.close();
149
+ }
115
150
  }
116
151
 
117
152
  // Flush on shutdown (sync: repos flush before sql.js persists to disk)
@@ -152,20 +152,27 @@ export class XaiService extends OAuthService {
152
152
  /**
153
153
  * Refresh an access token using a refresh_token.
154
154
  */
155
- async refreshAccessToken(refreshToken) {
155
+ async refreshAccessToken(refreshToken, proxyOptions = null) {
156
156
  const { tokenUrl } = await discoverEndpoints();
157
- const res = await fetch(tokenUrl, {
158
- method: "POST",
159
- headers: {
160
- "Content-Type": "application/x-www-form-urlencoded",
161
- Accept: "application/json",
157
+ // Dynamic import: proxyFetch patches globalThis.fetch at load; this module is
158
+ // also imported by pure URL/discovery helpers that must not trigger that.
159
+ const { proxyAwareFetch } = await import("open-sse/utils/proxyFetch.js");
160
+ const res = await proxyAwareFetch(
161
+ tokenUrl,
162
+ {
163
+ method: "POST",
164
+ headers: {
165
+ "Content-Type": "application/x-www-form-urlencoded",
166
+ Accept: "application/json",
167
+ },
168
+ body: new URLSearchParams({
169
+ grant_type: "refresh_token",
170
+ client_id: XAI_CONFIG.clientId,
171
+ refresh_token: refreshToken,
172
+ }),
162
173
  },
163
- body: new URLSearchParams({
164
- grant_type: "refresh_token",
165
- client_id: XAI_CONFIG.clientId,
166
- refresh_token: refreshToken,
167
- }),
168
- });
174
+ proxyOptions,
175
+ );
169
176
  if (!res.ok) {
170
177
  const err = await res.text();
171
178
  throw new Error(`xAI token refresh failed: ${err}`);
@@ -104,7 +104,8 @@ function buildProxyOptions(cfg) {
104
104
  connectionProxyUrl: cfg.connectionProxyUrl || "",
105
105
  connectionNoProxy: cfg.connectionNoProxy || "",
106
106
  vercelRelayUrl: cfg.vercelRelayUrl || "",
107
- strictProxy: false,
107
+ strictProxy: cfg.strictProxy === true,
108
+ connectionProxyPoolId: cfg.proxyPoolId || null,
108
109
  };
109
110
  }
110
111
 
@@ -200,15 +201,35 @@ function shouldSkipAfterFailure(state, key, nowMs = Date.now()) {
200
201
  return failedAt && nowMs - failedAt < C.failureCooldownMs;
201
202
  }
202
203
 
204
+ // Skip reasons repeat every tick in steady state; log each one once per connection.
205
+ function logSkipOnce(state, key, reason) {
206
+ state.lastSkipLog ??= {};
207
+ if (state.lastSkipLog[key] === reason) return;
208
+ state.lastSkipLog[key] = reason;
209
+ console.log(`[AutoPing] ${key}: ${reason}`);
210
+ }
211
+
203
212
  async function pingConnection(conn, provider, providerConfig, handler, deps, state = g) {
204
213
  const key = cacheKey(provider, conn.id);
205
214
 
206
215
  // resetAt is stable for time-based windows; Codex polls every tick because inactive windows slide forward.
207
216
  const cachedReset = state.resetCache[key];
217
+ const cachedResetMs = cachedReset ? new Date(cachedReset).getTime() : NaN;
218
+ const lastPingedKey = conn.lastPingedResetKey || normalizeResetKey(conn.lastPingedResetAt);
219
+ // A missed window: the last observed reset passed and was never pinged (the
220
+ // live read may no longer report it). Recover it instead of waiting forever.
221
+ const missedReset =
222
+ !providerConfig.pingWhenResetAtSlides &&
223
+ Number.isFinite(cachedResetMs) &&
224
+ Date.now() >= cachedResetMs &&
225
+ lastPingedKey !== normalizeResetKey(cachedReset)
226
+ ? cachedReset
227
+ : null;
208
228
  if (
229
+ !missedReset &&
209
230
  !providerConfig.pingWhenResetAtSlides &&
210
231
  cachedReset &&
211
- Date.now() < new Date(cachedReset).getTime() - C.refreshAheadMs
232
+ Date.now() < cachedResetMs - C.refreshAheadMs
212
233
  )
213
234
  return;
214
235
 
@@ -231,17 +252,28 @@ async function pingConnection(conn, provider, providerConfig, handler, deps, sta
231
252
  const usage = await handler.getUsage(connection.accessToken, proxyOptions);
232
253
  const quotas = usage?.quotas || {};
233
254
  const quota = quotas?.[providerConfig.quotaKey];
234
- const resetAt = quota?.resetAt;
235
- if (!resetAt) return;
255
+ const liveReset = quota?.resetAt;
236
256
 
237
- state.resetCache[key] = resetAt;
257
+ // Prefer the missed window: the live read may already report the next reset
258
+ // (or nothing on an idle window) while the last observed one went unpinged.
259
+ const resetAt = missedReset || liveReset;
260
+ if (!resetAt) {
261
+ if (cachedReset) logSkipOnce(state, key, `no reset reported (last seen ${cachedReset})`);
262
+ return;
263
+ }
264
+ if (liveReset) state.resetCache[key] = liveReset;
238
265
 
239
266
  if (
240
267
  providerConfig.skipWhenBlockingQuotaExhausted &&
241
268
  hasExhaustedBlockingQuota(quotas, providerConfig.quotaKey)
242
- )
269
+ ) {
270
+ logSkipOnce(state, key, `skip ping (blocking quota exhausted, reset ${resetAt})`);
243
271
  return;
244
- if (isQuotaExhausted(quota)) return;
272
+ }
273
+ if (isQuotaExhausted(quota)) {
274
+ logSkipOnce(state, key, `skip ping (session quota exhausted, reset ${resetAt})`);
275
+ return;
276
+ }
245
277
 
246
278
  const now = Date.now();
247
279
  const resetKey = normalizeResetKey(resetAt);
@@ -251,7 +283,10 @@ async function pingConnection(conn, provider, providerConfig, handler, deps, sta
251
283
  // Claude waits for reset. Codex pings only when resetAt slides, which means the 5h window is inactive.
252
284
  if (!shouldPingForReset(providerConfig, cachedReset, resetAt, now)) return;
253
285
  if (wasPingedRecently(connection, providerConfig.minPingIntervalMs, now)) return;
254
- if (lastPingedResetKey === resetKey) return;
286
+ if (lastPingedResetKey === resetKey) {
287
+ logSkipOnce(state, key, `skip ping (reset ${resetAt} already pinged)`);
288
+ return;
289
+ }
255
290
 
256
291
  const ok = await handler.sendPing(connection, providerConfig, proxyOptions, deps);
257
292
  if (!ok) {
@@ -40,7 +40,8 @@ function buildProxyOptions(cfg) {
40
40
  connectionProxyUrl: cfg?.connectionProxyUrl || "",
41
41
  connectionNoProxy: cfg?.connectionNoProxy || "",
42
42
  vercelRelayUrl: cfg?.vercelRelayUrl || "",
43
- strictProxy: false,
43
+ strictProxy: cfg?.strictProxy === true,
44
+ connectionProxyPoolId: cfg?.proxyPoolId || null,
44
45
  };
45
46
  }
46
47
 
@@ -78,7 +78,19 @@ async function loadActiveConnections() {
78
78
 
79
79
  async function refreshOne(connection) {
80
80
  const { checkAndRefreshToken } = await import("./tokenRefresh.js");
81
- return checkAndRefreshToken(connection.provider, connection, { force: true });
81
+ // Resolve the connection's proxy config so refresh honours the pool's
82
+ // strictProxy flag (YAN-651): never fall back to direct when strict is on.
83
+ const { resolveConnectionProxyConfig } = await import("../../lib/network/connectionProxy.js");
84
+ const cfg = await resolveConnectionProxyConfig(connection.providerSpecificData || {});
85
+ const proxyOptions = {
86
+ connectionProxyEnabled: cfg.connectionProxyEnabled === true,
87
+ connectionProxyUrl: cfg.connectionProxyUrl || "",
88
+ connectionNoProxy: cfg.connectionNoProxy || "",
89
+ vercelRelayUrl: cfg.vercelRelayUrl || "",
90
+ strictProxy: cfg.strictProxy === true,
91
+ connectionProxyPoolId: cfg.proxyPoolId || null,
92
+ };
93
+ return checkAndRefreshToken(connection.provider, connection, { force: true, proxyOptions });
82
94
  }
83
95
 
84
96
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tokenhop",
3
- "version": "1.0.0",
3
+ "version": "1.0.3",
4
4
  "description": "tokenhop CLI - Start and manage tokenhop server",
5
5
  "bin": {
6
6
  "tokenhop": "cli.js"
@@ -305,9 +305,11 @@ async function handleCreateCombo() {
305
305
  // Create combo
306
306
  showStatus("Creating combo...", "info");
307
307
 
308
+ // The API stores model id strings (alias/model, as the dashboard sends),
309
+ // not the /api/models row objects (YAN-693).
308
310
  const createResult = await api.createCombo({
309
311
  name,
310
- models: selectedModels,
312
+ models: selectedModels.map((m) => m.routedModel || `${m.provider}/${m.model}`),
311
313
  });
312
314
 
313
315
  if (!createResult.success) {
@@ -1 +0,0 @@
1
- "use strict";exports.id=1764,exports.ids=[1764],exports.modules={2451:(a,b,c)=>{c.d(b,{T:()=>d});function d(a,b){try{if(!Array.isArray(a))return{id:null,currentWeights:new Map};let c=b instanceof Map?b:new Map,d=new Map,e=new Set,f=0,g=null,h=-1/0;for(let b of a){let a=b?.id;if("string"!=typeof a||0===a.length||e.has(a))continue;e.add(a);let i=b?.weight;if(!Number.isFinite(i)||i<=0)continue;let j=(c.get(a)??0)+i;d.set(a,j),f+=i,j>h&&(g=a,h=j)}if(null===g)return{id:null,currentWeights:new Map};return d.set(g,d.get(g)-f),{id:g,currentWeights:d}}catch{return{id:null,currentWeights:new Map}}}},3662:(a,b,c)=>{c.d(b,{LY:()=>d,O:()=>e,t2:()=>g,x6:()=>f});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="out of extra usage",g=[{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:f,cooldownMs: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}]},58691:(a,b,c)=>{c.d(b,{VF:()=>i,er:()=>h});let d=Object.freeze(["fallback","round-robin","fusion","weighted"]),e="fallback",f=new Set(["__proto__","constructor","prototype"]);function g(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}function h(a,b){let c=a?.comboStrategies,f=g(c)&&Object.hasOwn(c,b)&&g(c[b])?c[b]:{},h=f.fallbackStrategy||a?.comboStrategy||e;return{strategy:d.includes(h)?h:e,stickyLimit:a?.comboStickyRoundRobinLimit,weights:g(f.weights)?f.weights:{},judgeModel:f.judgeModel,fusionTuning:f.fusionTuning}}function i(a){if(!g(a))return null;if(Object.hasOwn(a,"comboStrategy")&&!d.includes(a.comboStrategy))return"Invalid comboStrategy";if(!Object.hasOwn(a,"comboStrategies"))return null;let b=a.comboStrategies;if(!g(b))return"comboStrategies must be an object";let c=Object.entries(b);if(c.length>500)return"Too many comboStrategies entries";for(let[a,b]of c){if(f.has(a))return`Invalid combo name "${a}"`;if(!g(b)||void 0!==b.fallbackStrategy&&!d.includes(b.fallbackStrategy))return`Invalid strategy for combo "${a}"`;let c=b.weights;if(void 0!==c){if(!g(c)||Object.keys(c).length>200)return`Invalid weights for combo "${a}"`;for(let[b,d]of Object.entries(c))if(f.has(b)||"number"!=typeof d||!Number.isFinite(d)||d<0||d>1e3)return`Invalid weight for combo "${a}" model "${b}"`}}return null}}};
@@ -1 +0,0 @@
1
- "use strict";exports.id=2384,exports.ids=[1998,2384,7247],exports.modules={3662:(a,b,c)=>{c.d(b,{LY:()=>d,O:()=>e,t2:()=>g,x6:()=>f});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="out of extra usage",g=[{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:f,cooldownMs: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}]},7803:(a,b,c)=>{c.r(b),c.d(b,{debug:()=>o,error:()=>r,errorLine:()=>l,fmtThink:()=>m,info:()=>p,line:()=>k,maskKey:()=>v,nextTag:()=>i,request:()=>s,response:()=>t,stream:()=>u,tagForSession:()=>j,warn:()=>q});let d={DEBUG:0,INFO:1,WARN:2,ERROR:3},e=d[process.env.LOG_LEVEL?.toUpperCase?.()]??d.INFO;function f(){return new Date().toLocaleTimeString("en-US",{hour12:!1})}let g=["\uD83D\uDFE2","\uD83D\uDD35","\uD83D\uDFE3","\uD83D\uDFE1","\uD83D\uDFE0","\uD83D\uDD34","âšĒ","\uD83D\uDFE4"],h=0;function i(){let a=g[h%g.length];return h++,a}function j(a){if(!a)return i();let b=0;for(let c=0;c<a.length;c++)b=31*b+a.charCodeAt(c)|0;return g[Math.abs(b)%g.length]}function k(a,b,c){e>d.INFO||console.log(`[${f()}] ${a} ${b} ${c}`)}function l(a,b,c){console.log(`[${f()}] ${a} ${b} ${c}`)}function m(a){return a&&a.mode?"none"===a.mode?"off":"auto"===a.mode?"auto":"budget"===a.mode?a.budget>=1e3?`${Math.round(a.budget/1e3)}k`:`${a.budget}`:"level"===a.mode?a.level:null:null}function n(a){if(!a)return"";if("string"==typeof a)return a;try{return JSON.stringify(a)}catch{return String(a)}}function o(a,b,c){if(e<=d.DEBUG){let d=c?` ${n(c)}`:"";console.log(`[${f()}] 🔍 [${a}] ${b}${d}`)}}function p(a,b,c){if(e<=d.INFO){let d=c?` ${n(c)}`:"";console.log(`[${f()}] â„šī¸ [${a}] ${b}${d}`)}}function q(a,b,c){if(e<=d.WARN){let d=c?` ${n(c)}`:"";console.warn(`[${f()}] âš ī¸ [${a}] ${b}${d}`)}}function r(a,b,c){if(e<=d.ERROR){let d=c?` ${n(c)}`:"";console.log(`[${f()}] ❌ [${a}] ${b}${d}`)}}function s(a,b,c){let d=c?` ${n(c)}`:"";console.log(`\x1b[36m[${f()}] đŸ“Ĩ ${a} ${b}${d}\x1b[0m`)}function t(a,b,c){let d=c?` ${n(c)}`:"";console.log(`[${f()}] ${a<400?"\uD83D\uDCE4":"\uD83D\uDCA5"} ${a} (${b}ms)${d}`)}function u(a,b){let c=b?` ${n(b)}`:"";console.log(`[${f()}] 🌊 [STREAM] ${a}${c}`)}function v(a){return!a||a.length<8?"***":`${a.slice(0,4)}...${a.slice(-4)}`}},14170:(a,b,c)=>{c.d(b,{h:()=>d,t:()=>e});let d={OPENAI:"openai",OPENAI_RESPONSES:"openai-responses",OPENAI_RESPONSE:"openai-response",CLAUDE:"claude",GEMINI:"gemini",GEMINI_CLI:"gemini-cli",VERTEX:"vertex",CODEX:"codex",ANTIGRAVITY:"antigravity",KIRO:"kiro",CURSOR:"cursor",OLLAMA:"ollama",COMMANDCODE:"commandcode"};function e(a,b){return a.includes("/v1/responses")?d.OPENAI_RESPONSES:a.includes("/v1/messages")?d.CLAUDE:a.includes("/v1/chat/completions")&&Array.isArray(b?.input)?d.OPENAI:null}},35024:(a,b,c)=>{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=>{a.exports={rE:"1.0.0"}},39326:(a,b,c)=>{c.d(b,{B:()=>h,p:()=>g});var d=c(71998);function e(a){return null==a?"":String(a).trim()}let f=new Map;function g(a,b,c){if(!a||0===a.length)return null;if(1===a.length)return a[0];if("round-robin"===b){let b=f.get(c)||{index:-1};return b.index=(b.index+1)%a.length,f.set(c,b),a[b.index]}return"random"===b?a[Math.floor(Math.random()*a.length)]:a[0]}async function h(a={}){try{let b=e(a?.proxyPoolId),c="__none__"===b?"":b,f=function(a={}){let b=a?.connectionProxyEnabled===!0,c=e(a?.connectionProxyUrl);return{connectionProxyEnabled:b,connectionProxyUrl:c,connectionNoProxy:e(a?.connectionNoProxy)}}(a);if(c){let a=await (0,d.hr)(c),b=e(a?.proxyUrl),f=e(a?.noProxy);if(a&&!0===a.isActive&&b){if("vercel"===a.type||"cloudflare"===a.type||"deno"===a.type)return{source:a.type,proxyPoolId:c,proxyPool:a,connectionProxyEnabled:!1,connectionProxyUrl:"",connectionNoProxy:f,strictProxy:!0===a.strictProxy,vercelRelayUrl:b};return{source:"pool",proxyPoolId:c,proxyPool:a,connectionProxyEnabled:!0,connectionProxyUrl:b,connectionNoProxy:f,strictProxy:!0===a.strictProxy}}}if(f.connectionProxyEnabled&&f.connectionProxyUrl)return{source:"legacy",proxyPoolId:c||null,proxyPool:null,...f};return{source:"none",proxyPoolId:c||null,proxyPool:null,...f}}catch(a){return console.error("[resolveConnectionProxyConfig] Failed to resolve proxy config:",a),{source:"error",proxyPoolId:null,proxyPool:null,connectionProxyEnabled:!1,connectionProxyUrl:"",connectionNoProxy:"",strictProxy:!1}}}},40398:(a,b,c)=>{c.d(b,{EP:()=>ag,fe:()=>ai});var d=c(92990),e=c(67828),f=c(39326),g=c(88862),h=c(75924),i=c(57247),j=c(59096);let k=`https://chatgpt.com/backend-api/codex/models?client_version=${h.Ch}`,l=new Set(["hide","none"]),m=a=>a?.kind||a?.type||"llm",n=a=>a?.upstreamModelId&&a.upstreamModelId===a.id,o=(0,g.s)({refreshFn:a=>(0,e.Wm)(a.refreshToken),fetchFn:a=>fetch(k,{method:"GET",headers:{"Content-Type":"application/json",Accept:"application/json",Authorization:`Bearer ${a}`,originator:"codex_cli_rs"}}),parseFn:function(a){let b=(Array.isArray(a)?a:a?.models||a?.data||[]).flatMap(a=>{let b=a?.slug||a?.id;if("string"!=typeof b||!b.trim())return[];let c=m(a);return[{id:b,name:a.display_name||a.name||b,...a.description?{description:a.description}:{},...Number.isFinite(a.context_window)?{contextLength:a.context_window}:{},..."llm"!==c?{kind:c}:{},...l.has(a.visibility)?{hidden:!0}:{}}]});return(0,j._X)(b)},errorLabel:"Failed to fetch Codex models"});async function p(a){var b,c;let d,e,f=await o(a);if(f.error)return{models:[],warning:f.error};if(!f.models.length)return{models:[],warning:f.warning||"Codex returned no live models."};let g=(0,i.KC)("codex"),k=(b=f.models,d=new Set(b.map(a=>a.id)),[...b,...g.filter(a=>!d.has(a.id)&&("llm"!==m(a)||n(a))).map(({id:a,name:b,kind:c,type:d,upstreamModelId:e,quotaFamily:f})=>({id:a,name:b,...c||d?{kind:c||d}:{},...e?{upstreamModelId:e}:{},...f?{quotaFamily:f}:{}}))]),l=(c=f.models,e=new Set(c.map(a=>a.id)),g.filter(a=>"llm"===m(a)&&!n(a)&&!a.id.endsWith(j.d5)&&!e.has(a.id)).map(a=>a.id));if(!l.length)return{models:k};let p=`Codex live catalog is missing ${l.join(", ")}. If these are current models, set CODEX_CLI_VERSION to your installed Codex CLI version (currently sending client_version=${h.Ch}).`;return console.warn(p),{models:k,warning:p}}var q=c(74129),r=c(47293),s=c(55511),t=c.n(s),u=c(63419);let v="1.0.0",w="0.10.32",x="us-east-1",y=new Map;async function z(a,b){let c,d,e,f=a?.providerSpecificData?.profileArn||"",g=function(a){if(!a||"string"!=typeof a)return x;let b=a.split(":");return b.length>=4&&b[3]?b[3]:x}(f),h=new URLSearchParams;h.set("origin","AI_EDITOR"),f&&h.set("profileArn",f);let i=`https://q.${g}.amazonaws.com/ListAvailableModels?${h.toString()}`,j={...(d=a?.providerSpecificData?.clientId||a?.refreshToken||a?.providerSpecificData?.profileArn||a?.accessToken||"kiro-anonymous",e=(0,s.createHash)("sha256").update(String(d)).digest("hex"),{"User-Agent":`aws-sdk-js/${v} ua/2.1 os/windows#10.0.26200 lang/js md/nodejs#22.21.1 api/codewhispererruntime#${v} m/N,E KiroIDE-${w}-${e}`,"x-amz-user-agent":`aws-sdk-js/${v} KiroIDE-${w}-${e}`,"x-amzn-kiro-agent-mode":"vibe","x-amzn-codewhisperer-optout":"true","amz-sdk-request":"attempt=1; max=1","amz-sdk-invocation-id":(0,r.A)(),Accept:"application/json"}),Authorization:`Bearer ${a?.accessToken||""}`},k=new AbortController,l=setTimeout(()=>k.abort("timeout"),3e4);b&&"function"==typeof b.addEventListener&&b.addEventListener("abort",()=>k.abort(b.reason));try{c=await fetch(i,{method:"GET",headers:j,signal:k.signal})}finally{clearTimeout(l)}if(!c.ok){let a=await c.text().catch(()=>""),b=Error(`Kiro ListAvailableModels ${c.status}: ${a||c.statusText}`);throw b.status=c.status,b.body=a,b}let m=await c.json();return Array.isArray(m?.models)?m.models:[]}async function A(a,b={}){let c,d,e;if(!a||!a.accessToken)return b.log?.debug?.("KIRO_MODELS","No accessToken; skipping live fetch"),null;let f=(e=(d=a?.providerSpecificData||{}).profileArn||d.clientId||a?.refreshToken||a?.accessToken||"anonymous",(0,s.createHash)("sha256").update(`kiro:${e}`).digest("hex")),g=Date.now();if(!b.forceRefresh){let a=y.get(f);if(a&&a.expiresAt>g)return{models:a.models,rawModels:a.rawModels}}try{c=await z(a,b.signal)}catch(d){if(!d||401!==d.status||!a.refreshToken)return b.log?.warn?.("KIRO_MODELS",`ListAvailableModels failed: ${d?.message||d}`),null;{b.log?.info?.("KIRO_MODELS","Got 401 from Kiro; refreshing token");let d=await (0,u.Ql)(a.refreshToken,a.providerSpecificData,b.log);if(!d?.accessToken)return b.log?.warn?.("KIRO_MODELS","Token refresh did not return accessToken"),null;{let e={...a,...d};if("function"==typeof b.onCredentialsRefreshed)try{await b.onCredentialsRefreshed(d)}catch(a){b.log?.warn?.("KIRO_MODELS",`onCredentialsRefreshed failed: ${a?.message||a}`)}try{c=await z(e,b.signal),a.accessToken=e.accessToken,e.refreshToken&&(a.refreshToken=e.refreshToken)}catch(a){return b.log?.warn?.("KIRO_MODELS",`Retry after refresh failed: ${a?.message||a}`),null}}}}let h=[];for(let a of c){if(!a||"object"!=typeof a)continue;let b=a.modelId||a.id;if(!b)continue;let c=function(a,b,c){let d=(a||b||"Kiro").trim(),e=Number(c);if(!Number.isFinite(e)||1e-9>Math.abs(e-1)||e<=0)return`Kiro ${d}`;let f=e.toFixed(1).replace(",",".");return`Kiro ${d} (${f}x credit)`}(a.modelName,b,a.rateMultiplier),d=Number(a?.tokenLimits?.maxInputTokens)||2e5;for(let e of function(a,b){let c,d=((c=a).endsWith("-agentic")&&(c=c.slice(0,-8)),c.endsWith("-thinking")&&(c=c.slice(0,-9)),c),e=b||`Kiro ${d}`,f=[{id:d,name:e,capabilities:{thinking:!1,agentic:!1}},{id:`${d}-thinking`,name:`${e} (Thinking)`,capabilities:{thinking:!0,agentic:!1}}];return"auto"!==d&&(f.push({id:`${d}-agentic`,name:`${e} (Agentic)`,capabilities:{thinking:!1,agentic:!0}}),f.push({id:`${d}-thinking-agentic`,name:`${e} (Thinking + Agentic)`,capabilities:{thinking:!0,agentic:!0}})),f}(b,c))h.push({...e,contextLength:d,rateMultiplier:Number.isFinite(Number(a.rateMultiplier))?Number(a.rateMultiplier):1,upstreamModelId:b,description:a.description||""})}return y.set(f,{expiresAt:g+3e5,models:h,rawModels:c}),{models:h,rawModels:c}}var B=c(52007),C=c(53225),D=c(39609);let E=new Map;async function F(a,b){let c=new AbortController,d=setTimeout(()=>c.abort(),1e4);try{let d=await (0,D.proxyAwareFetch)("https://api.githubcopilot.com/models",{method:"GET",headers:{Authorization:`Bearer ${a}`,"Content-Type":"application/json","Copilot-Integration-Id":"vscode-chat","editor-version":`vscode/${h.x0.VSCODE_VERSION}`,"editor-plugin-version":`copilot-chat/${h.x0.COPILOT_CHAT_VERSION}`,"user-agent":h.x0.USER_AGENT,"x-github-api-version":h.x0.API_VERSION},cache:"no-store",signal:b||c.signal});if(!d.ok){let a=Error(`Copilot /models returned ${d.status}`);throw a.status=d.status,a}let e=await d.json();return Array.isArray(e?.data)?e.data:[]}finally{clearTimeout(d)}}async function G(a,b={}){let c,d=a?.providerSpecificData?.copilotToken||a?.accessToken;if(!d)return b.log?.debug?.("COPILOT_MODELS","No copilotToken/accessToken; skipping live fetch"),null;let e=a?.providerSpecificData?.copilotToken||a?.accessToken||"copilot-anonymous",f=Date.now();if(!b.forceRefresh){let a=E.get(e);if(a&&a.expiresAt>f)return{models:a.models}}try{c=await F(d,b.signal)}catch(d){if(!d||401!==d.status&&403!==d.status||!a.accessToken)return b.log?.warn?.("COPILOT_MODELS",`Live model fetch failed: ${d?.message||d}`),null;{b.log?.info?.("COPILOT_MODELS",`Got ${d.status}; refreshing Copilot token`);let e=await (0,u.jR)(a.accessToken);if(!e?.token)return b.log?.warn?.("COPILOT_MODELS","Token refresh did not return a token"),null;if("function"==typeof b.onCredentialsRefreshed)try{await b.onCredentialsRefreshed({copilotToken:e.token,copilotTokenExpiresAt:e.expiresAt})}catch(a){b.log?.warn?.("COPILOT_MODELS",`onCredentialsRefreshed failed: ${a?.message||a}`)}try{c=await F(e.token,b.signal)}catch(a){return b.log?.warn?.("COPILOT_MODELS",`Retry after refresh failed: ${a?.message||a}`),null}}}let g=function(a){let b=new Set,c=[];for(let d of a){if(!d||"object"!=typeof d||d.capabilities?.type!=="chat"||d.policy&&"enabled"!==d.policy.state)continue;let a=d.id;!a||b.has(a)||(b.add(a),c.push({id:a,name:d.name||a}))}return c}(c);return g.length?(E.set(e,{expiresAt:f+3e5,models:g}),{models:g}):null}var H=c(52284);async function I(a){let b=!!a?.apiKey,c=b?a.apiKey:a?.accessToken;if(!c)return null;let d=new AbortController,e=setTimeout(()=>d.abort(),5e3);try{let a=b?{Accept:"application/json",Authorization:`Bearer ${c}`}:(0,H.w$)(c,{Accept:"application/json"}),e=await fetch("https://api.cline.bot/api/v1/models",{method:"GET",headers:a,signal:d.signal});if(!e.ok)return null;let f=await e.json(),g=Array.isArray(f)?f:f?.data;return Array.isArray(g)?g:null}catch{return null}finally{clearTimeout(e)}}async function J(a){let b=await I(a);if(!b)return null;let c=b.filter(a=>"string"==typeof a?.id&&a.id.startsWith("cline-pass/")).map(a=>({id:a.id,name:a.name||a.id}));return c.length?{models:c}:null}async function K(a){let b=await I(a);if(!b)return null;let c=b.filter(a=>"string"==typeof a?.id&&""!==a.id.trim()).map(a=>({id:a.id,name:a.name||a.id}));return c.length?{models:c}:null}var L=c(90737),M=c(93943);let N=`${L.Nr}/models`;async function O(a,b={}){let{fetchFn:c=D.proxyAwareFetch,log:d=console,proxyOptions:e=null,onCredentialsRefreshed:f}=b,g=a?.accessToken;if(!g)return{models:[],warning:"Grok CLI access token is missing."};let h=b=>c(N,{method:"GET",headers:function(a,b={}){let c={Authorization:`Bearer ${a}`,Accept:"application/json","User-Agent":L.fZ,"x-xai-token-auth":"xai-grok-cli","x-grok-client-version":L.GROK_CLI_VERSION,"x-grok-client-identifier":L.rK,"x-grok-client-mode":"headless"},d=b?.email,e=b?.userId||b?.principalId;return d&&(c["x-email"]=d),e&&(c["x-userid"]=e),c}(b,a?.providerSpecificData)},e);try{let b=await h(g);if((401===b.status||403===b.status)&&a?.refreshToken){let c=await (0,M.Vq)("grok-cli",a,d,e);if(c?.accessToken){g=c.accessToken;try{await f?.(c)}catch(a){d?.warn?.("Grok CLI credential persistence failed",a)}b=await h(g)}}if(!b.ok){let a=await b.text().catch(()=>"");return{models:[],warning:`Grok CLI model discovery failed (${b.status})${a?`: ${a.slice(0,160)}`:""}`}}let c=function(a){let b,c=new Set,d=[];for(let[e,f]of(b=Array.isArray(a)?a:a?.data??a?.models??a?.results??[],Array.isArray(b)?b.map(a=>[null,a]):b&&"object"==typeof b?Object.entries(b):[])){let a="string"==typeof f?{id:f}:f;if(!a||"object"!=typeof a||Array.isArray(a))continue;let b=String(a.id??a.model_id??a.modelId??a.model??a.slug??e??a.name??"").trim();if(!b||c.has(b))continue;c.add(b);let g={...a,id:b,name:a.display_name??a.displayName??a.name??b},h=Number(a.context_length??a.contextLength??a.context_window??a.contextWindow),i=Number(a.max_output_tokens??a.maxOutputTokens);Number.isFinite(h)&&h>0&&(g.contextLength=h),Number.isFinite(i)&&i>0&&(g.maxOutputTokens=i),b===L.to&&(g.contextLength||=5e5,g.maxOutputTokens||=64e3),d.push(g)}return d}(await b.json());return c.length?{models:c}:{models:[],warning:"Grok CLI returned no selectable models."}}catch(a){return{models:[],warning:`Grok CLI model discovery failed: ${a.message}`}}}var P=c(73496),Q=c.n(P),R=c(26070),S=c(81756),T=c(55456);let U=new Map;function V(a,b){let c=a.get(b)?.[0]?.value;return c&&"number"!=typeof c?Buffer.from(c).toString("utf8"):""}async function W(a,b){var c;let d,e=a?.accessToken,f=a?.providerSpecificData?.machineId,g=(d=R.sr.cursor,d?.agentEndpoint&&d?.modelsEndpoint?`${d.agentEndpoint.replace(/\/$/,"")}${d.modelsEndpoint}`:null);if(!e||!f||!g)return null;let h={...(0,S.JA)(e,f,a?.providerSpecificData?.ghostMode!==!1),accept:"application/proto","content-type":"application/proto"};delete h["connect-accept-encoding"],delete h["connect-protocol-version"];let i=await (c=new Uint8Array,new Promise((a,d)=>{let e=new URL(g),f=Q().connect(`https://${e.host}`),i=[],j={},k=!1,l=a=>(...b)=>{if(!k){k=!0,clearTimeout(m);try{f.close()}catch{}a(...b)}},m=setTimeout(l(()=>{d(Error("Cursor GetUsableModels timed out"))}),1e4);f.on("error",l(d));let n=f.request({":method":"POST",":path":e.pathname,":authority":e.host,":scheme":"https",...h});if(n.on("response",a=>{j=a}),n.on("data",a=>{i.push(a)}),n.on("end",l(()=>{a({status:Number(j[":status"]||0),body:Buffer.concat(i)})})),n.on("error",l(d)),b){let a=l(()=>d(Error("Request aborted")));b.aborted?a():b.addEventListener("abort",a,{once:!0})}n.end(c&&c.length?Buffer.from(c):void 0)}));if(200!==i.status){let a=Error(`Cursor GetUsableModels returned ${i.status}`);throw a.status=i.status,a}return function(a){let b=(0,T.Y8)(a),c=new Set,d=[];for(let a of b.get(1)||[]){if(!a?.value||"number"==typeof a.value)continue;let b=(0,T.Y8)(a.value),e=V(b,1).trim();if(!e||c.has(e))continue;c.add(e);let f=(V(b,4)||V(b,5)||V(b,3)||e).trim();d.push({id:e,name:f})}return d}(new Uint8Array(i.body))}async function X(a,b={}){let c;if(!a?.accessToken||!a?.providerSpecificData?.machineId)return b.log?.debug?.("CURSOR_MODELS","No Cursor access token or machine ID; skipping live fetch"),null;let d=(c=[a?.providerSpecificData?.machineId,a?.accessToken].filter(Boolean).join(":"))?t().createHash("sha256").update(`cursor:${c}`).digest("hex"):"cursor-anonymous",e=Date.now();if(!b.forceRefresh){let a=U.get(d);if(a?.expiresAt>e)return{models:a.models}}try{let c=await W(a,b.signal);if(!c?.length)return null;return U.set(d,{expiresAt:e+3e5,models:c}),{models:c}}catch(a){return b.log?.warn?.("CURSOR_MODELS",`Live model fetch failed: ${a?.message||a}`),null}}var Y=c(49804);let Z={zed_free:"Zed Free",zed_pro:"Zed Pro",zed_pro_trial:"Zed Pro trial",zed_business:"Zed Business",zed_vip:"Zed VIP",zed_student:"Zed Student"};function $(a){let b="string"==typeof a?a:a?.plan_v3;return b?Z[b]||String(b):null}async function _(a,b,c={}){let d=function(a=[]){if(!a.length)return null;let b=[...new Set(a.map(a=>a.disabledReason).filter(Boolean))],c=b.length?b.join("; "):"Zed gave no reason";return`Zed lists ${a.length} model(s), but all are disabled: ${c}`}(b?.disabledModels);if(d)return d;try{let b=await (0,Y.qJ)(a,c);return function(a,b){let c=(0,Y.k9)(a,b),d=(b?.organizations||[]).find(a=>a?.id===c),e=d?.name?`"${d.name}"`:c?`"${c}"`:"your account",f=b?.configuration_by_organization?.[c];if(f&&!1===f.is_zed_model_provider_enabled)return`Zed's hosted models are disabled by the ${e} organization's configuration.`;let g=$(b?.plans_by_organization?.[c])||$(b?.plan),h=[`Zed returned no live models for ${e}${g?` (plan: ${g})`:""}.`];return b?.plan?.is_account_too_young&&h.push("Zed reports the account is too new to use hosted models."),b?.plan?.has_overdue_invoices&&h.push("Zed reports overdue invoices on the account."),g===Z.zed_free&&h.push("Hosted models may require a Zed Pro plan or trial; check your plan at zed.dev/account."),h.join(" ")}(a,b)}catch(a){return`Zed returned no live models (account lookup failed: ${a.message}).`}}let aa=a=>({models:[],warning:`${a} returned no live models.`});async function ab(a){let b={"Anthropic-Version":q.b8,"Content-Type":"application/json",...a},c=[],d=null;for(let a=0;a<10;a++){let a=`https://api.anthropic.com/v1/models?limit=1000${d?`&after_id=${encodeURIComponent(d)}`:""}`,e=await fetch(a,{method:"GET",headers:b});if(!e.ok)return e;let f=await e.json();if(c.push(...f?.data||[]),!f?.has_more||!f?.last_id)break;d=f.last_id}return Response.json({data:c})}let ac=a=>(a?.data||[]).filter(a=>a?.id).map(a=>({id:a.id,name:a.display_name||a.id,createdAt:a.created_at})),ad=(0,g.s)({refreshFn:a=>(0,e.ge)(a.refreshToken),fetchFn:a=>ab({Authorization:`Bearer ${a}`,"Anthropic-Beta":"oauth-2025-04-20"}),parseFn:ac,errorLabel:"Failed to fetch Claude models"}),ae=(a,b)=>async(c,d)=>{let e=await b(c,d);return e?.models?.length?{models:e.models}:aa(a)},af={claude:async function(a){if(a.accessToken){let b=await ad(a);return b.error?{models:[],warning:b.error}:b.models.length?b:{models:[],warning:b.warning||aa("Claude").warning}}if(!a.apiKey)return{models:[],warning:"No valid token found"};let b=await ab({"x-api-key":a.apiKey});if(!b.ok)return{models:[],warning:`Failed to fetch Claude models: ${b.status} ${await b.text()}`};let c=ac(await b.json());return c.length?{models:c}:aa("Claude")},codex:p,zed:async function(a,{forceRefresh:b}){let c={accessToken:a.accessToken,providerSpecificData:a.providerSpecificData||{}},e=await (0,Y.w9)(c,{config:d.RY,forceRefresh:b}),f=(e?.models||[]).filter(a=>a&&!a.isDisabled).map(a=>({id:a.id,name:a.name||a.id,provider:a.provider,contextLength:a.contextLength,contextLengthInMaxMode:a.contextLengthInMaxMode,maxOutputTokens:a.maxOutputTokens,supportsTools:a.supportsTools,supportsImages:a.supportsImages,supportsThinking:a.supportsThinking,supportsDisablingThinking:a.supportsDisablingThinking,supportsFastMode:a.supportsFastMode,supportsServerSideCompaction:a.supportsServerSideCompaction,supportedEffortLevels:a.supportedEffortLevels||[],supportsStreamingTools:a.supportsStreamingTools,supportsParallelToolCalls:a.supportsParallelToolCalls}));return f.length>0?{models:f}:{models:[],warning:await _(c,e,{config:d.RY})}},kiro:async function(a,{forceRefresh:b}){let c=await A({accessToken:a.accessToken,refreshToken:a.refreshToken,providerSpecificData:a.providerSpecificData||{}},{forceRefresh:b,log:console,onCredentialsRefreshed:async b=>{b?.accessToken&&(await (0,e.vN)(a.id,{accessToken:b.accessToken,refreshToken:b.refreshToken||a.refreshToken,expiresIn:b.expiresIn}),a.accessToken=b.accessToken,b.refreshToken&&(a.refreshToken=b.refreshToken))}});return c?.models?.length?{models:c.models.map(a=>({id:a.id,name:a.name,upstreamModelId:a.upstreamModelId,contextLength:a.contextLength,rateMultiplier:a.rateMultiplier,capabilities:a.capabilities,description:a.description}))}:aa("Kiro")},qoder:async function(a,{forceRefresh:b}){let c=await (0,C.EV)({accessToken:a.accessToken,apiKey:a.apiKey,refreshToken:a.refreshToken,email:a.email,displayName:a.displayName,providerSpecificData:a.providerSpecificData||{}},{forceRefresh:b}),d=new Map((c?.models||[]).map(a=>[a.id,a])),e=(0,C.So)(c).map(a=>{let b=d.get(a.id);return{id:`qoder/${a.id}`,name:a.name,...a.hidden?{hidden:!0}:{},...b?{contextLength:b.contextLength,isVL:b.isVL,isReasoning:b.isReasoning,maxOutputTokens:b.maxOutputTokens,description:b.description}:{}}});return e.length?{models:e}:aa("Qoder")},"grok-cli":async function(a){let b=await (0,f.B)(a.providerSpecificData||{}),c=await O({...a,connectionId:a.id},{log:console,proxyOptions:{connectionProxyEnabled:!0===b.connectionProxyEnabled,connectionProxyUrl:b.connectionProxyUrl||"",connectionNoProxy:b.connectionNoProxy||"",vercelRelayUrl:b.vercelRelayUrl||"",strictProxy:!0===b.strictProxy},onCredentialsRefreshed:async b=>{await (0,e.vN)(a.id,{...b,existingProviderSpecificData:a.providerSpecificData||{}})}});return c?.models?.length?{models:c.models}:{models:[],warning:c?.warning||aa("Grok CLI").warning}},cursor:ae("Cursor",(a,{forceRefresh:b})=>X({accessToken:a.accessToken,providerSpecificData:a.providerSpecificData||{}},{forceRefresh:b,log:console})),kimchi:ae("Kimchi",(a,{forceRefresh:b})=>(0,B.av)({accessToken:a.accessToken,apiKey:a.apiKey,providerSpecificData:a.providerSpecificData||{}},{forceRefresh:b,log:console})),github:ae("GitHub Copilot",(a,{forceRefresh:b})=>G({accessToken:a.accessToken,refreshToken:a.refreshToken,providerSpecificData:a.providerSpecificData||{}},{forceRefresh:b,log:console,onCredentialsRefreshed:async b=>{await (0,e.vN)(a.id,{copilotToken:b.copilotToken,copilotTokenExpiresAt:b.copilotTokenExpiresAt,existingProviderSpecificData:a.providerSpecificData||{}})}})),cline:ae("Cline",a=>K({accessToken:a.accessToken,apiKey:a.apiKey})),clinepass:ae("ClinePass",a=>J({accessToken:a.accessToken,apiKey:a.apiKey}))};function ag(a){return Object.hasOwn(af,a)}let ah=new Map;async function ai(a,{forceRefresh:b=!1}={}){let c,d=af[a?.provider];if(!d)return{models:[],warning:`No live model catalog for ${a?.provider}`};let e=`${a.provider}:${a.id}`,f=ah.get(e);if(!b&&f&&f.expiresAt>Date.now())return f.result;try{let e=await d(a,{forceRefresh:b});c={models:Array.isArray(e?.models)?e.models:[],...e?.warning?{warning:e.warning}:{}}}catch(b){console.log(`Live model fetch failed for ${a.provider}:`,b?.message||b),c={models:[],warning:`Failed to fetch ${a.provider} models: ${b?.message||b}`}}return c.models.length>0?ah.set(e,{result:c,expiresAt:Date.now()+6e4}):ah.delete(e),c}},57247:(a,b,c)=>{c.d(b,{KC:()=>t,OA:()=>p,PROVIDER_MODELS:()=>f.vq,SM:()=>j,Xg:()=>s,cY:()=>u,ez:()=>o,fZ:()=>k,kt:()=>q,ux:()=>n});var d=c(35024),e=c(7819),f=c(26070),g=c(99511),h=c(59096),i=c(14170);function j(a){return f.vq[a]||[]}function k(a){let b=f.vq[a];return b?.[0]?.id||null}let l=new Set(["kr","kiro"]);function m(a,b,c){if(!a)return;let d="string"==typeof b?b.replace(/\([^()]+\)\s*$/,"").trim():b,e=a.find(a=>a.id===b||a.id===d);if(e)return e;if(!l.has(c))return;let f=(0,g.Kq)(d);if(f!==d)return a.find(a=>a.id===f)}function n(a,b){if((!a||"oc"===a||"opencode"===a||"ocg"===a||"opencode-go"===a||"mc"===a||"meta-code"===a)&&(0,h.nh)(b))return i.h.OPENAI_RESPONSES;let c=f.vq[a];return c?(0,g.gr)(m(c,b,a)):null}function o(a,b){let c=f.vq[a];return c?(0,g.ec)(m(c,b,a)):null}function p(a,b){let c=f.vq[a];if(!c)return null;let d=m(c,b,a);return d?.kind||d?.type||null}function q(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=m(f.vq[a],e,a),i=g?.upstreamModelId||g?.id;if(i){let a=i.match(/\([^()]+\)\s*$/),b=a?.[0]||"";return(b?i.slice(0,a.index).trim():i)+(d||b)}return"cx"===a&&"string"==typeof e&&e.endsWith(h.d5)?e.slice(0,-h.d5.length)+d:e+d}let r=Object.fromEntries(e.default.filter(a=>a.alias&&a.alias!==a.id).map(a=>[a.id,a.alias])),s=Object.fromEntries(Object.keys(d.xq).map(a=>[a,r[a]||a]));function t(a){let b=s[a]||a;return f.vq[b]||[]}function u(a,b){return(0,g.g5)(m(f.vq[a],b,a))}},59096:(a,b,c)=>{c.d(b,{_X:()=>e,d5:()=>d,nh:()=>f});let d="-review";function e(a){return a.flatMap(a=>"llm"!==(a.kind||a.type||"llm")||a.id.endsWith(d)?[a]:[a,{...a,id:`${a.id}${d}`,name:`${a.name} Review`,upstreamModelId:a.upstreamModelId||a.id,quotaFamily:"review"}])}function f(a){if(!a||"string"!=typeof a)return!1;let b=a.replace(/\([^()]+\)\s*$/,"").trim(),c=b.includes("/")?b.split("/").pop():b;return/^muse[-_]?spark(?:$|[-_:.\s])/i.test(c)}},71998:(a,b,c)=>{c.d(b,{Fh:()=>d.Fh,L9:()=>d.L9,Mc:()=>d.Mc,OM:()=>d.OM,Pc:()=>d.Pc,Q_:()=>d.Q_,Qu:()=>d.Qu,S8:()=>d.S8,Yd:()=>d.Yd,ZO:()=>d.ZO,c:()=>d.c,createProviderConnection:()=>d.iE,fK:()=>d.fK,fv:()=>d.fv,getProviderConnections:()=>d.getProviderConnections,ho:()=>d.ho,hr:()=>d.hr,i0:()=>d.i0,o5:()=>d.o5,op:()=>d.op,uL:()=>d.uL,ui:()=>d.ui,updateProviderConnection:()=>d.updateProviderConnection,uv:()=>d.uv});var d=c(89718)},85081:(a,b,c)=>{c.d(b,{Ay:()=>j});var d=c(77598);let e=function(a){return Array.isArray(a)?a=Buffer.from(a):"string"==typeof a&&(a=Buffer.from(a,"utf8")),(0,d.createHash)("sha1").update(a).digest()},f=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i,g=function(a){let b;if(!("string"==typeof a&&f.test(a)))throw TypeError("Invalid UUID");return Uint8Array.of((b=parseInt(a.slice(0,8),16))>>>24,b>>>16&255,b>>>8&255,255&b,(b=parseInt(a.slice(9,13),16))>>>8,255&b,(b=parseInt(a.slice(14,18),16))>>>8,255&b,(b=parseInt(a.slice(19,23),16))>>>8,255&b,(b=parseInt(a.slice(24,36),16))/0x10000000000&255,b/0x100000000&255,b>>>24&255,b>>>16&255,b>>>8&255,255&b)};var h=c(50122);function i(a,b,c,d){var f=b,i=d;let j="string"==typeof a?function(a){let b=new Uint8Array((a=unescape(encodeURIComponent(a))).length);for(let c=0;c<a.length;++c)b[c]=a.charCodeAt(c);return b}(a):a,k="string"==typeof f?g(f):f;if("string"==typeof f&&(f=g(f)),f?.length!==16)throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");let l=new Uint8Array(16+j.length);if(l.set(k),l.set(j,k.length),(l=e(l))[6]=15&l[6]|80,l[8]=63&l[8]|128,c){if((i??=0)<0||i+16>c.length)throw RangeError(`UUID byte range ${i}:${i+15} is out of buffer bounds`);for(let a=0;a<16;++a)c[i+a]=l[a];return c}return(0,h.k)(l)}i.DNS="6ba7b810-9dad-11d1-80b4-00c04fd430c8",i.URL="6ba7b811-9dad-11d1-80b4-00c04fd430c8";let j=i},88862:(a,b,c)=>{c.d(b,{s:()=>e});var d=c(67828);let e=({refreshFn:a,fetchFn:b,parseFn:c,errorLabel:e})=>async f=>{let g,{accessToken:h,refreshToken:i}=f;if(!h)return{error:"No valid token found",status:401};try{let j=await b(h,f);if(!j.ok&&(401===j.status||403===j.status)&&i){let c=await a(f);c?.accessToken&&(await (0,d.vN)(f.id,{accessToken:c.accessToken,refreshToken:c.refreshToken||i,expiresIn:c.expiresIn}),f.accessToken=c.accessToken,c.refreshToken&&(f.refreshToken=c.refreshToken),j=await b(c.accessToken,f))}if(j.ok){let a=await j.json(),b=c(a);if(b.length>0)return{models:b}}else{let a=await j.text();g=`${e}: ${j.status} ${a}`,console.log(`${e} (falling back to static):`,a)}}catch(a){g=`${e}: ${a.message}`,console.log(`${e} (falling back to static):`,a.message)}return{models:[],warning:g}}},89718:(a,b,c)=>{c.d(b,{CG:()=>d.CG,Dj:()=>d.Dj,Fh:()=>d.Fh,Iq:()=>d.Iq,K1:()=>d.K1,KJ:()=>d.KJ,L:()=>d.L,L9:()=>d.L9,Lh:()=>d.Lh,Mc:()=>d.Mc,OM:()=>d.OM,PX:()=>d.PX,Pc:()=>d.Pc,Q_:()=>d.Q_,Qu:()=>d.Qu,S8:()=>d.S8,Uv:()=>d.Uv,VT:()=>d.VT,XW:()=>d.XW,Xx:()=>d.Xx,Yd:()=>d.Yd,ZO:()=>d.ZO,bI:()=>d.bI,c:()=>d.c,ek:()=>d.ek,fK:()=>d.fK,fk:()=>d.fk,fv:()=>d.fv,getProviderConnections:()=>d.P,getSettings:()=>d.mt,ho:()=>d.ho,hr:()=>d.hr,i0:()=>d.i0,iE:()=>d.iE,jd:()=>d.jd,ln:()=>d.ln,o5:()=>d.o5,oG:()=>d.oG,op:()=>d.op,r4:()=>d.r4,uL:()=>d.uL,ui:()=>d.ui,updateProviderConnection:()=>d.rj,uv:()=>d.uv,yF:()=>d.yF,yg:()=>d.yg,zP:()=>d.zP});var d=c(79421)},92990:(a,b,c)=>{c.d(b,{DI:()=>i,DV:()=>z,LT:()=>j,MZ:()=>u,Nl:()=>y,Nu:()=>o,OV:()=>h,RY:()=>G,Rf:()=>C,S6:()=>r,SK:()=>E,Td:()=>A,Tx:()=>p,WN:()=>s,Ww:()=>H,YT:()=>m,ZL:()=>l,aV:()=>t,cD:()=>n,eD:()=>F,f7:()=>x,hF:()=>k,lB:()=>v,oe:()=>D,qp:()=>B,w1:()=>w});var d=c(21820),e=c(74129),f=c(26070);function g(){let a=(0,d.platform)(),b=(0,d.arch)();return"darwin"===a?"arm64"===b?2:1:"linux"===a?"arm64"===b?4:3:5*("win32"===a)}let h={...f.sr.claude},i={...f.sr.codex},j={...e.dG,...f.sr["gemini-cli"]},k={...f.sr.qoder},l={...f.sr.iflow},m={...e.XP,...f.sr.antigravity,loadCodeAssistClientMetadata:JSON.stringify({ideType:9,platform:g(),pluginType:2})};function n(){return{ideType:9,platform:g(),pluginType:2}}({...f.sr.openai});let o={...f.sr.github},p={...f.sr.kiro},q=/^[a-z]{2}-[a-z]+-\d{1,2}$/;function r(a){if("string"!=typeof a||!q.test(a))throw Error("Invalid region");return a}let s={...f.sr.cursor,tokenStoragePaths:{linux:"~/.config/Cursor/User/globalStorage/state.vscdb",macos:"/Users/<user>/Library/Application Support/Cursor/User/globalStorage/state.vscdb",windows:"%APPDATA%\\Cursor\\User\\globalStorage\\state.vscdb"}},t={...f.sr.kimi,clientId:process.env.KIMI_CODING_OAUTH_CLIENT_ID||process.env.KIMI_OAUTH_CLIENT_ID||f.xq.kimi?.clientId||f.sr.kimi?.clientId},u={...f.sr.kilocode},v={...f.sr.cline},w={...f.sr.clinepass},x={...f.sr.gitlab},y={...f.sr["codebuddy-cn"]},z={...f.sr["codebuddy-intl"]},A={...f.sr.kimchi},B={...f.sr["grok-cli"]},C={...f.sr["meta-code"],clientId:process.env.META_CODE_OAUTH_CLIENT_ID?.trim()||void 0},D={platformUrl:process.env.MIMO_PLATFORM_URL||"https://platform.xiaomimimo.com",defaultBaseUrl:"https://api.xiaomimimo.com/v1",kn:"mimocode",callbackPath:"/",timeoutMs:3e5},E={clientId:"ono9krqynydwx5",clientSecret:"-",loginGuidanceUrls:["https://api.marscode.com/cloudide/api/v3/trae/GetLoginGuidance","https://api.trae.ai/cloudide/api/v3/trae/GetLoginGuidance","https://www.trae.ai/cloudide/api/v3/trae/GetLoginGuidance"],apiOrigins:["https://api.marscode.com","https://api.trae.ai","https://www.trae.ai","https://www.marscode.com"],exchangeTokenPath:"/cloudide/api/v3/trae/oauth/ExchangeToken",getUserInfoPath:"/cloudide/api/v3/trae/GetUserInfo",authorizationPath:"/authorization",callbackPath:"/callback",minAppVersion:"3.5.54",defaultAppVersion:"3.5.54",defaultAppType:"stable",defaultPluginVersion:"local",defaultDeviceId:"0",userAgent:"Trae/1.0.0 antigravity-cockpit-tools",webUrl:"https://www.trae.ai",authScheme:"Cloud-IDE-JWT",tokenLifetimeDays:14,oauthTimeoutMs:6e5},F={clientId:"3GUryQ7ldAeKEuD2obYnppsnmj58eP5u",authBaseUrl:"https://www.windsurf.com",signInPath:"/windsurf/signin",registerApiBaseUrl:"https://register.windsurf.com",registerPath:"/exa.seat_management_pb.SeatManagementService/RegisterUser",oneTimeAuthPath:"/exa.seat_management_pb.SeatManagementService/GetOneTimeAuthToken",currentUserPath:"/exa.seat_management_pb.SeatManagementService/GetCurrentUser",planStatusPath:"/exa.seat_management_pb.SeatManagementService/GetPlanStatus",userStatusPath:"/exa.seat_management_pb.SeatManagementService/GetUserStatus",defaultApiServerUrl:"https://server.codeium.com",callbackPath:"/windsurf-auth-callback",userAgent:"antigravity-cockpit-tools",oauthTimeoutMs:6e5},G={webBaseUrl:"https://zed.dev",cloudBaseUrl:"https://cloud.zed.dev",llmBaseUrl:"https://cloud.zed.dev",defaultNativeAppPort:58443,oauthTimeoutMs:6e5},H=3e5}};
@@ -1 +0,0 @@
1
- "use strict";exports.id=3093,exports.ids=[1998,3093],exports.modules={7803:(a,b,c)=>{c.r(b),c.d(b,{debug:()=>o,error:()=>r,errorLine:()=>l,fmtThink:()=>m,info:()=>p,line:()=>k,maskKey:()=>v,nextTag:()=>i,request:()=>s,response:()=>t,stream:()=>u,tagForSession:()=>j,warn:()=>q});let d={DEBUG:0,INFO:1,WARN:2,ERROR:3},e=d[process.env.LOG_LEVEL?.toUpperCase?.()]??d.INFO;function f(){return new Date().toLocaleTimeString("en-US",{hour12:!1})}let g=["\uD83D\uDFE2","\uD83D\uDD35","\uD83D\uDFE3","\uD83D\uDFE1","\uD83D\uDFE0","\uD83D\uDD34","âšĒ","\uD83D\uDFE4"],h=0;function i(){let a=g[h%g.length];return h++,a}function j(a){if(!a)return i();let b=0;for(let c=0;c<a.length;c++)b=31*b+a.charCodeAt(c)|0;return g[Math.abs(b)%g.length]}function k(a,b,c){e>d.INFO||console.log(`[${f()}] ${a} ${b} ${c}`)}function l(a,b,c){console.log(`[${f()}] ${a} ${b} ${c}`)}function m(a){return a&&a.mode?"none"===a.mode?"off":"auto"===a.mode?"auto":"budget"===a.mode?a.budget>=1e3?`${Math.round(a.budget/1e3)}k`:`${a.budget}`:"level"===a.mode?a.level:null:null}function n(a){if(!a)return"";if("string"==typeof a)return a;try{return JSON.stringify(a)}catch{return String(a)}}function o(a,b,c){if(e<=d.DEBUG){let d=c?` ${n(c)}`:"";console.log(`[${f()}] 🔍 [${a}] ${b}${d}`)}}function p(a,b,c){if(e<=d.INFO){let d=c?` ${n(c)}`:"";console.log(`[${f()}] â„šī¸ [${a}] ${b}${d}`)}}function q(a,b,c){if(e<=d.WARN){let d=c?` ${n(c)}`:"";console.warn(`[${f()}] âš ī¸ [${a}] ${b}${d}`)}}function r(a,b,c){if(e<=d.ERROR){let d=c?` ${n(c)}`:"";console.log(`[${f()}] ❌ [${a}] ${b}${d}`)}}function s(a,b,c){let d=c?` ${n(c)}`:"";console.log(`\x1b[36m[${f()}] đŸ“Ĩ ${a} ${b}${d}\x1b[0m`)}function t(a,b,c){let d=c?` ${n(c)}`:"";console.log(`[${f()}] ${a<400?"\uD83D\uDCE4":"\uD83D\uDCA5"} ${a} (${b}ms)${d}`)}function u(a,b){let c=b?` ${n(b)}`:"";console.log(`[${f()}] 🌊 [STREAM] ${a}${c}`)}function v(a){return!a||a.length<8?"***":`${a.slice(0,4)}...${a.slice(-4)}`}},35024:(a,b,c)=>{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=>{a.exports={rE:"1.0.0"}},45974:(a,b,c)=>{c.d(b,{XJ:()=>t,d0:()=>q,vO:()=>p});var d=c(39326),e=c(91211),f=c(41704),g=c(7803);let h=new Map,i=new Map,j=new Map,k=new Map,l=new Map,m=new Set(["__proto__","constructor","prototype"]);function n(a){let b={};for(let[c,d]of Object.entries(a||{}))m.has(c)||(b[c]=d);return b}function o(a,b,{merge:c=!1}={}){let d=Object.entries(b||{}).map(([a,b])=>(function(a,b){if(null==a)return null;let c=Number(b?.remainingPercentage);return!Number.isFinite(c)||c>=100?null:{kind:`model:${a}`,usedFraction:Math.min(1,Math.max(0,1-c/100)),resetsAt:b?.resetAt}})(a,b)).filter(Boolean);d.length>0&&(0,f.HK)(a,"antigravity",d);let e=c?Object.assign(n(h.get(a)),n(b)):n(b);return h.set(a,function(a,b){let c=Date.now();for(let[d,e]of l)if(d.startsWith(`${a}|`)){if(e<=c){l.delete(d);continue}b[d.slice(a.length+1)]={remainingPercentage:0,resetAt:new Date(e).toISOString()}}return b}(a,e)),h.get(a)}function p(a,b){let c=`${a}|${b}`;k.delete(c);let d=l.get(c);if(void 0===d)return;l.delete(c);let e=h.get(a);e?.[b]?.resetAt===new Date(d).toISOString()&&(delete e[b],h.set(a,e))}function q(){return h}async function r(a,b,c){let d=Date.now(),e=j.get(a);if(e)return e;let f=i.get(a)||0;if(d-f<3e4)return g.debug("AG_QUOTA",`${a.slice(0,8)} | skip refresh (${Math.round((d-f)/1e3)}s ago)`),h.get(a)||null;i.set(a,d);let k=s(a,b,c);j.set(a,k);try{return await k}finally{j.delete(a)}}async function s(a,b,c){try{let f=await (0,d.B)(c||{}),g={connectionProxyEnabled:!0===f.connectionProxyEnabled,connectionProxyUrl:f.connectionProxyUrl||"",connectionNoProxy:f.connectionNoProxy||"",vercelRelayUrl:f.vercelRelayUrl||"",strictProxy:!0===f.strictProxy},h=await (0,e.c)(b,c,g);if(!h?.quotas||h.message)return null;return o(a,h.quotas)}catch(b){return g.warn("AG_QUOTA",`${a.slice(0,8)} | refresh failed: ${b.message}`),null}}async function t(a,b,c,d,e){c=c??null,g.info("AG_QUOTA",`${a.slice(0,8)} | ${b} on ${c} — refreshing quota`);let f=(await r(a,d,e))?.[c];if(!f||f.remainingPercentage>0){let d=`${a}|${c}`,e=Date.now(),h=k.get(d),i=h&&e-h.windowStart<=6e4?h.windowStart:e,j=h&&i===h.windowStart?h.count+1:1;if(k.set(d,{count:j,windowStart:i}),j>=3){k.delete(d);let h=e+9e5,i=f?`${Math.round(f.remainingPercentage)}%`:"unknown";return g.warn("AG_QUOTA",`${a.slice(0,8)} | STRIKE_${b} ${c} — ${j}x 429 (quota ${i}); CACHE_BLOCK 15m`),l.set(d,h),null===c||m.has(c)||o(a,{[c]:{remainingPercentage:0,resetAt:new Date(h).toISOString()}},{merge:!0}),h}return null}if(k.delete(`${a}|${c}`),!f.resetAt)return null;let h=new Date(f.resetAt).getTime();return h<=Date.now()?null:(g.warn("AG_QUOTA",`${a.slice(0,8)} | UPSTREAM_${b} ${c} — quota exhausted; CACHE_BLOCK until ${f.resetAt}`),h)}},59052:(a,b,c)=>{c.d(b,{W:()=>d});function d(a){let b=a.headers.get("Authorization");if(b?.startsWith("Bearer "))return b.slice(7);let c=a.headers.get("x-api-key");if(c)return c;let d=a.headers.get("x-goog-api-key");if(d)return d;if(!a.url)return null;try{return new URL(a.url).searchParams.get("key")||null}catch{return null}}},71998:(a,b,c)=>{c.d(b,{Fh:()=>d.Fh,L9:()=>d.L9,Mc:()=>d.Mc,OM:()=>d.OM,Pc:()=>d.Pc,Q_:()=>d.Q_,Qu:()=>d.Qu,S8:()=>d.S8,Yd:()=>d.Yd,ZO:()=>d.ZO,c:()=>d.c,createProviderConnection:()=>d.iE,fK:()=>d.fK,fv:()=>d.fv,getProviderConnections:()=>d.getProviderConnections,ho:()=>d.ho,hr:()=>d.hr,i0:()=>d.i0,o5:()=>d.o5,op:()=>d.op,uL:()=>d.uL,ui:()=>d.ui,updateProviderConnection:()=>d.updateProviderConnection,uv:()=>d.uv});var d=c(89718)},80238:(a,b,c)=>{c.r(b),c.d(b,{clearAccountError:()=>s,extractApiKey:()=>t,getProviderCredentials:()=>q,isValidApiKey:()=>u,markAccountUnavailable:()=>r,resetAccountSelection:()=>p});var d=c(89718),e=c(39326),f=c(12557),g=c(70900),h=c(41704),i=c(91152),j=c(59052),k=c(45974),l=c(6743),m=c(7803);let n=Promise.resolve(),o=new Map;function p(a){a?o.delete((0,i.rs)(a)??a):o.clear()}async function q(a,b=null,c=null,g={}){let j,p=b instanceof Set?b:b?new Set([b]):new Set,r=g?.preferredConnectionId||null,s=n;n=new Promise(a=>{j=a});try{let b;await s;let g=(0,i.rs)(a);if(i.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(m.debug("AUTH",`${a} | total connections: ${j.length}, excludeIds: ${p.size>0?[...p].join(","):"none"}, model: ${c||"any"}`),0===j.length)return m.warn("AUTH",`No credentials for ${a}`),null;let n="antigravity"===g,q=n&&c?(0,k.d0)():null,t=[],u=j.filter(a=>{if(p.has(a.id)||(0,f.Bl)(a,c))return!1;if(n&&c&&q){let b=q.get(a.id)?.[c];if(b&&b.remainingPercentage<=0&&b.resetAt&&new Date(b.resetAt).getTime()>Date.now()){let d=a.id?.slice(0,8)||"unknown";return m.info("AG_QUOTA",`${d} | CACHE_BLOCK ${c} — skip upstream until ${b.resetAt}`),!1}}if(a.id===r)return!0;let b=(0,h.dV)(a.id),d=b&&(0,i.rs)(b.provider)===g?(0,h.GJ)(b,c):0;if(d){let b=new Date(d).toISOString();return t.push(b),m.info("AUTH",`${a.id?.slice(0,8)} | QUOTA_SKIP ${c||"all"} until ${b}`),!1}return!0});if(m.debug("AUTH",`${a} | available: ${u.length}/${j.length}`),j.forEach(a=>{let b=p.has(a.id),d=(0,f.Bl)(a,c);if(b||d){let e=(0,f.V0)(a,c);m.debug("AUTH",` → ${a.id?.slice(0,8)} | ${b?"excluded":""} ${d?`modelLocked(${c}) until ${e}`:""}`)}}),0===u.length){let b=[...j.filter(a=>(0,f.Bl)(a,c)).map(a=>({until:(0,f.V0)(a,c),conn:a})),...t.map(a=>({until:a}))];n&&c&&q&&j.forEach(a=>{let d=q.get(a.id)?.[c]?.resetAt;d&&new Date(d).getTime()>Date.now()&&b.push({until:d})});let d=null;for(let a of b)a.until&&(!d||Date.parse(a.until)<Date.parse(d.until))&&(d=a);if(d){let b=d.until,e=d.conn?d.conn.lastError||null:"Quota exhausted";return m.warn("AUTH",`${a} | all ${j.length} accounts locked for ${c||"all"} (${(0,f.Qo)(b)}) | lastError=${e?.slice(0,50)??"none"}`),{allRateLimited:!0,retryAfter:b,retryAfterHuman:(0,f.Qo)(b),lastError:e,lastErrorCode:d.conn?.errorCode||null}}return m.warn("AUTH",`${a} | all ${j.length} accounts unavailable`),null}let v=await (0,d.getSettings)(),w=(v.providerStrategies||{})[g]||{},x=w.fallbackStrategy||v.fallbackStrategy||"fill-first";if(r&&(b=u.find(a=>a.id===r))&&m.info("AUTH",`${a} | pinned to ${b.id?.slice(0,8)} (${b.name||b.email||"unnamed"})`),b);else if("weighted"===x){let a=(0,l.g1)(g,w,v),e=(0,l.Et)({connections:u,provider:g,model:c,stickyLimit:a,state:o.get(g)});b=e.connection??u[0],o.set(g,e.nextState),await (0,d.updateProviderConnection)(b.id,{lastUsedAt:new Date().toISOString(),consecutiveUseCount:e.continued?(b.consecutiveUseCount||0)+1:1})}else if("round-robin"===x){let a=w.stickyRoundRobinLimit||v.stickyRoundRobinLimit||3,c=[...u].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=[...u].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=u[0];let y=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:y.connectionProxyEnabled,connectionProxyUrl:y.connectionProxyUrl,connectionNoProxy:y.connectionNoProxy,connectionProxyPoolId:y.proxyPoolId||null,vercelRelayUrl:y.vercelRelayUrl||""},connectionId:b.id,testStatus:b.testStatus,lastError:b.lastError,_connection:b}}finally{j&&j()}}async function r(a,b,c,e=null,h=null,j=null){let k,l,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,q=function(a,b,c){if("github"!==(0,i.rs)(c)||402!==Number(a)||!String(b||"").toLowerCase().includes("you've reached your additional usage limit for your plan"))return null;let d=new Date;return Date.UTC(d.getUTCFullYear(),d.getUTCMonth()+1,1)}(b,c,e);if(q)k=!0,l=q-Date.now(),n=0;else if(j&&j>Date.now()){k=!0;let a=(0,g.hE)().cooldowns.rateLimitCapMs;l="antigravity"===(0,i.rs)(e)?j-Date.now():Math.min(j-Date.now(),a),n=0}else({shouldFallback:k,cooldownMs:l,newBackoffLevel:n}=(0,f.hk)(b,c,p));if(!k)return{shouldFallback:!1,cooldownMs:0};let s="string"==typeof c?c.slice(0,200):"Provider error",t=(0,f.S5)(q?null:h,l);await (0,d.updateProviderConnection)(a,{...t,testStatus:"unavailable",lastError:s,errorCode:b,lastErrorAt:new Date().toISOString(),backoffLevel:n??p});let u=Object.keys(t)[0],v=o?.displayName||o?.name||o?.email||a.slice(0,8);return m.warn("AUTH",`${v} locked ${u} for ${Math.round(l/1e3)}s [${b}]`),e&&b&&s&&console.error(`❌ ${e} [${b}]: ${s}`),{shouldFallback:!0,cooldownMs:l}}async function s(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,errorCode:null,lastErrorAt:null,backoffLevel:0}),await (0,d.updateProviderConnection)(a,j)}function t(a){return(0,j.W)(a)}async function u(a){return!!a&&await (0,d.ek)(a)}}};