tokenhop 1.0.0 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (622) hide show
  1. package/app/.next-cli-build/BUILD_ID +1 -1
  2. package/app/.next-cli-build/app-path-routes-manifest.json +4 -4
  3. package/app/.next-cli-build/build-manifest.json +3 -3
  4. package/app/.next-cli-build/prerender-manifest.json +3 -3
  5. package/app/.next-cli-build/react-loadable-manifest.json +43 -43
  6. package/app/.next-cli-build/required-server-files.json +1 -0
  7. package/app/.next-cli-build/server/app/(dashboard)/dashboard/[...missing]/page.js +1 -1
  8. package/app/.next-cli-build/server/app/(dashboard)/dashboard/[...missing]/page.js.nft.json +1 -1
  9. package/app/.next-cli-build/server/app/(dashboard)/dashboard/[...missing]/page_client-reference-manifest.js +1 -1
  10. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js +1 -1
  11. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -1
  12. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  13. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +1 -1
  14. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
  15. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  16. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js +1 -1
  17. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  18. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  19. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js +1 -1
  20. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
  21. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  22. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js +1 -1
  23. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
  24. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  25. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js +1 -1
  26. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  27. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  28. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js +1 -1
  29. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js.nft.json +1 -1
  30. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  31. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js +1 -1
  32. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js.nft.json +1 -1
  33. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  34. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js +1 -1
  35. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js.nft.json +1 -1
  36. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  37. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/page.js +1 -1
  38. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/page.js.nft.json +1 -1
  39. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/page_client-reference-manifest.js +1 -1
  40. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js +1 -1
  41. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js.nft.json +1 -1
  42. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  43. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js +1 -1
  44. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -1
  45. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  46. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js +1 -1
  47. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  48. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  49. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js +1 -1
  50. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
  51. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  52. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js +2 -2
  53. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
  54. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  55. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js +1 -1
  56. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
  57. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  58. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js +1 -1
  59. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
  60. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  61. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js +1 -1
  62. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
  63. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  64. package/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page.js +1 -1
  65. package/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page.js.nft.json +1 -1
  66. package/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
  67. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js +1 -1
  68. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
  69. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  70. package/app/.next-cli-build/server/app/(dashboard)/dashboard/settings/page.js +1 -1
  71. package/app/.next-cli-build/server/app/(dashboard)/dashboard/settings/page.js.nft.json +1 -1
  72. package/app/.next-cli-build/server/app/(dashboard)/dashboard/settings/page_client-reference-manifest.js +1 -1
  73. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js +1 -1
  74. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js.nft.json +1 -1
  75. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
  76. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page.js +1 -1
  77. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page.js.nft.json +1 -1
  78. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  79. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js +1 -1
  80. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
  81. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  82. package/app/.next-cli-build/server/app/(dashboard)/dashboard/ui-kit/page.js +1 -1
  83. package/app/.next-cli-build/server/app/(dashboard)/dashboard/ui-kit/page.js.nft.json +1 -1
  84. package/app/.next-cli-build/server/app/(dashboard)/dashboard/ui-kit/page_client-reference-manifest.js +1 -1
  85. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js +1 -1
  86. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
  87. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  88. package/app/.next-cli-build/server/app/_global-error/page.js.nft.json +1 -1
  89. package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  90. package/app/.next-cli-build/server/app/_global-error.html +1 -1
  91. package/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  92. package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  93. package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  94. package/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  95. package/app/.next-cli-build/server/app/_not-found/page.js +1 -1
  96. package/app/.next-cli-build/server/app/_not-found/page.js.nft.json +1 -1
  97. package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  98. package/app/.next-cli-build/server/app/_not-found.html +1 -1
  99. package/app/.next-cli-build/server/app/_not-found.rsc +5 -5
  100. package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +5 -5
  101. package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +5 -5
  102. package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  103. package/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
  104. package/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
  105. package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
  106. package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
  107. package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
  108. package/app/.next-cli-build/server/app/api/auth/reset-password/route.js.nft.json +1 -1
  109. package/app/.next-cli-build/server/app/api/auth/saml/acs/route.js.nft.json +1 -1
  110. package/app/.next-cli-build/server/app/api/auth/saml/metadata/route.js.nft.json +1 -1
  111. package/app/.next-cli-build/server/app/api/auth/saml/start/route.js.nft.json +1 -1
  112. package/app/.next-cli-build/server/app/api/auth/saml/test/route.js.nft.json +1 -1
  113. package/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
  114. package/app/.next-cli-build/server/app/api/cli-tool-settings/[toolId]/route.js.nft.json +1 -1
  115. package/app/.next-cli-build/server/app/api/cli-tool-settings/route.js.nft.json +1 -1
  116. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js +4 -4
  117. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
  118. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
  119. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  120. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
  121. package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js +2 -2
  122. package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
  123. package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js +2 -2
  124. package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js.nft.json +1 -1
  125. package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js +3 -3
  126. package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
  127. package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js +2 -2
  128. package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
  129. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js +1 -1
  130. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js.nft.json +1 -1
  131. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js +2 -2
  132. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js.nft.json +1 -1
  133. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js +1 -1
  134. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
  135. package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js +3 -3
  136. package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js.nft.json +1 -1
  137. package/app/.next-cli-build/server/app/api/cli-tools/devin-settings/route.js +2 -2
  138. package/app/.next-cli-build/server/app/api/cli-tools/devin-settings/route.js.nft.json +1 -1
  139. package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js +2 -2
  140. package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
  141. package/app/.next-cli-build/server/app/api/cli-tools/grok-build-settings/route.js +2 -2
  142. package/app/.next-cli-build/server/app/api/cli-tools/grok-build-settings/route.js.nft.json +1 -1
  143. package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js +3 -3
  144. package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js.nft.json +1 -1
  145. package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js +3 -3
  146. package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js.nft.json +1 -1
  147. package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js +2 -2
  148. package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js.nft.json +1 -1
  149. package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
  150. package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
  151. package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js +2 -2
  152. package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js.nft.json +1 -1
  153. package/app/.next-cli-build/server/app/api/combos/[id]/headroom/route.js +1 -1
  154. package/app/.next-cli-build/server/app/api/combos/[id]/headroom/route.js.nft.json +1 -1
  155. package/app/.next-cli-build/server/app/api/combos/[id]/route.js +1 -1
  156. package/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
  157. package/app/.next-cli-build/server/app/api/combos/[id]/test/route.js +1 -1
  158. package/app/.next-cli-build/server/app/api/combos/[id]/test/route.js.nft.json +1 -1
  159. package/app/.next-cli-build/server/app/api/combos/route.js +1 -1
  160. package/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
  161. package/app/.next-cli-build/server/app/api/gateway/status/route.js.nft.json +1 -1
  162. package/app/.next-cli-build/server/app/api/headroom/extras/route.js.nft.json +1 -1
  163. package/app/.next-cli-build/server/app/api/headroom/proxy/[...path]/route.js.nft.json +1 -1
  164. package/app/.next-cli-build/server/app/api/headroom/restart/route.js.nft.json +1 -1
  165. package/app/.next-cli-build/server/app/api/headroom/start/route.js.nft.json +1 -1
  166. package/app/.next-cli-build/server/app/api/headroom/status/route.js.nft.json +1 -1
  167. package/app/.next-cli-build/server/app/api/headroom/stop/route.js.nft.json +1 -1
  168. package/app/.next-cli-build/server/app/api/health/route.js.nft.json +1 -1
  169. package/app/.next-cli-build/server/app/api/home/live-routes/route.js.nft.json +1 -1
  170. package/app/.next-cli-build/server/app/api/home/quota/route.js +1 -1
  171. package/app/.next-cli-build/server/app/api/home/quota/route.js.nft.json +1 -1
  172. package/app/.next-cli-build/server/app/api/home/summary/route.js.nft.json +1 -1
  173. package/app/.next-cli-build/server/app/api/init/route.js.nft.json +1 -1
  174. package/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
  175. package/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
  176. package/app/.next-cli-build/server/app/api/locale/route.js.nft.json +1 -1
  177. package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
  178. package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
  179. package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
  180. package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js +1 -1
  181. package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
  182. package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
  183. package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
  184. package/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js +1 -1
  185. package/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -1
  186. package/app/.next-cli-build/server/app/api/models/alias/route.js +1 -1
  187. package/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
  188. package/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
  189. package/app/.next-cli-build/server/app/api/models/catalog-sync/route.js +1 -1
  190. package/app/.next-cli-build/server/app/api/models/catalog-sync/route.js.nft.json +1 -1
  191. package/app/.next-cli-build/server/app/api/models/custom/route.js +1 -1
  192. package/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
  193. package/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
  194. package/app/.next-cli-build/server/app/api/models/route.js +1 -1
  195. package/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
  196. package/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
  197. package/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
  198. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js +1 -1
  199. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  200. package/app/.next-cli-build/server/app/api/oauth/codex/bulk-import/route.js +1 -1
  201. package/app/.next-cli-build/server/app/api/oauth/codex/bulk-import/route.js.nft.json +1 -1
  202. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js +1 -1
  203. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
  204. package/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
  205. package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js +1 -1
  206. package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  207. package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
  208. package/app/.next-cli-build/server/app/api/oauth/grok-cli/bulk-import/route.js.nft.json +1 -1
  209. package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
  210. package/app/.next-cli-build/server/app/api/oauth/kiro/api-key/route.js +1 -1
  211. package/app/.next-cli-build/server/app/api/oauth/kiro/api-key/route.js.nft.json +1 -1
  212. package/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -1
  213. package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js +1 -1
  214. package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  215. package/app/.next-cli-build/server/app/api/oauth/kiro/import-cli-proxy/route.js.nft.json +1 -1
  216. package/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js +1 -1
  217. package/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +1 -1
  218. package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js +1 -1
  219. package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  220. package/app/.next-cli-build/server/app/api/oauth/xiaomi-mimo/api-key/route.js.nft.json +1 -1
  221. package/app/.next-cli-build/server/app/api/oauth/xiaomi-mimo/auto-import/route.js +1 -1
  222. package/app/.next-cli-build/server/app/api/oauth/xiaomi-mimo/auto-import/route.js.nft.json +1 -1
  223. package/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
  224. package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  225. package/app/.next-cli-build/server/app/api/provider-nodes/route.js +1 -1
  226. package/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
  227. package/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js +1 -1
  228. package/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js.nft.json +1 -1
  229. package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js +1 -1
  230. package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  231. package/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
  232. package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js +1 -1
  233. package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  234. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
  235. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  236. package/app/.next-cli-build/server/app/api/providers/client/route.js +1 -1
  237. package/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
  238. package/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js.nft.json +1 -1
  239. package/app/.next-cli-build/server/app/api/providers/route.js +1 -1
  240. package/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
  241. package/app/.next-cli-build/server/app/api/providers/suggested-models/route.js.nft.json +1 -1
  242. package/app/.next-cli-build/server/app/api/providers/test-batch/route.js +1 -1
  243. package/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  244. package/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
  245. package/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
  246. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
  247. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
  248. package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
  249. package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
  250. package/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
  251. package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
  252. package/app/.next-cli-build/server/app/api/pxpipe/health/route.js.nft.json +1 -1
  253. package/app/.next-cli-build/server/app/api/pxpipe/install/route.js.nft.json +1 -1
  254. package/app/.next-cli-build/server/app/api/pxpipe/logs/route.js.nft.json +1 -1
  255. package/app/.next-cli-build/server/app/api/pxpipe/restart/route.js.nft.json +1 -1
  256. package/app/.next-cli-build/server/app/api/pxpipe/start/route.js.nft.json +1 -1
  257. package/app/.next-cli-build/server/app/api/pxpipe/stats/route.js.nft.json +1 -1
  258. package/app/.next-cli-build/server/app/api/pxpipe/status/route.js.nft.json +1 -1
  259. package/app/.next-cli-build/server/app/api/pxpipe/stop/route.js.nft.json +1 -1
  260. package/app/.next-cli-build/server/app/api/settings/config/export/route.js.nft.json +1 -1
  261. package/app/.next-cli-build/server/app/api/settings/config/import/route.js +1 -1
  262. package/app/.next-cli-build/server/app/api/settings/config/import/route.js.nft.json +1 -1
  263. package/app/.next-cli-build/server/app/api/settings/database/route.js +1 -1
  264. package/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
  265. package/app/.next-cli-build/server/app/api/settings/environment/route.js.nft.json +1 -1
  266. package/app/.next-cli-build/server/app/api/settings/proxy-test/route.js.nft.json +1 -1
  267. package/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
  268. package/app/.next-cli-build/server/app/api/settings/route.js +1 -1
  269. package/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
  270. package/app/.next-cli-build/server/app/api/shell/savings-milestone/route.js.nft.json +1 -1
  271. package/app/.next-cli-build/server/app/api/shell/summary/route.js +1 -1
  272. package/app/.next-cli-build/server/app/api/shell/summary/route.js.nft.json +1 -1
  273. package/app/.next-cli-build/server/app/api/shutdown/route.js.nft.json +1 -1
  274. package/app/.next-cli-build/server/app/api/tags/route.js.nft.json +1 -1
  275. package/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
  276. package/app/.next-cli-build/server/app/api/translator/console-logs/route.js.nft.json +1 -1
  277. package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
  278. package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -1
  279. package/app/.next-cli-build/server/app/api/translator/load/route.js.nft.json +1 -1
  280. package/app/.next-cli-build/server/app/api/translator/save/route.js.nft.json +1 -1
  281. package/app/.next-cli-build/server/app/api/translator/send/route.js +9 -1
  282. package/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
  283. package/app/.next-cli-build/server/app/api/translator/translate/route.js +9 -1
  284. package/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
  285. package/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  286. package/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  287. package/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
  288. package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
  289. package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
  290. package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
  291. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js +2 -2
  292. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
  293. package/app/.next-cli-build/server/app/api/usage/[connectionId]/codex-reset-credits/route.js +9 -1
  294. package/app/.next-cli-build/server/app/api/usage/[connectionId]/codex-reset-credits/route.js.nft.json +1 -1
  295. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js +9 -1
  296. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  297. package/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
  298. package/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
  299. package/app/.next-cli-build/server/app/api/usage/last-activity/route.js.nft.json +1 -1
  300. package/app/.next-cli-build/server/app/api/usage/logs/route.js.nft.json +1 -1
  301. package/app/.next-cli-build/server/app/api/usage/providers/route.js +1 -1
  302. package/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
  303. package/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
  304. package/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  305. package/app/.next-cli-build/server/app/api/usage/savings/route.js.nft.json +1 -1
  306. package/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
  307. package/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
  308. package/app/.next-cli-build/server/app/api/v1/api/chat/route.js +1 -1
  309. package/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  310. package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js +1 -1
  311. package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  312. package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js +1 -1
  313. package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  314. package/app/.next-cli-build/server/app/api/v1/audio/voices/route.js +1 -1
  315. package/app/.next-cli-build/server/app/api/v1/audio/voices/route.js.nft.json +1 -1
  316. package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js +1 -1
  317. package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  318. package/app/.next-cli-build/server/app/api/v1/embeddings/route.js +9 -1
  319. package/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  320. package/app/.next-cli-build/server/app/api/v1/images/generations/route.js +2 -2
  321. package/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  322. package/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js +1 -1
  323. package/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -1
  324. package/app/.next-cli-build/server/app/api/v1/messages/route.js +1 -1
  325. package/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
  326. package/app/.next-cli-build/server/app/api/v1/models/[...model]/route.js +1 -1
  327. package/app/.next-cli-build/server/app/api/v1/models/[...model]/route.js.nft.json +1 -1
  328. package/app/.next-cli-build/server/app/api/v1/models/info/route.js +1 -1
  329. package/app/.next-cli-build/server/app/api/v1/models/info/route.js.nft.json +1 -1
  330. package/app/.next-cli-build/server/app/api/v1/models/route.js +1 -1
  331. package/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
  332. package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js +1 -1
  333. package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
  334. package/app/.next-cli-build/server/app/api/v1/responses/route.js +1 -1
  335. package/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
  336. package/app/.next-cli-build/server/app/api/v1/route.js +1 -1
  337. package/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
  338. package/app/.next-cli-build/server/app/api/v1/search/route.js +2 -2
  339. package/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
  340. package/app/.next-cli-build/server/app/api/v1/videos/[id]/route.js +1 -1
  341. package/app/.next-cli-build/server/app/api/v1/videos/[id]/route.js.nft.json +1 -1
  342. package/app/.next-cli-build/server/app/api/v1/videos/edits/route.js +1 -1
  343. package/app/.next-cli-build/server/app/api/v1/videos/edits/route.js.nft.json +1 -1
  344. package/app/.next-cli-build/server/app/api/v1/videos/extensions/route.js +1 -1
  345. package/app/.next-cli-build/server/app/api/v1/videos/extensions/route.js.nft.json +1 -1
  346. package/app/.next-cli-build/server/app/api/v1/videos/generations/route.js +1 -1
  347. package/app/.next-cli-build/server/app/api/v1/videos/generations/route.js.nft.json +1 -1
  348. package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js +1 -1
  349. package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
  350. package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js +1 -1
  351. package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  352. package/app/.next-cli-build/server/app/api/v1beta/models/route.js +1 -1
  353. package/app/.next-cli-build/server/app/api/v1beta/models/route.js.nft.json +1 -1
  354. package/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
  355. package/app/.next-cli-build/server/app/callback/page.js +1 -1
  356. package/app/.next-cli-build/server/app/callback/page.js.nft.json +1 -1
  357. package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  358. package/app/.next-cli-build/server/app/callback.html +1 -1
  359. package/app/.next-cli-build/server/app/callback.rsc +5 -5
  360. package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +5 -5
  361. package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +2 -2
  362. package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +5 -5
  363. package/app/.next-cli-build/server/app/dashboard/basic-chat.html +2 -2
  364. package/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +11 -11
  365. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +11 -11
  366. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +11 -11
  367. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +2 -2
  368. package/app/.next-cli-build/server/app/dashboard/combos.html +2 -2
  369. package/app/.next-cli-build/server/app/dashboard/combos.rsc +11 -11
  370. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +11 -11
  371. package/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +11 -11
  372. package/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +2 -2
  373. package/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
  374. package/app/.next-cli-build/server/app/dashboard/endpoint.rsc +9 -9
  375. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +8 -8
  376. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +9 -9
  377. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +2 -2
  378. package/app/.next-cli-build/server/app/dashboard/media-providers/web.html +2 -2
  379. package/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +11 -11
  380. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +11 -11
  381. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +11 -11
  382. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +2 -2
  383. package/app/.next-cli-build/server/app/dashboard/media-providers.html +1 -1
  384. package/app/.next-cli-build/server/app/dashboard/media-providers.rsc +10 -10
  385. package/app/.next-cli-build/server/app/dashboard/media-providers.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/__PAGE__.segment.rsc +10 -10
  386. package/app/.next-cli-build/server/app/dashboard/media-providers.segments/_full.segment.rsc +10 -10
  387. package/app/.next-cli-build/server/app/dashboard/media-providers.segments/_tree.segment.rsc +2 -2
  388. package/app/.next-cli-build/server/app/dashboard/mitm.html +2 -2
  389. package/app/.next-cli-build/server/app/dashboard/mitm.rsc +11 -11
  390. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +11 -11
  391. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +11 -11
  392. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +2 -2
  393. package/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
  394. package/app/.next-cli-build/server/app/dashboard/profile.rsc +10 -10
  395. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +10 -10
  396. package/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +10 -10
  397. package/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +2 -2
  398. package/app/.next-cli-build/server/app/dashboard/providers/new.html +2 -2
  399. package/app/.next-cli-build/server/app/dashboard/providers/new.rsc +11 -11
  400. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +11 -11
  401. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +11 -11
  402. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +2 -2
  403. package/app/.next-cli-build/server/app/dashboard/proxy-pools.html +2 -2
  404. package/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +10 -10
  405. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +10 -10
  406. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +10 -10
  407. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +2 -2
  408. package/app/.next-cli-build/server/app/dashboard/pxpipe.html +2 -2
  409. package/app/.next-cli-build/server/app/dashboard/pxpipe.rsc +10 -10
  410. package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +10 -10
  411. package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_full.segment.rsc +10 -10
  412. package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +2 -2
  413. package/app/.next-cli-build/server/app/dashboard/quota.html +1 -1
  414. package/app/.next-cli-build/server/app/dashboard/quota.rsc +11 -11
  415. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +11 -11
  416. package/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +11 -11
  417. package/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +2 -2
  418. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js +1 -1
  419. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js.nft.json +1 -1
  420. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  421. package/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  422. package/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +5 -5
  423. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +5 -5
  424. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
  425. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +5 -5
  426. package/app/.next-cli-build/server/app/dashboard/settings.html +2 -2
  427. package/app/.next-cli-build/server/app/dashboard/settings.rsc +11 -11
  428. package/app/.next-cli-build/server/app/dashboard/settings.segments/!KGRhc2hib2FyZCk/dashboard/settings/__PAGE__.segment.rsc +11 -11
  429. package/app/.next-cli-build/server/app/dashboard/settings.segments/_full.segment.rsc +11 -11
  430. package/app/.next-cli-build/server/app/dashboard/settings.segments/_tree.segment.rsc +2 -2
  431. package/app/.next-cli-build/server/app/dashboard/skills.html +2 -2
  432. package/app/.next-cli-build/server/app/dashboard/skills.rsc +8 -8
  433. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +8 -8
  434. package/app/.next-cli-build/server/app/dashboard/skills.segments/_full.segment.rsc +8 -8
  435. package/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.segment.rsc +2 -2
  436. package/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
  437. package/app/.next-cli-build/server/app/dashboard/token-saver.rsc +11 -11
  438. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +11 -11
  439. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +11 -11
  440. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +2 -2
  441. package/app/.next-cli-build/server/app/dashboard/translator.html +2 -2
  442. package/app/.next-cli-build/server/app/dashboard/translator.rsc +11 -11
  443. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +11 -11
  444. package/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +11 -11
  445. package/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +2 -2
  446. package/app/.next-cli-build/server/app/dashboard/ui-kit.html +1 -1
  447. package/app/.next-cli-build/server/app/dashboard/ui-kit.rsc +10 -10
  448. package/app/.next-cli-build/server/app/dashboard/ui-kit.segments/!KGRhc2hib2FyZCk/dashboard/ui-kit/__PAGE__.segment.rsc +10 -10
  449. package/app/.next-cli-build/server/app/dashboard/ui-kit.segments/_full.segment.rsc +10 -10
  450. package/app/.next-cli-build/server/app/dashboard/ui-kit.segments/_tree.segment.rsc +2 -2
  451. package/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
  452. package/app/.next-cli-build/server/app/dashboard/usage.rsc +11 -11
  453. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +11 -11
  454. package/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +11 -11
  455. package/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +2 -2
  456. package/app/.next-cli-build/server/app/dashboard.html +1 -1
  457. package/app/.next-cli-build/server/app/dashboard.rsc +11 -11
  458. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +11 -11
  459. package/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +11 -11
  460. package/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +2 -2
  461. package/app/.next-cli-build/server/app/index.html +1 -1
  462. package/app/.next-cli-build/server/app/index.rsc +5 -5
  463. package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +5 -5
  464. package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +5 -5
  465. package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +2 -2
  466. package/app/.next-cli-build/server/app/landing/page.js +1 -1
  467. package/app/.next-cli-build/server/app/landing/page.js.nft.json +1 -1
  468. package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  469. package/app/.next-cli-build/server/app/landing.html +1 -1
  470. package/app/.next-cli-build/server/app/landing.rsc +6 -6
  471. package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +6 -6
  472. package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +2 -2
  473. package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +6 -6
  474. package/app/.next-cli-build/server/app/login/page.js +1 -1
  475. package/app/.next-cli-build/server/app/login/page.js.nft.json +1 -1
  476. package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  477. package/app/.next-cli-build/server/app/login.html +1 -1
  478. package/app/.next-cli-build/server/app/login.rsc +5 -5
  479. package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +5 -5
  480. package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +2 -2
  481. package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +5 -5
  482. package/app/.next-cli-build/server/app/manifest.webmanifest/route.js.nft.json +1 -1
  483. package/app/.next-cli-build/server/app/page.js +1 -1
  484. package/app/.next-cli-build/server/app/page.js.nft.json +1 -1
  485. package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  486. package/app/.next-cli-build/server/app/skills/[...slug]/route.js.nft.json +1 -1
  487. package/app/.next-cli-build/server/app-paths-manifest.json +4 -4
  488. package/app/.next-cli-build/server/chunks/1004.js +1 -0
  489. package/app/.next-cli-build/server/chunks/1152.js +1 -1
  490. package/app/.next-cli-build/server/chunks/1215.js +1 -0
  491. package/app/.next-cli-build/server/chunks/1336.js +1 -1
  492. package/app/.next-cli-build/server/chunks/1432.js +1 -1
  493. package/app/.next-cli-build/server/chunks/1533.js +1 -1
  494. package/app/.next-cli-build/server/chunks/2217.js +1 -1
  495. package/app/.next-cli-build/server/chunks/2380.js +7 -7
  496. package/app/.next-cli-build/server/chunks/24.js +1 -1
  497. package/app/.next-cli-build/server/chunks/2460.js +1 -1
  498. package/app/.next-cli-build/server/chunks/257.js +10 -0
  499. package/app/.next-cli-build/server/chunks/2592.js +1 -1
  500. package/app/.next-cli-build/server/chunks/2705.js +9 -0
  501. package/app/.next-cli-build/server/chunks/318.js +9 -16
  502. package/app/.next-cli-build/server/chunks/3593.js +1 -1
  503. package/app/.next-cli-build/server/chunks/3919.js +1 -1
  504. package/app/.next-cli-build/server/chunks/3943.js +1 -1
  505. package/app/.next-cli-build/server/chunks/4123.js +1 -1
  506. package/app/.next-cli-build/server/chunks/4125.js +1 -1
  507. package/app/.next-cli-build/server/chunks/4334.js +1 -1
  508. package/app/.next-cli-build/server/chunks/4406.js +2 -2
  509. package/app/.next-cli-build/server/chunks/4521.js +1 -1
  510. package/app/.next-cli-build/server/chunks/4730.js +1 -1
  511. package/app/.next-cli-build/server/chunks/4780.js +1 -1
  512. package/app/.next-cli-build/server/chunks/5055.js +1 -0
  513. package/app/.next-cli-build/server/chunks/5230.js +1 -0
  514. package/app/.next-cli-build/server/chunks/{1026.js → 5260.js} +1 -1
  515. package/app/.next-cli-build/server/chunks/5335.js +1 -0
  516. package/app/.next-cli-build/server/chunks/5559.js +9 -0
  517. package/app/.next-cli-build/server/chunks/5615.js +1 -1
  518. package/app/.next-cli-build/server/chunks/5649.js +1 -0
  519. package/app/.next-cli-build/server/chunks/5765.js +1 -0
  520. package/app/.next-cli-build/server/chunks/5827.js +1 -0
  521. package/app/.next-cli-build/server/chunks/5869.js +9 -0
  522. package/app/.next-cli-build/server/chunks/5908.js +1 -0
  523. package/app/.next-cli-build/server/chunks/620.js +1 -0
  524. package/app/.next-cli-build/server/chunks/6252.js +1 -1
  525. package/app/.next-cli-build/server/chunks/6328.js +1 -0
  526. package/app/.next-cli-build/server/chunks/6355.js +1 -0
  527. package/app/.next-cli-build/server/chunks/6493.js +1 -0
  528. package/app/.next-cli-build/server/chunks/6496.js +1 -1
  529. package/app/.next-cli-build/server/chunks/7211.js +1 -1
  530. package/app/.next-cli-build/server/chunks/7485.js +9 -0
  531. package/app/.next-cli-build/server/chunks/7616.js +1 -1
  532. package/app/.next-cli-build/server/chunks/7695.js +1 -0
  533. package/app/.next-cli-build/server/chunks/7716.js +1 -1
  534. package/app/.next-cli-build/server/chunks/7819.js +1 -1
  535. package/app/.next-cli-build/server/chunks/7828.js +1 -1
  536. package/app/.next-cli-build/server/chunks/8171.js +1 -1
  537. package/app/.next-cli-build/server/chunks/8255.js +1 -1
  538. package/app/.next-cli-build/server/chunks/8261.js +1 -0
  539. package/app/.next-cli-build/server/chunks/8416.js +1 -1
  540. package/app/.next-cli-build/server/chunks/878.js +1 -0
  541. package/app/.next-cli-build/server/chunks/8895.js +13 -13
  542. package/app/.next-cli-build/server/chunks/8954.js +1 -0
  543. package/app/.next-cli-build/server/chunks/8988.js +1 -0
  544. package/app/.next-cli-build/server/chunks/9016.js +9 -0
  545. package/app/.next-cli-build/server/chunks/9243.js +1 -0
  546. package/app/.next-cli-build/server/chunks/9326.js +1 -0
  547. package/app/.next-cli-build/server/chunks/9343.js +1 -1
  548. package/app/.next-cli-build/server/chunks/9421.js +1 -1
  549. package/app/.next-cli-build/server/chunks/9489.js +3 -0
  550. package/app/.next-cli-build/server/chunks/9578.js +1 -1
  551. package/app/.next-cli-build/server/chunks/9594.js +1 -0
  552. package/app/.next-cli-build/server/chunks/965.js +1 -1
  553. package/app/.next-cli-build/server/chunks/9899.js +1 -1
  554. package/app/.next-cli-build/server/instrumentation.js +1 -1
  555. package/app/.next-cli-build/server/instrumentation.js.nft.json +1 -1
  556. package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  557. package/app/.next-cli-build/server/middleware-react-loadable-manifest.js +1 -1
  558. package/app/.next-cli-build/server/middleware.js.nft.json +1 -1
  559. package/app/.next-cli-build/server/pages/404.html +1 -1
  560. package/app/.next-cli-build/server/pages/500.html +1 -1
  561. package/app/.next-cli-build/server/server-reference-manifest.js +1 -1
  562. package/app/.next-cli-build/server/server-reference-manifest.json +1 -1
  563. package/app/.next-cli-build/static/chunks/{198-145d0ed2ec3c54f5.js → 198-7c5bbea89ef8bc14.js} +1 -1
  564. package/app/.next-cli-build/static/chunks/{3670-e7a22341025498f8.js → 3670-d6dc44bc181c9b8a.js} +1 -1
  565. package/app/.next-cli-build/static/chunks/5014-a5d960f4c6bc6297.js +1 -0
  566. package/app/.next-cli-build/static/chunks/{6174.18e2c57e892d721a.js → 6174.a18fedfa3d765b1e.js} +1 -1
  567. package/app/.next-cli-build/static/chunks/6448-71a8c2ac8d9ecc09.js +1 -0
  568. package/app/.next-cli-build/static/chunks/7899-a12f962af02edf7f.js +1 -0
  569. package/app/.next-cli-build/static/chunks/8105-71d1aea9708976db.js +1 -0
  570. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/combos/{page-8147ae8fa9c04381.js → page-42bfc760fbea3b96.js} +1 -1
  571. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/console-log/{page-9cbf62f78701882a.js → page-1df6ad7d9adfc2a7.js} +1 -1
  572. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/[id]/{page-5f91e148400a241b.js → page-59ee0b412f972940.js} +3 -3
  573. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/new/{page-dac4ab98fc595054.js → page-25d06b77bd1a5edb.js} +1 -1
  574. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/page-463f9fa33be9426a.js +1 -0
  575. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/translator/{page-06f4e52ee3b63f82.js → page-5bb99ecaf48bde39.js} +1 -1
  576. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/ui-kit/{page-6c982cc50b6af101.js → page-1bc393f267badc04.js} +1 -1
  577. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/usage/page-923f864ec0be0fc8.js +1 -0
  578. package/app/.next-cli-build/static/chunks/app/(dashboard)/{layout-dd9d1e49b2f69197.js → layout-a94f45e334f1841b.js} +1 -1
  579. package/app/.next-cli-build/static/chunks/app/landing/{page-02b7bfebd65c41f1.js → page-98f05847e3372b16.js} +1 -1
  580. package/app/.next-cli-build/static/chunks/app/{layout-c266f1acedfb4651.js → layout-29d74e164758a126.js} +1 -1
  581. package/app/.next-cli-build/static/chunks/webpack-1e19a4b05298b49d.js +1 -0
  582. package/app/.next-cli-build/static/css/{9f0b95a0d0bc5e51.css → ffa1d9c3cbb4e959.css} +1 -1
  583. package/app/custom-server.js +0 -37
  584. package/app/package.json +4 -5
  585. package/app/server.js +1 -1
  586. package/app/src/lib/db/adapters/sqljsAdapter.js +39 -4
  587. package/app/src/lib/oauth/services/xai.js +19 -12
  588. package/app/src/shared/services/quotaAutoPing.js +43 -8
  589. package/app/src/shared/services/quotaSnapshotPoller.js +2 -1
  590. package/app/src/sse/services/backgroundTokenRefresh.js +13 -1
  591. package/package.json +1 -1
  592. package/src/cli/menus/combos.js +3 -1
  593. package/app/.next-cli-build/server/chunks/1764.js +0 -1
  594. package/app/.next-cli-build/server/chunks/2384.js +0 -1
  595. package/app/.next-cli-build/server/chunks/3093.js +0 -1
  596. package/app/.next-cli-build/server/chunks/3306.js +0 -1
  597. package/app/.next-cli-build/server/chunks/331.js +0 -1
  598. package/app/.next-cli-build/server/chunks/3414.js +0 -1
  599. package/app/.next-cli-build/server/chunks/3558.js +0 -1
  600. package/app/.next-cli-build/server/chunks/3586.js +0 -1
  601. package/app/.next-cli-build/server/chunks/3676.js +0 -1
  602. package/app/.next-cli-build/server/chunks/4037.js +0 -1
  603. package/app/.next-cli-build/server/chunks/4199.js +0 -2
  604. package/app/.next-cli-build/server/chunks/4278.js +0 -1
  605. package/app/.next-cli-build/server/chunks/6158.js +0 -1
  606. package/app/.next-cli-build/server/chunks/6354.js +0 -1
  607. package/app/.next-cli-build/server/chunks/6734.js +0 -1
  608. package/app/.next-cli-build/server/chunks/6769.js +0 -1
  609. package/app/.next-cli-build/server/chunks/7261.js +0 -1
  610. package/app/.next-cli-build/server/chunks/7901.js +0 -1
  611. package/app/.next-cli-build/server/chunks/8372.js +0 -1
  612. package/app/.next-cli-build/server/chunks/8635.js +0 -3
  613. package/app/.next-cli-build/server/chunks/994.js +0 -1
  614. package/app/.next-cli-build/static/chunks/5014-a441cde708542153.js +0 -1
  615. package/app/.next-cli-build/static/chunks/6448-4eabf683083596e6.js +0 -1
  616. package/app/.next-cli-build/static/chunks/7899-e6a70cb9d3684f7f.js +0 -1
  617. package/app/.next-cli-build/static/chunks/8105-5c7e7c73b4bd532d.js +0 -1
  618. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/page-9fadf2c38665c20c.js +0 -1
  619. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/usage/page-7571538830147099.js +0 -1
  620. package/app/.next-cli-build/static/chunks/webpack-187fa25c98ba99f3.js +0 -1
  621. /package/app/.next-cli-build/static/{3Qm_WgU2xvFJ9U_G7SKhT → gdVYVwJMM6JES9Y1KPQyw}/_buildManifest.js +0 -0
  622. /package/app/.next-cli-build/static/{3Qm_WgU2xvFJ9U_G7SKhT → gdVYVwJMM6JES9Y1KPQyw}/_ssgManifest.js +0 -0
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1931,8460],{1934:(e,t,s)=>{"use strict";s.d(t,{v:()=>i});var a=s(12115);let n=e=>{let t,s=new Set,a=(e,a)=>{let n="function"==typeof e?e(t):e;if(!Object.is(n,t)){let e=t;t=(null!=a?a:"object"!=typeof n||null===n)?n:Object.assign({},t,n),s.forEach(s=>s(t,e))}},n=()=>t,r={setState:a,getState:n,getInitialState:()=>i,subscribe:e=>(s.add(e),()=>s.delete(e))},i=t=e(a,n,r);return r},r=e=>{let t=e?n(e):n,s=e=>(function(e,t=e=>e){let s=a.useSyncExternalStore(e.subscribe,a.useCallback(()=>t(e.getState()),[e,t]),a.useCallback(()=>t(e.getInitialState()),[e,t]));return a.useDebugValue(s),s})(t,e);return Object.assign(s,t),s},i=e=>e?r(e):r},8428:(e,t,s)=>{Promise.resolve().then(s.bind(s,47928)),Promise.resolve().then(s.bind(s,96748)),Promise.resolve().then(s.bind(s,56061)),Promise.resolve().then(s.bind(s,92542)),Promise.resolve().then(s.bind(s,56006)),Promise.resolve().then(s.bind(s,29366)),Promise.resolve().then(s.bind(s,84588)),Promise.resolve().then(s.bind(s,28164)),Promise.resolve().then(s.bind(s,97556)),Promise.resolve().then(s.bind(s,9911)),Promise.resolve().then(s.bind(s,45455)),Promise.resolve().then(s.bind(s,82534)),Promise.resolve().then(s.bind(s,42755)),Promise.resolve().then(s.bind(s,26506)),Promise.resolve().then(s.bind(s,10185)),Promise.resolve().then(s.bind(s,58897)),Promise.resolve().then(s.bind(s,29155)),Promise.resolve().then(s.bind(s,30815)),Promise.resolve().then(s.bind(s,29499)),Promise.resolve().then(s.bind(s,71252)),Promise.resolve().then(s.bind(s,99312)),Promise.resolve().then(s.bind(s,98582)),Promise.resolve().then(s.bind(s,53655)),Promise.resolve().then(s.bind(s,95088)),Promise.resolve().then(s.bind(s,29480)),Promise.resolve().then(s.bind(s,80752)),Promise.resolve().then(s.bind(s,6587)),Promise.resolve().then(s.bind(s,23936)),Promise.resolve().then(s.bind(s,11910)),Promise.resolve().then(s.bind(s,15729)),Promise.resolve().then(s.bind(s,46318)),Promise.resolve().then(s.bind(s,62899)),Promise.resolve().then(s.bind(s,94230)),Promise.resolve().then(s.bind(s,21931)),Promise.resolve().then(s.bind(s,22577)),Promise.resolve().then(s.bind(s,25086)),Promise.resolve().then(s.bind(s,28815)),Promise.resolve().then(s.bind(s,28058)),Promise.resolve().then(s.bind(s,93921)),Promise.resolve().then(s.bind(s,44863)),Promise.resolve().then(s.bind(s,81127)),Promise.resolve().then(s.bind(s,86465)),Promise.resolve().then(s.bind(s,96238)),Promise.resolve().then(s.bind(s,4823)),Promise.resolve().then(s.bind(s,61640)),Promise.resolve().then(s.bind(s,91348)),Promise.resolve().then(s.bind(s,34912)),Promise.resolve().then(s.bind(s,50611)),Promise.resolve().then(s.bind(s,51825)),Promise.resolve().then(s.bind(s,96975)),Promise.resolve().then(s.bind(s,46791)),Promise.resolve().then(s.bind(s,56071)),Promise.resolve().then(s.bind(s,28067)),Promise.resolve().then(s.bind(s,99380)),Promise.resolve().then(s.bind(s,61002)),Promise.resolve().then(s.bind(s,92622)),Promise.resolve().then(s.bind(s,44807)),Promise.resolve().then(s.bind(s,45027)),Promise.resolve().then(s.bind(s,77671)),Promise.resolve().then(s.bind(s,25908)),Promise.resolve().then(s.bind(s,19123)),Promise.resolve().then(s.bind(s,20446)),Promise.resolve().then(s.bind(s,38794)),Promise.resolve().then(s.bind(s,52024)),Promise.resolve().then(s.bind(s,21110)),Promise.resolve().then(s.bind(s,38587)),Promise.resolve().then(s.bind(s,98542)),Promise.resolve().then(s.bind(s,64371)),Promise.resolve().then(s.bind(s,97677)),Promise.resolve().then(s.bind(s,50744)),Promise.resolve().then(s.bind(s,40684))},21110:(e,t,s)=>{"use strict";s.d(t,{ThemeProvider:()=>i});var a=s(95155),n=s(12115),r=s(90085);function i({children:e}){let{initTheme:t}=(0,r.A)();return(0,n.useEffect)(()=>{t()},[t]),(0,a.jsx)(a.Fragment,{children:e})}},21931:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>p});var a=s(95155),n=s(12115),r=s(14051),i=s.n(r),l=s(93308),o=s(73006),d=s(81127);let c={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:"فارسی"},u=e=>c[e]||e;function p({className:e="",isOpen:t,onClose:s,hideTrigger:r=!1}){let[i,c]=(0,n.useState)("en"),[m,f]=(0,n.useState)(!1),[h,x]=(0,n.useState)(!1),b="boolean"==typeof t,g=(e=i)=>{b?s?.(e):x(!1)};(0,n.useEffect)(()=>{c(function(){if("u"<typeof document)return"en";let e=document.cookie.split(";").find(e=>e.trim().startsWith(`${l.CL}=`)),t=e?decodeURIComponent(e.split("=")[1]):"en";return(0,l.QC)(t)}())},[]);let v=async e=>{if(e!==i&&!m){f(!0);try{await fetch("/api/locale",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({locale:e})}),await (0,o.wn)();let t=document.documentElement,s=(0,o.kk)();t.lang=s,t.dir=l.rB.includes(s)?"rtl":"ltr",c(e),g(e)}catch(e){console.error("Failed to set locale:",e)}finally{f(!1)}}};return(0,a.jsxs)("div",{className:e,children:[!r&&(0,a.jsxs)("button",{type:"button",onClick:()=>x(!h),disabled:m,className:"flex h-11 items-center gap-2 rounded-lg px-3 text-muted transition-colors hover:bg-raised hover:text-text",title:"Language",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[20px]","aria-hidden":"true",children:"language"}),(0,a.jsx)("span",{className:"text-sm font-medium",children:u(i)})]}),(0,a.jsx)(d.default,{isOpen:b?t:h,onClose:()=>g(),title:"Select language",size:"full",className:"max-w-2xl",children:(0,a.jsx)("div",{"data-i18n-skip":"true",className:"grid grid-cols-[repeat(auto-fill,minmax(100px,1fr))] gap-2",children:l.YZ.map(e=>{let t=i===e;return(0,a.jsxs)("button",{type:"button",onClick:()=>v(e),disabled:m,"aria-current":t||void 0,title:u(e),className:`flex w-full flex-col items-center justify-start gap-1 rounded-lg px-2 py-3 text-xs font-medium transition-colors ${t?"bg-coral-bg text-coral shadow-focus":"text-text hover:bg-raised"} ${m?"cursor-wait opacity-70":""}`,children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[26px]","aria-hidden":"true",children:t?"language":"translate"}),(0,a.jsx)("span",{className:"flex h-8 items-center overflow-hidden text-center leading-tight [display:-webkit-box] [-webkit-box-orient:vertical] [-webkit-line-clamp:2]",children:u(e)}),t&&(0,a.jsx)("span",{className:"material-symbols-outlined text-sm","aria-hidden":"true",children:"check"})]},e)})})})]})}p.propTypes={className:i().string,isOpen:i().bool,onClose:i().func,hideTrigger:i().bool}},28164:(e,t,s)=>{"use strict";s.d(t,{default:()=>d});var a=s(95155),n=s(98500),r=s.n(n),i=s(14051),l=s.n(i),o=s(31474);function d({href:e,children:t,showArrow:s=!0,className:n}){return(0,a.jsxs)(r(),{href:e,className:(0,o.cn)(n||"text-[13px] font-semibold text-coral-ink hover:text-coral"),children:[t,s?(0,a.jsxs)(a.Fragment,{children:[" ",(0,a.jsx)("span",{"aria-hidden":"true",className:"inline-block rtl:-scale-x-100",children:"→"})]}):null]})}d.propTypes={href:l().string.isRequired,children:l().node.isRequired,showArrow:l().bool,className:l().string}},28915:(e,t,s)=>{"use strict";s.d(t,{E2:()=>a,gs:()=>n});function a(e){if(!e)return null;let t=e.match(/\b([45]\d{2})\b/);return t?t[1]:"ERR"}function n(e){if(!e)return"";let t=Math.floor((Date.now()-new Date(e).getTime())/6e4);if(t<1)return"just now";if(t<60)return`${t}m ago`;let s=Math.floor(t/60);if(s<24)return`${s}h ago`;let a=Math.floor(s/24);return`${a}d ago`}s(8247)},38794:(e,t,s)=>{"use strict";s.d(t,{default:()=>o});var a=s(95155),n=s(14051),r=s.n(n),i=s(12115),l=s(50770);function o({lines:e,label:t="Console output",className:s,live:n="off",onScroll:r,scrollRef:d,cursor:c=!1,row:u}){return(0,a.jsx)("div",{ref:d,role:"log","aria-label":t,"aria-live":n,dir:"ltr",onScroll:r,tabIndex:0,className:`signal-terminal custom-scrollbar m-0 overflow-auto rounded-2xl p-[18px_22px] text-start font-mono text-[13px] leading-[1.75] focus-visible:shadow-focus${s?` ${s}`:""}`,children:(0,a.jsxs)("ol",{className:"m-0 list-none p-0",children:[u?e.map((e,t)=>(0,a.jsx)(i.Fragment,{children:u(e,t)},e.key??e.id??`${e.time}-${t}`)):e.map((e,t)=>(0,a.jsxs)("li",{className:"flex gap-4 whitespace-nowrap",children:[(0,a.jsx)("span",{className:"signal-terminal-time shrink-0",children:e.time||"--:--:--"}),(0,a.jsx)("span",{className:`w-[52px] shrink-0 font-semibold ${(0,l.pN)(e.level)}`,children:e.level}),(0,a.jsx)("span",{className:"min-w-0 flex-1 whitespace-pre",children:e.message})]},e.id??`${e.time}-${t}`)),c&&(0,a.jsxs)("li",{className:"mt-0.5 flex gap-4 whitespace-nowrap","aria-hidden":"true",children:[(0,a.jsx)("span",{className:"signal-terminal-time shrink-0",children:"--:--:--"}),(0,a.jsx)("span",{className:"signal-terminal-cursor w-[52px] shrink-0 animate-pulse font-semibold",children:"▍"})]})]})})}o.propTypes={lines:r().arrayOf(r().shape({id:r().oneOfType([r().string,r().number]),time:r().string,level:r().oneOf(["LOG","INFO","WARN","ERROR","DEBUG"]).isRequired,message:r().string.isRequired})).isRequired,label:r().string,className:r().string,live:r().oneOf(["off","polite"]),onScroll:r().func,scrollRef:r().shape({current:r().object}),cursor:r().bool,row:r().func}},47928:(e,t,s)=>{"use strict";s.d(t,{default:()=>eT});var a=s(95155),n=s(12115),r=s(17081),i=s(14051),l=s.n(i),o=s(73321),d=s(25086),c=s(92542),u=s(28067),p=s(64371),m=s(56006),f=s(99312),h=s(29499),x=s(71252),b=s(93921),g=s(28777),v=s(54268),y=s(96975),j=s(21356),N=s(28915),w=s(53956);function C({entry:e,connections:t,testing:s,onRetry:n,onRepair:r,onOpen:i,onCooldownExpired:l}){let o=t.filter(e=>!1!==e.isActive),d=(0,w.SB)(o),u=d.until||(0,w.Gy)(o.find(e=>(0,w.Gy)(e))),p=[...o].sort((e,t)=>new Date(t.lastErrorAt||0)-new Date(e.lastErrorAt||0))[0],m=o.find(e=>"reconnect"===(0,w.tT)(e).action),f=!!m,h="open"===d.action;return(0,a.jsxs)("div",{className:`flex items-center gap-3.5 rounded-2xl border p-4 ${"warn"===d.status?"border-warn bg-warn-bg":"border-err bg-err-bg"}`,children:[(0,a.jsx)(y.default,{providerId:e.id,size:"md"}),(0,a.jsxs)("div",{className:"flex min-w-0 flex-1 flex-col gap-0.5",children:[(0,a.jsxs)("button",{type:"button",onClick:()=>i(e),className:"truncate text-start text-[15px] font-semibold focus-visible:outline-none focus-visible:shadow-focus",children:[e.info.name," ","warn"===d.status?"is cooling down":"needs attention"]}),(0,a.jsxs)("span",{className:"flex flex-wrap items-center gap-x-2 gap-y-0.5 text-[13px] text-muted",children:[(0,a.jsx)("span",{children:d.reason||"Requests are skipping this provider"}),u&&(0,a.jsx)(j.A,{until:u,onExpire:l}),p?.lastErrorAt&&(0,a.jsx)("span",{children:(0,N.gs)(p.lastErrorAt)})]})]}),(0,a.jsx)(c.default,{size:"sm",variant:f?"primary":"secondary",loading:s,disabled:s,onClick:f?()=>r(e,m):h?()=>i(e):()=>n(e),"aria-label":f?`Reconnect ${m.name||m.email||e.info.name}`:void 0,children:s?"Retrying…":f?"Reconnect":h?"Open provider":"Retry now"})]})}C.propTypes={entry:l().object.isRequired,connections:l().array.isRequired,testing:l().bool,onRetry:l().func.isRequired,onRepair:l().func.isRequired,onOpen:l().func.isRequired,onCooldownExpired:l().func};let k=(0,n.memo)(C);var A=s(56061),T=s(81127),P=s(11910),S=s(99380);let R={openai:{title:"Add OpenAI-compatible",type:"openai-compatible",defaultBaseUrl:"https://api.openai.com/v1",namePlaceholder:"OpenAI Compatible (Prod)",prefixPlaceholder:"oc-prod",baseUrlHint:"Use the base URL (ending in /v1) for your OpenAI-compatible API.",modelIdPlaceholder:"e.g. gpt-4, claude-3-opus",errorLabel:"OpenAI Compatible",hasApiType:!0},anthropic:{title:"Add Anthropic-compatible",type:"anthropic-compatible",defaultBaseUrl:"https://api.anthropic.com/v1",namePlaceholder:"Anthropic Compatible (Prod)",prefixPlaceholder:"ac-prod",baseUrlHint:"Use the base URL (ending in /v1) for your Anthropic-compatible API. The system will append /messages.",modelIdPlaceholder:"e.g. claude-3-opus",errorLabel:"Anthropic Compatible",hasApiType:!1}},O=[{value:"chat",label:"Chat Completions"},{value:"responses",label:"Responses API"}];function E({variant:e,isOpen:t,onClose:s,onCreated:r}){let i=R[e],l=()=>({name:"",prefix:"",...i.hasApiType?{apiType:"chat"}:{},baseUrl:i.defaultBaseUrl}),[o,d]=(0,n.useState)(l),[u,p]=(0,n.useState)(!1),[m,f]=(0,n.useState)(""),[h,x]=(0,n.useState)(""),[b,g]=(0,n.useState)(!1),[v,y]=(0,n.useState)(null);(0,n.useEffect)(()=>{i.hasApiType?d(e=>({...e,baseUrl:i.defaultBaseUrl})):t&&(y(null),f(""),x(""))},[i.hasApiType?o.apiType:t]);let j=async()=>{if(o.name.trim()&&o.prefix.trim()&&o.baseUrl.trim()){p(!0);try{let e=await fetch("/api/provider-nodes",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:o.name,prefix:o.prefix,...i.hasApiType?{apiType:o.apiType}:{},baseUrl:o.baseUrl,type:i.type})}),t=await e.json();e.ok&&(r(t.node),d(l()),f(""),y(null))}catch(e){console.log(`Error creating ${i.errorLabel} node:`,e)}finally{p(!1)}}},N=async()=>{g(!0);try{let e=await fetch("/api/provider-nodes/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({baseUrl:o.baseUrl,apiKey:m,type:i.type,modelId:h.trim()||void 0})}),t=await e.json();y(t)}catch{y({valid:!1,error:"Network error"})}finally{g(!1)}};return(0,a.jsx)(T.default,{isOpen:t,title:i.title,onClose:s,children:(0,a.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,a.jsx)(P.default,{label:"Name",value:o.name,onChange:e=>d({...o,name:e.target.value}),placeholder:i.namePlaceholder,hint:"Required. A friendly label for this node."}),(0,a.jsx)(P.default,{label:"Prefix",value:o.prefix,onChange:e=>d({...o,prefix:e.target.value}),placeholder:i.prefixPlaceholder,hint:"Required. Used as the provider prefix for model IDs."}),i.hasApiType&&(0,a.jsx)(S.default,{label:"API type",options:O,value:o.apiType,onChange:e=>d({...o,apiType:e.target.value})}),(0,a.jsx)(P.default,{label:"Base URL",value:o.baseUrl,onChange:e=>d({...o,baseUrl:e.target.value}),placeholder:i.defaultBaseUrl,hint:i.baseUrlHint}),(0,a.jsx)(P.default,{label:"API key (for check)",type:"password",value:m,onChange:e=>f(e.target.value)}),(0,a.jsx)(P.default,{label:"Model ID (optional)",value:h,onChange:e=>x(e.target.value),placeholder:i.modelIdPlaceholder,hint:"If provider lacks /models endpoint, enter a model ID to validate via chat/completions instead."}),(0,a.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center",children:[(0,a.jsx)(c.default,{onClick:N,disabled:!m||b||!o.baseUrl.trim(),variant:"secondary",className:"w-full sm:w-auto",children:b?"Checking...":"Check"}),(()=>{if(!v)return null;let{valid:e,error:t,method:s}=v;return e?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(A.default,{variant:"success",children:"Valid"}),"chat"===s&&(0,a.jsx)("span",{className:"text-sm text-muted",children:"(via inference test)"})]}):(0,a.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,a.jsx)(A.default,{variant:"error",children:"Invalid"}),t&&(0,a.jsx)("span",{className:"text-sm text-red-500",children:t})]})})()]}),(0,a.jsxs)("div",{className:"flex flex-col gap-2 sm:flex-row",children:[(0,a.jsx)(c.default,{onClick:j,fullWidth:!0,disabled:!o.name.trim()||!o.prefix.trim()||!o.baseUrl.trim()||u,children:u?"Creating...":"Create"}),(0,a.jsx)(c.default,{onClick:s,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]})})}E.propTypes={variant:l().oneOf(["openai","anthropic"]).isRequired,isOpen:l().bool.isRequired,onClose:l().func.isRequired,onCreated:l().func.isRequired};var q=s(98500),I=s.n(q),$=s(19123),_=s(98542),U=s(44863),F=s(6587),L=s(86465),M=s(10185),D=s(63063),z=s(88105),G=s(42271),B=s(81231),H=s(65921);let J={oauth:"info",free:"live",apikey:"brand",compatible:"neutral"},K={oauth:"OAuth",free:"Free",apikey:"API key",compatible:"Compatible"};function V({connection:e,index:t,quotaSnapshot:s,onToggle:n,onClearCooldown:r}){let i=(0,w.tT)(e),l=i.until,o=e.name||e.email||e.displayName||"Account",d=e.email&&e.name?e.email:e.email||e.displayName||"",c="off"===i.status,u={variant:{off:"neutral",ok:"ok",warn:"warn",err:"err"}[i.status],label:{off:"Off",ok:"Active",warn:"Cooldown",err:"Error"}[i.status]},p=(s?.windows||[])[0];return(0,a.jsxs)("div",{className:"flex min-w-0 flex-col gap-2.5 border-t border-line py-3.5 first:border-t-0",children:[(0,a.jsxs)("div",{className:"flex min-w-0 items-center gap-2.5",children:[(0,a.jsx)("span",{"aria-hidden":"true",className:`flex size-7 shrink-0 items-center justify-center rounded-full font-mono text-xs font-semibold ${c?"bg-line text-muted":"bg-text text-bg"}`,children:t+1}),(0,a.jsxs)("div",{className:"flex min-w-0 flex-1 flex-col",children:[(0,a.jsx)("span",{className:`truncate text-sm font-semibold ${c?"text-muted":""}`,children:o}),d&&(0,a.jsx)("span",{className:"truncate font-mono text-xs text-muted",children:d})]}),(0,a.jsx)($.default,{variant:u.variant,size:"sm",children:u.label}),(0,a.jsx)(_.default,{size:"sm",checked:!c,onChange:e=>n(e),"aria-label":`${o} enabled`})]}),l?(0,a.jsxs)("div",{className:"flex items-center gap-2 ps-9.5",children:[(0,a.jsx)("div",{className:"flex-1",children:(0,a.jsx)(U.default,{value:100,label:`${o} cooldown`,valueText:"Rate limited"})}),(0,a.jsx)(j.A,{until:l}),(0,a.jsx)("button",{type:"button",onClick:r,className:"text-xs font-semibold text-coral-ink hover:text-coral focus-visible:outline-none focus-visible:shadow-focus",children:"Retry"})]}):p?(0,a.jsxs)("div",{className:"flex items-center gap-2 ps-9.5",children:[(0,a.jsx)("div",{className:"flex-1",children:(0,a.jsx)(U.default,{value:Math.round((1-p.usedFraction)*100),label:`${o} quota remaining`,valueText:`${Math.round((1-p.usedFraction)*100)}% remaining`})}),(0,a.jsxs)("span",{className:"text-xs whitespace-nowrap text-muted",children:[Math.round((1-p.usedFraction)*100),"% left",p.resetsAt?` \xb7 resets ${(0,N.gs)(p.resetsAt)}`:""]})]}):null]})}function W({entry:e,connections:t,onClose:s,onChanged:r,onTestAccounts:i,onAddAccount:l,testingAccounts:o=!1,inline:p=!1}){let m=(0,H.i)(e=>e.success),f=(0,H.i)(e=>e.error),[h,x]=(0,n.useState)(null),[b,v]=(0,n.useState)("fill-first"),[j,N]=(0,n.useState)(!1),[w,C]=(0,n.useState)({}),[k,A]=(0,n.useState)([]),[T,P]=(0,n.useState)({}),[S,R]=(0,n.useState)(!0),O="compatible"===e.authGroup,E=(0,z.wG)(e.id),q=(0,n.useCallback)(async()=>{try{let[t,s,a]=await Promise.all([fetch("/api/settings",{cache:"no-store"}),fetch("/api/models/custom",{cache:"no-store"}),fetch("/api/models/alias",{cache:"no-store"})]);if(t.ok){let s=await t.json(),a=s.providerStrategies?.[e.id]||{};x(a.fallbackStrategy||null),v(s.fallbackStrategy||"fill-first")}if(s.ok){let e=await s.json();A(e.models||[])}if(a.ok){let e=await a.json();P(e.aliases||{})}!O&&e.info.modelsFetcher?.url&&(0,G.o)(e.info.modelsFetcher).catch(()=>{})}catch{}finally{R(!1)}},[e.id,e.info.modelsFetcher,O]);(0,n.useEffect)(()=>{q()},[q]),(0,n.useEffect)(()=>{let e=!1;return Promise.all(t.filter(e=>"oauth"===e.authType).map(async t=>{try{let s=await fetch(`/api/usage/${t.id}`);if(!s.ok||e)return;let a=await s.json();e||C(e=>({...e,[t.id]:a.quotaSnapshot||null}))}catch{}})),()=>{e=!0}},[t]);let _=async t=>{N(!0);try{let s={...(await fetch("/api/settings").then(e=>e.json())).providerStrategies||{}},a={...s[e.id]||{}};t?a.fallbackStrategy=t:delete a.fallbackStrategy,0===Object.keys(a).length?delete s[e.id]:s[e.id]=a;let n=await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({providerStrategies:s})});if(!n.ok){let e=await n.json().catch(()=>({}));f(e.error||"Failed to save strategy");return}x(t),m("Account strategy saved")}catch{f("Failed to save strategy")}finally{N(!1)}},U=async(e,t)=>{try{await fetch(`/api/providers/${e.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({isActive:t})}),r?.()}catch{f("Failed to toggle connection")}},X=async t=>{let s=Object.keys(t).filter(e=>e.startsWith("modelLock_")&&t[e]);if(0===s.length)return;let a=s[0].slice(10);try{(await fetch("/api/models/availability",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"clearCooldown",provider:e.id,model:a})})).ok?(m("Cooldown cleared"),r?.()):f("Failed to clear cooldown")}catch{f("Failed to clear cooldown")}},Y=O?[]:(0,g.KC)(e.id).filter(e=>"llm"===(e.kind||e.type||"llm")),Q=O?(0,B.R)({customModels:k,modelAliases:T,providerAlias:E}):[...Y.map(e=>({id:e.id,fullModel:`${E}/${e.id}`})),...(0,B.R)({customModels:k,modelAliases:T,providerAlias:E,builtInModels:Y})],Z=Q.slice(0,6),ee=Q.length-Z.length,et=Q[0]?.fullModel||`${E}/model-id`,es={variant:J[e.authGroup]||"neutral",label:K[e.authGroup]||e.authGroup},ea=(0,a.jsxs)("div",{className:"flex min-w-0 flex-col gap-5",children:[(0,a.jsxs)("div",{className:"flex min-w-0 items-start gap-3.5",children:[(0,a.jsx)(y.default,{providerId:e.id,size:"lg"}),(0,a.jsxs)("div",{className:"flex min-w-0 flex-1 flex-col gap-1.5",children:[(0,a.jsx)("h2",{className:"font-display text-[26px] font-bold leading-[1.1] text-text",children:e.info.name}),(0,a.jsxs)("div",{className:"flex flex-wrap gap-1.5","aria-live":"polite",children:[(0,a.jsx)($.default,{variant:es.variant,size:"sm",children:es.label}),(0,a.jsx)($.default,{variant:t.length>0?"ok":"neutral",size:"sm",dot:t.length>0,children:t.length>0?`${t.length} ${1===t.length?"account":"accounts"}`:"No accounts"})]})]}),p&&(0,a.jsx)(F.default,{icon:"close",label:`Close ${e.info.name} details`,onClick:s})]}),(0,a.jsxs)("div",{className:"flex gap-2.5",children:[(0,a.jsx)(c.default,{size:"sm",variant:"secondary",className:"flex-1",loading:o,disabled:o||0===t.length,onClick:i,children:o?"Testing…":"Test accounts"}),(0,a.jsx)(c.default,{size:"sm",variant:"primary",icon:"add",className:"flex-1",onClick:l,children:"Add account"})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-2.5",children:[(0,a.jsx)("span",{id:`strategy-label-${e.id}`,className:"text-xs font-semibold tracking-[0.08em] text-muted uppercase",children:"When an account runs dry"}),(0,a.jsx)(u.default,{"aria-labelledby":`strategy-label-${e.id}`,value:h||b,onChange:_,options:D.T7.map(e=>({value:e.value,label:String(e.label).split(" — ")[0]}))}),j&&(0,a.jsx)("span",{className:"text-xs text-muted","aria-live":"polite",children:"Saving…"})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,a.jsx)("span",{className:"mb-1 text-xs font-semibold tracking-[0.08em] text-muted uppercase",children:"Accounts"}),0===t.length?(0,a.jsx)("p",{className:"rounded-xl border border-dashed border-line px-3 py-4 text-center text-sm text-muted",children:"No accounts connected yet. Click Add account to connect."}):t.map((e,t)=>(0,a.jsx)(V,{connection:e,index:t,quotaSnapshot:w[e.id],onToggle:t=>U(e,t),onClearCooldown:()=>X(e)},e.id))]}),(0,a.jsxs)("div",{className:"flex flex-col gap-2.5",children:[(0,a.jsxs)("div",{className:"flex items-center",children:[(0,a.jsx)("span",{className:"text-xs font-semibold tracking-[0.08em] text-muted uppercase",children:"Models"}),(0,a.jsx)(I(),{href:`/dashboard/providers/${e.id}`,className:"ms-auto text-[13px] font-semibold text-coral-ink hover:text-coral focus-visible:shadow-focus focus-visible:outline-none",children:"Manage"})]}),S?(0,a.jsx)(d.Skeleton,{className:"h-7 w-full"}):0===Q.length?(0,a.jsx)("p",{className:"text-sm text-muted",children:"No models configured for this provider."}):(0,a.jsxs)("div",{className:"flex flex-wrap gap-1.5",children:[Z.map(e=>(0,a.jsx)(L.default,{model:e.fullModel},e.fullModel)),ee>0&&(0,a.jsxs)("span",{className:"font-mono text-xs text-muted",children:["+",ee," more"]})]})]}),(0,a.jsxs)("div",{className:"mt-auto flex flex-col gap-2 rounded-[14px] bg-raised p-3.5",children:[(0,a.jsx)("span",{className:"text-[13px] text-muted",children:"Point any client at your endpoint and ask for"}),(0,a.jsx)(M.default,{value:`"model": "${et}"`,copyValue:et,label:"Copy model id snippet"})]}),(0,a.jsx)(I(),{href:`/dashboard/providers/${e.id}`,className:"text-[13px] font-semibold text-coral-ink hover:text-coral focus-visible:shadow-focus focus-visible:outline-none",children:"Open full page →"})]});return p?(0,a.jsx)("aside",{"aria-label":`${e.info.name} details`,className:"w-[400px] shrink-0 rounded-[20px] border border-line bg-panel p-6 shadow-card",children:ea}):ea}V.propTypes={connection:l().object.isRequired,index:l().number.isRequired,quotaSnapshot:l().object,onToggle:l().func.isRequired,onClearCooldown:l().func.isRequired},W.propTypes={entry:l().object.isRequired,connections:l().array.isRequired,onClose:l().func.isRequired,onChanged:l().func,onTestAccounts:l().func,onAddAccount:l().func,testingAccounts:l().bool,inline:l().bool};var X=s(62899),Y=s(30815),Q=s(95088),Z=s(40684),ee=s(23936),et=s(91348),es=s(47199);let ea="ag_risk_confirmed";function en({entry:e,proxyPools:t,error:s,existingNames:r,onSave:i,onClose:l,onChanged:o}){let[d,u]=(0,n.useState)(!1),[p,m]=(0,n.useState)(!1),[f,h]=(0,n.useState)(!1),x="oauth"===e.authGroup||"free"===e.authGroup;(0,n.useEffect)(()=>{"antigravity"===e.id&&"true"!==window.localStorage.getItem(ea)?m(!0):u(!0)},[e.id]);let b=()=>{o?.(),l()},g=async e=>{await i(e)};return x?(0,a.jsxs)(a.Fragment,{children:["kiro"===e.id?(0,a.jsx)(X.default,{isOpen:d,providerInfo:e.info,onSuccess:b,onClose:l}):"cursor"===e.id?(0,a.jsx)(Y.default,{isOpen:d,providerInfo:e.info,onSuccess:b,onClose:l}):"gitlab"===e.id?(0,a.jsx)(Q.default,{isOpen:d,providerInfo:e.info,onSuccess:b,onClose:l}):"xiaomi-mimo"===e.id?(0,a.jsx)(Z.default,{isOpen:d,providerInfo:e.info,onSuccess:b,onClose:l}):"iflow"===e.id?(0,a.jsx)(ee.default,{isOpen:d,providerInfo:e.info,onSuccess:b,onClose:l}):(0,a.jsx)(et.default,{isOpen:d,provider:e.id,providerInfo:e.info,onSuccess:b,onClose:l}),p&&(0,a.jsxs)("div",{role:"dialog","aria-modal":"true","aria-labelledby":"ag-risk-title",className:"fixed inset-0 z-50 flex items-center justify-center p-4",children:[(0,a.jsx)("div",{className:"signal-backdrop absolute inset-0","aria-hidden":"true",onClick:l}),(0,a.jsxs)("div",{className:"relative w-full max-w-md rounded-[20px] border border-line bg-panel p-6 shadow-card",children:[(0,a.jsx)("h2",{id:"ag-risk-title",className:"font-display text-lg font-bold",children:"Antigravity carries account risk"}),(0,a.jsx)("p",{className:"mt-2 text-sm text-muted",children:"Unofficial OAuth for Google Antigravity can trigger account review. Continue only with a spare account."}),(0,a.jsxs)("label",{className:"mt-4 flex items-center gap-2 text-sm",children:[(0,a.jsx)("input",{type:"checkbox",checked:f,onChange:e=>h(e.target.checked),className:"size-4"}),"I understand the risk"]}),(0,a.jsxs)("div",{className:"mt-4 flex justify-end gap-2",children:[(0,a.jsx)(c.default,{size:"sm",variant:"secondary",onClick:l,children:"Cancel"}),(0,a.jsx)(c.default,{size:"sm",variant:"danger",disabled:!f,onClick:()=>{window.localStorage.setItem(ea,"true"),m(!1),u(!0)},children:"Continue"})]})]})]})]}):(0,a.jsx)(es.A,{isOpen:!0,provider:e.id,providerName:e.info.name,isCompatible:!1,isAnthropic:!1,authType:e.info.authType,authHint:e.info.authHint,website:e.info.website,proxyPools:t,error:s,existingNames:r,onSave:g,onBulkDone:o,onClose:l})}function er({isOpen:e,onClose:t,results:s}){if(!s)return null;let{summary:n,mode:r,error:i}=s,l=s.results||[];return(0,a.jsx)(T.default,{isOpen:e,onClose:t,title:"Test results",size:"lg",children:i&&!l.length?(0,a.jsxs)("div",{className:"py-6 text-center",children:[(0,a.jsx)("span",{className:"material-symbols-outlined mb-2 block text-[32px] text-err","aria-hidden":"true",children:"error"}),(0,a.jsx)("p",{className:"text-sm text-err",children:i})]}):(0,a.jsxs)("div",{className:"flex min-w-0 flex-col gap-3",children:[n&&(0,a.jsxs)("div",{className:"mb-1 flex flex-wrap items-center gap-2 text-xs sm:gap-3","aria-live":"polite",children:[(0,a.jsxs)("span",{className:"text-muted",children:[{oauth:"OAuth",free:"Free",apikey:"API key",provider:"Provider",all:"All"}[r]||r," Test"]}),(0,a.jsxs)($.default,{variant:"ok",size:"sm",children:[n.passed," passed"]}),n.failed>0&&(0,a.jsxs)($.default,{variant:"err",size:"sm",children:[n.failed," failed"]}),(0,a.jsxs)("span",{className:"text-muted sm:ms-auto",children:[n.total," tested"]})]}),(0,a.jsx)("div",{className:"flex max-h-[460px] flex-col gap-2 overflow-y-auto pe-1",children:l.map((e,t)=>{let s=e.diagnosis?.type;return(0,a.jsxs)("div",{className:"flex min-w-0 flex-wrap items-center gap-2 rounded-xl border border-line bg-raised px-3.5 py-2.5 text-xs sm:flex-nowrap",children:[(0,a.jsx)("span",{className:`material-symbols-outlined text-[18px] ${e.valid?"text-ok":"text-err"}`,"aria-hidden":"true",children:e.valid?"check_circle":"error"}),(0,a.jsx)(y.default,{providerId:e.provider,size:"sm"}),(0,a.jsxs)("div",{className:"min-w-0 flex-[1_1_160px]",children:[(0,a.jsx)("span",{className:"block truncate font-medium text-text sm:inline",children:e.connectionName}),(0,a.jsxs)("span",{className:"block truncate text-muted sm:ms-1.5 sm:inline",children:["(",e.provider,")"]})]}),void 0!==e.latencyMs&&(0,a.jsxs)("span",{className:"shrink-0 font-mono tabular-nums text-muted",children:[e.latencyMs,"ms"]}),(0,a.jsx)($.default,{variant:e.valid?"ok":"err",size:"sm",children:e.valid?"OK":s||"ERROR"})]},e.connectionId||t)})}),0===l.length&&(0,a.jsx)("div",{className:"py-6 text-center text-sm text-muted",children:"No active connections found for this group."})]})})}en.propTypes={entry:l().object.isRequired,proxyPools:l().array,error:l().string,existingNames:l().array,onSave:l().func.isRequired,onClose:l().func.isRequired,onChanged:l().func},er.propTypes={isOpen:l().bool.isRequired,onClose:l().func.isRequired,results:l().shape({mode:l().string,results:l().array,summary:l().shape({total:l().number,passed:l().number,failed:l().number}),error:l().string})};let ei=(0,n.memo)(function({entry:e,connections:t,selected:s,testing:n,batchTesting:r,onOpen:i,onClose:l,onTest:o}){let d=t.filter(e=>!1!==e.isActive),u=(0,w.SB)(d),p=e.stats.allDisabled?"Disabled":u.reason||"Ready",m=function(e,t){if(e.stats.allDisabled)return{variant:"neutral",label:"Disabled",dot:!1};if("err"===t.status){let s=e.stats.errorCode?` (${e.stats.errorCode})`:"";return{variant:"err",label:`${t.counts.err} Error${s}`,dot:!0}}return"warn"===t.status&&t.until?{variant:"warn",label:"Cooldown",dot:!0}:"warn"===t.status&&t.reason?{variant:"warn",label:t.reason,dot:!0}:{variant:"ok",label:"Connected",dot:!0}}(e,u),f=function(e){let t=null;for(let s of e)"number"==typeof s?.quotaRemaining&&(null===t||s.quotaRemaining<t)&&(t=s.quotaRemaining);return t}(d),h=e.info.name;return(0,a.jsxs)("li",{className:"grid grid-cols-[minmax(0,1fr)_auto] items-stretch gap-2 sm:items-center",children:[(0,a.jsxs)("button",{type:"button",onClick:()=>s?l():i(e),"aria-expanded":s,"aria-label":s?`Close ${h} details`:`Open ${h} details`,className:`flex min-w-0 flex-col gap-2 rounded-2xl border bg-panel p-4 text-start shadow-card transition-colors hover:border-subtle focus-visible:outline-none focus-visible:shadow-focus sm:flex-row sm:items-center sm:gap-3 ${s?"border-coral shadow-[0_0_0_3px_var(--signal-coral-bg)]":"border-line"}`,children:[(0,a.jsxs)("span",{className:"flex min-w-0 items-center gap-3",children:[(0,a.jsx)(y.default,{providerId:e.id,size:"md",status:e.stats.allDisabled?"neutral":"err"===u.status?"err":"warn"===u.status?"warn":u.connected?"ok":"neutral"}),(0,a.jsxs)("span",{className:"flex min-w-0 flex-col gap-0.5",children:[(0,a.jsx)("span",{className:"truncate text-[15px] font-semibold",children:h}),(0,a.jsxs)("span",{className:"truncate text-[13px] text-muted",children:[`${t.length} ${1===t.length?"account":"accounts"}`,null!==f&&` \xb7 ${f}% quota left`]})]})]}),(0,a.jsxs)("span",{className:"flex min-w-0 flex-1 flex-wrap items-center gap-2 sm:justify-end",children:[(0,a.jsx)("span",{className:"min-w-0 truncate text-[13px] text-muted",children:p}),(0,a.jsx)($.default,{variant:m.variant,size:"sm",dot:m.dot,children:m.label})]})]}),(0,a.jsx)(c.default,{size:"sm",variant:"secondary",loading:n,disabled:n||r,onClick:()=>o(e),"aria-label":`Test ${h} accounts`,children:n?"Testing…":"Test"})]})});function el(){let e=(0,n.useCallback)(()=>{let e=document.getElementById("providers-catalog");if(!e)return;let t=window.matchMedia?.("(prefers-reduced-motion: reduce)")?.matches;e.scrollIntoView({behavior:t?"auto":"smooth",block:"start"}),e.focus({preventScroll:!0})},[]);return(0,a.jsx)("div",{className:"rounded-2xl border border-dashed border-line bg-panel shadow-card",children:(0,a.jsx)(f.default,{icon:"link",title:"Connect your first provider",body:"Pick a provider below and sign in or paste a key. It shows up here once it's connected.",action:(0,a.jsx)(c.default,{size:"sm",variant:"secondary",onClick:e,children:"Browse providers"})})})}function eo({entries:e,total:t,connectionsFor:s,selectedProvider:n,testingMode:r,testAccountsMode:i,onOpen:l,onClose:o,onTest:d,onTestAll:u}){return 0===t?(0,a.jsx)(el,{}):0===e.length?null:(0,a.jsxs)("section",{"aria-labelledby":"providers-yours",className:"flex flex-col gap-3",children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-x-3 gap-y-1",children:[(0,a.jsx)("h2",{id:"providers-yours",className:"font-display text-xl font-bold lg:text-[22px]",children:"Your providers"}),(0,a.jsxs)("span",{className:"text-[13px] text-muted",children:[t," ",1===t?"provider":"providers"]}),(0,a.jsx)(c.default,{size:"sm",variant:"secondary",icon:"play_arrow",className:"ms-auto",loading:"all"===r,disabled:!!r||!!i,onClick:u,title:"Test all connections",children:"all"===r?"Testing…":"Test all"})]}),(0,a.jsx)("ul",{className:"flex flex-col gap-2",children:e.map(e=>(0,a.jsx)(ei,{entry:e,connections:s(e),selected:n===e.id,testing:i===e.id,batchTesting:!!r,onOpen:l,onClose:o,onTest:d},e.id))})]})}ei.propTypes={entry:l().object.isRequired,connections:l().array.isRequired,selected:l().bool,testing:l().bool,batchTesting:l().bool,onOpen:l().func.isRequired,onClose:l().func.isRequired,onTest:l().func.isRequired},eo.propTypes={entries:l().array.isRequired,total:l().number.isRequired,connectionsFor:l().func.isRequired,selectedProvider:l().string,testingMode:l().string,testAccountsMode:l().string,onOpen:l().func.isRequired,onClose:l().func.isRequired,onTest:l().func.isRequired,onTestAll:l().func.isRequired};let ed=(0,n.memo)(eo),ec={oauth:"info",free:"live",apikey:"brand",compatible:"neutral"},eu={oauth:"OAuth",free:"Free",apikey:"API key",compatible:"Compatible"},ep={ok:"bg-ok",warn:"bg-warn",err:"bg-err",none:"bg-line"};function em({segments:e}){return(0,a.jsx)("div",{role:"img","aria-label":`Account health: ${e.map(e=>e.label).join(", ")}`,className:"grid min-w-0 flex-1 auto-cols-fr grid-flow-col gap-1",children:e.map((e,t)=>(0,a.jsx)("span",{title:e.label,className:"h-1.5 overflow-hidden rounded-sm bg-raised shadow-[inset_0_0_0_1px_var(--signal-line)]",children:(0,a.jsx)("span",{className:`block h-full rounded-sm ${ep[e.kind]||"bg-line"}`,style:{width:`${Math.min(100,Math.max(0,e.value))}%`}})},`${e.label}-${t}`))})}em.propTypes={segments:l().arrayOf(l().shape({value:l().number.isRequired,kind:l().oneOf(["ok","warn","err","none"]).isRequired,label:l().string.isRequired})).isRequired};let ef=(0,n.memo)(function({entry:e,connections:t,selected:s=!1,modelCount:n=null,onSelect:r,onToggle:i}){let{info:l,stats:o}=e,d=(0,v.sf)(t),c=function(e,t){if(e.isNoAuth)return{variant:"ok",label:"Ready",dot:!0};if(e.stats.allDisabled)return{variant:"neutral",label:"Disabled",dot:!1};let s=(0,w.SB)(t);if("warn"===s.status&&s.until)return{variant:"warn",label:"Cooldown",dot:!0};if("err"===s.status){let t=s.counts.err;return{variant:"err",label:e.stats.errorCode?`${t} Error (${e.stats.errorCode})`:`${t} Error`,dot:!0}}return"warn"===s.status&&s.reason?{variant:"warn",label:s.reason,dot:!0}:e.stats.connected>0?{variant:"ok",label:"Connected",dot:!0}:{variant:"neutral",label:"apikey"===e.authGroup||"compatible"===e.authGroup?"Add key":"Connect",dot:!1}}(e,t),u=e.compatibleType?{variant:"neutral",label:"anthropic"===e.compatibleType?"Messages":"responses"===l.apiType?"Responses":"Chat"}:{variant:ec[e.authGroup]||"neutral",label:eu[e.authGroup]||e.authGroup};return(0,a.jsxs)("div",{className:`group relative flex min-w-0 flex-col gap-3.5 rounded-2xl border bg-panel p-4 shadow-card transition-colors hover:border-subtle focus-within:border-subtle ${s?"border-coral shadow-[0_0_0_3px_var(--signal-coral-bg)]":"border-line"}`,children:[(0,a.jsx)("button",{type:"button",onClick:r,"aria-expanded":s,"aria-label":s?`Close ${l.name} details`:`Open ${l.name} details`,className:"absolute inset-0 z-0 rounded-2xl focus-visible:outline-none focus-visible:shadow-focus"}),(0,a.jsxs)("div",{className:"pointer-events-none flex min-w-0 items-center gap-3",children:[(0,a.jsx)(y.default,{providerId:e.id,size:"md",status:function(e,t){if(e.stats.allDisabled)return"neutral";let s=(0,w.SB)(e.isNoAuth?[]:t);return"err"===s.status?"err":"warn"===s.status?"warn":s.connected?"ok":"neutral"}(e,t)}),(0,a.jsxs)("div",{className:"flex min-w-0 flex-1 flex-col gap-1",children:[(0,a.jsx)("span",{className:"truncate text-[15px] font-semibold",children:l.name}),(0,a.jsxs)("span",{className:"flex items-center gap-1.5",children:[(0,a.jsx)($.default,{variant:u.variant,size:"sm",children:u.label}),e.compatibleLabel&&(0,a.jsx)($.default,{variant:"neutral",size:"sm",children:e.compatibleLabel})]})]}),o.total>0&&(0,a.jsx)("span",{className:"pointer-events-auto relative z-10 shrink-0 opacity-100 transition-opacity lg:opacity-0 lg:group-hover:opacity-100 lg:group-focus-within:opacity-100",children:(0,a.jsx)(_.default,{size:"sm",checked:!o.allDisabled,onChange:e=>i(e),title:o.allDisabled?"Enable provider":"Disable provider","aria-label":o.allDisabled?`Enable ${l.name}`:`Disable ${l.name}`})})]}),t.length>0&&(0,a.jsx)("div",{className:"pointer-events-none flex gap-1",children:(0,a.jsx)(em,{segments:d})}),(0,a.jsxs)("div",{className:"pointer-events-none flex min-w-0 items-center gap-1.5 text-xs text-muted",children:[(0,a.jsx)("span",{children:0===t.length?"Not connected":`${t.length} ${1===t.length?"account":"accounts"}`}),n>0&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("span",{"aria-hidden":"true",children:"\xb7"}),(0,a.jsxs)("span",{children:[n," ",1===n?"model":"models"]})]}),(0,a.jsx)("span",{className:"ms-auto",children:(0,a.jsx)($.default,{variant:c.variant,size:"sm",dot:c.dot,children:c.label})})]}),o.errorTime&&o.error>0&&(0,a.jsx)("span",{className:"pointer-events-none text-xs text-muted",children:o.errorTime})]})});ef.propTypes={entry:l().shape({id:l().string.isRequired,info:l().object.isRequired,stats:l().object.isRequired,authGroup:l().string.isRequired,authTypes:l().arrayOf(l().string).isRequired,compatibleType:l().string,compatibleLabel:l().string,isNoAuth:l().bool}).isRequired,connections:l().array.isRequired,selected:l().bool,modelCount:l().number,onSelect:l().func.isRequired,onToggle:l().func.isRequired};let eh=(0,n.memo)(function({entry:e,connections:t,selected:s,modelCount:n,openProvider:r,handleToggleProvider:i}){return(0,a.jsx)(ef,{entry:e,connections:t,selected:s,modelCount:n,onSelect:()=>r(e),onToggle:t=>i(e.id,e.authTypes,t)})});function ex({section:e,collapsed:t,onToggleCollapse:s,connectionsFor:n,showAllApikey:r,setShowAllApikey:i,forceOpen:l,selectedProvider:o,modelCountFor:d,openProvider:c,handleToggleProvider:u}){let p=l||!t,m=`providers-${e.id}-grid`,f="apikey"!==e.id||r||l?e.entries:e.entries.slice(0,20);return(0,a.jsxs)("section",{"aria-labelledby":`providers-${e.id}`,className:"flex flex-col gap-3",children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-x-3 gap-y-1",children:[(0,a.jsx)("h3",{id:`providers-${e.id}`,className:"font-display text-lg font-bold lg:text-xl",children:(0,a.jsxs)("button",{type:"button",onClick:()=>s(e.id),"aria-expanded":p,"aria-controls":m,className:"flex min-h-11 items-center gap-1.5 rounded-lg pe-1 text-start focus-visible:outline-none focus-visible:shadow-focus",children:[(0,a.jsx)("span",{className:`material-symbols-outlined text-[20px] transition-transform motion-reduce:transition-none ${p?"":"-rotate-90 rtl:rotate-90"}`,"aria-hidden":"true",children:"expand_more"}),e.title,(0,a.jsx)("span",{className:"text-[13px] font-normal text-muted",children:e.catalogCount})]})}),(0,a.jsx)("span",{className:"text-[13px] text-muted",children:e.subtitle}),"apikey"===e.id&&e.catalogCount>20&&(0,a.jsx)("button",{type:"button",onClick:()=>i(e=>!e),"aria-expanded":r||l,className:"ms-auto inline-flex min-h-11 items-center gap-1 px-1 text-[13px] font-semibold text-coral-ink hover:text-coral focus-visible:outline-none focus-visible:shadow-focus",children:r||l?"Show less":(0,a.jsxs)(a.Fragment,{children:[`Show all ${e.catalogCount}`,(0,a.jsx)("span",{className:"material-symbols-outlined text-[16px] rtl:-scale-x-100","aria-hidden":"true",children:"arrow_forward"})]})})]}),(0,a.jsx)("div",{id:m,className:"grid grid-cols-1 gap-3 sm:grid-cols-2 sm:gap-4 lg:grid-cols-3",children:p&&f.map(e=>(0,a.jsx)(eh,{entry:e,connections:n(e),selected:o===e.id,modelCount:d(e),openProvider:c,handleToggleProvider:u},e.id))})]})}eh.propTypes={entry:l().object.isRequired,connections:l().array.isRequired,selected:l().bool,modelCount:l().number,openProvider:l().func.isRequired,handleToggleProvider:l().func.isRequired},ex.propTypes={section:l().object.isRequired,collapsed:l().bool.isRequired,onToggleCollapse:l().func.isRequired,connectionsFor:l().func.isRequired,showAllApikey:l().bool.isRequired,setShowAllApikey:l().func.isRequired,forceOpen:l().bool,selectedProvider:l().string,modelCountFor:l().func.isRequired,openProvider:l().func.isRequired,handleToggleProvider:l().func.isRequired};let eb=(0,n.memo)(ex);function eg({entries:e,connectionsFor:t,selectedProvider:s,modelCountFor:n,openProvider:r,handleToggleProvider:i,onAddOpenAI:l,onAddAnthropic:o}){return(0,a.jsxs)("section",{"aria-label":"Bring your own endpoint",className:"flex flex-col gap-3 rounded-2xl border border-dashed border-line p-4 sm:px-4.5",children:[(0,a.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:gap-3.5",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[22px] text-muted","aria-hidden":"true",children:"code"}),(0,a.jsxs)("div",{className:"flex min-w-0 flex-1 flex-col gap-0.5",children:[(0,a.jsx)("span",{className:"text-[15px] font-semibold",children:"Bring your own endpoint"}),(0,a.jsx)("span",{className:"text-[13px] text-muted",children:"Any OpenAI- or Anthropic-compatible base URL becomes a provider."})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-2 sm:flex-row",children:[(0,a.jsx)(c.default,{size:"sm",variant:"secondary",onClick:l,children:"+ OpenAI compatible"}),(0,a.jsx)(c.default,{size:"sm",variant:"secondary",onClick:o,children:"+ Anthropic compatible"})]})]}),e.length>0&&(0,a.jsx)("div",{className:"grid grid-cols-1 gap-3 sm:grid-cols-2 sm:gap-4 lg:grid-cols-3",children:e.map(e=>(0,a.jsx)(eh,{entry:e,connections:t(e),selected:s===e.id,modelCount:n(e),openProvider:r,handleToggleProvider:i},e.id))})]})}eg.propTypes={entries:l().array.isRequired,connectionsFor:l().func.isRequired,selectedProvider:l().string,modelCountFor:l().func.isRequired,openProvider:l().func.isRequired,handleToggleProvider:l().func.isRequired,onAddOpenAI:l().func.isRequired,onAddAnthropic:l().func.isRequired};let ev=(0,n.memo)(eg);var ey=s(4553);let ej=["oauth","apikey","api_key","cookie","access_token"];function eN(e){return!e.isNoAuth&&(e.stats?.total||0)>0}function ew(e,t){let s=+!(0,v.e_)(e.stats,e.isNoAuth),a=+!(0,v.e_)(t.stats,t.isNoAuth);return s!==a?s-a:(e.info.name||e.id).localeCompare(t.info.name||t.id)}let eC="providers:catalog-collapsed",ek=[];function eA({initialProviderId:e=null}){let{connections:t,setConnections:s,providerNodes:i,setProviderNodes:l,loading:y,fetchError:j,refreshData:N}=function(){let[e,t]=(0,n.useState)([]),[s,a]=(0,n.useState)([]),[r,i]=(0,n.useState)(!0),[l,o]=(0,n.useState)(""),d=(0,n.useCallback)(async()=>{try{let[e,s]=await Promise.all([fetch("/api/providers"),fetch("/api/provider-nodes")]),n=await e.json().catch(()=>({})),r=await s.json().catch(()=>({}));e.ok?(t(n.connections||[]),o("")):o(n.error||"Failed to load providers"),s.ok&&a(r.nodes||[])}catch(e){o(e?.message||"Failed to load providers")}finally{i(!1)}},[]);return(0,n.useEffect)(()=>{d()},[d]),{connections:e,setConnections:t,providerNodes:s,setProviderNodes:a,loading:r,fetchError:l,refreshData:d}}(),C=(0,n.useCallback)(()=>{N(),(0,r.q0)()},[N]),[A,T]=(0,n.useState)(v.Rw.ALL),[P,S]=(0,n.useState)(""),[R,O]=(0,n.useState)(!1),[q,I]=(0,n.useState)(!1),[$,_]=(0,n.useState)(!1),[U,F]=(0,n.useState)(e),[L,M]=(0,n.useState)([]),D=function(e="(max-width: 1279px)"){let[t,s]=(0,n.useState)(!1);return(0,n.useEffect)(()=>{let t=window.matchMedia(e),a=()=>s(t.matches);return a(),t.addEventListener("change",a),()=>t.removeEventListener("change",a)},[e]),t}(),G=(0,o.useRouter)(),B=(0,o.useSearchParams)(),{testingMode:J,testResults:K,isTestModalOpen:V,setIsTestModalOpen:X,testAccountsMode:Y,addAccountEntry:Q,setAddAccountEntry:Z,addConnectionError:ee,setAddConnectionError:et,repairConnection:es,setRepairConnection:ea,handleToggleProvider:ei,handleBatchTest:el,handleTestAccounts:eo,handleSaveApiKey:ec,handleRepairConnection:eu}=function({connections:e,setConnections:t,refreshData:s}){let[a,i]=(0,n.useState)(null),[l,o]=(0,n.useState)(null),[d,c]=(0,n.useState)(!1),[u,p]=(0,n.useState)(null),[m,f]=(0,n.useState)(null),[h,x]=(0,n.useState)(""),[b,g]=(0,n.useState)(null),v=(0,H.i)(e=>e.success),y=(0,H.i)(e=>e.error),j=(0,H.i)(e=>e.warning),N=(0,n.useRef)(e),w=(0,n.useRef)(null),C=(0,n.useRef)(null);(0,n.useEffect)(()=>{N.current=e},[e]);let k=(0,n.useCallback)(async(e,a,n)=>{let i=Array.isArray(a)?a:[a],l=t=>t.provider===e&&i.includes(t.authType),o=N.current,d=o.filter(l);t(e=>e.map(e=>l(e)?{...e,isActive:n}:e)),(await Promise.allSettled(d.map(e=>fetch(`/api/providers/${e.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({isActive:n})})))).some(e=>"rejected"===e.status||!e.value.ok)&&(t(o),y("Failed to update provider. Please try again."),s()),(0,r.q0)()},[t,y,s]),A=(0,n.useCallback)(async(e,t=null)=>{if(w.current)return;let a="provider"===e?t:e;w.current=a,i(a),o(null);try{let a=await fetch("/api/providers/test-batch",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({mode:e,providerId:t})}),n=await a.json().catch(()=>({}));if(!a.ok){o({error:n?.error||"Test request failed"}),c(!0),y("Provider test failed"),s();return}if(o(n),c(!0),n.summary){let{passed:e,failed:t,total:s}=n.summary;0===t?v(`All ${s} tests passed`):j(`${e}/${s} passed, ${t} failed`)}s()}catch{o({error:"Test request failed"}),c(!0),y("Provider test failed")}finally{w.current=null,i(null)}},[s,v,y,j]),T=(0,n.useCallback)(async e=>{if(!C.current){C.current=e.id,p(e.id);try{(await fetch("/api/providers/test-batch",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({mode:"provider",providerId:e.id})})).ok||y("Account test failed"),s()}catch{y("Account test failed")}finally{C.current=null,p(null)}}},[s,y]),P=(0,n.useCallback)(async e=>{if(m){x("");try{let t=await fetch("/api/providers",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:m.id,...e})});if(t.ok){f(null),s();return}let a=await t.json().catch(()=>({}));x(a?.error||"Failed to save connection")}catch{x("Failed to save connection")}}},[m,s]),S=(0,n.useCallback)(async e=>{if(!b)return"Nothing to repair";try{let t=await fetch(`/api/providers/${b.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(t.ok)return g(null),s(),v("Connection updated. Test it to confirm."),null;return(await t.json().catch(()=>({}))).error||"Failed to save connection"}catch{return"Failed to save connection"}},[b,s,v]);return{testingMode:a,testResults:l,isTestModalOpen:d,setIsTestModalOpen:c,testAccountsMode:u,addAccountEntry:m,setAddAccountEntry:f,addConnectionError:h,setAddConnectionError:x,repairConnection:b,setRepairConnection:g,handleToggleProvider:k,handleBatchTest:A,handleTestAccounts:T,handleSaveApiKey:P,handleRepairConnection:S}}({connections:t,setConnections:s,refreshData:C}),{isCollapsed:ep,toggle:em}=function(){let[e,t]=(0,n.useState)({}),[s,a]=(0,n.useState)(!1);return(0,n.useEffect)(()=>{try{let e=localStorage.getItem(eC),s=e?JSON.parse(e):null;t(s&&"object"==typeof s&&!Array.isArray(s)?s:{})}catch{t({})}a(!0)},[]),(0,n.useEffect)(()=>{if(s)try{localStorage.setItem(eC,JSON.stringify(e))}catch{}},[e,s]),{isCollapsed:(0,n.useCallback)(t=>!!e[t],[e]),toggle:(0,n.useCallback)(e=>t(t=>({...t,[e]:!t[e]})),[])}}();(0,n.useEffect)(()=>{let e=!1;return fetch("/api/proxy-pools?isActive=true").then(e=>e.ok?e.json():{proxyPools:[]}).then(t=>{e||M(t.proxyPools||[])}).catch(()=>{}),()=>{e=!0}},[]);let{allEntries:ef,yourProviders:eh,yourProvidersTotal:ex,catalogSections:eg,filterCounts:eT,needsAttention:eP,totals:eS,isStale:eR}=function({connections:e,providerNodes:t,query:s,filter:a}){let r=(0,n.useDeferredValue)(s);return{...(0,n.useMemo)(()=>(function({connections:e,providerNodes:t,query:s="",filter:a=v.Rw.ALL}){let n=function({connections:e,providerNodes:t,statsFor:s}){var a;let n=(t||[]).filter(e=>"openai-compatible"===e.type).map(e=>({id:e.id,info:{id:e.id,name:e.name||"OpenAI Compatible",apiType:e.apiType},stats:s(e.id,ej),authGroup:"compatible",authTypes:ej,isNoAuth:!1,compatibleType:"openai",compatibleLabel:"responses"===e.apiType?"Responses":"Chat"})),r=(t||[]).filter(e=>"anthropic-compatible"===e.type).map(e=>({id:e.id,info:{id:e.id,name:e.name||"Anthropic Compatible"},stats:s(e.id,ej),authGroup:"compatible",authTypes:ej,isNoAuth:!1,compatibleType:"anthropic",compatibleLabel:"Messages"})),i=(a=Object.entries(z.zN).filter(([,e])=>!e.hidden).map(([e,t])=>({id:e,info:t,stats:s(e,ej),authGroup:"oauth",authTypes:Array.isArray(ej)?ej:[ej],isNoAuth:!!t.noAuth})),[...a].sort((t,s)=>{let a=t.info.priority??999,n=s.info.priority??999;if(a!==n)return a-n;let r=(0,v.HX)(e,t.id,ej),i=(0,v.HX)(e,s.id,ej),l=+(r.connected>0),o=+(i.connected>0);return l!==o?o-l:(t.info.name||"").localeCompare(s.info.name||"")})),l=Object.entries(z.IS).filter(([,e])=>!e.hidden).map(([e,t])=>({id:e,info:t,stats:s(e,ej),authGroup:"free",authTypes:Array.isArray(ej)?ej:[ej],isNoAuth:!!t.noAuth})).sort((e,t)=>!!t.info.noAuth-!!e.info.noAuth),o=Object.entries(z.nJ).filter(([,e])=>!e.hidden&&(e.serviceKinds??["llm"]).includes("llm")).map(([e,t])=>({id:e,info:t,stats:s(e,ej),authGroup:"free",authTypes:Array.isArray(ej)?ej:[ej],isNoAuth:!!t.noAuth})).sort((e,t)=>{let s=e.info.priority??999,a=t.info.priority??999;if(s!==a)return s-a;let n=!!t.info.noAuth-!!e.info.noAuth;if(0!==n)return n;let r=e.stats.connected>0?0:1,i=t.stats.connected>0?0:1;return r!==i?r-i:(e.info.name||"").localeCompare(t.info.name||"")}),d=Object.entries(z.fg).filter(([,e])=>!e.hidden&&(e.serviceKinds??["llm"]).includes("llm")).map(([e,t])=>({id:e,info:t,stats:s(e,ej),authGroup:"apikey",authTypes:ej,isNoAuth:!!t.noAuth})).sort((e,t)=>{let s=e.stats.total>0?0:1,a=t.stats.total>0?0:1;return s!==a?s-a:(e.info.name||"").localeCompare(t.info.name||"")}),c=new Set([...i,...l,...o,...d,...n,...r].map(e=>e.id)),u=[...new Set(e.map(e=>e.provider))].filter(e=>e&&!c.has(e)).map(e=>({id:e,info:z.Q2[e]||{id:e,name:e},stats:s(e,ej),authGroup:z.Q2[e]?.authType==="cookie"?"apikey":"oauth",authTypes:ej,isNoAuth:!1}));return[{id:"oauth",title:"Subscriptions & OAuth",subtitle:`Sign in once. ${ey.Hc.slug} refreshes tokens for you.`,entries:[...i,...u],totalCount:i.length+u.length},{id:"free",title:"Free tier providers",subtitle:"Free quotas and no-key proxies.",entries:[...l,...o],totalCount:l.length+o.length},{id:"apikey",title:"API keys & free tiers",subtitle:"Paste a key, pick models, done.",entries:d,totalCount:d.length},{id:"custom",title:"Custom providers",subtitle:"OpenAI- or Anthropic-compatible endpoints.",entries:[...n,...r],totalCount:n.length+r.length}]}({connections:e,providerNodes:t,statsFor:(t,s)=>(0,v.HX)(e,t,s)}),r=n.flatMap(e=>e.entries),i=s.trim().toLowerCase(),l=e=>(!i||(e.info.name||"").toLowerCase().includes(i))&&(0,v.f7)(a,e.stats,e.isNoAuth,e.authGroup),o=r.filter(eN).sort(ew),d=n.map(e=>{let t=e.entries.filter(e=>!eN(e));return{...e,catalogCount:t.length,entries:t.filter(l)}}).filter(e=>e.entries.length>0||"custom"===e.id),c=(0,v.ob)(r);return{allEntries:r,yourProviders:o.filter(l),yourProvidersTotal:o.length,catalogSections:d,filterCounts:c,needsAttention:r.filter(e=>(0,v.e_)(e.stats,e.isNoAuth)).slice(0,6),totals:{available:n.reduce((e,t)=>e+t.totalCount,0),connected:c[v.Rw.CONNECTED],attention:c[v.Rw.NEEDS_ATTENTION],noAuthReady:r.filter(e=>e.isNoAuth).length}}})({connections:e,providerNodes:t,query:r,filter:a}),[e,t,r,a]),isStale:s!==r}}({connections:t,providerNodes:i,query:P,filter:A}),eO=(0,n.useMemo)(()=>{let e=new Map;for(let s of t){let t=e.get(s.provider);t?t.push(s):e.set(s.provider,[s])}return e},[t]),eE=(0,n.useCallback)(e=>eO.get(e.id)||ek,[eO]),eq=ef.find(e=>e.id===U)||null,eI=(0,n.useMemo)(()=>eq?eE(eq):[],[eq,eE]),e$=A!==v.Rw.ALL,e_=P.trim().length>0,eU=e$||e_,eF=eg.filter(e=>"custom"!==e.id),eL=eg.find(e=>"custom"===e.id),eM=eL?.entries||[],eD=B?.toString()??"";(0,n.useEffect)(()=>{F((0,v.h6)(eD))},[eD]);let ez=(0,n.useCallback)(e=>{F(e.id),G.push((0,v.UP)(B?.toString(),e.id),{scroll:!1})},[G,B]),eG=(0,n.useCallback)(()=>{F(null),G.push((0,v.UP)(B?.toString(),null),{scroll:!1})},[G,B]),eB=(0,n.useCallback)(e=>{e.id===U?eG():ez(e)},[U,eG,ez]),eH=(0,n.useCallback)(e=>"compatible"===e.authGroup?null:(0,g.KC)(e.id).filter(e=>"llm"===(e.kind||e.type||"llm")).length,[]),eJ=(0,n.useCallback)(()=>el("all"),[el]),eK=(0,n.useCallback)(e=>el("provider",e.id),[el]),eV=(0,n.useCallback)((e,t)=>{let s="reconnect"!==(0,w.tT)(t).action?"open":"oauth"===t.authType?"reauthorize":"edit";"reauthorize"===s?(et(""),Z(e)):"edit"===s?ea(t):ez(e)},[ez,et,Z,ea]),eW=(0,n.useCallback)(e=>eo(e),[eo]),eX=(0,n.useCallback)(()=>eq&&eo(eq),[eq,eo]),eY=(0,n.useCallback)(()=>{eq&&(et(""),Z(eq))},[eq,Z,et]),eQ=(0,n.useCallback)(()=>I(!0),[]),eZ=(0,n.useCallback)(()=>_(!0),[]),e0=(0,n.useCallback)((e,t)=>{l(t=>[...t,e]),t(),C()},[l,C]),e1=(0,n.useCallback)(()=>{et(""),Z(null)},[Z,et]),e5=(0,n.useCallback)(()=>{T(v.Rw.ALL),S("")},[]),e2=(0,n.useCallback)(e=>S(e.target.value),[]);if(y)return(0,a.jsxs)("div",{className:"flex min-w-0 flex-col gap-6 px-1 sm:px-0",children:[(0,a.jsx)(d.CardSkeleton,{}),(0,a.jsx)(d.CardSkeleton,{})]});let e9=eh.length>0||eg.some(e=>e.entries.length>0);return(0,a.jsxs)("div",{className:"flex min-w-0 flex-col gap-5 px-1 sm:px-0",children:[(0,a.jsxs)("div",{className:"flex flex-col gap-4 lg:flex-row lg:items-end lg:justify-between",children:[(0,a.jsxs)("p",{className:"text-sm text-muted","aria-live":"polite",children:[eS.available," available \xb7 ",eS.connected," connected",eS.noAuthReady>0&&` \xb7 ${eS.noAuthReady} ready`," \xb7"," ",(0,v.HR)(eS.attention)]}),(0,a.jsx)("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-center",children:(0,a.jsxs)(b.default,{trigger:(0,a.jsx)(c.default,{size:"sm",variant:"primary",icon:"add",children:"Add provider"}),children:[(0,a.jsx)(b.MenuItem,{icon:"add",label:"Add OpenAI compatible",onSelect:()=>I(!0),children:"Add OpenAI compatible"}),(0,a.jsx)(b.MenuItem,{icon:"add",label:"Add Anthropic compatible",onSelect:()=>_(!0),children:"Add Anthropic compatible"})]})})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-3 lg:flex-row lg:items-center",children:[(0,a.jsx)(u.default,{"aria-label":"Filter providers",value:A,onChange:T,options:v.nb.map(e=>({...e,count:eT[e.value]??0}))}),(0,a.jsx)(p.default,{value:P,onChange:e2,placeholder:"Search providers",ariaLabel:"Search providers",className:"lg:ms-auto lg:w-[280px]"})]}),j&&(0,a.jsx)(m.default,{variant:"err",title:"Could not load providers",children:(0,a.jsxs)("span",{className:"flex flex-wrap items-center gap-2",children:[j,(0,a.jsx)(c.default,{size:"sm",variant:"secondary",onClick:C,children:"Retry"})]})}),eP.length>0&&(0,a.jsx)("section",{"aria-label":"Needs attention",className:"grid grid-cols-1 gap-3 md:grid-cols-2",children:eP.map(e=>(0,a.jsx)(k,{entry:e,connections:eE(e),testing:J===e.id,onRetry:eK,onRepair:eV,onCooldownExpired:C,onOpen:ez},e.id))}),e9?(0,a.jsxs)("div",{className:"flex min-w-0 flex-col gap-6 xl:flex-row xl:items-start","aria-busy":eR||void 0,children:[(0,a.jsxs)("div",{className:"flex min-w-0 flex-1 flex-col gap-6",children:[(0,a.jsx)(ed,{entries:eh,total:ex,connectionsFor:eE,selectedProvider:U,testingMode:J??void 0,testAccountsMode:Y??void 0,onOpen:eB,onClose:eG,onTest:eW,onTestAll:eJ}),(eF.length>0||eM.length>0)&&(0,a.jsx)("h2",{id:"providers-catalog",tabIndex:-1,className:"font-display text-xl font-bold lg:text-[22px]",children:"Add more providers"}),eF.map(e=>(0,a.jsx)(eb,{section:e,collapsed:ep(e.id),onToggleCollapse:em,connectionsFor:eE,showAllApikey:R,setShowAllApikey:O,forceOpen:eU,selectedProvider:U,modelCountFor:eH,openProvider:eB,handleToggleProvider:ei},e.id)),(0,a.jsx)(ev,{entries:eM,connectionsFor:eE,selectedProvider:U,modelCountFor:eH,openProvider:eB,handleToggleProvider:ei,onAddOpenAI:eQ,onAddAnthropic:eZ})]}),eq&&!D&&(0,a.jsx)(W,{entry:eq,connections:eI,onClose:eG,onChanged:C,onTestAccounts:eX,onAddAccount:eY,testingAccounts:Y===eq.id,inline:!0})]}):(0,a.jsx)(f.default,{icon:"search_off",title:"No providers match your search or filters",body:"Try a different search term or filter.",action:(0,a.jsx)(c.default,{variant:"secondary",onClick:e5,children:"Clear filters"})}),eq&&D&&(0,a.jsx)(h.default,{isOpen:!0,onClose:eG,title:eq.info.name,size:"lg","aria-label":`${eq.info.name} details`,children:(0,a.jsx)(W,{entry:eq,connections:eI,onClose:eG,onChanged:C,onTestAccounts:eX,onAddAccount:eY,testingAccounts:Y===eq.id})}),(0,a.jsx)(E,{variant:"openai",isOpen:q,onClose:()=>I(!1),onCreated:e=>e0(e,()=>I(!1))}),(0,a.jsx)(E,{variant:"anthropic",isOpen:$,onClose:()=>_(!1),onCreated:e=>e0(e,()=>_(!1))}),Q&&(0,a.jsx)(en,{entry:Q,proxyPools:L,error:ee,existingNames:t.map(e=>e.name).filter(Boolean),onSave:ec,onClose:e1,onChanged:C}),(0,a.jsx)(x.default,{isOpen:!!es,connection:es,proxyPools:L,onSave:eu,onClose:()=>ea(null)}),(0,a.jsx)(er,{isOpen:V,onClose:()=>X(!1),results:K})]})}eA.propTypes={initialProviderId:l().string};let eT=eA},51825:(e,t,s)=>{"use strict";s.d(t,{default:()=>i});var a=s(95155),n=s(84588);let r={mode:{label:"Mode",format:e=>e},defaultModel:{label:"Model",format:e=>e,mono:!0},baseUrl:{label:"Endpoint",format:e=>e,isLink:!0,mono:!0},costPerQuery:{label:"Cost / call",format:e=>0===e?"Free":`$${e.toFixed(4)}`},pricingUrl:{label:"Pricing",format:()=>"View pricing",isLink:!0},freeTier:{label:"Free tier",format:e=>e},freeMonthlyQuota:{label:"Free quota",format:e=>0===e?"—":e>=999999?"Unlimited":`${e.toLocaleString()} / mo`},searchTypes:{label:"Types",format:e=>e.join(", ")},formats:{label:"Formats",format:e=>e.join(", ")},maxMaxResults:{label:"Max results",format:e=>e},maxCharacters:{label:"Max chars",format:e=>e.toLocaleString()}};function i({config:e,provider:t,title:s="Provider Info"}){if(!e)return null;let l=Object.entries(r).filter(([t])=>void 0!==e[t]&&null!==e[t]&&""!==e[t]).map(([t,s])=>({key:t,label:s.label,value:s.format(e[t]),isLink:s.isLink,mono:s.mono,raw:e[t]})),o=t?.notice?.apiKeyUrl||t?.website,d=t?.notice?.text;return(0,a.jsxs)(n.default,{children:[(0,a.jsxs)("div",{className:"flex items-center justify-between mb-3",children:[(0,a.jsx)("h2",{className:"text-lg font-semibold",children:s}),o&&(0,a.jsxs)("a",{href:o,target:"_blank",rel:"noopener noreferrer",className:"text-xs text-coral-ink hover:underline inline-flex items-center gap-1",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-sm",children:"open_in_new"}),"Get API key"]})]}),(0,a.jsxs)("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-x-6 gap-y-2",children:[l.map(e=>(0,a.jsxs)("div",{className:"flex items-center gap-3 min-w-0",children:[(0,a.jsx)("span",{className:"text-xs text-muted w-28 shrink-0",children:e.label}),e.isLink?(0,a.jsx)("a",{href:e.raw,target:"_blank",rel:"noopener noreferrer",className:`text-sm text-coral-ink hover:underline truncate ${e.mono?"font-mono":""}`,children:e.value}):(0,a.jsx)("span",{className:`text-sm text-text truncate ${e.mono?"font-mono":""}`,children:e.value})]},e.key)),d&&(0,a.jsxs)("div",{className:"flex items-start gap-3 min-w-0 sm:col-span-2",children:[(0,a.jsx)("span",{className:"text-xs text-muted w-28 shrink-0 mt-0.5",children:"Notice"}),(0,a.jsx)("span",{className:"text-sm text-text leading-relaxed",children:d})]})]})]})}},54268:(e,t,s)=>{"use strict";s.d(t,{HR:()=>h,HX:()=>o,Rw:()=>r,UP:()=>u,e_:()=>f,f7:()=>p,h6:()=>c,nb:()=>i,ob:()=>m,s6:()=>l,sf:()=>d});var a=s(28915),n=s(53956);let r={ALL:"all",CONNECTED:"connected",NEEDS_ATTENTION:"needs-attention",OAUTH:"oauth",FREE:"free",APIKEY:"apikey"},i=[{value:r.ALL,label:"All"},{value:r.CONNECTED,label:"Connected"},{value:r.NEEDS_ATTENTION,label:"Needs attention"},{value:r.OAUTH,label:"OAuth"},{value:r.FREE,label:"Free tier"},{value:r.APIKEY,label:"API key"}];function l(e){return(0,n.Gy)(e)}function o(e,t,s){let r=Array.isArray(s)?s:[s],i=e.filter(e=>e.provider===t&&r.includes(e.authType)),l=(0,n.SB)(i),o=l.counts.ok+l.counts.warn+l.counts.err,d=i.filter(e=>["err","warn"].includes((0,n.tT)(e).status)),c=l.counts.err+l.counts.warn,u=i.length,p=u>0&&l.counts.off===u,m=i.some(e=>"Cooling down"===(0,n.tT)(e).reason),f=d.sort((e,t)=>new Date(t.lastErrorAt||0)-new Date(e.lastErrorAt||0))[0];return{connected:o,error:c,total:u,errorCode:f?function(e){if(!e)return null;let t=e.lastErrorType;if("runtime_error"===t)return"RUNTIME";if("upstream_auth_error"===t||"auth_missing"===t||"token_refresh_failed"===t||"token_expired"===t)return"AUTH";if("upstream_rate_limited"===t)return"429";if("upstream_unavailable"===t)return"5XX";if("network_error"===t)return"NET";let s=Number(e.errorCode);if(Number.isFinite(s)&&s>=400)return String(s);let n=(0,a.E2)(e.lastError);if("401"===n||"403"===n)return"AUTH";if(n&&"ERR"!==n)return n;let r=(e.lastError||"").toLowerCase();return r.includes("runtime")||r.includes("not runnable")||r.includes("not installed")?"RUNTIME":r.includes("invalid api key")||r.includes("token invalid")||r.includes("revoked")||r.includes("unauthorized")||r.includes("no access token")||r.includes("missing access token")||r.includes("auth")||r.includes("sign in")||r.includes("signin")||r.includes("expired")?"AUTH":"ERR"}(f):null,errorTime:f?.lastErrorAt?(0,a.gs)(f.lastErrorAt):null,allDisabled:p,hasCooldown:m}}function d(e){return e&&0!==e.length?e.map((e,t)=>{let s=e.name||e.email||`Account ${t+1}`,a=(0,n.tT)(e);return"off"===a.status?{value:0,kind:"none",label:s}:"warn"===a.status?{value:50,kind:"warn",label:s}:"err"===a.status?{value:100,kind:"err",label:s}:{value:100,kind:"ok",label:s}}):[{value:0,kind:"none",label:"No accounts"}]}function c(e){return new URLSearchParams(e||"").get("provider")||null}function u(e,t){let s=new URLSearchParams(e||"");t?s.set("provider",t):s.delete("provider");let a=s.toString();return a?`/dashboard/providers?${a}`:"/dashboard/providers"}function p(e,t,s=!1,a=null,n){return e===r.ALL||(e===r.CONNECTED?!s&&(t?.connected||0)>0:e===r.NEEDS_ATTENTION?f(t,s,n):e===r.OAUTH?"oauth"===a:e===r.FREE?"free"===a:e!==r.APIKEY||"apikey"===a||"compatible"===a)}function m(e){let t={[r.ALL]:e.length,[r.CONNECTED]:0,[r.NEEDS_ATTENTION]:0,[r.OAUTH]:0,[r.FREE]:0,[r.APIKEY]:0};for(let s of e){let{stats:e,isNoAuth:a,authGroup:n}=s;p(r.CONNECTED,e,a)&&(t[r.CONNECTED]+=1),p(r.NEEDS_ATTENTION,e,a,n,s.hasCooldown)&&(t[r.NEEDS_ATTENTION]+=1),"oauth"===n?t[r.OAUTH]+=1:"free"===n?t[r.FREE]+=1:("apikey"===n||"compatible"===n)&&(t[r.APIKEY]+=1)}return t}function f(e,t=!1,s){return!t&&((e?.error||0)>0||(s??e?.hasCooldown)===!0)}function h(e){return`${e} ${1===e?"needs":"need"} a look`}},54642:e=>{var t;"u">typeof __nccwpck_require__&&(__nccwpck_require__.ab="//"),(t={}).endianness=function(){return"LE"},t.hostname=function(){return"u">typeof location?location.hostname:""},t.loadavg=function(){return[]},t.uptime=function(){return 0},t.freemem=function(){return Number.MAX_VALUE},t.totalmem=function(){return Number.MAX_VALUE},t.cpus=function(){return[]},t.type=function(){return"Browser"},t.release=function(){return"u">typeof navigator?navigator.appVersion:""},t.networkInterfaces=t.getNetworkInterfaces=function(){return{}},t.arch=function(){return"javascript"},t.platform=function(){return"browser"},t.tmpdir=t.tmpDir=function(){return"/tmp"},t.EOL="\n",t.homedir=function(){return"/"},e.exports=t},64371:(e,t,s)=>{"use strict";s.d(t,{default:()=>u});var a=s(95155),n=s(14051),r=s.n(n),i=s(12115),l=s(11910),o=s(15729),d=s(31474),c=s(35591);function u({value:e,onChange:t,ariaLabel:s,placeholder:n,id:r,className:p,inputClassName:m}){let f=(0,i.useRef)(null);return(0,i.useEffect)(()=>{let e=e=>{let t;if(t=(0,c.eS)(e,{inCodeEditor:!!e?.target?.closest?.(".monaco-editor")}),e?.key!=="/"||e.metaKey||e.ctrlKey||e.altKey||t.defaultPrevented||t.isComposing||t.inEditable||t.inCodeEditor)return;let s=f.current;s&&(e.preventDefault(),s.focus(),s.select())};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[f]),(0,a.jsxs)("div",{className:(0,d.cn)("relative",p),children:[(0,a.jsx)(l.default,{ref:f,id:r,type:"search",icon:"search",value:e,onChange:t,placeholder:n,"aria-label":s,inputClassName:(0,d.cn)("min-h-10 sm:pe-10",m)}),!e&&(0,a.jsx)("span",{className:"pointer-events-none absolute inset-y-0 end-3 hidden items-center sm:flex","aria-hidden":"true",children:(0,a.jsx)(o.default,{children:"/"})})]})}u.propTypes={value:r().string.isRequired,onChange:r().func.isRequired,ariaLabel:r().string.isRequired,placeholder:r().string,id:r().string,className:r().string,inputClassName:r().string}},73321:(e,t,s)=>{"use strict";var a=s(74645);s.o(a,"notFound")&&s.d(t,{notFound:function(){return a.notFound}}),s.o(a,"useParams")&&s.d(t,{useParams:function(){return a.useParams}}),s.o(a,"usePathname")&&s.d(t,{usePathname:function(){return a.usePathname}}),s.o(a,"useRouter")&&s.d(t,{useRouter:function(){return a.useRouter}}),s.o(a,"useSearchParams")&&s.d(t,{useSearchParams:function(){return a.useSearchParams}})},86465:(e,t,s)=>{"use strict";s.d(t,{default:()=>i});var a=s(95155),n=s(14051),r=s.n(n);function i({model:e,className:t}){return(0,a.jsx)("code",{className:`inline-flex max-w-full items-center truncate rounded-md border border-line bg-raised px-2 py-0.5 font-mono text-xs text-muted${t?` ${t}`:""}`,children:e})}i.propTypes={model:r().string.isRequired,className:r().string}},96748:(e,t,s)=>{"use strict";s.d(t,{default:()=>p});var a=s(95155),n=s(12115),r=s(14051),i=s.n(r),l=s(81127),o=s(11910),d=s(92542),c=s(56061);let u="https://api.openai.com/v1";function p({isOpen:e,onClose:t,onCreated:s,onSaved:r,node:i}){let m=!!i,[f,h]=(0,n.useState)({name:"",prefix:"",baseUrl:u}),[x,b]=(0,n.useState)(!1),[g,v]=(0,n.useState)(""),[y,j]=(0,n.useState)(""),[N,w]=(0,n.useState)(!1),[C,k]=(0,n.useState)(null);(0,n.useEffect)(()=>{e&&(k(null),v(""),j(""),m?h({name:i.name||"",prefix:i.prefix||"",baseUrl:i.baseUrl||u}):h({name:"",prefix:"",baseUrl:u}))},[e,m,i]);let A=async()=>{if(f.name.trim()&&f.prefix.trim()&&f.baseUrl.trim()){b(!0);try{let e=m?`/api/provider-nodes/${i.id}`:"/api/provider-nodes",t=m?"PUT":"POST",a={name:f.name,prefix:f.prefix,baseUrl:f.baseUrl};m||(a.type="custom-embedding");let n=await fetch(e,{method:t,headers:{"Content-Type":"application/json"},body:JSON.stringify(a)}),l=await n.json();n.ok&&(m?r?.(l.node):s?.(l.node))}catch(e){console.log("Error saving custom embedding node:",e)}finally{b(!1)}}},T=async()=>{w(!0);try{let e=await fetch("/api/provider-nodes/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({baseUrl:f.baseUrl,apiKey:g,type:"custom-embedding",modelId:y.trim()||void 0})}),t=await e.json();k(t)}catch{k({valid:!1,error:"Network error"})}finally{w(!1)}};return(0,a.jsx)(l.default,{isOpen:e,title:m?"Edit Custom Embedding":"Add Custom Embedding",onClose:t,children:(0,a.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,a.jsx)(o.default,{label:"Name",value:f.name,onChange:e=>h({...f,name:e.target.value}),placeholder:"Voyage AI",hint:"Required. A friendly label for this embedding provider."}),(0,a.jsx)(o.default,{label:"Prefix",value:f.prefix,onChange:e=>h({...f,prefix:e.target.value}),placeholder:"voyage",hint:"Required. Used as the provider prefix for model IDs (e.g. voyage/voyage-3)."}),(0,a.jsx)(o.default,{label:"Base URL",value:f.baseUrl,onChange:e=>h({...f,baseUrl:e.target.value}),placeholder:"https://api.voyageai.com/v1",hint:"Most embedding APIs are OpenAI-compatible: Voyage, Cohere, Jina, Mistral, Together..."}),(0,a.jsx)(o.default,{label:"API key (for check)",type:"password",value:g,onChange:e=>v(e.target.value)}),(0,a.jsx)(o.default,{label:"Model ID (for check)",value:y,onChange:e=>j(e.target.value),placeholder:"e.g. voyage-3, embed-english-v3.0, text-embedding-3-small",hint:"Required for validation. Will send a test embeddings request."}),(0,a.jsxs)("div",{className:"flex items-center gap-3",children:[(0,a.jsx)(d.default,{onClick:T,disabled:!g||!y.trim()||N||!f.baseUrl.trim(),variant:"secondary",children:N?"Checking...":"Check"}),(()=>{if(!C)return null;let{valid:e,error:t,dimensions:s}=C;return e?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(c.default,{variant:"success",children:"Valid"}),s&&(0,a.jsxs)("span",{className:"text-sm text-muted",children:[s," dims"]})]}):(0,a.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,a.jsx)(c.default,{variant:"error",children:"Invalid"}),t&&(0,a.jsx)("span",{className:"text-sm text-err",children:t})]})})()]}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(d.default,{onClick:A,fullWidth:!0,disabled:!f.name.trim()||!f.prefix.trim()||!f.baseUrl.trim()||x,children:x?m?"Saving...":"Creating...":m?"Save":"Create"}),(0,a.jsx)(d.default,{onClick:t,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]})})}p.propTypes={isOpen:i().bool.isRequired,onClose:i().func.isRequired,onCreated:i().func,onSaved:i().func,node:i().shape({id:i().string,name:i().string,prefix:i().string,baseUrl:i().string})}},97556:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>u});var a=s(95155),n=s(12115),r=s(14051),i=s.n(r),l=s(9233),o=s(28745),d=s(81127),c=s(77671);function u({isOpen:e,onClose:t}){let[s,r]=(0,n.useState)(""),[i,p]=(0,n.useState)(!1),[m,f]=(0,n.useState)("");return(0,n.useEffect)(()=>{e&&!s&&(p(!0),f(""),fetch(o.Nu.changelogUrl).then(e=>{if(!e.ok)throw Error(`HTTP ${e.status}`);return e.text()}).then(e=>r(l.xI.parse(e))).catch(e=>f(e.message||"Failed to load")).finally(()=>p(!1)))},[e,s]),(0,a.jsxs)(d.default,{isOpen:e,onClose:t,title:"Change log",size:"full",children:[(0,a.jsxs)("div",{"aria-live":"polite",children:[i&&(0,a.jsx)(c.LoadingState,{lines:6,label:"Loading changelog",className:"py-4"}),m&&(0,a.jsxs)("p",{role:"alert",className:"py-4 text-err",children:["Failed to load changelog: ",m]})]}),!i&&!m&&s&&(0,a.jsx)("div",{className:"changelog-body text-text",dangerouslySetInnerHTML:{__html:s}})]})}l.xI.setOptions({gfm:!0,breaks:!0}),u.propTypes={isOpen:i().bool.isRequired,onClose:i().func.isRequired}}},e=>{e.O(0,[1610,4070,9233,9671,4685,2903,7899,1863,5014,8105,198,7505,4588,9284,4321,3343,2577,1039,6055,8441,3794,7358],()=>e(e.s=8428)),_N_E=e.O()}]);
@@ -1 +0,0 @@
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 I({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 z({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)(I,{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))})}I.propTypes={current:S().number,previous:S().number,period:S().string},z.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)(z);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:$}),I=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})),...Object.values(N.IS).filter(e=>e.noAuth&&!s.has(e.id)&&w(e.id)).map(e=>({provider:e.id,name:e.name}))])}).catch(()=>{}),()=>{e=!0}},[]),e}(),[z,M]=(0,a.useState)(0),D=(0,h.A)(z),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,I),E,K.current)):null,[D.routes,I,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 +0,0 @@
1
- (()=>{"use strict";var e,t,a,r,c,s,n,o,i={},d={};function f(e){var t=d[e];if(void 0!==t)return t.exports;var a=d[e]={exports:{}},r=!0;try{i[e].call(a.exports,a,a.exports,f),r=!1}finally{r&&delete d[e]}return a.exports}f.m=i,e=[],f.O=(t,a,r,c)=>{if(a){c=c||0;for(var s=e.length;s>0&&e[s-1][2]>c;s--)e[s]=e[s-1];e[s]=[a,r,c];return}for(var n=1/0,s=0;s<e.length;s++){for(var[a,r,c]=e[s],o=!0,i=0;i<a.length;i++)(!1&c||n>=c)&&Object.keys(f.O).every(e=>f.O[e](a[i]))?a.splice(i--,1):(o=!1,c<n&&(n=c));if(o){e.splice(s--,1);var d=r();void 0!==d&&(t=d)}}return t},f.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return f.d(t,{a:t}),t},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,f.t=function(e,r){if(1&r&&(e=this(e)),8&r||"object"==typeof e&&e&&(4&r&&e.__esModule||16&r&&"function"==typeof e.then))return e;var c=Object.create(null);f.r(c);var s={};t=t||[null,a({}),a([]),a(a)];for(var n=2&r&&e;"object"==typeof n&&!~t.indexOf(n);n=a(n))Object.getOwnPropertyNames(n).forEach(t=>s[t]=()=>e[t]);return s.default=()=>e,f.d(c,s),c},f.d=(e,t)=>{for(var a in t)f.o(t,a)&&!f.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},f.f={},f.e=e=>Promise.all(Object.keys(f.f).reduce((t,a)=>(f.f[a](e,t),t),[])),f.u=e=>8105===e?"static/chunks/8105-5c7e7c73b4bd532d.js":5814===e?"static/chunks/5814-f219e250823160d0.js":9233===e?"static/chunks/9233-7c1e356386d4e864.js":4070===e?"static/chunks/4070-c76ef7302b944563.js":9671===e?"static/chunks/9671-13bf0a1dd082ad39.js":4685===e?"static/chunks/4685-8a4450325e60133c.js":7899===e?"static/chunks/7899-e6a70cb9d3684f7f.js":1863===e?"static/chunks/1863-07d1c4c60eabc139.js":5014===e?"static/chunks/5014-a441cde708542153.js":198===e?"static/chunks/198-145d0ed2ec3c54f5.js":3961===e?"static/chunks/3961-193c64b1695b33ee.js":5060===e?"static/chunks/5060-1c610ccae6241090.js":971===e?"static/chunks/971-27c4c5772ea6abeb.js":3044===e?"static/chunks/3044-ee7d162fa370dc8a.js":9284===e?"static/chunks/9284-61f162b7e4e8e29a.js":9394===e?"static/chunks/9394-ac4431dfa81224cc.js":9449===e?"static/chunks/9449-f56c6dfcfae3b50a.js":"static/chunks/"+e+"."+({270:"fca1d241965ad518",1036:"8a38d2bfc9f93236",1536:"2f931db1adf1a474",1931:"0a9b23f72463011f",2513:"07cfab564e286e41",4289:"6b78acbbff5886aa",4490:"0a9025c0609ad814",4506:"fbe8545026f1cbaa",4815:"903371440731eb11",5064:"98f2197be4baff8a",6174:"18e2c57e892d721a",6354:"7a4bb5771a8b2614",6554:"5d2fe03b263ab0ac",7198:"150be318dbc95704",7556:"0336d8b6a1abd43a",7942:"65a1310eb9394724",8046:"10d75ab56fadd8a5",8202:"1ffc6ce531e066ce",8387:"d76fed15eca7020b",8388:"699e1ab12e1565d1",8922:"3da620b68775ad61",9176:"7bca687eb6d20d48",9300:"56f8a551e86baf88",9499:"83d2d5f989f163b0"})[e]+".js",f.miniCssF=e=>{},f.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),f.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r={},f.l=(e,t,a,c)=>{if(r[e])return void r[e].push(t);if(void 0!==a)for(var s,n,o=document.getElementsByTagName("script"),i=0;i<o.length;i++){var d=o[i];if(d.getAttribute("src")==e||d.getAttribute("data-webpack")=="_N_E:"+a){s=d;break}}s||(n=!0,(s=document.createElement("script")).charset="utf-8",s.timeout=120,f.nc&&s.setAttribute("nonce",f.nc),s.setAttribute("data-webpack","_N_E:"+a),s.src=f.tu(e)),r[e]=[t];var u=(t,a)=>{s.onerror=s.onload=null,clearTimeout(b);var c=r[e];if(delete r[e],s.parentNode&&s.parentNode.removeChild(s),c&&c.forEach(e=>e(a)),t)return t(a)},b=setTimeout(u.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=u.bind(null,s.onerror),s.onload=u.bind(null,s.onload),n&&document.head.appendChild(s)},f.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.tt=()=>(void 0===c&&(c={createScriptURL:e=>e},"u">typeof trustedTypes&&trustedTypes.createPolicy&&(c=trustedTypes.createPolicy("nextjs#bundler",c))),c),f.tu=e=>f.tt().createScriptURL(e),f.p="/_next/",s={8068:0,3139:0},f.f.j=(e,t)=>{var a=f.o(s,e)?s[e]:void 0;if(0!==a)if(a)t.push(a[2]);else if(/^(3139|8068)$/.test(e))s[e]=0;else{var r=new Promise((t,r)=>a=s[e]=[t,r]);t.push(a[2]=r);var c=f.p+f.u(e),n=Error();f.l(c,t=>{if(f.o(s,e)&&(0!==(a=s[e])&&(s[e]=void 0),a)){var r=t&&("load"===t.type?"missing":t.type),c=t&&t.target&&t.target.src;n.message="Loading chunk "+e+" failed.\n("+r+": "+c+")",n.name="ChunkLoadError",n.type=r,n.request=c,a[1](n)}},"chunk-"+e,e)}},f.O.j=e=>0===s[e],n=(e,t)=>{var a,r,[c,n,o]=t,i=0;if(c.some(e=>0!==s[e])){for(a in n)f.o(n,a)&&(f.m[a]=n[a]);if(o)var d=o(f)}for(e&&e(t);i<c.length;i++)r=c[i],f.o(s,r)&&s[r]&&s[r][0](),s[r]=0;return f.O(d)},(o=self.webpackChunk_N_E=self.webpackChunk_N_E||[]).forEach(n.bind(null,0)),o.push=n.bind(null,o.push.bind(o))})();