tokenhop 1.0.0 → 1.0.1

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 (599) hide show
  1. package/app/.next-cli-build/BUILD_ID +1 -1
  2. package/app/.next-cli-build/app-path-routes-manifest.json +7 -7
  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/server/app/(dashboard)/dashboard/[...missing]/page.js +1 -1
  7. package/app/.next-cli-build/server/app/(dashboard)/dashboard/[...missing]/page.js.nft.json +1 -1
  8. package/app/.next-cli-build/server/app/(dashboard)/dashboard/[...missing]/page_client-reference-manifest.js +1 -1
  9. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js +1 -1
  10. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -1
  11. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  12. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +1 -1
  13. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
  14. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  15. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js +1 -1
  16. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  17. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  18. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js +1 -1
  19. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
  20. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  21. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js +1 -1
  22. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
  23. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  24. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js +1 -1
  25. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  26. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  27. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js +1 -1
  28. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js.nft.json +1 -1
  29. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  30. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js +1 -1
  31. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js.nft.json +1 -1
  32. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  33. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js +1 -1
  34. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js.nft.json +1 -1
  35. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  36. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/page.js +1 -1
  37. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/page.js.nft.json +1 -1
  38. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/page_client-reference-manifest.js +1 -1
  39. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js +1 -1
  40. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js.nft.json +1 -1
  41. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  42. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js +1 -1
  43. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -1
  44. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  45. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js +1 -1
  46. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  47. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  48. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js +1 -1
  49. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
  50. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  51. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js +2 -2
  52. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
  53. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  54. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js +1 -1
  55. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
  56. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  57. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js +1 -1
  58. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
  59. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  60. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js +1 -1
  61. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
  62. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  63. package/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page.js +1 -1
  64. package/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page.js.nft.json +1 -1
  65. package/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
  66. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js +1 -1
  67. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
  68. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  69. package/app/.next-cli-build/server/app/(dashboard)/dashboard/settings/page.js +1 -1
  70. package/app/.next-cli-build/server/app/(dashboard)/dashboard/settings/page.js.nft.json +1 -1
  71. package/app/.next-cli-build/server/app/(dashboard)/dashboard/settings/page_client-reference-manifest.js +1 -1
  72. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js +1 -1
  73. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js.nft.json +1 -1
  74. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
  75. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page.js +1 -1
  76. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page.js.nft.json +1 -1
  77. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  78. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js +1 -1
  79. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
  80. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  81. package/app/.next-cli-build/server/app/(dashboard)/dashboard/ui-kit/page.js +1 -1
  82. package/app/.next-cli-build/server/app/(dashboard)/dashboard/ui-kit/page.js.nft.json +1 -1
  83. package/app/.next-cli-build/server/app/(dashboard)/dashboard/ui-kit/page_client-reference-manifest.js +1 -1
  84. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js +1 -1
  85. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
  86. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  87. package/app/.next-cli-build/server/app/_global-error/page.js.nft.json +1 -1
  88. package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  89. package/app/.next-cli-build/server/app/_global-error.html +1 -1
  90. package/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  91. package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  92. package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  93. package/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  94. package/app/.next-cli-build/server/app/_not-found/page.js +1 -1
  95. package/app/.next-cli-build/server/app/_not-found/page.js.nft.json +1 -1
  96. package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  97. package/app/.next-cli-build/server/app/_not-found.html +1 -1
  98. package/app/.next-cli-build/server/app/_not-found.rsc +4 -4
  99. package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +4 -4
  100. package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +4 -4
  101. package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  102. package/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
  103. package/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
  104. package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
  105. package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
  106. package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
  107. package/app/.next-cli-build/server/app/api/auth/reset-password/route.js.nft.json +1 -1
  108. package/app/.next-cli-build/server/app/api/auth/saml/acs/route.js.nft.json +1 -1
  109. package/app/.next-cli-build/server/app/api/auth/saml/metadata/route.js.nft.json +1 -1
  110. package/app/.next-cli-build/server/app/api/auth/saml/start/route.js.nft.json +1 -1
  111. package/app/.next-cli-build/server/app/api/auth/saml/test/route.js.nft.json +1 -1
  112. package/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
  113. package/app/.next-cli-build/server/app/api/cli-tool-settings/[toolId]/route.js.nft.json +1 -1
  114. package/app/.next-cli-build/server/app/api/cli-tool-settings/route.js.nft.json +1 -1
  115. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js +4 -4
  116. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
  117. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
  118. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  119. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
  120. package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js +2 -2
  121. package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
  122. package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js +2 -2
  123. package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js.nft.json +1 -1
  124. package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js +2 -2
  125. package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
  126. package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js +2 -2
  127. package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
  128. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js +1 -1
  129. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js.nft.json +1 -1
  130. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js +1 -1
  131. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js.nft.json +1 -1
  132. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js +1 -1
  133. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
  134. package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js +3 -3
  135. package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js.nft.json +1 -1
  136. package/app/.next-cli-build/server/app/api/cli-tools/devin-settings/route.js +2 -2
  137. package/app/.next-cli-build/server/app/api/cli-tools/devin-settings/route.js.nft.json +1 -1
  138. package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js +1 -1
  139. package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
  140. package/app/.next-cli-build/server/app/api/cli-tools/grok-build-settings/route.js +1 -1
  141. package/app/.next-cli-build/server/app/api/cli-tools/grok-build-settings/route.js.nft.json +1 -1
  142. package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js +3 -3
  143. package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js.nft.json +1 -1
  144. package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js +3 -3
  145. package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js.nft.json +1 -1
  146. package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js +1 -1
  147. package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js.nft.json +1 -1
  148. package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
  149. package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
  150. package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js +2 -2
  151. package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js.nft.json +1 -1
  152. package/app/.next-cli-build/server/app/api/combos/[id]/headroom/route.js +1 -1
  153. package/app/.next-cli-build/server/app/api/combos/[id]/headroom/route.js.nft.json +1 -1
  154. package/app/.next-cli-build/server/app/api/combos/[id]/route.js +1 -1
  155. package/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
  156. package/app/.next-cli-build/server/app/api/combos/[id]/test/route.js +1 -1
  157. package/app/.next-cli-build/server/app/api/combos/[id]/test/route.js.nft.json +1 -1
  158. package/app/.next-cli-build/server/app/api/combos/route.js +1 -1
  159. package/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
  160. package/app/.next-cli-build/server/app/api/gateway/status/route.js.nft.json +1 -1
  161. package/app/.next-cli-build/server/app/api/headroom/extras/route.js.nft.json +1 -1
  162. package/app/.next-cli-build/server/app/api/headroom/proxy/[...path]/route.js.nft.json +1 -1
  163. package/app/.next-cli-build/server/app/api/headroom/restart/route.js.nft.json +1 -1
  164. package/app/.next-cli-build/server/app/api/headroom/start/route.js.nft.json +1 -1
  165. package/app/.next-cli-build/server/app/api/headroom/status/route.js.nft.json +1 -1
  166. package/app/.next-cli-build/server/app/api/headroom/stop/route.js.nft.json +1 -1
  167. package/app/.next-cli-build/server/app/api/health/route.js.nft.json +1 -1
  168. package/app/.next-cli-build/server/app/api/home/live-routes/route.js.nft.json +1 -1
  169. package/app/.next-cli-build/server/app/api/home/quota/route.js +1 -1
  170. package/app/.next-cli-build/server/app/api/home/quota/route.js.nft.json +1 -1
  171. package/app/.next-cli-build/server/app/api/home/summary/route.js.nft.json +1 -1
  172. package/app/.next-cli-build/server/app/api/init/route.js.nft.json +1 -1
  173. package/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
  174. package/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
  175. package/app/.next-cli-build/server/app/api/locale/route.js.nft.json +1 -1
  176. package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
  177. package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
  178. package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
  179. package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js +1 -1
  180. package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
  181. package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
  182. package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
  183. package/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js +1 -1
  184. package/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -1
  185. package/app/.next-cli-build/server/app/api/models/alias/route.js +1 -1
  186. package/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
  187. package/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
  188. package/app/.next-cli-build/server/app/api/models/catalog-sync/route.js.nft.json +1 -1
  189. package/app/.next-cli-build/server/app/api/models/custom/route.js +1 -1
  190. package/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
  191. package/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
  192. package/app/.next-cli-build/server/app/api/models/route.js +1 -1
  193. package/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
  194. package/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
  195. package/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
  196. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js +1 -1
  197. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  198. package/app/.next-cli-build/server/app/api/oauth/codex/bulk-import/route.js +1 -1
  199. package/app/.next-cli-build/server/app/api/oauth/codex/bulk-import/route.js.nft.json +1 -1
  200. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js +1 -1
  201. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
  202. package/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
  203. package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js +1 -1
  204. package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  205. package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
  206. package/app/.next-cli-build/server/app/api/oauth/grok-cli/bulk-import/route.js.nft.json +1 -1
  207. package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
  208. package/app/.next-cli-build/server/app/api/oauth/kiro/api-key/route.js.nft.json +1 -1
  209. package/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -1
  210. package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  211. package/app/.next-cli-build/server/app/api/oauth/kiro/import-cli-proxy/route.js.nft.json +1 -1
  212. package/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +1 -1
  213. package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  214. package/app/.next-cli-build/server/app/api/oauth/xiaomi-mimo/api-key/route.js.nft.json +1 -1
  215. package/app/.next-cli-build/server/app/api/oauth/xiaomi-mimo/auto-import/route.js +1 -1
  216. package/app/.next-cli-build/server/app/api/oauth/xiaomi-mimo/auto-import/route.js.nft.json +1 -1
  217. package/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
  218. package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  219. package/app/.next-cli-build/server/app/api/provider-nodes/route.js +1 -1
  220. package/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
  221. package/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js +1 -1
  222. package/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js.nft.json +1 -1
  223. package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js +1 -1
  224. package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  225. package/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
  226. package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js +1 -1
  227. package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  228. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
  229. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  230. package/app/.next-cli-build/server/app/api/providers/client/route.js +1 -1
  231. package/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
  232. package/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js.nft.json +1 -1
  233. package/app/.next-cli-build/server/app/api/providers/route.js +1 -1
  234. package/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
  235. package/app/.next-cli-build/server/app/api/providers/suggested-models/route.js.nft.json +1 -1
  236. package/app/.next-cli-build/server/app/api/providers/test-batch/route.js +1 -1
  237. package/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  238. package/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
  239. package/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
  240. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
  241. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
  242. package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
  243. package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
  244. package/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
  245. package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
  246. package/app/.next-cli-build/server/app/api/pxpipe/health/route.js.nft.json +1 -1
  247. package/app/.next-cli-build/server/app/api/pxpipe/install/route.js.nft.json +1 -1
  248. package/app/.next-cli-build/server/app/api/pxpipe/logs/route.js.nft.json +1 -1
  249. package/app/.next-cli-build/server/app/api/pxpipe/restart/route.js.nft.json +1 -1
  250. package/app/.next-cli-build/server/app/api/pxpipe/start/route.js.nft.json +1 -1
  251. package/app/.next-cli-build/server/app/api/pxpipe/stats/route.js.nft.json +1 -1
  252. package/app/.next-cli-build/server/app/api/pxpipe/status/route.js.nft.json +1 -1
  253. package/app/.next-cli-build/server/app/api/pxpipe/stop/route.js.nft.json +1 -1
  254. package/app/.next-cli-build/server/app/api/settings/config/export/route.js.nft.json +1 -1
  255. package/app/.next-cli-build/server/app/api/settings/config/import/route.js +1 -1
  256. package/app/.next-cli-build/server/app/api/settings/config/import/route.js.nft.json +1 -1
  257. package/app/.next-cli-build/server/app/api/settings/database/route.js +1 -1
  258. package/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
  259. package/app/.next-cli-build/server/app/api/settings/environment/route.js.nft.json +1 -1
  260. package/app/.next-cli-build/server/app/api/settings/proxy-test/route.js.nft.json +1 -1
  261. package/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
  262. package/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
  263. package/app/.next-cli-build/server/app/api/shell/savings-milestone/route.js.nft.json +1 -1
  264. package/app/.next-cli-build/server/app/api/shell/summary/route.js +1 -1
  265. package/app/.next-cli-build/server/app/api/shell/summary/route.js.nft.json +1 -1
  266. package/app/.next-cli-build/server/app/api/shutdown/route.js.nft.json +1 -1
  267. package/app/.next-cli-build/server/app/api/tags/route.js.nft.json +1 -1
  268. package/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
  269. package/app/.next-cli-build/server/app/api/translator/console-logs/route.js.nft.json +1 -1
  270. package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
  271. package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -1
  272. package/app/.next-cli-build/server/app/api/translator/load/route.js.nft.json +1 -1
  273. package/app/.next-cli-build/server/app/api/translator/save/route.js.nft.json +1 -1
  274. package/app/.next-cli-build/server/app/api/translator/send/route.js +1 -1
  275. package/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
  276. package/app/.next-cli-build/server/app/api/translator/translate/route.js +1 -1
  277. package/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
  278. package/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  279. package/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  280. package/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
  281. package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
  282. package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
  283. package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
  284. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js +2 -2
  285. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
  286. package/app/.next-cli-build/server/app/api/usage/[connectionId]/codex-reset-credits/route.js +1 -1
  287. package/app/.next-cli-build/server/app/api/usage/[connectionId]/codex-reset-credits/route.js.nft.json +1 -1
  288. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js +1 -1
  289. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  290. package/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
  291. package/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
  292. package/app/.next-cli-build/server/app/api/usage/last-activity/route.js.nft.json +1 -1
  293. package/app/.next-cli-build/server/app/api/usage/logs/route.js.nft.json +1 -1
  294. package/app/.next-cli-build/server/app/api/usage/providers/route.js +1 -1
  295. package/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
  296. package/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
  297. package/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  298. package/app/.next-cli-build/server/app/api/usage/savings/route.js.nft.json +1 -1
  299. package/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
  300. package/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
  301. package/app/.next-cli-build/server/app/api/v1/api/chat/route.js +1 -1
  302. package/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  303. package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js +1 -1
  304. package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  305. package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js +1 -1
  306. package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  307. package/app/.next-cli-build/server/app/api/v1/audio/voices/route.js +1 -1
  308. package/app/.next-cli-build/server/app/api/v1/audio/voices/route.js.nft.json +1 -1
  309. package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js +1 -1
  310. package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  311. package/app/.next-cli-build/server/app/api/v1/embeddings/route.js +1 -1
  312. package/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  313. package/app/.next-cli-build/server/app/api/v1/images/generations/route.js +1 -1
  314. package/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  315. package/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js +1 -1
  316. package/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -1
  317. package/app/.next-cli-build/server/app/api/v1/messages/route.js +1 -1
  318. package/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
  319. package/app/.next-cli-build/server/app/api/v1/models/[...model]/route.js +1 -1
  320. package/app/.next-cli-build/server/app/api/v1/models/[...model]/route.js.nft.json +1 -1
  321. package/app/.next-cli-build/server/app/api/v1/models/info/route.js +1 -1
  322. package/app/.next-cli-build/server/app/api/v1/models/info/route.js.nft.json +1 -1
  323. package/app/.next-cli-build/server/app/api/v1/models/route.js +1 -1
  324. package/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
  325. package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js +1 -1
  326. package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
  327. package/app/.next-cli-build/server/app/api/v1/responses/route.js +1 -1
  328. package/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
  329. package/app/.next-cli-build/server/app/api/v1/route.js +1 -1
  330. package/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
  331. package/app/.next-cli-build/server/app/api/v1/search/route.js +2 -2
  332. package/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
  333. package/app/.next-cli-build/server/app/api/v1/videos/[id]/route.js +1 -1
  334. package/app/.next-cli-build/server/app/api/v1/videos/[id]/route.js.nft.json +1 -1
  335. package/app/.next-cli-build/server/app/api/v1/videos/edits/route.js +1 -1
  336. package/app/.next-cli-build/server/app/api/v1/videos/edits/route.js.nft.json +1 -1
  337. package/app/.next-cli-build/server/app/api/v1/videos/extensions/route.js +1 -1
  338. package/app/.next-cli-build/server/app/api/v1/videos/extensions/route.js.nft.json +1 -1
  339. package/app/.next-cli-build/server/app/api/v1/videos/generations/route.js +1 -1
  340. package/app/.next-cli-build/server/app/api/v1/videos/generations/route.js.nft.json +1 -1
  341. package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js +1 -1
  342. package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
  343. package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js +1 -1
  344. package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  345. package/app/.next-cli-build/server/app/api/v1beta/models/route.js +1 -1
  346. package/app/.next-cli-build/server/app/api/v1beta/models/route.js.nft.json +1 -1
  347. package/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
  348. package/app/.next-cli-build/server/app/callback/page.js +1 -1
  349. package/app/.next-cli-build/server/app/callback/page.js.nft.json +1 -1
  350. package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  351. package/app/.next-cli-build/server/app/callback.html +1 -1
  352. package/app/.next-cli-build/server/app/callback.rsc +4 -4
  353. package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +4 -4
  354. package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +1 -1
  355. package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +4 -4
  356. package/app/.next-cli-build/server/app/dashboard/basic-chat.html +2 -2
  357. package/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +10 -10
  358. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +10 -10
  359. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +10 -10
  360. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
  361. package/app/.next-cli-build/server/app/dashboard/combos.html +2 -2
  362. package/app/.next-cli-build/server/app/dashboard/combos.rsc +10 -10
  363. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +10 -10
  364. package/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +10 -10
  365. package/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
  366. package/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
  367. package/app/.next-cli-build/server/app/dashboard/endpoint.rsc +7 -7
  368. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +7 -7
  369. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +7 -7
  370. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
  371. package/app/.next-cli-build/server/app/dashboard/media-providers/web.html +2 -2
  372. package/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +10 -10
  373. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +10 -10
  374. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +10 -10
  375. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +1 -1
  376. package/app/.next-cli-build/server/app/dashboard/media-providers.html +1 -1
  377. package/app/.next-cli-build/server/app/dashboard/media-providers.rsc +9 -9
  378. package/app/.next-cli-build/server/app/dashboard/media-providers.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/__PAGE__.segment.rsc +9 -9
  379. package/app/.next-cli-build/server/app/dashboard/media-providers.segments/_full.segment.rsc +9 -9
  380. package/app/.next-cli-build/server/app/dashboard/media-providers.segments/_tree.segment.rsc +1 -1
  381. package/app/.next-cli-build/server/app/dashboard/mitm.html +2 -2
  382. package/app/.next-cli-build/server/app/dashboard/mitm.rsc +10 -10
  383. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +10 -10
  384. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +10 -10
  385. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
  386. package/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
  387. package/app/.next-cli-build/server/app/dashboard/profile.rsc +9 -9
  388. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +9 -9
  389. package/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +9 -9
  390. package/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
  391. package/app/.next-cli-build/server/app/dashboard/providers/new.html +2 -2
  392. package/app/.next-cli-build/server/app/dashboard/providers/new.rsc +10 -10
  393. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +10 -10
  394. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +10 -10
  395. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
  396. package/app/.next-cli-build/server/app/dashboard/proxy-pools.html +2 -2
  397. package/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +9 -9
  398. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +9 -9
  399. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +9 -9
  400. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
  401. package/app/.next-cli-build/server/app/dashboard/pxpipe.html +2 -2
  402. package/app/.next-cli-build/server/app/dashboard/pxpipe.rsc +9 -9
  403. package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +9 -9
  404. package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_full.segment.rsc +9 -9
  405. package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +1 -1
  406. package/app/.next-cli-build/server/app/dashboard/quota.html +1 -1
  407. package/app/.next-cli-build/server/app/dashboard/quota.rsc +10 -10
  408. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +10 -10
  409. package/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +10 -10
  410. package/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
  411. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js +1 -1
  412. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js.nft.json +1 -1
  413. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  414. package/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  415. package/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +4 -4
  416. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +4 -4
  417. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
  418. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +4 -4
  419. package/app/.next-cli-build/server/app/dashboard/settings.html +2 -2
  420. package/app/.next-cli-build/server/app/dashboard/settings.rsc +10 -10
  421. package/app/.next-cli-build/server/app/dashboard/settings.segments/!KGRhc2hib2FyZCk/dashboard/settings/__PAGE__.segment.rsc +10 -10
  422. package/app/.next-cli-build/server/app/dashboard/settings.segments/_full.segment.rsc +10 -10
  423. package/app/.next-cli-build/server/app/dashboard/settings.segments/_tree.segment.rsc +1 -1
  424. package/app/.next-cli-build/server/app/dashboard/skills.html +2 -2
  425. package/app/.next-cli-build/server/app/dashboard/skills.rsc +7 -7
  426. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +7 -7
  427. package/app/.next-cli-build/server/app/dashboard/skills.segments/_full.segment.rsc +7 -7
  428. package/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.segment.rsc +1 -1
  429. package/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
  430. package/app/.next-cli-build/server/app/dashboard/token-saver.rsc +10 -10
  431. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +10 -10
  432. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +10 -10
  433. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +1 -1
  434. package/app/.next-cli-build/server/app/dashboard/translator.html +2 -2
  435. package/app/.next-cli-build/server/app/dashboard/translator.rsc +10 -10
  436. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +10 -10
  437. package/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +10 -10
  438. package/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
  439. package/app/.next-cli-build/server/app/dashboard/ui-kit.html +1 -1
  440. package/app/.next-cli-build/server/app/dashboard/ui-kit.rsc +9 -9
  441. package/app/.next-cli-build/server/app/dashboard/ui-kit.segments/!KGRhc2hib2FyZCk/dashboard/ui-kit/__PAGE__.segment.rsc +9 -9
  442. package/app/.next-cli-build/server/app/dashboard/ui-kit.segments/_full.segment.rsc +9 -9
  443. package/app/.next-cli-build/server/app/dashboard/ui-kit.segments/_tree.segment.rsc +1 -1
  444. package/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
  445. package/app/.next-cli-build/server/app/dashboard/usage.rsc +10 -10
  446. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +10 -10
  447. package/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +10 -10
  448. package/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
  449. package/app/.next-cli-build/server/app/dashboard.html +1 -1
  450. package/app/.next-cli-build/server/app/dashboard.rsc +10 -10
  451. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +10 -10
  452. package/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +10 -10
  453. package/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +1 -1
  454. package/app/.next-cli-build/server/app/index.html +1 -1
  455. package/app/.next-cli-build/server/app/index.rsc +4 -4
  456. package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +4 -4
  457. package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +4 -4
  458. package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +1 -1
  459. package/app/.next-cli-build/server/app/landing/page.js +1 -1
  460. package/app/.next-cli-build/server/app/landing/page.js.nft.json +1 -1
  461. package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  462. package/app/.next-cli-build/server/app/landing.html +1 -1
  463. package/app/.next-cli-build/server/app/landing.rsc +5 -5
  464. package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +5 -5
  465. package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +1 -1
  466. package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +5 -5
  467. package/app/.next-cli-build/server/app/login/page.js +1 -1
  468. package/app/.next-cli-build/server/app/login/page.js.nft.json +1 -1
  469. package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  470. package/app/.next-cli-build/server/app/login.html +1 -1
  471. package/app/.next-cli-build/server/app/login.rsc +4 -4
  472. package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +4 -4
  473. package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +1 -1
  474. package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +4 -4
  475. package/app/.next-cli-build/server/app/manifest.webmanifest/route.js.nft.json +1 -1
  476. package/app/.next-cli-build/server/app/page.js +1 -1
  477. package/app/.next-cli-build/server/app/page.js.nft.json +1 -1
  478. package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  479. package/app/.next-cli-build/server/app/skills/[...slug]/route.js.nft.json +1 -1
  480. package/app/.next-cli-build/server/app-paths-manifest.json +7 -7
  481. package/app/.next-cli-build/server/chunks/1152.js +1 -1
  482. package/app/.next-cli-build/server/chunks/1336.js +1 -1
  483. package/app/.next-cli-build/server/chunks/1432.js +1 -1
  484. package/app/.next-cli-build/server/chunks/1533.js +1 -1
  485. package/app/.next-cli-build/server/chunks/1764.js +1 -1
  486. package/app/.next-cli-build/server/chunks/1854.js +1 -0
  487. package/app/.next-cli-build/server/chunks/2380.js +7 -7
  488. package/app/.next-cli-build/server/chunks/24.js +1 -1
  489. package/app/.next-cli-build/server/chunks/2460.js +1 -1
  490. package/app/.next-cli-build/server/chunks/2592.js +1 -1
  491. package/app/.next-cli-build/server/chunks/318.js +10 -9
  492. package/app/.next-cli-build/server/chunks/3558.js +1 -1
  493. package/app/.next-cli-build/server/chunks/3593.js +1 -1
  494. package/app/.next-cli-build/server/chunks/3676.js +1 -1
  495. package/app/.next-cli-build/server/chunks/368.js +1 -0
  496. package/app/.next-cli-build/server/chunks/3919.js +1 -1
  497. package/app/.next-cli-build/server/chunks/3943.js +1 -1
  498. package/app/.next-cli-build/server/chunks/4037.js +1 -1
  499. package/app/.next-cli-build/server/chunks/4123.js +1 -1
  500. package/app/.next-cli-build/server/chunks/4125.js +1 -1
  501. package/app/.next-cli-build/server/chunks/4199.js +1 -1
  502. package/app/.next-cli-build/server/chunks/4334.js +1 -1
  503. package/app/.next-cli-build/server/chunks/4406.js +2 -2
  504. package/app/.next-cli-build/server/chunks/4521.js +1 -1
  505. package/app/.next-cli-build/server/chunks/4730.js +1 -1
  506. package/app/.next-cli-build/server/chunks/4780.js +1 -1
  507. package/app/.next-cli-build/server/chunks/4903.js +1 -0
  508. package/app/.next-cli-build/server/chunks/5055.js +1 -0
  509. package/app/.next-cli-build/server/chunks/5260.js +1 -0
  510. package/app/.next-cli-build/server/chunks/5335.js +1 -0
  511. package/app/.next-cli-build/server/chunks/5765.js +1 -0
  512. package/app/.next-cli-build/server/chunks/5827.js +1 -0
  513. package/app/.next-cli-build/server/chunks/6000.js +1 -0
  514. package/app/.next-cli-build/server/chunks/620.js +1 -0
  515. package/app/.next-cli-build/server/chunks/6252.js +1 -1
  516. package/app/.next-cli-build/server/chunks/6328.js +1 -0
  517. package/app/.next-cli-build/server/chunks/6403.js +1 -0
  518. package/app/.next-cli-build/server/chunks/6496.js +1 -1
  519. package/app/.next-cli-build/server/chunks/6565.js +1 -0
  520. package/app/.next-cli-build/server/chunks/6734.js +1 -1
  521. package/app/.next-cli-build/server/chunks/7211.js +1 -1
  522. package/app/.next-cli-build/server/chunks/7616.js +1 -1
  523. package/app/.next-cli-build/server/chunks/7716.js +1 -1
  524. package/app/.next-cli-build/server/chunks/7819.js +1 -1
  525. package/app/.next-cli-build/server/chunks/7828.js +1 -1
  526. package/app/.next-cli-build/server/chunks/7901.js +1 -1
  527. package/app/.next-cli-build/server/chunks/8171.js +1 -1
  528. package/app/.next-cli-build/server/chunks/8255.js +1 -1
  529. package/app/.next-cli-build/server/chunks/8372.js +1 -1
  530. package/app/.next-cli-build/server/chunks/8416.js +1 -1
  531. package/app/.next-cli-build/server/chunks/8895.js +12 -12
  532. package/app/.next-cli-build/server/chunks/8988.js +1 -0
  533. package/app/.next-cli-build/server/chunks/9219.js +1 -0
  534. package/app/.next-cli-build/server/chunks/9243.js +1 -0
  535. package/app/.next-cli-build/server/chunks/9326.js +1 -0
  536. package/app/.next-cli-build/server/chunks/9343.js +1 -1
  537. package/app/.next-cli-build/server/chunks/9489.js +3 -0
  538. package/app/.next-cli-build/server/chunks/9578.js +1 -1
  539. package/app/.next-cli-build/server/chunks/9594.js +1 -0
  540. package/app/.next-cli-build/server/chunks/965.js +1 -1
  541. package/app/.next-cli-build/server/chunks/9899.js +1 -1
  542. package/app/.next-cli-build/server/instrumentation.js +1 -1
  543. package/app/.next-cli-build/server/instrumentation.js.nft.json +1 -1
  544. package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  545. package/app/.next-cli-build/server/middleware-react-loadable-manifest.js +1 -1
  546. package/app/.next-cli-build/server/middleware.js.nft.json +1 -1
  547. package/app/.next-cli-build/server/pages/404.html +1 -1
  548. package/app/.next-cli-build/server/pages/500.html +1 -1
  549. package/app/.next-cli-build/server/server-reference-manifest.js +1 -1
  550. package/app/.next-cli-build/server/server-reference-manifest.json +1 -1
  551. package/app/.next-cli-build/static/chunks/{198-145d0ed2ec3c54f5.js → 198-0c7f5eadfd257db1.js} +1 -1
  552. package/app/.next-cli-build/static/chunks/{3670-e7a22341025498f8.js → 3670-90f5cd325f460eb5.js} +1 -1
  553. package/app/.next-cli-build/static/chunks/5014-a5d960f4c6bc6297.js +1 -0
  554. package/app/.next-cli-build/static/chunks/{6174.18e2c57e892d721a.js → 6174.f1da2912aec81c15.js} +1 -1
  555. package/app/.next-cli-build/static/chunks/6448-71a8c2ac8d9ecc09.js +1 -0
  556. package/app/.next-cli-build/static/chunks/7899-83edd7bbf1a98c4a.js +1 -0
  557. package/app/.next-cli-build/static/chunks/8105-bdd81b911fed8537.js +1 -0
  558. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/combos/{page-8147ae8fa9c04381.js → page-42bfc760fbea3b96.js} +1 -1
  559. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/console-log/{page-9cbf62f78701882a.js → page-084fc21b1dbae00d.js} +1 -1
  560. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/[id]/{page-5f91e148400a241b.js → page-59ee0b412f972940.js} +3 -3
  561. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/new/{page-dac4ab98fc595054.js → page-de53f51d191eec46.js} +1 -1
  562. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/page-463f9fa33be9426a.js +1 -0
  563. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/translator/{page-06f4e52ee3b63f82.js → page-243d3da0a2c6cbe9.js} +1 -1
  564. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/ui-kit/{page-6c982cc50b6af101.js → page-998f8c5a36dac961.js} +1 -1
  565. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/usage/page-923f864ec0be0fc8.js +1 -0
  566. package/app/.next-cli-build/static/chunks/app/(dashboard)/{layout-dd9d1e49b2f69197.js → layout-96ebd2b46f1f8d39.js} +1 -1
  567. package/app/.next-cli-build/static/chunks/app/landing/{page-02b7bfebd65c41f1.js → page-bcaea5febe1c68c0.js} +1 -1
  568. package/app/.next-cli-build/static/chunks/webpack-8693ccf029e9af63.js +1 -0
  569. package/app/custom-server.js +0 -37
  570. package/app/package.json +1 -1
  571. package/app/src/lib/db/adapters/sqljsAdapter.js +39 -4
  572. package/app/src/lib/oauth/services/xai.js +19 -12
  573. package/app/src/shared/services/quotaAutoPing.js +43 -8
  574. package/app/src/shared/services/quotaSnapshotPoller.js +2 -1
  575. package/app/src/sse/services/backgroundTokenRefresh.js +13 -1
  576. package/package.json +1 -1
  577. package/src/cli/menus/combos.js +3 -1
  578. package/app/.next-cli-build/server/chunks/1026.js +0 -1
  579. package/app/.next-cli-build/server/chunks/2384.js +0 -1
  580. package/app/.next-cli-build/server/chunks/3093.js +0 -1
  581. package/app/.next-cli-build/server/chunks/331.js +0 -1
  582. package/app/.next-cli-build/server/chunks/3414.js +0 -1
  583. package/app/.next-cli-build/server/chunks/3586.js +0 -1
  584. package/app/.next-cli-build/server/chunks/4278.js +0 -1
  585. package/app/.next-cli-build/server/chunks/6158.js +0 -1
  586. package/app/.next-cli-build/server/chunks/6354.js +0 -1
  587. package/app/.next-cli-build/server/chunks/6769.js +0 -1
  588. package/app/.next-cli-build/server/chunks/7261.js +0 -1
  589. package/app/.next-cli-build/server/chunks/8635.js +0 -3
  590. package/app/.next-cli-build/server/chunks/994.js +0 -1
  591. package/app/.next-cli-build/static/chunks/5014-a441cde708542153.js +0 -1
  592. package/app/.next-cli-build/static/chunks/6448-4eabf683083596e6.js +0 -1
  593. package/app/.next-cli-build/static/chunks/7899-e6a70cb9d3684f7f.js +0 -1
  594. package/app/.next-cli-build/static/chunks/8105-5c7e7c73b4bd532d.js +0 -1
  595. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/page-9fadf2c38665c20c.js +0 -1
  596. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/usage/page-7571538830147099.js +0 -1
  597. package/app/.next-cli-build/static/chunks/webpack-187fa25c98ba99f3.js +0 -1
  598. /package/app/.next-cli-build/static/{3Qm_WgU2xvFJ9U_G7SKhT → J4xdfHpBUAMOCO5dsemSj}/_buildManifest.js +0 -0
  599. /package/app/.next-cli-build/static/{3Qm_WgU2xvFJ9U_G7SKhT → J4xdfHpBUAMOCO5dsemSj}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2825,9499],{4553:(e,t,r)=>{"use strict";r.d(t,{DM:()=>l,Hc:()=>c,qt:()=>i,qx:()=>d});var n=r(35652);let{BRAND_IDS:a,DEFAULT_BRAND_ID:s,ACTIVE_BRAND_ID:l,isActiveBrand:o,BRAND:i,LEGACY:d,ACTIVE:c,UPSTREAM_CLIENT_IDS:u,envName:p,readEnv:m,warnLegacyOnce:x,header:h,legacyHeaderNames:f}=r.n(n)()},8247:(e,t,r)=>{"use strict";r.d(t,{HY:()=>i,Kw:()=>d});let n={"perplexity-agent":"perplexity","gitlab-duo":"gitlab","vercel-ai-gateway":"vercel","ollama-search":"ollama"};function a(e){return e.startsWith("openai-compatible")?"oai-cc":e.startsWith("anthropic-compatible")?"anthropic-m":""}let s=new Set;function l(e){return e&&"string"==typeof e?e.trim().toLowerCase():""}let o=new Set(["meta-code"]);function i(e){let t=function(e){let t=l(e);if(!t||s.has(t))return"";let r=n[t]||a(t)||t;return s.has(r)?"":r}(e);return t?`/providers/${t}.${o.has(t)?"svg":"webp"}`:null}function d(e){let t=l(e);t&&s.add(t);let r=n[t]||a(t);r&&s.add(r)}},10185:(e,t,r)=>{"use strict";r.d(t,{default:()=>d});var n=r(95155),a=r(14051),s=r.n(a),l=r(12115),o=r(31474),i=r(4650);function d({value:e,copyValue:t,label:r="Copy to clipboard",showCopyButton:a=!0,className:s,...c}){let[u,p]=(0,l.useState)(null),m=(0,l.useRef)(null);(0,l.useEffect)(()=>()=>clearTimeout(m.current),[]);let x=e=>{p(e),clearTimeout(m.current),m.current=setTimeout(()=>p(null),2e3)},h=async()=>{try{await (0,i.eM)(t??e),x("copied")}catch{x("error")}};return(0,n.jsxs)("div",{className:(0,o.cn)("flex h-11 items-center gap-2 rounded-lg border border-line bg-raised ps-3 pe-1.5 transition-colors","focus-within:border-coral focus-within:shadow-focus",s),...c,children:[(0,n.jsx)("code",{title:String(t??e),className:"min-w-0 flex-1 truncate font-mono text-sm text-text",children:e}),a?(0,n.jsx)("button",{type:"button","aria-label":r,onClick:h,className:"inline-flex size-8 shrink-0 items-center justify-center rounded-md text-muted transition-colors hover:bg-line/60 hover:text-text focus-visible:shadow-focus",children:(0,n.jsx)("span",{className:"material-symbols-outlined text-[18px]","aria-hidden":"true",children:"copied"===u?"check":"error"===u?"error":"content_copy"})}):null,a?(0,n.jsx)("span",{"aria-live":"polite",className:"sr-only",children:"copied"===u?"Copied":"error"===u?"Copy failed":""}):null]})}d.propTypes={value:s().oneOfType([s().string,s().number]).isRequired,copyValue:s().string,label:s().string,showCopyButton:s().bool,className:s().string}},11910:(e,t,r)=>{"use strict";r.d(t,{default:()=>i});var n=r(95155),a=r(14051),s=r.n(a),l=r(31474),o=r(98582);function i({label:e,type:t="text",placeholder:r,value:a,onChange:s,error:d,hint:c,icon:u,disabled:p=!1,required:m=!1,className:x,inputClassName:h,id:f,ref:b,...g}){return(0,n.jsx)(o.default,{id:f,label:e,hint:c,error:d,required:m,className:x,children:({inputId:e,describedBy:o,invalid:i})=>(0,n.jsxs)("div",{className:"relative",children:[u&&(0,n.jsx)("div",{className:"absolute inset-y-0 start-0 flex items-center ps-3 pointer-events-none text-muted","aria-hidden":"true",children:(0,n.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:u})}),(0,n.jsx)("input",{...g,ref:b,id:e,type:t,placeholder:r,value:a,onChange:s,disabled:p,"aria-describedby":o,"aria-invalid":i||void 0,className:(0,l.cn)("w-full py-2.5 px-3 text-sm text-text bg-raised rounded-lg","border border-line placeholder:text-subtle","focus:outline-none focus:border-coral focus:shadow-focus","transition-colors duration-150 disabled:opacity-50 disabled:cursor-not-allowed","text-[16px] sm:text-sm",u&&"ps-10",i&&"border-err focus:border-err",h)})]})})}i.propTypes={label:s().node,type:s().string,placeholder:s().string,value:s().oneOfType([s().string,s().number]),onChange:s().func,error:s().node,hint:s().node,icon:s().string,disabled:s().bool,required:s().bool,className:s().string,inputClassName:s().string,id:s().string,"aria-label":s().string}},16369:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>ea});var n=r(95155),a=r(12115),s=r(37206),l=r(73321),o=r(25086),i=r(20446),d=r(34912),c=r(84588),u=r(77671),p=r(46791),m=r(62523),x=r(47414),h=r(47303),f=r(3418),b=r(11776);function g({hidden:e,tab:t}){return{hidden:e,tab:t,open:!e&&"overview"===t,needsCatchUp:!1}}function v(e,t){switch(t.type){case"visibility":case"tab":{let r="visibility"===t.type?t.hidden:e.hidden,n="tab"===t.type?t.tab:e.tab,a=!r&&"overview"===n;if(r===e.hidden&&n===e.tab)return e;return{hidden:r,tab:n,open:a,needsCatchUp:e.needsCatchUp||!e.open&&a}}case"caughtUp":return e.needsCatchUp?{...e,needsCatchUp:!1}:e;case"reconnected":return e.open&&!e.needsCatchUp?{...e,needsCatchUp:!0}:e;default:throw Error(`streamReducer: unknown action "${t?.type}"`)}}let y={activeRequests:[],lastProvider:"",errorProvider:""},j=(e,t)=>e.lastProvider===t.lastProvider&&e.errorProvider===t.errorProvider&&e.activeRequests.length===t.activeRequests.length&&e.activeRequests.every((e,r)=>e.provider===t.activeRequests[r]?.provider&&e.count===t.activeRequests[r]?.count);var k=r(58833),N=r(88105);function w(e){let t=N.Q2[e];return!t?.serviceKinds||t.serviceKinds.includes("llm")}var T=r(14051),S=r.n(T),$=r(29155),C=r(25908),O=r(40365);let E={today:{caption:"vs same time yesterday"},"24h":{caption:"vs prior 24h"},"7d":{caption:"vs prior 7d"},"30d":{caption:"vs prior 30d"},"60d":{caption:"vs prior 60d"},default:{caption:"vs prior period"}},P=e=>String(Math.round(10*e)/10),R=e=>e>=1e9?`${P(e/1e9)}B`:e>=1e6?`${P(e/1e6)}M`:e>=1e3?`${P(e/1e3)}K`:String(Math.round(e)||0),_=e=>e>=1e9?`$${P(e/1e9)}B`:e>=1e6?`$${P(e/1e6)}M`:e>=1e3?`$${P(e/1e3)}k`:`$${(e||0).toFixed(2)}`,A={requests:"text-muted",input:"text-sky",cached:"text-lime-ink",output:"text-coral-ink",cost:"text-muted"};function z({current:e,previous:t,period:r}){let a=function(e,t){if(!Number.isFinite(e)||!Number.isFinite(t)||t<=0)return{kind:"none"};let{delta:r}=(0,O.ul)(e,t),n=Math.round(r/t*100);return{kind:n>0?"up":n<0?"down":"flat",pct:n}}(e,t);if("none"===a.kind)return(0,n.jsx)("span",{className:"text-muted",children:"No prior data"});let s="up"===a.kind?"text-ok":"down"===a.kind?"text-err":"text-muted",l=(E[r]||E.default).caption;return(0,n.jsxs)("span",{children:[(0,n.jsxs)("span",{className:`font-semibold ${s}`,children:[a.pct>0?"+":"",a.pct,"%"]})," ",(0,n.jsx)("span",{className:"text-muted",children:l})]})}function I({stats:e,loading:t=!1,previous:r=null,currentTotals:a=null,buckets:s=null,period:l}){if(t||!e)return(0,n.jsx)("div",{className:"grid min-w-0 grid-cols-1 gap-3 sm:grid-cols-2 sm:gap-4 md:grid-cols-3 lg:grid-cols-5",children:[0,1,2,3,4].map(e=>(0,n.jsx)(o.Skeleton,{className:"h-[104px] rounded-2xl"},e))});let i=e.totalPromptTokens||0,d=e.totalCachedTokens||0,c=e.totalCompletionTokens||0,u=e.totalRequests||0,p=i>0?Math.round(d/i*100):0,m=u>0?Math.round(c/u):0,x=[{eyebrow:"Requests",value:(0,n.jsx)($.default,{value:u,format:R}),delta:"In this period",field:"requests",current:a?.requests,prev:r?.requests},{eyebrow:"Input tokens",value:(0,n.jsx)("span",{className:"text-sky",children:(0,n.jsx)($.default,{value:i,format:R})}),delta:"After token saver",field:"input",current:a?.promptTokens,prev:r?.promptTokens},{eyebrow:"Cached",value:(0,n.jsx)("span",{className:"text-lime-ink",children:(0,n.jsx)($.default,{value:d,format:R})}),delta:`${p}% of input`,field:"cached",current:a?.cachedTokens,prev:r?.cachedTokens},{eyebrow:"Output tokens",value:(0,n.jsx)("span",{className:"text-coral-ink",children:(0,n.jsx)($.default,{value:c,format:R})}),delta:`Avg ${new Intl.NumberFormat().format(Math.round(m)||0)} per request`,field:"output",current:a?.completionTokens,prev:r?.completionTokens},{eyebrow:"Est. cost",value:(0,n.jsx)($.default,{value:e.totalCost,format:_}),delta:"List prices, not your bill",field:"cost",current:a?.cost,prev:r?.cost}];return(0,n.jsx)("div",{className:"grid min-w-0 grid-cols-1 gap-3 sm:grid-cols-2 sm:gap-4 md:grid-cols-3 lg:grid-cols-5",children:x.map(e=>(0,n.jsx)(C.default,{eyebrow:e.eyebrow,value:e.value,delta:e.delta,trend:(0,n.jsx)(z,{current:e.current,previous:e.prev,period:l}),sparkline:function(e,t){if(Array.isArray(e)&&!(e.length<2))return e.map(e=>Number(e?.[t])||0)}(s,e.field),className:`min-w-0 ${A[e.field]}`},e.eyebrow))})}z.propTypes={current:S().number,previous:S().number,period:S().string},I.propTypes={stats:S().object,loading:S().bool,previous:S().object,currentTotals:S().object,buckets:S().array,period:S().string.isRequired};let q=(0,a.memo)(I);var M=r(28067),D=r(99312),K=r(44863),F=r(96975),L=r(50770);let U=e=>new Intl.NumberFormat().format(e||0),B=e=>e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:String(e||0),V=e=>`$${(e||0).toFixed(2)}`,H={model:{key:"rawModel",label:"Model",source:"byModel",emptyTitle:"No usage by model in this period."},account:{key:"accountName",label:"Account",source:"byAccount",emptyTitle:"No account usage in this period."},apiKey:{key:"keyName",label:"API key",source:"byApiKey",emptyTitle:"No API key usage in this period."},endpoint:{key:"endpoint",label:"Endpoint",source:"byEndpoint",emptyTitle:"No endpoint usage in this period."}};function W({stats:e}){let[t,r]=(0,a.useState)("model"),[s,l]=(0,a.useState)("costs"),[o,i]=(0,a.useState)("totalCost"),[d,u]=(0,a.useState)("desc"),[p,m]=(0,a.useState)(new Set),x=H[t],h=`usage-stats:expanded-${t}`;(0,a.useEffect)(()=>{try{let e=localStorage.getItem(h);m(new Set(e?JSON.parse(e):[]))}catch{m(new Set)}},[h]),(0,a.useEffect)(()=>{try{localStorage.setItem(h,JSON.stringify([...p]))}catch{}},[p,h]);let f=(0,a.useMemo)(()=>{let t=e?.[x.source],r=Array.isArray(t)?t:Object.entries(t||{}).map(([e,t])=>({key:e,...t}));return(0,k.fD)((0,k.sN)(r,o,d),x.key)},[e,x,o,d]),b=(0,a.useMemo)(()=>{let e={requests:0,promptTokens:0,completionTokens:0,cost:0};for(let t of f)e.requests+=t.summary.requests||0,e.promptTokens+=t.summary.promptTokens||0,e.completionTokens+=t.summary.completionTokens||0,e.cost+=t.summary.cost||0;return e},[f]),g=[{field:"__label",label:x.label,numeric:!1},{field:"requests",label:"Requests",numeric:!0},{field:"__input",label:"Input",numeric:!0},{field:"__output",label:"Output",numeric:!0},{field:"totalCost",label:"Cost",numeric:!0},{field:"__share",label:"Share",numeric:!1}],v=e=>"__input"===e?"costs"===s?"totalCost":"promptTokens":"__output"===e?"costs"===s?"totalCost":"completionTokens":e,y=e=>"costs"===s?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("td",{className:"px-6 py-3 text-end font-mono",children:U(e.requests)}),(0,n.jsx)("td",{className:"px-6 py-3 text-end font-mono text-muted",children:V((e.cost||e.totalCost||0)*Math.max(0,(e.promptTokens||0)-(e.cachedTokens||0))/Math.max(1,(e.promptTokens||0)+(e.completionTokens||0)))}),(0,n.jsx)("td",{className:"px-6 py-3 text-end font-mono text-muted",children:V((e.cost||e.totalCost||0)*(e.completionTokens||0)/Math.max(1,(e.promptTokens||0)+(e.completionTokens||0)))}),(0,n.jsx)("td",{className:"px-6 py-3 text-end font-mono",children:V(e.cost??e.totalCost)})]}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("td",{className:"px-6 py-3 text-end font-mono",children:U(e.requests)}),(0,n.jsx)("td",{className:"px-6 py-3 text-end font-mono text-muted",children:B(e.promptTokens)}),(0,n.jsx)("td",{className:"px-6 py-3 text-end font-mono text-muted",children:B(e.completionTokens)}),(0,n.jsx)("td",{className:"px-6 py-3 text-end font-mono",children:B((e.promptTokens||0)+(e.completionTokens||0))})]}),j=e=>{let t="costs"===s?b.cost:b.promptTokens+b.completionTokens,r="costs"===s?e.cost||e.totalCost||0:(e.promptTokens||0)+(e.completionTokens||0);return(0,k.lt)(r,t)};return(0,n.jsxs)(c.default,{padding:"none",children:[(0,n.jsx)(c.default.Header,{className:"px-6 pt-4 pb-4",title:"Breakdown",actions:(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,n.jsx)(M.default,{"aria-label":"Breakdown view",size:"sm",value:t,onChange:r,options:[{value:"model",label:"Model"},{value:"account",label:"Account"},{value:"apiKey",label:"API key"},{value:"endpoint",label:"Endpoint"}]}),(0,n.jsx)(M.default,{"aria-label":"Breakdown metric",size:"sm",value:s,onChange:l,options:[{value:"costs",label:"Costs"},{value:"tokens",label:"Tokens"}]})]})}),e&&0!==f.length?(0,n.jsx)("section",{className:"overflow-x-auto focus-visible:shadow-focus","aria-label":"Usage breakdown",tabIndex:0,children:(0,n.jsxs)("table",{className:"w-full text-start text-sm",children:[(0,n.jsx)("thead",{children:(0,n.jsx)("tr",{className:L.pi,children:g.map(e=>(0,n.jsx)("th",{scope:"col","aria-sort":o===v(e.field)?"asc"===d?"ascending":"descending":void 0,className:`${L.PK} px-6 py-3 ${e.numeric?"text-end":"text-start"}`,children:"__label"===e.field||"__share"===e.field?e.label:(0,n.jsxs)("button",{type:"button",onClick:()=>{let t;o===(t=v(e.field))?u(e=>"asc"===e?"desc":"asc"):(i(t),u("desc"))},className:"inline-flex items-center gap-1 hover:text-text",children:[e.label,(0,n.jsx)("span",{"aria-hidden":"true",className:"opacity-60",children:o===v(e.field)?"asc"===d?"↑":"↓":"↕"})]})},e.field))})}),(0,n.jsx)("tbody",{className:"divide-y divide-line",children:f.map(e=>{let r=p.has(e.groupKey),s=j(e.summary),l=1===new Set(e.items.map(e=>e.provider)).size?e.items[0]?.provider:null;return(0,n.jsxs)(a.Fragment,{children:[(0,n.jsxs)("tr",{className:"transition-colors hover:bg-raised/50",children:[(0,n.jsx)("td",{className:"px-6 py-3",children:(0,n.jsxs)("button",{type:"button",onClick:()=>m(t=>{let r=new Set(t);return r.has(e.groupKey)?r.delete(e.groupKey):r.add(e.groupKey),r}),"aria-expanded":r,className:"flex items-center gap-2 font-medium",children:[(0,n.jsx)("span",{"aria-hidden":"true",className:`material-symbols-outlined text-[18px] text-muted transition-transform ${r?"rotate-90":""}`,children:"chevron_right"}),"model"===t&&l&&(0,n.jsx)(F.default,{providerId:l,size:"sm"}),(0,n.jsx)("span",{className:"max-w-[280px] truncate font-mono text-[13px]",children:e.groupKey}),(0,n.jsxs)("span",{className:"sr-only",children:[e.items.length," rows, last used ",(e=>{if(!e)return"Never";let t=Math.floor((Date.now()-new Date(e))/6e4);return t<1?"Just now":t<60?`${t}m ago`:t<1440?`${Math.floor(t/60)}h ago`:new Date(e).toLocaleDateString()})(e.summary.lastUsed)]})]})}),y(e.summary),(0,n.jsx)("td",{className:"px-6 py-3",children:(0,n.jsxs)("span",{className:"flex items-center gap-2",children:[(0,n.jsx)("span",{className:"min-w-24 flex-1",children:(0,n.jsx)(K.default,{value:s,kind:"credits",label:`Share of ${e.groupKey}`,valueText:`${s.toFixed(1)} percent`})}),(0,n.jsxs)("span",{className:"font-mono text-xs text-muted",children:[s.toFixed(0),"%"]})]})})]}),r&&e.items.map(t=>(0,n.jsxs)("tr",{className:"bg-raised/20",children:[(0,n.jsx)("td",{className:"py-3 ps-12 pe-6 font-mono text-[13px] text-muted",children:(0,n.jsxs)("span",{className:"flex min-w-0 items-center gap-2",children:[t.provider&&(0,n.jsx)(F.default,{providerId:t.provider,size:"sm"}),(0,n.jsx)("span",{className:"truncate",children:t.provider?`${t.rawModel||t.groupKey} \xb7 ${t.provider}`:t.rawModel||t.key||"—"})]})}),y(t),(0,n.jsx)("td",{className:"px-6 py-3",children:(0,n.jsxs)("span",{className:"flex items-center gap-2",children:[(0,n.jsx)("span",{className:"min-w-24 flex-1",children:(0,n.jsx)(K.default,{value:j(t),kind:"credits",label:`Share of ${t.rawModel||t.key}`,valueText:`${j(t).toFixed(1)} percent`})}),(0,n.jsxs)("span",{className:"font-mono text-xs text-muted",children:[j(t).toFixed(0),"%"]})]})})]},`${e.groupKey}|${t.key}|${t.rawModel}|${t.provider}|${t.connectionId}|${t.keyName}|${t.endpoint}|${t.apiKeyKey}`))]},e.groupKey)})})]})}):(0,n.jsx)(D.default,{icon:"table_rows",title:x.emptyTitle})]})}W.propTypes={stats:S().object};let J=(0,a.memo)(W);var X=r(92542),Y=r(99380),Z=r(11910),Q=r(19123),G=r(50378),ee=r(9058);let et=e=>e?.cached_tokens||e?.cache_read_input_tokens||0;function er(){let[e,t]=(0,a.useState)([]),[r,s]=(0,a.useState)({page:1,pageSize:20,totalItems:0,totalPages:0}),[l,o]=(0,a.useState)(!0),[i,d]=(0,a.useState)(""),p=(0,a.useRef)(null),[m,x]=(0,a.useState)(null),[h,f]=(0,a.useState)(!1),[b,g]=(0,a.useState)([]),[v,y]=(0,a.useState)(null),[j,k]=(0,a.useState)({provider:"",startDate:"",endDate:""});(0,a.useEffect)(()=>{let e=!1,t=new AbortController;return(async()=>{try{let r=await fetch("/api/usage/providers",{signal:t.signal}),n=await r.json();e||g(n.providers||[]);let a=await fetch("/api/provider-nodes",{signal:t.signal}),s=await a.json();if(e)return;let l={};for(let e of s.nodes||[])l[e.id]=e.name;y({...N.Q2,...l})}catch(e){if(e?.name==="AbortError")return;console.error("Failed to fetch providers:",e)}})(),()=>{e=!0,t.abort()}},[]);let w=j.startDate&&j.endDate&&j.startDate>j.endDate?"Start must be before end":"",T=(0,a.useCallback)(async()=>{p.current?.abort();let e=new AbortController;p.current=e,o(!0);try{let n=new URLSearchParams({page:String(r.page),pageSize:String(r.pageSize)});j.provider&&n.append("provider",j.provider),j.startDate&&n.append("startDate",new Date(j.startDate).toISOString()),j.endDate&&n.append("endDate",new Date(j.endDate).toISOString());let a=await fetch(`/api/usage/request-details?${n}`,{signal:e.signal});if(!a.ok)throw Error(`HTTP ${a.status}`);let l=await a.json();t(l.details||[]),s(e=>({...e,...l.pagination})),d("")}catch(t){if(e.signal.aborted)return;console.error("Failed to fetch request details:",t),d(t instanceof Error&&t.message?t.message:"Unknown error")}finally{e.signal.aborted||o(!1)}},[r.page,r.pageSize,j]);(0,a.useEffect)(()=>{if(w){p.current?.abort(),o(!1);return}T()},[T,w]),(0,a.useEffect)(()=>()=>{p.current?.abort()},[]);let S=(e,t)=>{k(r=>({...r,[e]:t})),s(e=>1===e.page?e:{...e,page:1})};return(0,n.jsxs)("div",{className:"flex min-w-0 flex-col gap-4",children:[(0,n.jsx)(c.default,{children:(0,n.jsxs)("div",{className:"flex min-w-0 flex-col gap-4 lg:flex-row lg:items-end",children:[(0,n.jsx)(Y.default,{id:"provider-filter",label:"Provider",placeholder:null,options:[{value:"",label:"All providers"},...b.map(e=>({value:e.id,label:e.name!==e.id?`${e.name} (${e.id.slice(0,18)}…)`:e.name}))],value:j.provider,onChange:e=>S("provider",e.target.value),className:"min-w-0 lg:w-60"}),(0,n.jsxs)("fieldset",{className:"min-w-0 flex-1",children:[(0,n.jsx)("legend",{className:"text-sm font-medium",children:"Date range"}),(0,n.jsxs)("div",{className:"mt-1.5 grid min-w-0 grid-cols-1 gap-3 sm:grid-cols-2",children:[(0,n.jsx)(Z.default,{id:"start-date-filter",type:"datetime-local",label:"From",value:j.startDate,onChange:e=>S("startDate",e.target.value)}),(0,n.jsx)(Z.default,{id:"end-date-filter",type:"datetime-local",label:"To",error:w,value:j.endDate,onChange:e=>S("endDate",e.target.value)})]})]}),(0,n.jsx)(X.default,{variant:"ghost",onClick:()=>{k({provider:"",startDate:"",endDate:""}),s(e=>1===e.page?e:{...e,page:1})},disabled:!j.provider&&!j.startDate&&!j.endDate,children:"Clear filters"})]})}),(0,n.jsx)(c.default,{padding:"none",children:l?(0,n.jsx)(u.LoadingState,{label:"Loading requests",lines:5,className:"p-6"}):i?(0,n.jsx)("div",{className:"p-6",children:(0,n.jsx)(u.ErrorState,{title:"Couldn't load requests",message:i,onRetry:T})}):0===e.length?(0,n.jsx)(D.default,{icon:"receipt_long",title:"No request details found",body:"Adjust the filters or make a request through the gateway."}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("section",{className:"overflow-x-auto focus-visible:shadow-focus","aria-label":"Request log",tabIndex:0,children:(0,n.jsxs)("table",{className:"w-full min-w-[880px] text-sm",children:[(0,n.jsx)("thead",{children:(0,n.jsxs)("tr",{className:L.pi,children:[(0,n.jsx)("th",{scope:"col",className:`${L.PK} p-4 text-start`,children:"Timestamp"}),(0,n.jsx)("th",{scope:"col",className:`${L.PK} p-4 text-start`,children:"Model"}),(0,n.jsx)("th",{scope:"col",className:`${L.PK} p-4 text-start`,children:"Provider"}),(0,n.jsx)("th",{scope:"col",className:`${L.PK} p-4 text-end`,children:"Input"}),(0,n.jsx)("th",{scope:"col",className:`${L.PK} p-4 text-end`,children:"Cached"}),(0,n.jsx)("th",{scope:"col",className:`${L.PK} p-4 text-end`,children:"Output"}),(0,n.jsx)("th",{scope:"col",className:`${L.PK} p-4 text-start`,children:"Latency"}),(0,n.jsx)("th",{scope:"col",className:`${L.PK} p-4 text-start`,children:"Status"}),(0,n.jsx)("th",{scope:"col",className:`${L.PK} p-4 text-start`,children:(0,n.jsx)("span",{className:"sr-only",children:"Actions"})})]})}),(0,n.jsx)("tbody",{children:e.map((e,t)=>{var r;let a,s,l,o=(a=e.id,`req-${String(a).replace(/[^A-Za-z0-9_-]+/g,"-")}-${t}`);return(0,n.jsxs)("tr",{className:"border-b border-line transition-colors last:border-b-0 hover:bg-raised",children:[(0,n.jsx)("td",{id:`${o}-time`,className:"whitespace-nowrap p-4",children:e.timestamp?new Date(e.timestamp).toLocaleString():"—"}),(0,n.jsx)("td",{id:`${o}-model`,className:"max-w-[260px] truncate p-4 font-mono",children:e.model}),(0,n.jsx)("td",{className:"max-w-[180px] p-4",children:(0,n.jsxs)("span",{className:"flex min-w-0 items-center gap-2",children:[e.provider&&(0,n.jsx)(F.default,{providerId:e.provider,size:"sm"}),(0,n.jsx)("span",{className:"truncate",children:(0,ee.s)(e.provider,v)})]})}),(0,n.jsx)("td",{className:"p-4 text-end font-mono",children:(r=e.tokens,s=r?.prompt_tokens||r?.input_tokens||0,s<(l=et(r))?l:s).toLocaleString()}),(0,n.jsx)("td",{className:"p-4 text-end font-mono",children:et(e.tokens)>0?et(e.tokens).toLocaleString():"—"}),(0,n.jsx)("td",{className:"p-4 text-end font-mono",children:(e.tokens?.completion_tokens??e.tokens?.output_tokens??0).toLocaleString()}),(0,n.jsxs)("td",{className:"whitespace-nowrap p-4 font-mono text-muted",children:[e.latency?.total??0,"ms"]}),(0,n.jsx)("td",{className:"p-4",children:(0,n.jsx)(Q.default,{variant:e.status&&"ok"!==e.status&&"success"!==e.status?"err":"ok",size:"sm",children:e.status||"ok"})}),(0,n.jsx)("td",{className:"p-4 text-center",children:(0,n.jsx)(X.default,{variant:"outline",size:"sm","aria-describedby":`${o}-model ${o}-time`,onClick:()=>{x(e),f(!0)},children:"Detail"})})]},`${e.id}|${e.timestamp}`)})})]})}),(0,n.jsx)("div",{className:"border-t border-line",children:(0,n.jsx)(G.A,{currentPage:r.page,pageSize:r.pageSize,totalItems:r.totalItems,onPageChange:e=>s(t=>({...t,page:e})),onPageSizeChange:e=>s(t=>({...t,pageSize:e,page:1}))})})]})}),(0,n.jsx)(ee.A,{detail:m,isOpen:h,onClose:()=>f(!1),providerName:m?(0,ee.s)(m.provider,v):null})]})}let en=(0,s.default)(()=>r.e(7942).then(r.bind(r,37942)),{loadableGenerated:{webpack:()=>[37942]},loading:()=>(0,n.jsx)(o.CardSkeleton,{})});function ea(){return(0,n.jsx)(a.Suspense,{fallback:(0,n.jsx)(o.CardSkeleton,{}),children:(0,n.jsx)(es,{})})}function es(){let e=(0,l.useSearchParams)(),t=(0,l.useRouter)(),{period:r,setPeriod:s,options:T}=(0,f.A)(),S=e.get("tab"),$="details"===S||"logs"===S?"logs":"overview",{stats:C,statsPeriod:O,live:E,loading:P,error:R,retry:_,catchUpKey:A}=function(e,{tab:t="overview"}={}){let[r,n]=(0,a.useState)(null),[s,l]=(0,a.useState)(e),[o,i]=(0,a.useState)(y),[d,c]=(0,a.useState)(!0),[u,p]=(0,a.useState)(!1),[m,x]=(0,a.useState)(null),[h,f]=(0,a.useState)(0),[b,k]=(0,a.useReducer)(v,{hidden:"u">typeof document&&document.hidden,tab:t},g),[N,w]=(0,a.useState)(0),T=(0,a.useRef)(!1);(0,a.useEffect)(()=>{b.needsCatchUp&&(w(e=>e+1),f(e=>e+1),k({type:"caughtUp"}))},[b.needsCatchUp]),(0,a.useEffect)(()=>{if(!e)return;let t=new AbortController;return T.current?p(!0):c(!0),x(null),fetch(`/api/usage/stats?period=${e}&compare=previous`,{signal:t.signal}).then(e=>e.ok?e.json():Promise.reject(Error(`stats ${e.status}`))).then(t=>{T.current=!0,n(t),l(e)}).catch(e=>{t.signal.aborted||x(e)}).finally(()=>{t.signal.aborted||(c(!1),p(!1))}),()=>t.abort()},[e,N]);let S=(0,a.useCallback)(()=>{w(e=>e+1),f(e=>e+1)},[]);return(0,a.useEffect)(()=>{k({type:"visibility",hidden:document.hidden});let e=()=>k({type:"visibility",hidden:document.hidden});return document.addEventListener("visibilitychange",e),()=>document.removeEventListener("visibilitychange",e)},[]),(0,a.useEffect)(()=>{k({type:"tab",tab:t})},[t]),(0,a.useEffect)(()=>{if(!b.open)return;let e=new EventSource("/api/usage/stream"),t=!1,r=!1;return e.onopen=()=>{r=!1,t&&(t=!1,k({type:"reconnected"}))},e.onerror=()=>{t=!0,r||(r=!0,console.warn("[SSE CLIENT] usage stream disconnected; waiting for reconnect"))},e.onmessage=e=>{try{let t=JSON.parse(e.data),r={activeRequests:Array.isArray(t.activeRequests)?t.activeRequests:[],lastProvider:t.lastProvider||"",errorProvider:t.errorProvider||""};i(e=>j(e,r)?e:r)}catch(e){console.error("[SSE CLIENT] parse error:",e)}},()=>{e.close(),i(e=>j(e,y)?e:y)}},[b.open]),{stats:r,statsPeriod:s,live:o,loading:d,fetching:u,error:m,catchUpKey:h,retry:S}}(r,{tab:$}),z=function(){let[e,t]=(0,a.useState)([]);return(0,a.useEffect)(()=>{let e=!1;return Promise.all([fetch("/api/providers").then(e=>e.ok?e.json():null),fetch("/api/provider-nodes").then(e=>e.ok?e.json():null)]).then(([r,n])=>{if(e)return;let a={};for(let e of n?.nodes||[])a[e.id]=e.name;let s=new Set;t([...(r?.connections||[]).filter(e=>!(!1===e.isActive||!w(e.provider)||s.has(e.provider))&&(s.add(e.provider),!0)).map(e=>({...e,nodeName:a[e.provider]||null})),...N.NW.filter(e=>!s.has(e.id)&&w(e.id)).map(e=>({provider:e.id,name:e.name}))])}).catch(()=>{}),()=>{e=!0}},[]),e}(),[I,M]=(0,a.useState)(0),D=(0,h.A)(I),K=(0,a.useRef)(new Map),[F,L]=(0,a.useState)(0),U=E.activeRequests.length>0;(0,a.useEffect)(()=>{if(!U)return;let e=setInterval(()=>L(e=>e+1),1e3);return()=>clearInterval(e)},[U]);let B=(0,a.useMemo)(()=>D.routes?(K.current=(0,b.KY)(E.activeRequests,K.current),(0,b.TV)((0,b.Ld)(D.routes,z),E,K.current)):null,[D.routes,z,E,F]),V=!!B&&B.providers.length>0&&(0,b.xB)(B),H=!!C&&O===r&&!P&&!R&&!C.totalRequests,W=(0,x.A)(H||V),X=function(e,t,r){let[n,s]=(0,a.useState)([]),[l,o]=(0,a.useState)(null),[i,d]=(0,a.useState)(!1),[c,u]=(0,a.useState)(null),[p,m]=(0,a.useState)(0),x=(0,a.useCallback)(()=>m(e=>e+1),[]),h=(0,a.useRef)("");return(0,a.useEffect)(()=>{if(!t||!e)return;let n=`${e}|${p}|${r??0}`;if(h.current===n)return;let a=new AbortController;return l!==e&&d(!0),u(null),fetch(`/api/usage/chart?period=${encodeURIComponent(e)}`,{signal:a.signal}).then(e=>e.ok?e.json():Promise.reject(Error(`chart ${e.status}`))).then(t=>{h.current=n,s((0,k.Rn)(t)),o(e)}).catch(e=>{e?.name!=="AbortError"&&u(e?.message||"chart request failed")}).finally(()=>{a.signal.aborted||d(!1)}),()=>a.abort()},[t,e,p,r]),{buckets:n,bucketsPeriod:l,loading:i,error:c,retry:x}}(r,"overview"===$&&null!==C&&O===r&&!H,A);return(0,n.jsxs)("div",{className:"flex min-w-0 flex-col gap-6 px-1 sm:px-0",children:[(0,n.jsx)("div",{className:"flex flex-col gap-4",children:(0,n.jsxs)("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between",children:[(0,n.jsx)(i.default,{"aria-label":"Usage view",value:$,onChange:r=>{if(r===$)return;let n=new URLSearchParams(e);n.set("tab",r),t.push(`/dashboard/usage?${n.toString()}`,{scroll:!1})},tabs:[{value:"overview",label:"Overview"},{value:"logs",label:"Request log"}]}),"overview"===$&&(0,n.jsx)(d.default,{"aria-label":"Stats period",options:T,value:r,onChange:s,size:"sm",className:"w-full sm:w-auto"})]})}),"overview"===$?(0,n.jsxs)("div",{className:"flex min-w-0 flex-col gap-6",children:[R&&!P?(0,n.jsx)(c.default,{children:(0,n.jsx)(u.ErrorState,{title:"Couldn't load usage stats",message:R.message||"Try switching period or reloading the page.",onRetry:_})}):null,H?(0,n.jsx)(c.default,{children:(0,n.jsx)(p.default,{period:r,lastRequestAt:W.lastRequestAt,loading:W.loading,onSelectPeriod:s,error:W.error,onRetry:W.retry})}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.Suspense,{fallback:(0,n.jsx)(o.CardSkeleton,{}),children:(0,n.jsx)(q,{stats:O===r?C:null,loading:null===r||P||O!==r,previous:O===r?C?.previous:null,currentTotals:O===r?C?.currentTotals:null,buckets:X.bucketsPeriod===r?X.buckets:null,period:r??""})}),r?(0,n.jsx)(en,{buckets:X.buckets,loading:X.loading||X.bucketsPeriod!==r&&!X.error,error:X.error,onRetry:X.retry}):null]}),(0,n.jsx)(m.B,{variant:"full",routes:B,loading:D.loading,error:D.error,onRetry:()=>M(e=>e+1),lastRequestAt:W.lastRequestAt,lastActivityError:W.error,onRetryLastActivity:W.retry}),!H&&(O===r&&C?(0,n.jsx)(J,{stats:C}):(0,n.jsx)(o.CardSkeleton,{}))]}):(0,n.jsx)(er,{})]})}},19123:(e,t,r)=>{"use strict";r.d(t,{default:()=>o});var n=r(95155),a=r(14051),s=r.n(a),l=r(50770);function o({children:e,variant:t="neutral",size:r="md",dot:a=!1,className:s}){return(0,n.jsxs)("span",{className:`inline-flex items-center gap-1.5 rounded-full font-semibold whitespace-nowrap ${(0,l.S3)(t,r)}${s?` ${s}`:""}`,children:[a&&(0,n.jsx)("span",{"aria-hidden":"true",className:"size-2 rounded-full bg-current"}),e]})}o.propTypes={children:s().node,variant:s().oneOf(l.XY),size:s().oneOf(Object.keys(l.vO)),dot:s().bool,className:s().string}},20446:(e,t,r)=>{"use strict";r.d(t,{default:()=>c});var n=r(95155),a=r(14051),s=r.n(a),l=r(12115),o=r(31474),i=r(4650);let d=["ArrowLeft","ArrowRight","Home","End"];function c({tabs:e=[],value:t,defaultValue:r,onChange:a,className:s,id:u,"aria-label":p,"aria-labelledby":m,...x}){let h=(0,l.useId)(),f=u||h,b=(0,l.useRef)([]),[g,v]=(0,l.useState)(r??e[0]?.value),y=void 0!==t?t:g,j=Math.max(0,e.findIndex(e=>e.value===y)),k=e=>{void 0===t&&v(e),a?.(e)};return(0,n.jsxs)("div",{...x,className:(0,o.cn)("flex flex-col",s),children:[(0,n.jsx)("div",{role:"tablist","aria-label":p,"aria-labelledby":m,"aria-orientation":"horizontal",className:"flex items-center gap-1 border-b border-line overflow-x-auto",children:e.map((t,r)=>{let a=r===j;return(0,n.jsxs)("button",{ref:e=>{b.current[r]=e},type:"button",role:"tab",id:`${f}-tab-${t.value}`,"aria-selected":a,"aria-controls":`${f}-panel-${t.value}`,tabIndex:a?0:-1,onClick:()=>k(t.value),onKeyDown:t=>((t,r)=>{if(!d.includes(t.key)||0===e.length)return;t.preventDefault();let n=(0,i.lZ)(r,t.key,{length:e.length,rtl:t.currentTarget.closest("[dir]")?.getAttribute("dir")==="rtl"});b.current[n]?.focus(),k(e[n].value)})(t,r),className:(0,o.cn)("relative inline-flex h-11 shrink-0 items-center px-3 text-sm font-semibold transition-colors focus-visible:shadow-focus",a?"text-text":"text-muted hover:text-text"),children:[t.label,null!=t.count&&(0,n.jsx)("span",{className:"ms-1.5 font-mono text-xs text-muted",children:t.count}),(0,n.jsx)("span",{"aria-hidden":"true",className:(0,o.cn)("absolute inset-x-2 -bottom-px h-0.5 rounded-full bg-coral transition-opacity",a?"opacity-100":"opacity-0")})]},t.value)})}),e.map((e,t)=>(0,n.jsx)("div",{role:"tabpanel",id:`${f}-panel-${e.value}`,"aria-labelledby":`${f}-tab-${e.value}`,hidden:t!==j,tabIndex:(0,i.qM)(e.content)?0:void 0,children:e.content},e.value))]})}c.propTypes={tabs:s().arrayOf(s().shape({value:s().oneOfType([s().string,s().number]).isRequired,label:s().node.isRequired,count:s().oneOfType([s().string,s().number]),content:s().node})),value:s().oneOfType([s().string,s().number]),defaultValue:s().oneOfType([s().string,s().number]),onChange:s().func,className:s().string,id:s().string,"aria-label":function(e,t,r){return e["aria-label"]||e["aria-labelledby"]?null:Error(`${r}: provide "aria-label" or "aria-labelledby".`)},"aria-labelledby":s().string}},25086:(e,t,r)=>{"use strict";r.d(t,{CardSkeleton:()=>u,PageLoading:()=>i,Skeleton:()=>d,SkeletonText:()=>c,Spinner:()=>o,default:()=>p});var n=r(95155),a=r(14051),s=r.n(a),l=r(31474);function o({size:e="md",className:t}){return(0,n.jsx)("span",{role:"status","aria-label":"Loading",className:(0,l.cn)("material-symbols-outlined animate-spin text-coral",{sm:"text-[16px]",md:"text-[24px]",lg:"text-[32px]",xl:"text-[48px]"}[e],t),children:"progress_activity"})}function i({message:e="Loading..."}){return(0,n.jsxs)("div",{className:"fixed inset-0 z-50 flex flex-col items-center justify-center bg-bg",children:[(0,n.jsx)(o,{size:"xl"}),(0,n.jsx)("p",{className:"mt-4 text-muted",children:e})]})}function d({className:e,...t}){return(0,n.jsx)("div",{"aria-hidden":"true",className:(0,l.cn)("animate-pulse rounded-[10px] bg-raised",e),...t})}function c({lines:e=3,className:t}){let r=Array.from({length:e},(e,t)=>t);return(0,n.jsx)("div",{className:(0,l.cn)("flex flex-col gap-2",t),"aria-hidden":"true",children:r.map(e=>(0,n.jsx)(d,{className:(0,l.cn)("h-3",e===r.length-1?"w-2/3":"w-full")},`line-${e}`))})}function u(){return(0,n.jsxs)("div",{className:"rounded-2xl border border-line bg-panel p-6 shadow-card",children:[(0,n.jsxs)("div",{className:"mb-4 flex items-center justify-between",children:[(0,n.jsx)(d,{className:"h-4 w-24"}),(0,n.jsx)(d,{className:"size-10 rounded-[10px]"})]}),(0,n.jsx)(d,{className:"mb-2 h-8 w-16"}),(0,n.jsx)(d,{className:"h-3 w-20"})]})}function p({type:e="spinner",...t}){switch(e){case"page":return(0,n.jsx)(i,{...t});case"skeleton":return(0,n.jsx)(d,{...t});case"card":return(0,n.jsx)(u,{...t});default:return(0,n.jsx)(o,{...t})}}d.propTypes={className:s().string},c.propTypes={lines:s().number,className:s().string}},25908:(e,t,r)=>{"use strict";r.d(t,{default:()=>o});var n=r(95155),a=r(14051),s=r.n(a);function l(e,t){return(0,n.jsx)("span",{className:`text-sm ${e?"":"text-muted"}`,children:t})}function o({eyebrow:e,value:t,delta:r,trend:a,sparkline:s,hero:i=!1,className:d}){let c,u;return(0,n.jsxs)("div",{className:`flex flex-col gap-1 rounded-2xl border p-5 shadow-card ${i?"border-transparent bg-lime text-on-lime":"border-line bg-panel text-text"}${d?` ${d}`:""}`,children:[(0,n.jsx)("span",{className:`text-xs font-semibold uppercase tracking-[0.08em] ${i?"":"text-muted"}`,children:e}),(0,n.jsx)("span",{className:"min-w-0 font-display text-4xl font-bold tabular-nums [word-break:break-word]",children:t}),r&&l(i,r),a&&l(i,a),s&&s.length>1&&(0,n.jsx)("svg",{viewBox:"0 0 100 24",className:"mt-1 h-6 w-full","aria-hidden":"true",preserveAspectRatio:"none",children:(0,n.jsx)("polyline",{fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinejoin:"round",strokeLinecap:"round",points:(u=Math.max(...s)-(c=Math.min(...s))||1,s.map((e,t)=>{let r=t/(s.length-1)*100;return`${r},${22-(e-c)/u*20}`}).join(" "))})})]})}o.propTypes={eyebrow:s().string.isRequired,value:s().node.isRequired,delta:s().node,trend:s().node,sparkline:s().arrayOf(s().number),hero:s().bool,className:s().string}},28067:(e,t,r)=>{"use strict";r.d(t,{default:()=>d});var n=r(95155),a=r(14051),s=r.n(a),l=r(12115),o=r(31474),i=r(4650);function d({options:e=[],value:t,onChange:r,size:a="md",className:s,"aria-label":c,"aria-labelledby":u,...p}){let m=(0,l.useRef)([]),x=e.findIndex(e=>e.value===t),h=x<0?0:x,f=i.Ec[a];if(!f)throw Error(`SegmentedControl: unknown size "${a}"`);return(0,n.jsx)("div",{...p,role:"radiogroup","aria-label":c,"aria-labelledby":u,className:(0,o.cn)("inline-flex items-center gap-0.5 rounded-lg border border-line bg-raised p-1 overflow-x-auto",s),children:e.map((t,a)=>(0,n.jsxs)("button",{ref:e=>{m.current[a]=e},type:"button",role:"radio","aria-checked":a===x,tabIndex:a===h?0:-1,onKeyDown:t=>((t,n)=>{if(!(0,i.JF)(t.key)||0===e.length)return;t.preventDefault();let a=(0,i.lZ)(n,t.key,{length:e.length,rtl:t.currentTarget.closest("[dir]")?.getAttribute("dir")==="rtl"});m.current[a]?.focus(),r?.(e[a].value)})(t,a),onClick:()=>r?.(t.value),className:(0,o.cn)("inline-flex shrink-0 items-center gap-1.5 rounded-md px-3 font-semibold transition-colors duration-200 focus-visible:shadow-focus motion-reduce:transition-none",f,a===x?"bg-text text-bg":"text-muted hover:text-text"),children:[t.icon&&(0,n.jsx)("span",{className:"material-symbols-outlined text-[16px]","aria-hidden":"true",children:t.icon}),t.label,null!=t.count&&(0,n.jsx)("span",{className:(0,o.cn)("font-mono",a===x?"text-bg/80":"text-muted"),children:t.count})]},t.value))})}d.propTypes={options:s().arrayOf(s().shape({value:s().oneOfType([s().string,s().number]).isRequired,label:s().node.isRequired,icon:s().string,count:s().oneOfType([s().string,s().number])})),value:s().oneOfType([s().string,s().number]),onChange:s().func,size:s().oneOf(Object.keys(i.Ec)),className:s().string,"aria-label":function(e,t,r){return e["aria-label"]||e["aria-labelledby"]?null:Error(`${r}: provide "aria-label" or "aria-labelledby".`)},"aria-labelledby":s().string}},29499:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>u});var n=r(95155),a=r(12115),s=r(14051),l=r.n(s),o=r(31474),i=r(19844),d=r(47929),c=r(6587);function u({isOpen:e,onClose:t,title:r,children:s,width:l="md",size:p,side:m="end",closeOnOverlay:x=!0,closeOnEscape:h=!0,initialFocusRef:f,className:b,id:g,bare:v=!1}){let y=(0,a.useRef)(null),[j,k]=(0,d.lk)(y),{overlayId:N,titleId:w}=(0,d.uf)("signal-drawer"),T=!!e;if((0,d.K$)(T),(0,d.rM)({container:j,active:T,initialFocusRef:f}),(0,d.s9)({onClose:t,containerRef:y,enabled:T,closeOnEscape:h,closeOnOutside:x}),!T)return null;let S=!v&&r;return(0,n.jsx)(d.ZL,{children:(0,n.jsxs)("div",{className:"fixed inset-0 z-50",children:[(0,n.jsx)("div",{className:"signal-backdrop absolute inset-0","aria-hidden":"true"}),(0,n.jsx)("div",{ref:k,id:g||N,role:"dialog","aria-modal":"true","aria-labelledby":S?w:void 0,"aria-label":v&&"string"==typeof r?r:void 0,tabIndex:-1,className:(0,o.cn)("signal-overlay-drawer absolute inset-y-0 flex max-w-full flex-col bg-panel text-text shadow-card outline-none",(0,i.PT)(m),(0,i.IN)(p??l),b),children:v?s:(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{className:"flex shrink-0 items-center justify-between gap-3 border-b border-line px-6 py-4",children:[r?(0,n.jsx)("h2",{id:w,className:"min-w-0 font-display text-lg font-bold",children:r}):(0,n.jsx)("span",{}),t?(0,n.jsx)(c.default,{icon:"close",label:"Close",onClick:t}):null]}),(0,n.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto p-6 custom-scrollbar",children:s})]})})]})})}u.propTypes={isOpen:l().bool,onClose:l().func,title:l().node,children:l().node,width:l().oneOf(Object.keys(i.gD)),size:l().oneOf(Object.keys(i.gD)),side:l().oneOf(["start","end"]),closeOnOverlay:l().bool,closeOnEscape:l().bool,initialFocusRef:l().shape({current:l().any}),className:l().string,id:l().string,bare:l().bool}},35652:(e,t,r)=>{"use strict";var n,a=r(41463);let s=Object.freeze(["9router","tokenhop"]),l="tokenhop";function o(e,t){if(s.includes(e))return e;let r=s.map(e=>`"${e}"`).join(", ");throw Error(`${t}: unknown brand ${JSON.stringify(e)}; allowed values: ${r}`)}let i=""==(n="tokenhop")?l:o(n,"NEXT_PUBLIC_BRAND"),d=Object.freeze({name:"tokenhop",slug:"tokenhop",envPrefix:"TOKENHOP_",headerPrefix:"x-tokenhop-",jcodeApiKeyEnv:"JCODE_TOKENHOP_API_KEY",defaultApiKey:"sk_tokenhop",dataDirName:"tokenhop",samlIssuerDefault:"urn:tokenhop:sp",mitmCaCommonName:"tokenhop MITM Root CA",mitmCaOrg:"tokenhop",mitmCertFile:"tokenhop-root-ca.crt",pidFile:"tokenhop.pid",autostartLabel:"dev.tokenhop.autostart",autostartDesktopFile:"tokenhop.desktop",autostartVbsFile:"tokenhop.vbs",clientConfigKey:"tokenhop",customModelIdPrefix:"custom:tokenhop-",storageKeyPrefix:"tokenhop.",eventPrefix:"tokenhop:",backupFilePrefix:"tokenhop-backup-",npmPackage:"tokenhop",appPackage:"tokenhop-app",repoSlug:"tokenhop/tokenhop",repoUrl:"https://github.com/tokenhop/tokenhop",imageName:"ghcr.io/tokenhop/tokenhop",websiteUrl:"https://tokenhop.ai",docsUrl:"https://tokenhop.dev",wordmark:"tokenhop",favicon:"/brand/favicon.svg",faviconIco:"/brand/favicon.ico",appIcon192:"/brand/icons/icon-192.svg",appIcon512:"/brand/icons/icon-512.svg",trayIconName:"icon-tokenhop",trayIconTemplate:!0}),c=Object.freeze({names:Object.freeze(["9Router","9router"]),slug:"9router",envPrefixes:Object.freeze(["NINEROUTER_","NINE_ROUTER_"]),headerPrefix:"x-9router-",jcodeApiKeyEnv:"JCODE_9ROUTER_API_KEY",defaultApiKey:"sk_9router",dataDirName:"9router",samlIssuerDefault:"urn:9router:sp",mitmCaCommonName:"9Router MITM Root CA",mitmCaOrg:"9Router",mitmCertFile:"9router-root-ca.crt",pidFile:"9router.pid",autostartLabel:"com.9router.autostart",autostartDesktopFile:"9router.desktop",autostartVbsFile:"9router.vbs",clientConfigKeys:Object.freeze(["9router","9Router"]),customModelIdPrefix:"custom:9Router-",storageKeyPrefix:"9router.",eventPrefix:"9router:",backupFilePrefix:"9router-backup-",npmPackage:"9router",appPackage:"9router-app",repoSlug:"yandy-r/9router",repoUrl:"https://github.com/yandy-r/9router",imageName:"ghcr.io/yandy-r/9router",wordmark:"router",favicon:"/favicon.svg",faviconIco:"/favicon.ico",appIcon192:"/icons/icon-192.svg",appIcon512:"/icons/icon-512.svg",trayIconName:"icon",trayIconTemplate:!1}),u=Object.freeze({kimiPlatform:"9router",clineUserAgentProduct:"9Router",clineClientType:"9router",devinMcpClientName:"9router",coworkMcpClientName:"9router",cursorMcpProvider:"9router",glmMcpClientName:"9router",xaiUserAgent:"grok-cli/9router",xiaomiKeyNamePrefix:"9router-xmd-",githubUserAgent:"9Router",proxyTestUserAgent:"9Router",denoRelayKind:"9router-relay"}),p=new Set(["repoSlug","repoUrl","imageName","websiteUrl","docsUrl"]),m={name:"names",envPrefix:"envPrefixes",clientConfigKey:"clientConfigKeys"},x="tokenhop"===i?d:Object.freeze(Object.fromEntries(Object.keys(d).map(e=>{let t;return[e,p.has(e)?d[e]:Array.isArray(t=c[m[e]||e])?t[0]:t]}))),h=new Set;function f(e,t,r){if("tokenhop"!==i)return!1;let n=`${e}\u0000${t}`;return!h.has(n)&&(h.add(n),console.warn(`[tokenhop] deprecated ${e} "${t}" → use "${r}" (legacy support ends in v2.0.0)`),!0)}let b=/^[A-Z0-9]+(_[A-Z0-9]+)*$/;function g(e){if("string"!=typeof e||!b.test(e))throw Error(`envName: invalid suffix ${JSON.stringify(e)}; expected e.g. "PEER_TOKEN"`);return d.envPrefix+e}let v=/^(?!x-)[a-z0-9]+(-[a-z0-9]+)*$/;function y(e){return x.headerPrefix+function(e,t){if("string"!=typeof e||!v.test(e))throw Error(`${t}: invalid header name ${JSON.stringify(e)}; expected a bare lowercase name like "connection-id"`);return e}(e,"header")}e.exports={BRAND_IDS:s,DEFAULT_BRAND_ID:l,ACTIVE_BRAND_ID:i,isActiveBrand:function(e){return o(e,"isActiveBrand")===i},BRAND:d,LEGACY:c,ACTIVE:x,UPSTREAM_CLIENT_IDS:u,envName:g,readEnv:function(e,t=a.env){let r=g(e);if(void 0!==t[r])return t[r];for(let n of c.envPrefixes){let a=n+e;if(void 0!==t[a])return f("env var",a,r),t[a]}},warnLegacyOnce:f,header:y,legacyHeaderNames:function(e){let t=y(e);return[c.headerPrefix+e].filter(e=>e!==t)}}},36159:(e,t,r)=>{"use strict";r.d(t,{r:()=>n});let n=[{id:"embedding",label:"Embedding",icon:"data_array",endpoint:{method:"POST",path:"/v1/embeddings"}},{id:"image",label:"Text to image",icon:"brush",endpoint:{method:"POST",path:"/v1/images/generations"}},{id:"imageToText",label:"Image to text",icon:"image_search",endpoint:{method:"POST",path:"/v1/images/understanding"}},{id:"tts",label:"Text to speech",icon:"record_voice_over",endpoint:{method:"POST",path:"/v1/audio/speech"}},{id:"stt",label:"Speech to text",icon:"mic",endpoint:{method:"POST",path:"/v1/audio/transcriptions"}},{id:"webSearch",label:"Web search",icon:"travel_explore",endpoint:{method:"POST",path:"/v1/search"}},{id:"webFetch",label:"Web fetch",icon:"language",endpoint:{method:"POST",path:"/v1/web/fetch"}},{id:"video",label:"Video",icon:"movie",endpoint:{method:"POST",path:"/v1/videos/generations"}},{id:"music",label:"Music",icon:"music_note",endpoint:{method:"POST",path:"/v1/audio/music"}}]},50378:(e,t,r)=>{"use strict";r.d(t,{A:()=>l});var n=r(95155),a=r(31474),s=r(92542);function l({currentPage:e,pageSize:t,totalItems:r,onPageChange:o,onPageSizeChange:i,className:d}){let c=Math.ceil(r/t),u=r>0?(e-1)*t+1:0,p=Math.min(e*t,r),m=(()=>{let t=[],r=Math.max(1,e-2),n=Math.min(c,r+5-1);n-r+1<5&&(r=Math.max(1,n-5+1));for(let e=r;e<=n;e++)t.push(e);return t})();return(0,n.jsxs)("div",{className:(0,a.cn)("flex flex-col sm:flex-row items-center justify-between gap-4 py-4 px-2",d),children:[r>0&&(0,n.jsxs)("div",{className:"text-sm text-muted",children:["Showing ",(0,n.jsx)("span",{className:"font-medium text-text",children:u})," to"," ",(0,n.jsx)("span",{className:"font-medium text-text",children:p})," of"," ",(0,n.jsx)("span",{className:"font-medium text-text",children:r})," results"]}),(0,n.jsxs)("div",{className:"flex flex-wrap items-center justify-center gap-2 sm:gap-4",children:[i&&(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)("span",{className:"text-sm text-muted",children:"Rows:"}),(0,n.jsx)("select",{value:t,onChange:e=>i(Number(e.target.value)),className:(0,a.cn)("h-9 rounded-lg border border-black/10 dark:border-white/10 bg-panel","text-sm text-text focus:outline-none focus:ring-2 focus:ring-coral/20","cursor-pointer"),style:{colorScheme:"auto"},children:[10,20,50].map(e=>(0,n.jsx)("option",{value:e,children:e},e))})]}),c>1&&(0,n.jsxs)("div",{className:"flex items-center gap-1",children:[(0,n.jsx)(s.default,{variant:"outline",size:"sm",onClick:()=>o(e-1),disabled:1===e,className:"w-9 px-0",children:(0,n.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"chevron_left"})}),m[0]>1&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.default,{variant:"ghost",size:"sm",onClick:()=>o(1),className:"w-9 px-0 hidden sm:inline-flex",children:"1"}),m[0]>2&&(0,n.jsx)("span",{className:"text-muted px-1 hidden sm:inline",children:"..."})]}),m.map(t=>(0,n.jsx)(s.default,{variant:e===t?"primary":"ghost",size:"sm",onClick:()=>o(t),className:(0,a.cn)("w-9 px-0",e===t?"inline-flex":"hidden sm:inline-flex"),children:t},t)),m[m.length-1]<c&&(0,n.jsxs)(n.Fragment,{children:[m[m.length-1]<c-1&&(0,n.jsx)("span",{className:"text-muted px-1 hidden sm:inline",children:"..."}),(0,n.jsx)(s.default,{variant:"ghost",size:"sm",onClick:()=>o(c),className:"w-9 px-0 hidden sm:inline-flex",children:c})]}),(0,n.jsx)(s.default,{variant:"outline",size:"sm",onClick:()=>o(e+1),disabled:e===c,className:"w-9 px-0",children:(0,n.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"chevron_right"})})]})]})]})}},50770:(e,t,r)=>{"use strict";r.d(t,{PK:()=>x,S3:()=>i,XY:()=>o,lN:()=>d,pN:()=>f,pi:()=>m,r4:()=>p,vE:()=>u,vO:()=>s});let n={connected:"ok",healthy:"ok",active:"ok",ok:"ok",success:"ok",cooldown:"warn",warning:"warn",low:"warn",warn:"warn",error:"err",empty:"err",err:"err",oauth:"info",info:"info","api-key":"brand",brand:"brand",live:"live",disabled:"neutral",off:"neutral",neutral:"neutral"},a={ok:"bg-ok-bg text-ok",warn:"bg-warn-bg text-warn",err:"bg-err-bg text-err",info:"bg-sky-bg text-sky-ink",brand:"bg-coral-bg text-coral-ink",live:"bg-lime-bg text-lime-ink",neutral:"bg-raised text-muted shadow-[inset_0_0_0_1px_var(--signal-line)]"},s={xs:"h-5 px-2 text-[11px]",sm:"h-5 px-2 text-[11px]",md:"h-6 px-2.5 text-xs",lg:"h-7 px-3 text-sm"},l={default:"neutral",primary:"brand",success:"ok",warning:"warn",error:"err"},o=[...new Set([...Object.keys(a),...Object.keys(l),...Object.keys(n)])];function i(e="neutral",t="md"){let r=s[t];if(!r)throw Error(`pillClasses: unknown size "${t}"`);return`${a[function(e){if(a[e])return e;let t=l[e]??n[e];if(!t)throw Error(`resolvePillVariant: unknown variant "${e}"`);return t}(e)]} ${r}`}let d={ok:"bg-ok",warn:"bg-warn",err:"bg-err",live:"bg-lime",info:"bg-sky",brand:"bg-coral",neutral:"bg-subtle"},c=new Set(["unlimited","credits"]);function u(e,t){if(void 0!==t&&!c.has(t))throw Error(`meterVariant: unknown kind "${t}"`);if("number"!=typeof e||!Number.isFinite(e))throw Error(`meterVariant: expected a finite number, got ${e}`);return"unlimited"===t?"live":"credits"===t?"info":e<=20?"err":e<=45?"warn":"ok"}function p(e){if("number"!=typeof e||!Number.isFinite(e))throw Error(`meterValue: expected a finite number, got ${e}`);return Math.min(100,Math.max(0,e))}let m="border-b border-line",x="whitespace-nowrap text-xs font-semibold text-muted",h={LOG:"signal-terminal-log",INFO:"signal-terminal-info",WARN:"signal-terminal-warn",ERROR:"signal-terminal-error",DEBUG:"signal-terminal-debug"};function f(e){let t=h[e];if(!t)throw Error(`terminalLevelClass: unknown level "${e}"`);return t}},56006:(e,t,r)=>{"use strict";r.d(t,{default:()=>o});var n=r(95155),a=r(14051),s=r.n(a);let l={info:{classes:"bg-sky-bg text-sky-ink",icon:"info"},warn:{classes:"bg-warn-bg text-warn",icon:"warning"},err:{classes:"bg-err-bg text-err",icon:"error"},ok:{classes:"bg-ok-bg text-ok",icon:"check_circle"}};function o({variant:e="info",title:t,children:r,icon:a,className:s}){let i=l[e];if(!i)throw Error(`Callout: unknown variant "${e}"`);return(0,n.jsxs)("div",{role:"err"===e?"alert":"status",className:`flex gap-3 rounded-xl p-4 text-sm ${i.classes}${s?` ${s}`:""}`,children:[(0,n.jsx)("span",{className:"material-symbols-outlined shrink-0 text-[20px]","aria-hidden":"true",children:a??i.icon}),(0,n.jsxs)("div",{className:"min-w-0 text-text",children:[t&&(0,n.jsx)("p",{className:"font-semibold",children:t}),r&&(0,n.jsx)("div",{className:"text-muted",children:r})]})]})}o.propTypes={variant:s().oneOf(Object.keys(l)),title:s().node,children:s().node,icon:s().string,className:s().string}},73006:(e,t,r)=>{"use strict";r.d(t,{FE:()=>T,Tl:()=>m,kk:()=>x,oQ:()=>h,wn:()=>S});var n=r(93308);let a={},s=n.Xn,l=[],o=new Map,i=null,d=0;function c(){if("u"<typeof document)return n.Xn;let e=document.cookie.split(";").find(e=>e.trim().startsWith(`${n.CL}=`)),t=e?decodeURIComponent(e.split("=")[1]):n.Xn;return(0,n.QC)(t)}async function u(e){if("en"===e)return{};let t=o.get(e);if(t)return t;try{let t=await fetch(`/i18n/literals/${e}.json`);if(!t.ok)throw Error(`HTTP ${t.status} for ${e}.json`);let r=await t.json();return o.set(e,r),r}catch(e){return console.error("Failed to load translations:",e),{}}}async function p(){let e=++d,t=c(),r=await u(t);return e===d&&(s=t,a=r,!0)}function m(e){if(!e||"string"!=typeof e)return e;let t=e.trim();return t&&"en"!==s&&a[t]||e}function x(){return s}function h(e){return l.push(e),()=>{l=l.filter(t=>t!==e)}}let f=new Set(["script","style","code","pre","colgroup","table","thead","tbody","tfoot","tr","select","datalist","optgroup"]),b=new Set(["script","style","code","pre"]);function g(e){let t=e;for(;t;){if(t.hasAttribute?.("data-i18n-skip")||t.className?.toString?.().includes("material-symbols")||b.has(t.tagName?.toLowerCase()))return!0;t=t.parentElement}return f.has(e.tagName?.toLowerCase())}function v(e){if(!e.nodeValue||!e.nodeValue.trim())return;let t=e.parentElement;if(!t||g(t))return;(void 0===e._originalText||e.nodeValue!==e._translatedText)&&(e._originalText=e.nodeValue);let r=m(e._originalText);e._translatedText=r,r!==e.nodeValue&&(e.nodeValue=r)}let y=["aria-label","placeholder","title","alt"];function j(e){if(!g(e))for(let t of(e._i18nOriginalAttrs||(e._i18nOriginalAttrs={}),e._i18nTranslatedAttrs||(e._i18nTranslatedAttrs={}),y)){if(!e.hasAttribute?.(t))continue;let r=e.getAttribute(t);t in e._i18nOriginalAttrs&&r===e._i18nTranslatedAttrs[t]||(e._i18nOriginalAttrs[t]=r);let n=m(e._i18nOriginalAttrs[t]??"");e._i18nTranslatedAttrs[t]=n||r,n&&n!==r&&e.setAttribute(t,n)}}function k(e){let t;if(!e)return;let r=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,null,!1),n=[];for(;t=r.nextNode();)n.push(t);n.forEach(v),[e,...e.querySelectorAll("[aria-label],[placeholder],[title],[alt]")].forEach(j)}function N(e){for(let t of e)"characterData"===t.type?v(t.target):"attributes"===t.type?j(t.target):t.addedNodes.forEach(e=>{e.nodeType===Node.ELEMENT_NODE?k(e):e.nodeType===Node.TEXT_NODE&&v(e)})}function w(){i||(i=new MutationObserver(N)).observe(document.body,{childList:!0,subtree:!0,characterData:!0,attributes:!0,attributeFilter:y})}async function T(){"en"===c()||await p()&&(k(document.body),w())}async function S(){let e=s;if(await p()){if(l.forEach(e=>{e()}),"en"===s){i?.disconnect(),i=null,"en"!==e&&k(document.body);return}k(document.body),w()}}},77671:(e,t,r)=>{"use strict";r.d(t,{ErrorState:()=>c,LoadingState:()=>d});var n=r(95155),a=r(14051),s=r.n(a),l=r(92542),o=r(56006),i=r(25086);function d({lines:e=4,label:t="Loading",className:r=""}){return(0,n.jsxs)("div",{role:"status","aria-label":t,className:`flex min-w-0 flex-col gap-3 ${r}`,children:[(0,n.jsx)(i.Skeleton,{className:"h-5 w-24"}),(0,n.jsx)(i.Skeleton,{className:"h-9 w-2/3"}),Array.from({length:e},(e,t)=>`line-${t}`).map(e=>(0,n.jsx)(i.Skeleton,{className:"h-4 w-full"},e))]})}function c({message:e,onRetry:t,title:r="Could not load this view",children:a}){return(0,n.jsxs)("div",{className:"flex min-w-0 flex-col gap-3",children:[(0,n.jsx)(o.default,{variant:"err",title:r,children:e||"Something went wrong while loading."}),(0,n.jsxs)("div",{className:"flex flex-wrap gap-2",children:[t&&(0,n.jsx)(l.default,{variant:"secondary",size:"sm",icon:"refresh",onClick:t,children:"Retry"}),a]})]})}d.propTypes={lines:s().number,label:s().string,className:s().string},c.propTypes={message:s().string,onRetry:s().func,title:s().string,children:s().node}},84588:(e,t,r)=>{"use strict";r.d(t,{default:()=>i});var n=r(95155),a=r(14051),s=r.n(a),l=r(31474);let o={none:"",xs:"p-3",sm:"p-4",md:"p-6",lg:"p-8"};function i({children:e,title:t,subtitle:r,icon:a,action:s,as:d="h2",padding:c="md",hover:u=!1,elev:p=!1,className:m,role:x,...h}){if(void 0===o[c])throw Error(`Card: unknown padding "${c}"`);let f=x||(h["aria-label"]||h["aria-labelledby"]?"region":void 0);return(0,n.jsxs)("div",{role:f,className:(0,l.cn)("rounded-2xl border border-line bg-panel shadow-card",u&&"cursor-pointer transition-colors duration-150 hover:border-coral/40",o[c],m),...h,children:[(t||s)&&(0,n.jsx)(i.Header,{title:t,subtitle:r,icon:a,actions:s,as:d,className:"mb-4"}),e]})}i.propTypes={children:s().node,title:s().node,subtitle:s().node,icon:s().string,action:s().node,as:s().oneOf(["h2","h3","h4"]),padding:s().oneOf(Object.keys(o)),hover:s().bool,elev:s().bool,className:s().string,role:s().string},i.Header=function({title:e,subtitle:t,icon:r,actions:a,as:s="h2",className:o}){return(0,n.jsxs)("div",{className:(0,l.cn)("flex flex-wrap items-center justify-between gap-3",o),children:[(0,n.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[r&&(0,n.jsx)("span",{className:"flex size-10 shrink-0 items-center justify-center rounded-[10px] bg-coral-bg text-coral-ink",children:(0,n.jsx)("span",{className:"material-symbols-outlined text-[20px]","aria-hidden":"true",children:r})}),(0,n.jsxs)("div",{className:"min-w-0",children:[e&&(0,n.jsx)(s,{className:"font-display text-lg font-bold text-text",children:e}),t&&(0,n.jsx)("p",{className:"text-sm text-muted",children:t})]})]}),a&&(0,n.jsx)("div",{className:"flex shrink-0 items-center gap-2",children:a})]})},i.Header.propTypes={title:s().node,subtitle:s().node,icon:s().string,actions:s().node,as:s().oneOf(["h2","h3","h4"]),className:s().string},i.Section=function({children:e,className:t,...r}){return(0,n.jsx)("div",{className:(0,l.cn)("rounded-xl border border-line bg-raised p-4",t),...r,children:e})},i.Row=function({children:e,className:t,...r}){return(0,n.jsx)("div",{className:(0,l.cn)("-mx-3 border-b border-line p-3 px-3 transition-colors last:border-b-0 hover:bg-raised",t),...r,children:e})},i.ListItem=function({children:e,actions:t,className:r,...a}){return(0,n.jsxs)("div",{className:(0,l.cn)("group -mx-3 flex items-center justify-between border-b border-line p-3 px-3 transition-colors last:border-b-0 hover:bg-raised",r),...a,children:[(0,n.jsx)("div",{className:"min-w-0 flex-1",children:e}),t&&(0,n.jsx)("div",{className:"flex items-center gap-1 opacity-0 transition-opacity group-focus-within:opacity-100 group-hover:opacity-100",children:t})]})}},88430:(e,t,r)=>{Promise.resolve().then(r.bind(r,16369))},93308:(e,t,r)=>{"use strict";r.d(t,{CL:()=>s,QC:()=>i,Xn:()=>a,YZ:()=>n,kf:()=>o,rB:()=>l});let n=["en","vi","zh-CN","zh-TW","ja","pt-BR","pt-PT","ko","es","de","fr","he","ar","ru","pl","cs","nl","tr","uk","tl","id","km","th","hi","bn","ur","ro","sv","it","el","hu","fi","da","no","fa"],a="en",s="locale",l=["ar","he","fa","ur"],o={en:"English",vi:"Tiếng Việt","zh-CN":"简体中文","zh-TW":"繁體中文",ja:"日本語","pt-BR":"Portugu\xeas (Brasil)","pt-PT":"Portugu\xeas (Portugal)",ko:"한국어",es:"Espa\xf1ol",de:"Deutsch",fr:"Fran\xe7ais",he:"עברית",ar:"العربية",ru:"Русский",pl:"Polski",cs:"Čeština",nl:"Nederlands",tr:"T\xfcrk\xe7e",uk:"Українська",tl:"Tagalog",id:"Indonesia",th:"ไทย",km:"ខ្មែរ",hi:"हिन्दी",bn:"বাংলা",ur:"اردو",ro:"Rom\xe2nă",sv:"Svenska",it:"Italiano",el:"Ελληνικά",hu:"Magyar",fi:"Suomi",da:"Dansk",no:"Norsk",fa:"فارسی"};function i(e){return"zh"===e||"zh-CN"===e?"zh-CN":"en"===e?"en":"vi"===e?"vi":"zh-TW"===e?"zh-TW":"ja"===e?"ja":"pt-BR"===e?"pt-BR":"pt-PT"===e?"pt-PT":"ko"===e?"ko":"es"===e?"es":"de"===e?"de":"fr"===e?"fr":"he"===e?"he":"ar"===e?"ar":"ru"===e?"ru":"pl"===e?"pl":"cs"===e?"cs":"nl"===e?"nl":"tr"===e?"tr":"uk"===e?"uk":"tl"===e?"tl":"id"===e?"id":"th"===e?"th":"km"===e?"km":"hi"===e?"hi":"bn"===e?"bn":"ur"===e?"ur":"ro"===e?"ro":"sv"===e?"sv":"it"===e?"it":"el"===e?"el":"hu"===e?"hu":"fi"===e?"fi":"da"===e?"da":"no"===e?"no":"fa"===e?"fa":a}},96975:(e,t,r)=>{"use strict";r.d(t,{default:()=>u});var n=r(95155),a=r(14051),s=r.n(a),l=r(12115),o=r(7256),i=r(8247);let d={sm:{tile:"size-6 rounded-md",text:"text-[10px]"},md:{tile:"size-9 rounded-[10px]",text:"text-sm"},lg:{tile:"size-14 rounded-[14px]",text:"text-lg"}},c={ok:"bg-ok",warn:"bg-warn",err:"bg-err",info:"bg-sky",live:"bg-lime",neutral:"bg-line"};function u({providerId:e,size:t="md",status:r,brand:a,iconSrc:s,className:p}){let[m,x]=(0,l.useState)(null),h=d[t];if(!h)throw Error(`ProviderTile: unknown size "${t}"`);if(void 0!==r&&!c[r])throw Error(`ProviderTile: unknown status "${r}"`);let f=(0,o.rs)(e),b=a??(0,o.Do)(f),g=m===f?null:s??(0,i.HY)(f),v=g?{style:{backgroundColor:`color-mix(in srgb, ${b.color} 8%, #ffffff)`},className:""}:{style:{backgroundColor:b.color},className:`font-display font-bold text-white shadow-[inset_0_0_0_1px_rgba(255,255,255,0.14)] ${h.text}`};return(0,n.jsxs)("span",{"aria-hidden":"true",title:e,style:v.style,className:`relative inline-flex shrink-0 items-center justify-center ${h.tile} ${v.className}${p?` ${p}`:""}`,children:[g?(0,n.jsx)("img",{src:g,alt:"",loading:"lazy",decoding:"async",className:"size-full rounded-[inherit] object-contain",onError:()=>{(0,i.Kw)(f),x(f)}}):b.monogram,r&&(0,n.jsx)("span",{className:`absolute -end-0.5 -bottom-0.5 size-2.5 rounded-full shadow-[0_0_0_2px_var(--signal-panel)] ${c[r]}`})]})}u.propTypes={providerId:s().string.isRequired,size:s().oneOf(Object.keys(d)),status:s().oneOf(Object.keys(c)),brand:s().shape({color:s().string.isRequired,monogram:s().string.isRequired}),iconSrc:s().string,className:s().string}},98582:(e,t,r)=>{"use strict";r.d(t,{default:()=>d});var n=r(95155),a=r(14051),s=r.n(a),l=r(12115),o=r(31474),i=r(4650);function d({id:e,label:t,hint:r,error:a,required:s=!1,className:c,children:u}){let p=(0,l.useId)(),m=e||`${p}-input`,x=`${m}-hint`,h=`${m}-error`,f=(0,i.Gc)(m,{hint:r,error:a});return(0,n.jsxs)("div",{className:(0,o.cn)("flex flex-col gap-1.5",c),children:[t&&(0,n.jsxs)("label",{htmlFor:m,className:"text-sm font-medium text-text",children:[t,s&&(0,n.jsx)("span",{className:"text-err ms-1","aria-hidden":"true",children:"*"})]}),u({inputId:m,describedBy:f,invalid:!!a}),a?(0,n.jsxs)("p",{id:h,className:"text-xs text-err flex items-center gap-1",children:[(0,n.jsx)("span",{className:"material-symbols-outlined text-[14px]","aria-hidden":"true",children:"error"}),a]}):r?(0,n.jsx)("p",{id:x,className:"text-xs text-muted",children:r}):null]})}d.propTypes={id:s().string,label:s().node,hint:s().node,error:s().node,required:s().bool,className:s().string,children:s().func.isRequired}},99380:(e,t,r)=>{"use strict";r.d(t,{default:()=>i});var n=r(95155),a=r(14051),s=r.n(a),l=r(31474),o=r(98582);function i({label:e,options:t=[],value:r,onChange:a,placeholder:s="Select an option",error:d,hint:c,disabled:u=!1,required:p=!1,className:m,selectClassName:x,id:h,...f}){return(0,n.jsx)(o.default,{id:h,label:e,hint:c,error:d,required:p,className:m,children:({inputId:e,describedBy:o,invalid:i})=>(0,n.jsxs)("div",{className:"relative",children:[(0,n.jsxs)("select",{...f,id:e,value:r,onChange:a,disabled:u,"aria-describedby":o,"aria-invalid":i||void 0,className:(0,l.cn)("w-full h-11 ps-3 pe-10 text-sm text-text bg-raised rounded-lg appearance-none","border border-line focus:outline-none focus:border-coral focus:shadow-focus","transition-colors duration-150 disabled:opacity-50 disabled:cursor-not-allowed","text-[16px] sm:text-sm",i&&"border-err focus:border-err",x),children:[null!==s&&(0,n.jsx)("option",{value:"",disabled:!0,children:s}),(function(e=[]){let t=[];for(let r of e){let e=r.group||null,n=t[t.length-1];n&&n.label===e?n.options.push(r):t.push({label:e,options:[r]})}return t})(t).map((e,t)=>null===e.label?e.options.map(e=>(0,n.jsx)("option",{value:e.value,children:e.label},e.value)):(0,n.jsx)("optgroup",{label:e.label,children:e.options.map(e=>(0,n.jsx)("option",{value:e.value,children:e.label},e.value))},`${e.label}-${t}`))]}),(0,n.jsx)("div",{className:"absolute inset-y-0 end-0 flex items-center pe-3 pointer-events-none text-muted","aria-hidden":"true",children:(0,n.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"expand_more"})})]})})}i.propTypes={label:s().node,options:s().arrayOf(s().shape({value:s().oneOfType([s().string,s().number]).isRequired,label:s().node.isRequired,group:s().string})),value:s().oneOfType([s().string,s().number]),onChange:s().func,placeholder:s().oneOfType([s().string,s().oneOf([null])]),error:s().node,hint:s().node,disabled:s().bool,required:s().bool,className:s().string,selectClassName:s().string,id:s().string}}},e=>{e.O(0,[1610,9671,2903,8105,1039,9518,8441,3794,7358],()=>e(e.s=88430)),_N_E=e.O()}]);
@@ -1 +1 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9305],{1620:(e,t,n)=>{"use strict";n.d(t,{D:()=>s});var r=n(12115),o=n(90085);function i(e){let t=window.matchMedia("(prefers-color-scheme: dark)");return t.addEventListener("change",e),()=>t.removeEventListener("change",e)}function a(){return window.matchMedia("(prefers-color-scheme: dark)").matches}function l(){return!1}function s(){let{theme:e,setTheme:t,toggleTheme:n,initTheme:s}=(0,o.A)(),u=(0,r.useSyncExternalStore)(i,a,l);(0,r.useEffect)(()=>{s()},[s]),(0,r.useEffect)(()=>{if("system"!==e)return;let t=window.matchMedia("(prefers-color-scheme: dark)"),n=()=>s();return t.addEventListener("change",n),()=>t.removeEventListener("change",n)},[e,s]);let c="dark"===e||"system"===e&&u;return{theme:e,setTheme:t,toggleTheme:n,isDark:c}}},4553:(e,t,n)=>{"use strict";n.d(t,{DM:()=>a,Hc:()=>c,qt:()=>s,qx:()=>u});var r=n(35652);let{BRAND_IDS:o,DEFAULT_BRAND_ID:i,ACTIVE_BRAND_ID:a,isActiveBrand:l,BRAND:s,LEGACY:u,ACTIVE:c,UPSTREAM_CLIENT_IDS:d,envName:f,readEnv:p,warnLegacyOnce:m,header:h,legacyHeaderNames:g}=n.n(r)()},8247:(e,t,n)=>{"use strict";n.d(t,{HY:()=>s,Kw:()=>u});let r={"perplexity-agent":"perplexity","gitlab-duo":"gitlab","vercel-ai-gateway":"vercel","ollama-search":"ollama"};function o(e){return e.startsWith("openai-compatible")?"oai-cc":e.startsWith("anthropic-compatible")?"anthropic-m":""}let i=new Set;function a(e){return e&&"string"==typeof e?e.trim().toLowerCase():""}let l=new Set(["meta-code"]);function s(e){let t=function(e){let t=a(e);if(!t||i.has(t))return"";let n=r[t]||o(t)||t;return i.has(n)?"":n}(e);return t?`/providers/${t}.${l.has(t)?"svg":"webp"}`:null}function u(e){let t=a(e);t&&i.add(t);let n=r[t]||o(t);n&&i.add(n)}},15729:(e,t,n)=>{"use strict";n.d(t,{default:()=>l});var r=n(95155),o=n(14051),i=n.n(o),a=n(31474);function l({children:e,className:t,...n}){return(0,r.jsx)("kbd",{...n,className:(0,a.cn)("inline-flex h-5 min-w-5 items-center justify-center rounded-md border border-line bg-raised px-1.5","font-mono text-[11px] font-medium text-subtle",t),children:e})}l.propTypes={children:i().node.isRequired,className:i().string}},17081:(e,t,n)=>{"use strict";n.d(t,{Ay:()=>u,q0:()=>l});var r=n(12115);let o=(e,t)=>Number.isInteger(e)&&e>=0?e:t,i={state:{loading:!0,gatewayOnline:null,startedAt:null,serverPort:null,badges:{providers:null,combos:null,quota:null},providerAttention:{count:0,status:null},enableTranslator:!1,traffic:null,savingsMilestone:null},listeners:new Set,timer:null,inFlight:null,queued:!1,lastRefreshAt:0};async function a(){let e=null,t=null;i.lastRefreshAt=Date.now();try{let n=await fetch("/api/shell/summary",{cache:"no-store"});e=n.status,n.ok&&(t=await n.json().catch(()=>null))}catch{}for(let n of(i.state=function(e,t,n){let r={...e,loading:!1};if(null===t||t>=500)return{...r,gatewayOnline:!1,startedAt:null,serverPort:null};if(r.gatewayOnline=!0,!n||"object"!=typeof n)return r;let i=n.gateway||{};r.startedAt="string"==typeof i.startedAt?i.startedAt:null,r.serverPort=Number.isInteger(i.port)?i.port:null,r.badges={providers:o(n.providers?.connected,e.badges.providers),combos:o(n.combos,e.badges.combos),quota:o(n.lowQuota,e.badges.quota)};let a=n.providers?.attention;a&&Number.isInteger(a.count)&&(r.providerAttention={count:a.count,status:"warn"===a.status||"err"===a.status?a.status:null}),"boolean"==typeof n.enableTranslator&&(r.enableTranslator=n.enableTranslator);let l=n.traffic??null;if(null!==l&&Array.isArray(l.series)&&Number.isInteger(l.total)&&l.total>=0&&(r.traffic={series:l.series.map(e=>Number.isFinite(e)?Math.max(0,Math.floor(e)):0),total:l.total}),n.savings&&"object"==typeof n.savings&&"pendingMilestone"in n.savings){let e=n.savings.pendingMilestone;null===e?r.savingsMilestone=null:Number.isInteger(e)&&e>0&&(r.savingsMilestone=e)}return r}(i.state,e,t),i.listeners))n(i.state)}function l(){return i.inFlight?i.queued=!0:i.inFlight=a().finally(()=>{i.inFlight=null,i.queued&&(i.queued=!1,l())}),i.inFlight}function s(){!document.hidden&&!i.inFlight&&Date.now()-i.lastRefreshAt>=15e3&&l()}function u(){let[e,t]=(0,r.useState)(i.state);(0,r.useEffect)(()=>{let e=e=>t(e);return i.listeners.add(e),1===i.listeners.size&&(l(),i.timer=window.setInterval(()=>{document.hidden||l()},6e4),document.addEventListener("visibilitychange",s)),()=>{i.listeners.delete(e),0===i.listeners.size&&(window.clearInterval(i.timer),i.timer=null,document.removeEventListener("visibilitychange",s))}},[]);let{serverPort:n,...o}=e,a=n??(window.location?.port?Number(window.location.port):null);return{...o,port:a}}},28745:(e,t,n)=>{"use strict";n.d(t,{vQ:()=>i,UY:()=>u,Nu:()=>a,B2:()=>s,h0:()=>l});var r=n(4553),o=n(41463);let i={name:`${r.Hc.name} Proxy`,description:"AI infrastructure management",version:"1.0.0",build:{channel:o.env.NEXT_PUBLIC_BUILD_CHANNEL||"",sha:o.env.NEXT_PUBLIC_BUILD_SHA||""}},a={changelogUrl:"https://raw.githubusercontent.com/tokenhop/tokenhop/refs/heads/master/CHANGELOG.md"},l={appPort:20128},s={storageKey:"theme",defaultTheme:"dark"},u={maxLines:200,pollIntervalMs:1e3}},35652:(e,t,n)=>{"use strict";var r,o=n(41463);let i=Object.freeze(["9router","tokenhop"]),a="tokenhop";function l(e,t){if(i.includes(e))return e;let n=i.map(e=>`"${e}"`).join(", ");throw Error(`${t}: unknown brand ${JSON.stringify(e)}; allowed values: ${n}`)}let s=""==(r="tokenhop")?a:l(r,"NEXT_PUBLIC_BRAND"),u=Object.freeze({name:"tokenhop",slug:"tokenhop",envPrefix:"TOKENHOP_",headerPrefix:"x-tokenhop-",jcodeApiKeyEnv:"JCODE_TOKENHOP_API_KEY",defaultApiKey:"sk_tokenhop",dataDirName:"tokenhop",samlIssuerDefault:"urn:tokenhop:sp",mitmCaCommonName:"tokenhop MITM Root CA",mitmCaOrg:"tokenhop",mitmCertFile:"tokenhop-root-ca.crt",pidFile:"tokenhop.pid",autostartLabel:"dev.tokenhop.autostart",autostartDesktopFile:"tokenhop.desktop",autostartVbsFile:"tokenhop.vbs",clientConfigKey:"tokenhop",customModelIdPrefix:"custom:tokenhop-",storageKeyPrefix:"tokenhop.",eventPrefix:"tokenhop:",backupFilePrefix:"tokenhop-backup-",npmPackage:"tokenhop",appPackage:"tokenhop-app",repoSlug:"tokenhop/tokenhop",repoUrl:"https://github.com/tokenhop/tokenhop",imageName:"ghcr.io/tokenhop/tokenhop",websiteUrl:"https://tokenhop.ai",docsUrl:"https://tokenhop.dev",wordmark:"tokenhop",favicon:"/brand/favicon.svg",faviconIco:"/brand/favicon.ico",appIcon192:"/brand/icons/icon-192.svg",appIcon512:"/brand/icons/icon-512.svg",trayIconName:"icon-tokenhop",trayIconTemplate:!0}),c=Object.freeze({names:Object.freeze(["9Router","9router"]),slug:"9router",envPrefixes:Object.freeze(["NINEROUTER_","NINE_ROUTER_"]),headerPrefix:"x-9router-",jcodeApiKeyEnv:"JCODE_9ROUTER_API_KEY",defaultApiKey:"sk_9router",dataDirName:"9router",samlIssuerDefault:"urn:9router:sp",mitmCaCommonName:"9Router MITM Root CA",mitmCaOrg:"9Router",mitmCertFile:"9router-root-ca.crt",pidFile:"9router.pid",autostartLabel:"com.9router.autostart",autostartDesktopFile:"9router.desktop",autostartVbsFile:"9router.vbs",clientConfigKeys:Object.freeze(["9router","9Router"]),customModelIdPrefix:"custom:9Router-",storageKeyPrefix:"9router.",eventPrefix:"9router:",backupFilePrefix:"9router-backup-",npmPackage:"9router",appPackage:"9router-app",repoSlug:"yandy-r/9router",repoUrl:"https://github.com/yandy-r/9router",imageName:"ghcr.io/yandy-r/9router",wordmark:"router",favicon:"/favicon.svg",faviconIco:"/favicon.ico",appIcon192:"/icons/icon-192.svg",appIcon512:"/icons/icon-512.svg",trayIconName:"icon",trayIconTemplate:!1}),d=Object.freeze({kimiPlatform:"9router",clineUserAgentProduct:"9Router",clineClientType:"9router",devinMcpClientName:"9router",coworkMcpClientName:"9router",cursorMcpProvider:"9router",glmMcpClientName:"9router",xaiUserAgent:"grok-cli/9router",xiaomiKeyNamePrefix:"9router-xmd-",githubUserAgent:"9Router",proxyTestUserAgent:"9Router",denoRelayKind:"9router-relay"}),f=new Set(["repoSlug","repoUrl","imageName","websiteUrl","docsUrl"]),p={name:"names",envPrefix:"envPrefixes",clientConfigKey:"clientConfigKeys"},m="tokenhop"===s?u:Object.freeze(Object.fromEntries(Object.keys(u).map(e=>{let t;return[e,f.has(e)?u[e]:Array.isArray(t=c[p[e]||e])?t[0]:t]}))),h=new Set;function g(e,t,n){if("tokenhop"!==s)return!1;let r=`${e}\u0000${t}`;return!h.has(r)&&(h.add(r),console.warn(`[tokenhop] deprecated ${e} "${t}" → use "${n}" (legacy support ends in v2.0.0)`),!0)}let b=/^[A-Z0-9]+(_[A-Z0-9]+)*$/;function v(e){if("string"!=typeof e||!b.test(e))throw Error(`envName: invalid suffix ${JSON.stringify(e)}; expected e.g. "PEER_TOKEN"`);return u.envPrefix+e}let y=/^(?!x-)[a-z0-9]+(-[a-z0-9]+)*$/;function x(e){return m.headerPrefix+function(e,t){if("string"!=typeof e||!y.test(e))throw Error(`${t}: invalid header name ${JSON.stringify(e)}; expected a bare lowercase name like "connection-id"`);return e}(e,"header")}e.exports={BRAND_IDS:i,DEFAULT_BRAND_ID:a,ACTIVE_BRAND_ID:s,isActiveBrand:function(e){return l(e,"isActiveBrand")===s},BRAND:u,LEGACY:c,ACTIVE:m,UPSTREAM_CLIENT_IDS:d,envName:v,readEnv:function(e,t=o.env){let n=v(e);if(void 0!==t[n])return t[n];for(let r of c.envPrefixes){let o=r+e;if(void 0!==t[o])return g("env var",o,n),t[o]}},warnLegacyOnce:g,header:x,legacyHeaderNames:function(e){let t=x(e);return[c.headerPrefix+e].filter(e=>e!==t)}}},36159:(e,t,n)=>{"use strict";n.d(t,{r:()=>r});let r=[{id:"embedding",label:"Embedding",icon:"data_array",endpoint:{method:"POST",path:"/v1/embeddings"}},{id:"image",label:"Text to image",icon:"brush",endpoint:{method:"POST",path:"/v1/images/generations"}},{id:"imageToText",label:"Image to text",icon:"image_search",endpoint:{method:"POST",path:"/v1/images/understanding"}},{id:"tts",label:"Text to speech",icon:"record_voice_over",endpoint:{method:"POST",path:"/v1/audio/speech"}},{id:"stt",label:"Speech to text",icon:"mic",endpoint:{method:"POST",path:"/v1/audio/transcriptions"}},{id:"webSearch",label:"Web search",icon:"travel_explore",endpoint:{method:"POST",path:"/v1/search"}},{id:"webFetch",label:"Web fetch",icon:"language",endpoint:{method:"POST",path:"/v1/web/fetch"}},{id:"video",label:"Video",icon:"movie",endpoint:{method:"POST",path:"/v1/videos/generations"}},{id:"music",label:"Music",icon:"music_note",endpoint:{method:"POST",path:"/v1/audio/music"}}]},65921:(e,t,n)=>{"use strict";n.d(t,{i:()=>i});var r=n(1934);let o=0,i=(0,r.v)((e,t)=>({notifications:[],addNotification:n=>{let r=++o,i={id:r,type:n.type||"info",message:n.message,title:n.title||null,action:n.action??null,accent:n.accent??null,duration:n.duration??5e3,dismissible:n.dismissible??!0,createdAt:Date.now()};return e(e=>({notifications:[...e.notifications,i]})),i.duration>0&&setTimeout(()=>t().removeNotification(r),i.duration),r},removeNotification:t=>{e(e=>({notifications:e.notifications.filter(e=>e.id!==t)}))},clearAll:()=>e({notifications:[]}),success:(e,n)=>t().addNotification(a("success",e,n)),error:(e,n)=>t().addNotification({duration:8e3,...a("error",e,n)}),warning:(e,n)=>t().addNotification(a("warning",e,n)),info:(e,n)=>t().addNotification(a("info",e,n))}));function a(e,t,n){if("string"==typeof n)return{type:e,message:t,title:n};let r={type:e,message:t,...n||{}},{action:o}=r;if(null!=o&&("string"!=typeof o.label||!o.label||"function"!=typeof o.onSelect))throw TypeError("notification action needs a label and onSelect function");return r}},73006:(e,t,n)=>{"use strict";n.d(t,{FE:()=>E,Tl:()=>p,kk:()=>m,oQ:()=>h,wn:()=>C});var r=n(93308);let o={},i=r.Xn,a=[],l=new Map,s=null,u=0;function c(){if("u"<typeof document)return r.Xn;let e=document.cookie.split(";").find(e=>e.trim().startsWith(`${r.CL}=`)),t=e?decodeURIComponent(e.split("=")[1]):r.Xn;return(0,r.QC)(t)}async function d(e){if("en"===e)return{};let t=l.get(e);if(t)return t;try{let t=await fetch(`/i18n/literals/${e}.json`);if(!t.ok)throw Error(`HTTP ${t.status} for ${e}.json`);let n=await t.json();return l.set(e,n),n}catch(e){return console.error("Failed to load translations:",e),{}}}async function f(){let e=++u,t=c(),n=await d(t);return e===u&&(i=t,o=n,!0)}function p(e){if(!e||"string"!=typeof e)return e;let t=e.trim();return t&&"en"!==i&&o[t]||e}function m(){return i}function h(e){return a.push(e),()=>{a=a.filter(t=>t!==e)}}let g=new Set(["script","style","code","pre","colgroup","table","thead","tbody","tfoot","tr","select","datalist","optgroup"]),b=new Set(["script","style","code","pre"]);function v(e){let t=e;for(;t;){if(t.hasAttribute?.("data-i18n-skip")||t.className?.toString?.().includes("material-symbols")||b.has(t.tagName?.toLowerCase()))return!0;t=t.parentElement}return g.has(e.tagName?.toLowerCase())}function y(e){if(!e.nodeValue||!e.nodeValue.trim())return;let t=e.parentElement;if(!t||v(t))return;(void 0===e._originalText||e.nodeValue!==e._translatedText)&&(e._originalText=e.nodeValue);let n=p(e._originalText);e._translatedText=n,n!==e.nodeValue&&(e.nodeValue=n)}let x=["aria-label","placeholder","title","alt"];function k(e){if(!v(e))for(let t of(e._i18nOriginalAttrs||(e._i18nOriginalAttrs={}),e._i18nTranslatedAttrs||(e._i18nTranslatedAttrs={}),x)){if(!e.hasAttribute?.(t))continue;let n=e.getAttribute(t);t in e._i18nOriginalAttrs&&n===e._i18nTranslatedAttrs[t]||(e._i18nOriginalAttrs[t]=n);let r=p(e._i18nOriginalAttrs[t]??"");e._i18nTranslatedAttrs[t]=r||n,r&&r!==n&&e.setAttribute(t,r)}}function w(e){let t;if(!e)return;let n=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,null,!1),r=[];for(;t=n.nextNode();)r.push(t);r.forEach(y),[e,...e.querySelectorAll("[aria-label],[placeholder],[title],[alt]")].forEach(k)}function N(e){for(let t of e)"characterData"===t.type?y(t.target):"attributes"===t.type?k(t.target):t.addedNodes.forEach(e=>{e.nodeType===Node.ELEMENT_NODE?w(e):e.nodeType===Node.TEXT_NODE&&y(e)})}function T(){s||(s=new MutationObserver(N)).observe(document.body,{childList:!0,subtree:!0,characterData:!0,attributes:!0,attributeFilter:x})}async function E(){"en"===c()||await f()&&(w(document.body),T())}async function C(){let e=i;if(await f()){if(a.forEach(e=>{e()}),"en"===i){s?.disconnect(),s=null,"en"!==e&&w(document.body);return}w(document.body),T()}}},81127:(e,t,n)=>{"use strict";n.d(t,{ConfirmDialog:()=>v,ConfirmModal:()=>y,default:()=>b});var r=n(95155),o=n(12115),i=n(14051),a=n.n(i),l=n(31474),s=n(19844),u=n(47929),c=n(92542),d=n(6587);let f=(0,o.createContext)(null);function p({children:e,className:t}){let{titleId:n,onClose:i}=function(e){let t=(0,o.useContext)(f);if(!t)throw Error(`Modal.${e} must be rendered inside <Modal>`);return t}("Header");return(0,r.jsxs)("div",{className:(0,l.cn)("flex shrink-0 items-center justify-between gap-3 border-b border-line py-3 ps-6 pe-3",t),children:[(0,r.jsx)("h2",{id:n,className:"min-w-0 font-display text-lg font-bold text-text",children:e}),i?(0,r.jsx)(d.default,{icon:"close",label:"Close",onClick:i}):null]})}function m({children:e,className:t}){return(0,r.jsx)("div",{className:(0,l.cn)("min-h-0 flex-1 overflow-y-auto px-6 py-5 custom-scrollbar",t),children:e})}function h({children:e,className:t}){return(0,r.jsx)("div",{className:(0,l.cn)("flex shrink-0 flex-wrap items-center justify-end gap-2 border-t border-line px-6 py-4",t),children:e})}p.propTypes={children:a().node,className:a().string},m.propTypes={children:a().node,className:a().string},h.propTypes={children:a().node,className:a().string};let g=new Set([p,m,h]);function b({isOpen:e,onClose:t,title:n,description:i,children:a,footer:c,size:d="md",closeOnOverlay:v=!0,closeOnEscape:y=!0,initialFocusRef:x,"aria-label":k,className:w,showTrafficLights:N}){let T=(0,o.useRef)(null),[E,C]=(0,u.lk)(T),{titleId:O,descriptionId:j}=(0,u.uf)("signal-modal"),P=!!e;if((0,u.K$)(P),(0,u.rM)({container:E,active:P,initialFocusRef:x}),(0,u.s9)({onClose:t,containerRef:T,enabled:P,closeOnEscape:y,closeOnOutside:v}),!P)return null;let _=o.Children.toArray(a).some(e=>(0,o.isValidElement)(e)&&g.has(e.type)),A=!!n||_;return(0,r.jsx)(u.ZL,{children:(0,r.jsx)(f.Provider,{value:{titleId:O,onClose:t},children:(0,r.jsxs)("div",{className:"fixed inset-0 z-50 flex items-center justify-center p-4",children:[(0,r.jsx)("div",{className:"signal-backdrop absolute inset-0","aria-hidden":"true"}),(0,r.jsxs)("div",{ref:C,role:"dialog","aria-modal":"true","aria-labelledby":A&&!k?O:void 0,"aria-label":k,"aria-describedby":i?j:void 0,tabIndex:-1,className:(0,l.cn)("signal-overlay-modal relative flex max-h-[85vh] w-full flex-col overflow-hidden","rounded-2xl border border-line bg-panel text-text shadow-card outline-none",(0,s.FM)(d),w),children:[_?a:(0,r.jsxs)(r.Fragment,{children:[n?(0,r.jsx)(p,{children:n}):null,(0,r.jsxs)(m,{children:[i?(0,r.jsx)("p",{id:j,className:"mb-3 text-sm text-muted",children:i}):null,a]}),c?(0,r.jsx)(h,{children:c}):null]}),_&&i?(0,r.jsx)("p",{id:j,className:"sr-only",children:i}):null]})]})})})}function v({isOpen:e,onClose:t,onConfirm:n,title:i="Confirm",message:a,confirmText:l="Confirm",cancelText:u="Cancel",variant:d="danger",loading:f,error:p}){let[m,h]=(0,o.useState)(!1),[g,y]=(0,o.useState)(null),x=!!f||m,k=p??g,w=(0,o.useRef)(!1),N=(0,o.useRef)(0),T=(0,o.useRef)(e);T.current=e,(0,o.useEffect)(()=>{e||(N.current+=1,w.current=!1,h(!1),y(null))},[e]);let E=()=>{x||(y(null),t?.())},C=async()=>{if(!(0,s.IH)(w,x))return;w.current=!0;let e=N.current+1;N.current=e,y(null),h(!0);try{await n()}catch(t){if(!(0,s.YR)(e,N,T.current))return;y(t?.message||"Something went wrong. Try again.")}finally{(0,s.YR)(e,N,T.current)&&h(!1),N.current===e&&(w.current=!1)}};return(0,r.jsx)(b,{isOpen:e,onClose:E,title:i,description:a,size:"sm",closeOnOverlay:!x,closeOnEscape:!x,footer:(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(c.default,{variant:"ghost",onClick:E,disabled:x,children:u}),(0,r.jsx)(c.default,{variant:"danger"===d?"danger":"primary",onClick:C,loading:x,children:l})]}),children:(0,r.jsx)("div",{"aria-live":"polite",children:k?(0,r.jsx)("p",{role:"alert",className:"rounded-lg bg-err-bg px-3 py-2 text-sm text-err",children:k}):null})})}b.Header=p,b.Body=m,b.Footer=h,b.propTypes={isOpen:a().bool,onClose:a().func,title:a().node,description:a().node,children:a().node,footer:a().node,size:a().oneOf(Object.keys(s.Ts)),closeOnOverlay:a().bool,closeOnEscape:a().bool,initialFocusRef:a().shape({current:a().any}),"aria-label":a().string,className:a().string,showTrafficLights:a().bool},v.propTypes={isOpen:a().bool,onClose:a().func,onConfirm:a().func.isRequired,title:a().node,message:a().node,confirmText:a().string,cancelText:a().string,variant:a().oneOf(["danger","default","primary"]),loading:a().bool,error:a().node};let y=v},90085:(e,t,n)=>{"use strict";n.d(t,{A:()=>l});var r=n(1934),o=n(31692),i=n(28745);function a(e){let t=document.documentElement,n=window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light";"dark"===("system"===e?n:e)?t.classList.add("dark"):t.classList.remove("dark")}let l=(0,r.v)((0,o.Zr)((e,t)=>({theme:i.B2.defaultTheme,setTheme:t=>{e({theme:t}),a(t)},toggleTheme:()=>{let n="dark"===t().theme?"light":"dark";e({theme:n}),a(n)},initTheme:()=>{a(t().theme)}}),{name:i.B2.storageKey}))},92154:(e,t,n)=>{Promise.resolve().then(n.bind(n,22577))},93308:(e,t,n)=>{"use strict";n.d(t,{CL:()=>i,QC:()=>s,Xn:()=>o,YZ:()=>r,kf:()=>l,rB:()=>a});let r=["en","vi","zh-CN","zh-TW","ja","pt-BR","pt-PT","ko","es","de","fr","he","ar","ru","pl","cs","nl","tr","uk","tl","id","km","th","hi","bn","ur","ro","sv","it","el","hu","fi","da","no","fa"],o="en",i="locale",a=["ar","he","fa","ur"],l={en:"English",vi:"Tiếng Việt","zh-CN":"简体中文","zh-TW":"繁體中文",ja:"日本語","pt-BR":"Portugu\xeas (Brasil)","pt-PT":"Portugu\xeas (Portugal)",ko:"한국어",es:"Espa\xf1ol",de:"Deutsch",fr:"Fran\xe7ais",he:"עברית",ar:"العربية",ru:"Русский",pl:"Polski",cs:"Čeština",nl:"Nederlands",tr:"T\xfcrk\xe7e",uk:"Українська",tl:"Tagalog",id:"Indonesia",th:"ไทย",km:"ខ្មែរ",hi:"हिन्दी",bn:"বাংলা",ur:"اردو",ro:"Rom\xe2nă",sv:"Svenska",it:"Italiano",el:"Ελληνικά",hu:"Magyar",fi:"Suomi",da:"Dansk",no:"Norsk",fa:"فارسی"};function s(e){return"zh"===e||"zh-CN"===e?"zh-CN":"en"===e?"en":"vi"===e?"vi":"zh-TW"===e?"zh-TW":"ja"===e?"ja":"pt-BR"===e?"pt-BR":"pt-PT"===e?"pt-PT":"ko"===e?"ko":"es"===e?"es":"de"===e?"de":"fr"===e?"fr":"he"===e?"he":"ar"===e?"ar":"ru"===e?"ru":"pl"===e?"pl":"cs"===e?"cs":"nl"===e?"nl":"tr"===e?"tr":"uk"===e?"uk":"tl"===e?"tl":"id"===e?"id":"th"===e?"th":"km"===e?"km":"hi"===e?"hi":"bn"===e?"bn":"ur"===e?"ur":"ro"===e?"ro":"sv"===e?"sv":"it"===e?"it":"el"===e?"el":"hu"===e?"hu":"fi"===e?"fi":"da"===e?"da":"no"===e?"no":"fa"===e?"fa":o}},93921:(e,t,n)=>{"use strict";n.d(t,{MenuItem:()=>m,default:()=>p});var r=n(95155),o=n(12115),i=n(14051),a=n.n(i),l=n(31474),s=n(4650),u=n(19844),c=n(47929);let d=o.useLayoutEffect,f=e=>"string"==typeof e?.props?.label?e.props.label:e?.props?.children;function p({trigger:e,children:t,open:n,onOpenChange:i,align:a="end",className:m}){let h=(0,o.useRef)(null),g=(0,o.useRef)(null),b=(0,o.useRef)([]),v=(0,o.useRef)({session:null}),{overlayId:y}=(0,c.uf)("signal-menu"),[x,k]=(0,o.useState)(!1),[w,N]=(0,o.useState)(-1),[T,E]=(0,o.useState)(null),[C,O]=(0,o.useState)(null),j=(0,o.useCallback)(e=>{g.current=e,O(e)},[]),P="boolean"==typeof n,_=P?n:x,A=(0,o.useCallback)(e=>{P?i?.(e):k(e),e||(N(-1),v.current.session=null)},[P,i]),S=(0,o.useCallback)(()=>{let e=h.current;e&&"function"==typeof e.focus&&e.focus()},[]),R=(0,o.useCallback)(()=>A(!1),[A]),I=(0,o.useCallback)(()=>{R(),S()},[R,S]);(0,o.useEffect)(()=>{_&&C&&T&&b.current[Math.max(w,0)]?.focus?.()},[_,C,T,w]),(0,c.s9)({onClose:I,containerRef:g,enabled:_,closeOnOutside:!1}),(0,o.useEffect)(()=>{if(!_)return;let e=e=>{g.current?.contains(e.target)||h.current?.contains(e.target)||R()};return document.addEventListener("pointerdown",e),()=>document.removeEventListener("pointerdown",e)},[_,R]);let M=o.Children.toArray(t).filter(o.isValidElement),L=M.map(f),z=M.map(e=>!!e.props.disabled),D=(0,o.useRef)(z);D.current=z;let $=(0,o.useCallback)((e=0)=>{A(!0);let t=(0,u.oQ)(D.current,e<0?0:e);N(t<0?e:t)},[A]);d(()=>{if(!_||!C)return void E(null);let e=()=>{let e=h.current;if(!e)return;let t=e.getBoundingClientRect(),n={width:C.offsetWidth,height:C.offsetHeight},r="rtl"===getComputedStyle(e).direction,o=(0,u.Rg)(t,n,a,r);E({top:o.top,left:o.left})};return e(),window.addEventListener("resize",e),window.addEventListener("scroll",e,!0),()=>{window.removeEventListener("resize",e),window.removeEventListener("scroll",e,!0)}},[_,C,a]);let F=e=>{if("Tab"===e.key){_&&R();return}if("ArrowDown"===e.key)e.preventDefault(),$(0);else if("ArrowUp"===e.key){e.preventDefault(),A(!0);let t=(0,u.oQ)(z,M.length-1,!0);N(t<0?M.length-1:t)}else("Enter"===e.key||" "===e.key)&&(e.preventDefault(),_?R():$(0))},K=(0,o.isValidElement)(e)?e.props["aria-label"]??e.props.label??("string"==typeof e.props.children?e.props.children:void 0):void 0,U={ref:h,"aria-haspopup":"menu","aria-expanded":_,"aria-controls":_?y:void 0,onClick:()=>{_?R():$(0)},onKeyDown:F};return(0,r.jsxs)(r.Fragment,{children:[(0,o.isValidElement)(e)?(0,o.cloneElement)(e,{...U,onClick:t=>{e.props.onClick?.(t),t.defaultPrevented||U.onClick(t)},onKeyDown:t=>{e.props.onKeyDown?.(t),t.defaultPrevented||F(t)}}):(0,r.jsx)("button",{type:"button",...U,className:"inline-flex h-11 items-center justify-center gap-2 rounded-lg border border-line bg-raised px-4 text-sm font-semibold text-text transition-colors duration-150 hover:bg-line/60 focus-visible:outline-none focus-visible:shadow-focus",children:e}),_?(0,r.jsx)(c.ZL,{children:(0,r.jsx)("div",{ref:j,id:y,role:"menu","aria-label":K,"aria-orientation":"vertical",style:T??{visibility:"hidden"},className:(0,l.cn)("signal-overlay-menu fixed z-50 w-60 overflow-hidden rounded-xl border border-line bg-panel py-1 text-text shadow-card",m),children:M.map((e,t)=>(0,o.cloneElement)(e,{key:e.key??t,ref:e=>{b.current[t]=e},tabIndex:t===Math.max(w,0)?0:-1,"data-active":t===Math.max(w,0),onKeyDown:e=>((e,t)=>{if("Tab"===e.key)return void R();if((0,s.JF)(e.key)){e.preventDefault();let n="u">typeof document&&"rtl"===document.dir,r=(0,u.jg)(t,e.key,z,s.lZ,{rtl:n});N(r),b.current[r]?.focus?.();return}if(1===e.key.length&&!e.ctrlKey&&!e.metaKey&&!e.altKey){let n=v.current,{session:r,index:o}=(0,u.sF)(n.session,e.key,e.timeStamp,L.map(e=>String(e??"")),t,z);n.session=r,o!==t&&(N(o),b.current[o]?.focus?.())}})(e,t),onSelect:()=>{e.props.onSelect?.(),I()}}))})}):null]})}p.propTypes={trigger:a().node.isRequired,children:a().node,open:a().bool,onOpenChange:a().func,align:a().oneOf(["start","end"]),className:a().string};let m=function({icon:e,label:t,children:n,trailing:o,danger:i=!1,selected:a=!1,disabled:s=!1,onSelect:u,...c}){return(0,r.jsxs)("button",{type:"button",role:"menuitem","aria-current":a||void 0,disabled:s,onClick:e=>{s?e.preventDefault():u?.(e)},className:(0,l.cn)("flex min-h-11 w-full items-center gap-3 px-4 py-2.5 text-sm transition-colors duration-150","focus-visible:outline-none focus-visible:shadow-focus","disabled:cursor-not-allowed disabled:opacity-50",i?"text-err hover:bg-err-bg":"text-text hover:bg-raised",a&&"bg-coral-bg font-semibold text-coral-ink"),...c,children:[e?(0,r.jsx)("span",{className:"material-symbols-outlined text-[20px] text-muted","aria-hidden":"true",children:e}):null,(0,r.jsx)("span",{className:"min-w-0 flex-1 text-start",children:n??t}),a?(0,r.jsx)("span",{className:"material-symbols-outlined text-[18px]","aria-hidden":"true",children:"check"}):null,o?(0,r.jsx)("span",{className:"shrink-0 text-sm text-muted",children:o}):null]})};m.propTypes={icon:a().string,label:a().string,children:a().node,trailing:a().node,danger:a().bool,selected:a().bool,disabled:a().bool,onSelect:a().func}},96975:(e,t,n)=>{"use strict";n.d(t,{default:()=>d});var r=n(95155),o=n(14051),i=n.n(o),a=n(12115),l=n(7256),s=n(8247);let u={sm:{tile:"size-6 rounded-md",text:"text-[10px]"},md:{tile:"size-9 rounded-[10px]",text:"text-sm"},lg:{tile:"size-14 rounded-[14px]",text:"text-lg"}},c={ok:"bg-ok",warn:"bg-warn",err:"bg-err",info:"bg-sky",live:"bg-lime",neutral:"bg-line"};function d({providerId:e,size:t="md",status:n,brand:o,iconSrc:i,className:f}){let[p,m]=(0,a.useState)(null),h=u[t];if(!h)throw Error(`ProviderTile: unknown size "${t}"`);if(void 0!==n&&!c[n])throw Error(`ProviderTile: unknown status "${n}"`);let g=(0,l.rs)(e),b=o??(0,l.Do)(g),v=p===g?null:i??(0,s.HY)(g),y=v?{style:{backgroundColor:`color-mix(in srgb, ${b.color} 8%, #ffffff)`},className:""}:{style:{backgroundColor:b.color},className:`font-display font-bold text-white shadow-[inset_0_0_0_1px_rgba(255,255,255,0.14)] ${h.text}`};return(0,r.jsxs)("span",{"aria-hidden":"true",title:e,style:y.style,className:`relative inline-flex shrink-0 items-center justify-center ${h.tile} ${y.className}${f?` ${f}`:""}`,children:[v?(0,r.jsx)("img",{src:v,alt:"",loading:"lazy",decoding:"async",className:"size-full rounded-[inherit] object-contain",onError:()=>{(0,s.Kw)(g),m(g)}}):b.monogram,n&&(0,r.jsx)("span",{className:`absolute -end-0.5 -bottom-0.5 size-2.5 rounded-full shadow-[0_0_0_2px_var(--signal-panel)] ${c[n]}`})]})}d.propTypes={providerId:i().string.isRequired,size:i().oneOf(Object.keys(u)),status:i().oneOf(Object.keys(c)),brand:i().shape({color:i().string.isRequired,monogram:i().string.isRequired}),iconSrc:i().string,className:i().string}}},e=>{e.O(0,[1610,4808,9671,2903,2577,8441,3794,7358],()=>e(e.s=92154)),_N_E=e.O()}]);
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9305],{1620:(e,t,n)=>{"use strict";n.d(t,{D:()=>s});var r=n(12115),o=n(90085);function i(e){let t=window.matchMedia("(prefers-color-scheme: dark)");return t.addEventListener("change",e),()=>t.removeEventListener("change",e)}function a(){return window.matchMedia("(prefers-color-scheme: dark)").matches}function l(){return!1}function s(){let{theme:e,setTheme:t,toggleTheme:n,initTheme:s}=(0,o.A)(),u=(0,r.useSyncExternalStore)(i,a,l);(0,r.useEffect)(()=>{s()},[s]),(0,r.useEffect)(()=>{if("system"!==e)return;let t=window.matchMedia("(prefers-color-scheme: dark)"),n=()=>s();return t.addEventListener("change",n),()=>t.removeEventListener("change",n)},[e,s]);let c="dark"===e||"system"===e&&u;return{theme:e,setTheme:t,toggleTheme:n,isDark:c}}},4553:(e,t,n)=>{"use strict";n.d(t,{DM:()=>a,Hc:()=>c,qt:()=>s,qx:()=>u});var r=n(35652);let{BRAND_IDS:o,DEFAULT_BRAND_ID:i,ACTIVE_BRAND_ID:a,isActiveBrand:l,BRAND:s,LEGACY:u,ACTIVE:c,UPSTREAM_CLIENT_IDS:d,envName:f,readEnv:p,warnLegacyOnce:m,header:h,legacyHeaderNames:g}=n.n(r)()},8247:(e,t,n)=>{"use strict";n.d(t,{HY:()=>s,Kw:()=>u});let r={"perplexity-agent":"perplexity","gitlab-duo":"gitlab","vercel-ai-gateway":"vercel","ollama-search":"ollama"};function o(e){return e.startsWith("openai-compatible")?"oai-cc":e.startsWith("anthropic-compatible")?"anthropic-m":""}let i=new Set;function a(e){return e&&"string"==typeof e?e.trim().toLowerCase():""}let l=new Set(["meta-code"]);function s(e){let t=function(e){let t=a(e);if(!t||i.has(t))return"";let n=r[t]||o(t)||t;return i.has(n)?"":n}(e);return t?`/providers/${t}.${l.has(t)?"svg":"webp"}`:null}function u(e){let t=a(e);t&&i.add(t);let n=r[t]||o(t);n&&i.add(n)}},15729:(e,t,n)=>{"use strict";n.d(t,{default:()=>l});var r=n(95155),o=n(14051),i=n.n(o),a=n(31474);function l({children:e,className:t,...n}){return(0,r.jsx)("kbd",{...n,className:(0,a.cn)("inline-flex h-5 min-w-5 items-center justify-center rounded-md border border-line bg-raised px-1.5","font-mono text-[11px] font-medium text-subtle",t),children:e})}l.propTypes={children:i().node.isRequired,className:i().string}},17081:(e,t,n)=>{"use strict";n.d(t,{Ay:()=>u,q0:()=>l});var r=n(12115);let o=(e,t)=>Number.isInteger(e)&&e>=0?e:t,i={state:{loading:!0,gatewayOnline:null,startedAt:null,serverPort:null,badges:{providers:null,combos:null,quota:null},providerAttention:{count:0,status:null},enableTranslator:!1,traffic:null,savingsMilestone:null},listeners:new Set,timer:null,inFlight:null,queued:!1,lastRefreshAt:0};async function a(){let e=null,t=null;i.lastRefreshAt=Date.now();try{let n=await fetch("/api/shell/summary",{cache:"no-store"});e=n.status,n.ok&&(t=await n.json().catch(()=>null))}catch{}for(let n of(i.state=function(e,t,n){let r={...e,loading:!1};if(null===t||t>=500)return{...r,gatewayOnline:!1,startedAt:null,serverPort:null};if(r.gatewayOnline=!0,!n||"object"!=typeof n)return r;let i=n.gateway||{};r.startedAt="string"==typeof i.startedAt?i.startedAt:null,r.serverPort=Number.isInteger(i.port)?i.port:null,r.badges={providers:o(n.providers?.connected,e.badges.providers),combos:o(n.combos,e.badges.combos),quota:o(n.lowQuota,e.badges.quota)};let a=n.providers?.attention;a&&Number.isInteger(a.count)&&(r.providerAttention={count:a.count,status:"warn"===a.status||"err"===a.status?a.status:null}),"boolean"==typeof n.enableTranslator&&(r.enableTranslator=n.enableTranslator);let l=n.traffic??null;if(null!==l&&Array.isArray(l.series)&&Number.isInteger(l.total)&&l.total>=0&&(r.traffic={series:l.series.map(e=>Number.isFinite(e)?Math.max(0,Math.floor(e)):0),total:l.total}),n.savings&&"object"==typeof n.savings&&"pendingMilestone"in n.savings){let e=n.savings.pendingMilestone;null===e?r.savingsMilestone=null:Number.isInteger(e)&&e>0&&(r.savingsMilestone=e)}return r}(i.state,e,t),i.listeners))n(i.state)}function l(){return i.inFlight?i.queued=!0:i.inFlight=a().finally(()=>{i.inFlight=null,i.queued&&(i.queued=!1,l())}),i.inFlight}function s(){!document.hidden&&!i.inFlight&&Date.now()-i.lastRefreshAt>=15e3&&l()}function u(){let[e,t]=(0,r.useState)(i.state);(0,r.useEffect)(()=>{let e=e=>t(e);return i.listeners.add(e),1===i.listeners.size&&(l(),i.timer=window.setInterval(()=>{document.hidden||l()},6e4),document.addEventListener("visibilitychange",s)),()=>{i.listeners.delete(e),0===i.listeners.size&&(window.clearInterval(i.timer),i.timer=null,document.removeEventListener("visibilitychange",s))}},[]);let{serverPort:n,...o}=e,a=n??(window.location?.port?Number(window.location.port):null);return{...o,port:a}}},28745:(e,t,n)=>{"use strict";n.d(t,{vQ:()=>i,UY:()=>u,Nu:()=>a,B2:()=>s,h0:()=>l});var r=n(4553),o=n(41463);let i={name:`${r.Hc.name} Proxy`,description:"AI infrastructure management",version:"1.0.1",build:{channel:o.env.NEXT_PUBLIC_BUILD_CHANNEL||"",sha:o.env.NEXT_PUBLIC_BUILD_SHA||""}},a={changelogUrl:"https://raw.githubusercontent.com/tokenhop/tokenhop/refs/heads/master/CHANGELOG.md"},l={appPort:20128},s={storageKey:"theme",defaultTheme:"dark"},u={maxLines:200,pollIntervalMs:1e3}},35652:(e,t,n)=>{"use strict";var r,o=n(41463);let i=Object.freeze(["9router","tokenhop"]),a="tokenhop";function l(e,t){if(i.includes(e))return e;let n=i.map(e=>`"${e}"`).join(", ");throw Error(`${t}: unknown brand ${JSON.stringify(e)}; allowed values: ${n}`)}let s=""==(r="tokenhop")?a:l(r,"NEXT_PUBLIC_BRAND"),u=Object.freeze({name:"tokenhop",slug:"tokenhop",envPrefix:"TOKENHOP_",headerPrefix:"x-tokenhop-",jcodeApiKeyEnv:"JCODE_TOKENHOP_API_KEY",defaultApiKey:"sk_tokenhop",dataDirName:"tokenhop",samlIssuerDefault:"urn:tokenhop:sp",mitmCaCommonName:"tokenhop MITM Root CA",mitmCaOrg:"tokenhop",mitmCertFile:"tokenhop-root-ca.crt",pidFile:"tokenhop.pid",autostartLabel:"dev.tokenhop.autostart",autostartDesktopFile:"tokenhop.desktop",autostartVbsFile:"tokenhop.vbs",clientConfigKey:"tokenhop",customModelIdPrefix:"custom:tokenhop-",storageKeyPrefix:"tokenhop.",eventPrefix:"tokenhop:",backupFilePrefix:"tokenhop-backup-",npmPackage:"tokenhop",appPackage:"tokenhop-app",repoSlug:"tokenhop/tokenhop",repoUrl:"https://github.com/tokenhop/tokenhop",imageName:"ghcr.io/tokenhop/tokenhop",websiteUrl:"https://tokenhop.ai",docsUrl:"https://tokenhop.dev",wordmark:"tokenhop",favicon:"/brand/favicon.svg",faviconIco:"/brand/favicon.ico",appIcon192:"/brand/icons/icon-192.svg",appIcon512:"/brand/icons/icon-512.svg",trayIconName:"icon-tokenhop",trayIconTemplate:!0}),c=Object.freeze({names:Object.freeze(["9Router","9router"]),slug:"9router",envPrefixes:Object.freeze(["NINEROUTER_","NINE_ROUTER_"]),headerPrefix:"x-9router-",jcodeApiKeyEnv:"JCODE_9ROUTER_API_KEY",defaultApiKey:"sk_9router",dataDirName:"9router",samlIssuerDefault:"urn:9router:sp",mitmCaCommonName:"9Router MITM Root CA",mitmCaOrg:"9Router",mitmCertFile:"9router-root-ca.crt",pidFile:"9router.pid",autostartLabel:"com.9router.autostart",autostartDesktopFile:"9router.desktop",autostartVbsFile:"9router.vbs",clientConfigKeys:Object.freeze(["9router","9Router"]),customModelIdPrefix:"custom:9Router-",storageKeyPrefix:"9router.",eventPrefix:"9router:",backupFilePrefix:"9router-backup-",npmPackage:"9router",appPackage:"9router-app",repoSlug:"yandy-r/9router",repoUrl:"https://github.com/yandy-r/9router",imageName:"ghcr.io/yandy-r/9router",wordmark:"router",favicon:"/favicon.svg",faviconIco:"/favicon.ico",appIcon192:"/icons/icon-192.svg",appIcon512:"/icons/icon-512.svg",trayIconName:"icon",trayIconTemplate:!1}),d=Object.freeze({kimiPlatform:"9router",clineUserAgentProduct:"9Router",clineClientType:"9router",devinMcpClientName:"9router",coworkMcpClientName:"9router",cursorMcpProvider:"9router",glmMcpClientName:"9router",xaiUserAgent:"grok-cli/9router",xiaomiKeyNamePrefix:"9router-xmd-",githubUserAgent:"9Router",proxyTestUserAgent:"9Router",denoRelayKind:"9router-relay"}),f=new Set(["repoSlug","repoUrl","imageName","websiteUrl","docsUrl"]),p={name:"names",envPrefix:"envPrefixes",clientConfigKey:"clientConfigKeys"},m="tokenhop"===s?u:Object.freeze(Object.fromEntries(Object.keys(u).map(e=>{let t;return[e,f.has(e)?u[e]:Array.isArray(t=c[p[e]||e])?t[0]:t]}))),h=new Set;function g(e,t,n){if("tokenhop"!==s)return!1;let r=`${e}\u0000${t}`;return!h.has(r)&&(h.add(r),console.warn(`[tokenhop] deprecated ${e} "${t}" → use "${n}" (legacy support ends in v2.0.0)`),!0)}let b=/^[A-Z0-9]+(_[A-Z0-9]+)*$/;function v(e){if("string"!=typeof e||!b.test(e))throw Error(`envName: invalid suffix ${JSON.stringify(e)}; expected e.g. "PEER_TOKEN"`);return u.envPrefix+e}let y=/^(?!x-)[a-z0-9]+(-[a-z0-9]+)*$/;function x(e){return m.headerPrefix+function(e,t){if("string"!=typeof e||!y.test(e))throw Error(`${t}: invalid header name ${JSON.stringify(e)}; expected a bare lowercase name like "connection-id"`);return e}(e,"header")}e.exports={BRAND_IDS:i,DEFAULT_BRAND_ID:a,ACTIVE_BRAND_ID:s,isActiveBrand:function(e){return l(e,"isActiveBrand")===s},BRAND:u,LEGACY:c,ACTIVE:m,UPSTREAM_CLIENT_IDS:d,envName:v,readEnv:function(e,t=o.env){let n=v(e);if(void 0!==t[n])return t[n];for(let r of c.envPrefixes){let o=r+e;if(void 0!==t[o])return g("env var",o,n),t[o]}},warnLegacyOnce:g,header:x,legacyHeaderNames:function(e){let t=x(e);return[c.headerPrefix+e].filter(e=>e!==t)}}},36159:(e,t,n)=>{"use strict";n.d(t,{r:()=>r});let r=[{id:"embedding",label:"Embedding",icon:"data_array",endpoint:{method:"POST",path:"/v1/embeddings"}},{id:"image",label:"Text to image",icon:"brush",endpoint:{method:"POST",path:"/v1/images/generations"}},{id:"imageToText",label:"Image to text",icon:"image_search",endpoint:{method:"POST",path:"/v1/images/understanding"}},{id:"tts",label:"Text to speech",icon:"record_voice_over",endpoint:{method:"POST",path:"/v1/audio/speech"}},{id:"stt",label:"Speech to text",icon:"mic",endpoint:{method:"POST",path:"/v1/audio/transcriptions"}},{id:"webSearch",label:"Web search",icon:"travel_explore",endpoint:{method:"POST",path:"/v1/search"}},{id:"webFetch",label:"Web fetch",icon:"language",endpoint:{method:"POST",path:"/v1/web/fetch"}},{id:"video",label:"Video",icon:"movie",endpoint:{method:"POST",path:"/v1/videos/generations"}},{id:"music",label:"Music",icon:"music_note",endpoint:{method:"POST",path:"/v1/audio/music"}}]},65921:(e,t,n)=>{"use strict";n.d(t,{i:()=>i});var r=n(1934);let o=0,i=(0,r.v)((e,t)=>({notifications:[],addNotification:n=>{let r=++o,i={id:r,type:n.type||"info",message:n.message,title:n.title||null,action:n.action??null,accent:n.accent??null,duration:n.duration??5e3,dismissible:n.dismissible??!0,createdAt:Date.now()};return e(e=>({notifications:[...e.notifications,i]})),i.duration>0&&setTimeout(()=>t().removeNotification(r),i.duration),r},removeNotification:t=>{e(e=>({notifications:e.notifications.filter(e=>e.id!==t)}))},clearAll:()=>e({notifications:[]}),success:(e,n)=>t().addNotification(a("success",e,n)),error:(e,n)=>t().addNotification({duration:8e3,...a("error",e,n)}),warning:(e,n)=>t().addNotification(a("warning",e,n)),info:(e,n)=>t().addNotification(a("info",e,n))}));function a(e,t,n){if("string"==typeof n)return{type:e,message:t,title:n};let r={type:e,message:t,...n||{}},{action:o}=r;if(null!=o&&("string"!=typeof o.label||!o.label||"function"!=typeof o.onSelect))throw TypeError("notification action needs a label and onSelect function");return r}},73006:(e,t,n)=>{"use strict";n.d(t,{FE:()=>E,Tl:()=>p,kk:()=>m,oQ:()=>h,wn:()=>C});var r=n(93308);let o={},i=r.Xn,a=[],l=new Map,s=null,u=0;function c(){if("u"<typeof document)return r.Xn;let e=document.cookie.split(";").find(e=>e.trim().startsWith(`${r.CL}=`)),t=e?decodeURIComponent(e.split("=")[1]):r.Xn;return(0,r.QC)(t)}async function d(e){if("en"===e)return{};let t=l.get(e);if(t)return t;try{let t=await fetch(`/i18n/literals/${e}.json`);if(!t.ok)throw Error(`HTTP ${t.status} for ${e}.json`);let n=await t.json();return l.set(e,n),n}catch(e){return console.error("Failed to load translations:",e),{}}}async function f(){let e=++u,t=c(),n=await d(t);return e===u&&(i=t,o=n,!0)}function p(e){if(!e||"string"!=typeof e)return e;let t=e.trim();return t&&"en"!==i&&o[t]||e}function m(){return i}function h(e){return a.push(e),()=>{a=a.filter(t=>t!==e)}}let g=new Set(["script","style","code","pre","colgroup","table","thead","tbody","tfoot","tr","select","datalist","optgroup"]),b=new Set(["script","style","code","pre"]);function v(e){let t=e;for(;t;){if(t.hasAttribute?.("data-i18n-skip")||t.className?.toString?.().includes("material-symbols")||b.has(t.tagName?.toLowerCase()))return!0;t=t.parentElement}return g.has(e.tagName?.toLowerCase())}function y(e){if(!e.nodeValue||!e.nodeValue.trim())return;let t=e.parentElement;if(!t||v(t))return;(void 0===e._originalText||e.nodeValue!==e._translatedText)&&(e._originalText=e.nodeValue);let n=p(e._originalText);e._translatedText=n,n!==e.nodeValue&&(e.nodeValue=n)}let x=["aria-label","placeholder","title","alt"];function k(e){if(!v(e))for(let t of(e._i18nOriginalAttrs||(e._i18nOriginalAttrs={}),e._i18nTranslatedAttrs||(e._i18nTranslatedAttrs={}),x)){if(!e.hasAttribute?.(t))continue;let n=e.getAttribute(t);t in e._i18nOriginalAttrs&&n===e._i18nTranslatedAttrs[t]||(e._i18nOriginalAttrs[t]=n);let r=p(e._i18nOriginalAttrs[t]??"");e._i18nTranslatedAttrs[t]=r||n,r&&r!==n&&e.setAttribute(t,r)}}function w(e){let t;if(!e)return;let n=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,null,!1),r=[];for(;t=n.nextNode();)r.push(t);r.forEach(y),[e,...e.querySelectorAll("[aria-label],[placeholder],[title],[alt]")].forEach(k)}function N(e){for(let t of e)"characterData"===t.type?y(t.target):"attributes"===t.type?k(t.target):t.addedNodes.forEach(e=>{e.nodeType===Node.ELEMENT_NODE?w(e):e.nodeType===Node.TEXT_NODE&&y(e)})}function T(){s||(s=new MutationObserver(N)).observe(document.body,{childList:!0,subtree:!0,characterData:!0,attributes:!0,attributeFilter:x})}async function E(){"en"===c()||await f()&&(w(document.body),T())}async function C(){let e=i;if(await f()){if(a.forEach(e=>{e()}),"en"===i){s?.disconnect(),s=null,"en"!==e&&w(document.body);return}w(document.body),T()}}},81127:(e,t,n)=>{"use strict";n.d(t,{ConfirmDialog:()=>v,ConfirmModal:()=>y,default:()=>b});var r=n(95155),o=n(12115),i=n(14051),a=n.n(i),l=n(31474),s=n(19844),u=n(47929),c=n(92542),d=n(6587);let f=(0,o.createContext)(null);function p({children:e,className:t}){let{titleId:n,onClose:i}=function(e){let t=(0,o.useContext)(f);if(!t)throw Error(`Modal.${e} must be rendered inside <Modal>`);return t}("Header");return(0,r.jsxs)("div",{className:(0,l.cn)("flex shrink-0 items-center justify-between gap-3 border-b border-line py-3 ps-6 pe-3",t),children:[(0,r.jsx)("h2",{id:n,className:"min-w-0 font-display text-lg font-bold text-text",children:e}),i?(0,r.jsx)(d.default,{icon:"close",label:"Close",onClick:i}):null]})}function m({children:e,className:t}){return(0,r.jsx)("div",{className:(0,l.cn)("min-h-0 flex-1 overflow-y-auto px-6 py-5 custom-scrollbar",t),children:e})}function h({children:e,className:t}){return(0,r.jsx)("div",{className:(0,l.cn)("flex shrink-0 flex-wrap items-center justify-end gap-2 border-t border-line px-6 py-4",t),children:e})}p.propTypes={children:a().node,className:a().string},m.propTypes={children:a().node,className:a().string},h.propTypes={children:a().node,className:a().string};let g=new Set([p,m,h]);function b({isOpen:e,onClose:t,title:n,description:i,children:a,footer:c,size:d="md",closeOnOverlay:v=!0,closeOnEscape:y=!0,initialFocusRef:x,"aria-label":k,className:w,showTrafficLights:N}){let T=(0,o.useRef)(null),[E,C]=(0,u.lk)(T),{titleId:O,descriptionId:j}=(0,u.uf)("signal-modal"),P=!!e;if((0,u.K$)(P),(0,u.rM)({container:E,active:P,initialFocusRef:x}),(0,u.s9)({onClose:t,containerRef:T,enabled:P,closeOnEscape:y,closeOnOutside:v}),!P)return null;let _=o.Children.toArray(a).some(e=>(0,o.isValidElement)(e)&&g.has(e.type)),A=!!n||_;return(0,r.jsx)(u.ZL,{children:(0,r.jsx)(f.Provider,{value:{titleId:O,onClose:t},children:(0,r.jsxs)("div",{className:"fixed inset-0 z-50 flex items-center justify-center p-4",children:[(0,r.jsx)("div",{className:"signal-backdrop absolute inset-0","aria-hidden":"true"}),(0,r.jsxs)("div",{ref:C,role:"dialog","aria-modal":"true","aria-labelledby":A&&!k?O:void 0,"aria-label":k,"aria-describedby":i?j:void 0,tabIndex:-1,className:(0,l.cn)("signal-overlay-modal relative flex max-h-[85vh] w-full flex-col overflow-hidden","rounded-2xl border border-line bg-panel text-text shadow-card outline-none",(0,s.FM)(d),w),children:[_?a:(0,r.jsxs)(r.Fragment,{children:[n?(0,r.jsx)(p,{children:n}):null,(0,r.jsxs)(m,{children:[i?(0,r.jsx)("p",{id:j,className:"mb-3 text-sm text-muted",children:i}):null,a]}),c?(0,r.jsx)(h,{children:c}):null]}),_&&i?(0,r.jsx)("p",{id:j,className:"sr-only",children:i}):null]})]})})})}function v({isOpen:e,onClose:t,onConfirm:n,title:i="Confirm",message:a,confirmText:l="Confirm",cancelText:u="Cancel",variant:d="danger",loading:f,error:p}){let[m,h]=(0,o.useState)(!1),[g,y]=(0,o.useState)(null),x=!!f||m,k=p??g,w=(0,o.useRef)(!1),N=(0,o.useRef)(0),T=(0,o.useRef)(e);T.current=e,(0,o.useEffect)(()=>{e||(N.current+=1,w.current=!1,h(!1),y(null))},[e]);let E=()=>{x||(y(null),t?.())},C=async()=>{if(!(0,s.IH)(w,x))return;w.current=!0;let e=N.current+1;N.current=e,y(null),h(!0);try{await n()}catch(t){if(!(0,s.YR)(e,N,T.current))return;y(t?.message||"Something went wrong. Try again.")}finally{(0,s.YR)(e,N,T.current)&&h(!1),N.current===e&&(w.current=!1)}};return(0,r.jsx)(b,{isOpen:e,onClose:E,title:i,description:a,size:"sm",closeOnOverlay:!x,closeOnEscape:!x,footer:(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(c.default,{variant:"ghost",onClick:E,disabled:x,children:u}),(0,r.jsx)(c.default,{variant:"danger"===d?"danger":"primary",onClick:C,loading:x,children:l})]}),children:(0,r.jsx)("div",{"aria-live":"polite",children:k?(0,r.jsx)("p",{role:"alert",className:"rounded-lg bg-err-bg px-3 py-2 text-sm text-err",children:k}):null})})}b.Header=p,b.Body=m,b.Footer=h,b.propTypes={isOpen:a().bool,onClose:a().func,title:a().node,description:a().node,children:a().node,footer:a().node,size:a().oneOf(Object.keys(s.Ts)),closeOnOverlay:a().bool,closeOnEscape:a().bool,initialFocusRef:a().shape({current:a().any}),"aria-label":a().string,className:a().string,showTrafficLights:a().bool},v.propTypes={isOpen:a().bool,onClose:a().func,onConfirm:a().func.isRequired,title:a().node,message:a().node,confirmText:a().string,cancelText:a().string,variant:a().oneOf(["danger","default","primary"]),loading:a().bool,error:a().node};let y=v},90085:(e,t,n)=>{"use strict";n.d(t,{A:()=>l});var r=n(1934),o=n(31692),i=n(28745);function a(e){let t=document.documentElement,n=window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light";"dark"===("system"===e?n:e)?t.classList.add("dark"):t.classList.remove("dark")}let l=(0,r.v)((0,o.Zr)((e,t)=>({theme:i.B2.defaultTheme,setTheme:t=>{e({theme:t}),a(t)},toggleTheme:()=>{let n="dark"===t().theme?"light":"dark";e({theme:n}),a(n)},initTheme:()=>{a(t().theme)}}),{name:i.B2.storageKey}))},92154:(e,t,n)=>{Promise.resolve().then(n.bind(n,22577))},93308:(e,t,n)=>{"use strict";n.d(t,{CL:()=>i,QC:()=>s,Xn:()=>o,YZ:()=>r,kf:()=>l,rB:()=>a});let r=["en","vi","zh-CN","zh-TW","ja","pt-BR","pt-PT","ko","es","de","fr","he","ar","ru","pl","cs","nl","tr","uk","tl","id","km","th","hi","bn","ur","ro","sv","it","el","hu","fi","da","no","fa"],o="en",i="locale",a=["ar","he","fa","ur"],l={en:"English",vi:"Tiếng Việt","zh-CN":"简体中文","zh-TW":"繁體中文",ja:"日本語","pt-BR":"Portugu\xeas (Brasil)","pt-PT":"Portugu\xeas (Portugal)",ko:"한국어",es:"Espa\xf1ol",de:"Deutsch",fr:"Fran\xe7ais",he:"עברית",ar:"العربية",ru:"Русский",pl:"Polski",cs:"Čeština",nl:"Nederlands",tr:"T\xfcrk\xe7e",uk:"Українська",tl:"Tagalog",id:"Indonesia",th:"ไทย",km:"ខ្មែរ",hi:"हिन्दी",bn:"বাংলা",ur:"اردو",ro:"Rom\xe2nă",sv:"Svenska",it:"Italiano",el:"Ελληνικά",hu:"Magyar",fi:"Suomi",da:"Dansk",no:"Norsk",fa:"فارسی"};function s(e){return"zh"===e||"zh-CN"===e?"zh-CN":"en"===e?"en":"vi"===e?"vi":"zh-TW"===e?"zh-TW":"ja"===e?"ja":"pt-BR"===e?"pt-BR":"pt-PT"===e?"pt-PT":"ko"===e?"ko":"es"===e?"es":"de"===e?"de":"fr"===e?"fr":"he"===e?"he":"ar"===e?"ar":"ru"===e?"ru":"pl"===e?"pl":"cs"===e?"cs":"nl"===e?"nl":"tr"===e?"tr":"uk"===e?"uk":"tl"===e?"tl":"id"===e?"id":"th"===e?"th":"km"===e?"km":"hi"===e?"hi":"bn"===e?"bn":"ur"===e?"ur":"ro"===e?"ro":"sv"===e?"sv":"it"===e?"it":"el"===e?"el":"hu"===e?"hu":"fi"===e?"fi":"da"===e?"da":"no"===e?"no":"fa"===e?"fa":o}},93921:(e,t,n)=>{"use strict";n.d(t,{MenuItem:()=>m,default:()=>p});var r=n(95155),o=n(12115),i=n(14051),a=n.n(i),l=n(31474),s=n(4650),u=n(19844),c=n(47929);let d=o.useLayoutEffect,f=e=>"string"==typeof e?.props?.label?e.props.label:e?.props?.children;function p({trigger:e,children:t,open:n,onOpenChange:i,align:a="end",className:m}){let h=(0,o.useRef)(null),g=(0,o.useRef)(null),b=(0,o.useRef)([]),v=(0,o.useRef)({session:null}),{overlayId:y}=(0,c.uf)("signal-menu"),[x,k]=(0,o.useState)(!1),[w,N]=(0,o.useState)(-1),[T,E]=(0,o.useState)(null),[C,O]=(0,o.useState)(null),j=(0,o.useCallback)(e=>{g.current=e,O(e)},[]),P="boolean"==typeof n,_=P?n:x,A=(0,o.useCallback)(e=>{P?i?.(e):k(e),e||(N(-1),v.current.session=null)},[P,i]),S=(0,o.useCallback)(()=>{let e=h.current;e&&"function"==typeof e.focus&&e.focus()},[]),R=(0,o.useCallback)(()=>A(!1),[A]),I=(0,o.useCallback)(()=>{R(),S()},[R,S]);(0,o.useEffect)(()=>{_&&C&&T&&b.current[Math.max(w,0)]?.focus?.()},[_,C,T,w]),(0,c.s9)({onClose:I,containerRef:g,enabled:_,closeOnOutside:!1}),(0,o.useEffect)(()=>{if(!_)return;let e=e=>{g.current?.contains(e.target)||h.current?.contains(e.target)||R()};return document.addEventListener("pointerdown",e),()=>document.removeEventListener("pointerdown",e)},[_,R]);let M=o.Children.toArray(t).filter(o.isValidElement),L=M.map(f),z=M.map(e=>!!e.props.disabled),D=(0,o.useRef)(z);D.current=z;let $=(0,o.useCallback)((e=0)=>{A(!0);let t=(0,u.oQ)(D.current,e<0?0:e);N(t<0?e:t)},[A]);d(()=>{if(!_||!C)return void E(null);let e=()=>{let e=h.current;if(!e)return;let t=e.getBoundingClientRect(),n={width:C.offsetWidth,height:C.offsetHeight},r="rtl"===getComputedStyle(e).direction,o=(0,u.Rg)(t,n,a,r);E({top:o.top,left:o.left})};return e(),window.addEventListener("resize",e),window.addEventListener("scroll",e,!0),()=>{window.removeEventListener("resize",e),window.removeEventListener("scroll",e,!0)}},[_,C,a]);let F=e=>{if("Tab"===e.key){_&&R();return}if("ArrowDown"===e.key)e.preventDefault(),$(0);else if("ArrowUp"===e.key){e.preventDefault(),A(!0);let t=(0,u.oQ)(z,M.length-1,!0);N(t<0?M.length-1:t)}else("Enter"===e.key||" "===e.key)&&(e.preventDefault(),_?R():$(0))},K=(0,o.isValidElement)(e)?e.props["aria-label"]??e.props.label??("string"==typeof e.props.children?e.props.children:void 0):void 0,U={ref:h,"aria-haspopup":"menu","aria-expanded":_,"aria-controls":_?y:void 0,onClick:()=>{_?R():$(0)},onKeyDown:F};return(0,r.jsxs)(r.Fragment,{children:[(0,o.isValidElement)(e)?(0,o.cloneElement)(e,{...U,onClick:t=>{e.props.onClick?.(t),t.defaultPrevented||U.onClick(t)},onKeyDown:t=>{e.props.onKeyDown?.(t),t.defaultPrevented||F(t)}}):(0,r.jsx)("button",{type:"button",...U,className:"inline-flex h-11 items-center justify-center gap-2 rounded-lg border border-line bg-raised px-4 text-sm font-semibold text-text transition-colors duration-150 hover:bg-line/60 focus-visible:outline-none focus-visible:shadow-focus",children:e}),_?(0,r.jsx)(c.ZL,{children:(0,r.jsx)("div",{ref:j,id:y,role:"menu","aria-label":K,"aria-orientation":"vertical",style:T??{visibility:"hidden"},className:(0,l.cn)("signal-overlay-menu fixed z-50 w-60 overflow-hidden rounded-xl border border-line bg-panel py-1 text-text shadow-card",m),children:M.map((e,t)=>(0,o.cloneElement)(e,{key:e.key??t,ref:e=>{b.current[t]=e},tabIndex:t===Math.max(w,0)?0:-1,"data-active":t===Math.max(w,0),onKeyDown:e=>((e,t)=>{if("Tab"===e.key)return void R();if((0,s.JF)(e.key)){e.preventDefault();let n="u">typeof document&&"rtl"===document.dir,r=(0,u.jg)(t,e.key,z,s.lZ,{rtl:n});N(r),b.current[r]?.focus?.();return}if(1===e.key.length&&!e.ctrlKey&&!e.metaKey&&!e.altKey){let n=v.current,{session:r,index:o}=(0,u.sF)(n.session,e.key,e.timeStamp,L.map(e=>String(e??"")),t,z);n.session=r,o!==t&&(N(o),b.current[o]?.focus?.())}})(e,t),onSelect:()=>{e.props.onSelect?.(),I()}}))})}):null]})}p.propTypes={trigger:a().node.isRequired,children:a().node,open:a().bool,onOpenChange:a().func,align:a().oneOf(["start","end"]),className:a().string};let m=function({icon:e,label:t,children:n,trailing:o,danger:i=!1,selected:a=!1,disabled:s=!1,onSelect:u,...c}){return(0,r.jsxs)("button",{type:"button",role:"menuitem","aria-current":a||void 0,disabled:s,onClick:e=>{s?e.preventDefault():u?.(e)},className:(0,l.cn)("flex min-h-11 w-full items-center gap-3 px-4 py-2.5 text-sm transition-colors duration-150","focus-visible:outline-none focus-visible:shadow-focus","disabled:cursor-not-allowed disabled:opacity-50",i?"text-err hover:bg-err-bg":"text-text hover:bg-raised",a&&"bg-coral-bg font-semibold text-coral-ink"),...c,children:[e?(0,r.jsx)("span",{className:"material-symbols-outlined text-[20px] text-muted","aria-hidden":"true",children:e}):null,(0,r.jsx)("span",{className:"min-w-0 flex-1 text-start",children:n??t}),a?(0,r.jsx)("span",{className:"material-symbols-outlined text-[18px]","aria-hidden":"true",children:"check"}):null,o?(0,r.jsx)("span",{className:"shrink-0 text-sm text-muted",children:o}):null]})};m.propTypes={icon:a().string,label:a().string,children:a().node,trailing:a().node,danger:a().bool,selected:a().bool,disabled:a().bool,onSelect:a().func}},96975:(e,t,n)=>{"use strict";n.d(t,{default:()=>d});var r=n(95155),o=n(14051),i=n.n(o),a=n(12115),l=n(7256),s=n(8247);let u={sm:{tile:"size-6 rounded-md",text:"text-[10px]"},md:{tile:"size-9 rounded-[10px]",text:"text-sm"},lg:{tile:"size-14 rounded-[14px]",text:"text-lg"}},c={ok:"bg-ok",warn:"bg-warn",err:"bg-err",info:"bg-sky",live:"bg-lime",neutral:"bg-line"};function d({providerId:e,size:t="md",status:n,brand:o,iconSrc:i,className:f}){let[p,m]=(0,a.useState)(null),h=u[t];if(!h)throw Error(`ProviderTile: unknown size "${t}"`);if(void 0!==n&&!c[n])throw Error(`ProviderTile: unknown status "${n}"`);let g=(0,l.rs)(e),b=o??(0,l.Do)(g),v=p===g?null:i??(0,s.HY)(g),y=v?{style:{backgroundColor:`color-mix(in srgb, ${b.color} 8%, #ffffff)`},className:""}:{style:{backgroundColor:b.color},className:`font-display font-bold text-white shadow-[inset_0_0_0_1px_rgba(255,255,255,0.14)] ${h.text}`};return(0,r.jsxs)("span",{"aria-hidden":"true",title:e,style:y.style,className:`relative inline-flex shrink-0 items-center justify-center ${h.tile} ${y.className}${f?` ${f}`:""}`,children:[v?(0,r.jsx)("img",{src:v,alt:"",loading:"lazy",decoding:"async",className:"size-full rounded-[inherit] object-contain",onError:()=>{(0,s.Kw)(g),m(g)}}):b.monogram,n&&(0,r.jsx)("span",{className:`absolute -end-0.5 -bottom-0.5 size-2.5 rounded-full shadow-[0_0_0_2px_var(--signal-panel)] ${c[n]}`})]})}d.propTypes={providerId:i().string.isRequired,size:i().oneOf(Object.keys(u)),status:i().oneOf(Object.keys(c)),brand:i().shape({color:i().string.isRequired,monogram:i().string.isRequired}),iconSrc:i().string,className:i().string}}},e=>{e.O(0,[1610,4808,9671,2903,2577,8441,3794,7358],()=>e(e.s=92154)),_N_E=e.O()}]);