@jheavenknows/bluerouter 5.0.40 → 5.0.41

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 (1039) hide show
  1. package/app/.next-cli-build/BUILD_ID +1 -1
  2. package/app/.next-cli-build/app-path-routes-manifest.json +5 -2
  3. package/app/.next-cli-build/build-manifest.json +2 -2
  4. package/app/.next-cli-build/routes-manifest.json +20 -0
  5. package/app/.next-cli-build/server/app/(dashboard)/dashboard/analytics/page.js +2 -2
  6. package/app/.next-cli-build/server/app/(dashboard)/dashboard/analytics/page.js.nft.json +1 -1
  7. package/app/.next-cli-build/server/app/(dashboard)/dashboard/analytics/page_client-reference-manifest.js +1 -1
  8. package/app/.next-cli-build/server/app/(dashboard)/dashboard/api-keys/page.js +3 -3
  9. package/app/.next-cli-build/server/app/(dashboard)/dashboard/api-keys/page.js.nft.json +1 -1
  10. package/app/.next-cli-build/server/app/(dashboard)/dashboard/api-keys/page_client-reference-manifest.js +1 -1
  11. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js +2 -2
  12. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -1
  13. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  14. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +3 -3
  15. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
  16. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  17. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js +2 -2
  18. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  19. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  20. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js +2 -2
  21. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
  22. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  23. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js +2 -2
  24. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
  25. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  26. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js +2 -2
  27. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  28. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  29. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js +2 -2
  30. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js.nft.json +1 -1
  31. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  32. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js +2 -2
  33. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js.nft.json +1 -1
  34. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  35. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js +3 -3
  36. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js.nft.json +1 -1
  37. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  38. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js +2 -2
  39. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js.nft.json +1 -1
  40. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  41. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js +2 -2
  42. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -1
  43. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  44. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js +2 -2
  45. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  46. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  47. package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalcloudprovider/page.js +2 -2
  48. package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalcloudprovider/page.js.nft.json +1 -1
  49. package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalcloudprovider/page_client-reference-manifest.js +1 -1
  50. package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalquota/page.js +2 -0
  51. package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalquota/page.js.nft.json +1 -0
  52. package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalquota/page_client-reference-manifest.js +1 -0
  53. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js +2 -2
  54. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
  55. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  56. package/app/.next-cli-build/server/app/(dashboard)/dashboard/prompt-logs/page.js +2 -2
  57. package/app/.next-cli-build/server/app/(dashboard)/dashboard/prompt-logs/page.js.nft.json +1 -1
  58. package/app/.next-cli-build/server/app/(dashboard)/dashboard/prompt-logs/page_client-reference-manifest.js +1 -1
  59. package/app/.next-cli-build/server/app/(dashboard)/dashboard/provider-health/page.js +2 -2
  60. package/app/.next-cli-build/server/app/(dashboard)/dashboard/provider-health/page.js.nft.json +1 -1
  61. package/app/.next-cli-build/server/app/(dashboard)/dashboard/provider-health/page_client-reference-manifest.js +1 -1
  62. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js +2 -2
  63. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
  64. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  65. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js +2 -2
  66. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
  67. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  68. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js +2 -2
  69. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
  70. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  71. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js +2 -2
  72. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
  73. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  74. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js +2 -2
  75. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
  76. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  77. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js +2 -2
  78. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js.nft.json +1 -1
  79. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
  80. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js +2 -2
  81. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
  82. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  83. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js +2 -2
  84. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
  85. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  86. package/app/.next-cli-build/server/app/_global-error/page.js +3 -3
  87. package/app/.next-cli-build/server/app/_global-error/page.js.nft.json +1 -1
  88. package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  89. package/app/.next-cli-build/server/app/_global-error.html +1 -1
  90. package/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  91. package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  92. package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  93. package/app/.next-cli-build/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  94. package/app/.next-cli-build/server/app/_global-error.segments/_head.segment.rsc +1 -1
  95. package/app/.next-cli-build/server/app/_global-error.segments/_index.segment.rsc +1 -1
  96. package/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  97. package/app/.next-cli-build/server/app/_not-found/page.js +2 -2
  98. package/app/.next-cli-build/server/app/_not-found/page.js.nft.json +1 -1
  99. package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  100. package/app/.next-cli-build/server/app/_not-found.html +1 -1
  101. package/app/.next-cli-build/server/app/_not-found.rsc +5 -5
  102. package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +5 -5
  103. package/app/.next-cli-build/server/app/_not-found.segments/_head.segment.rsc +1 -1
  104. package/app/.next-cli-build/server/app/_not-found.segments/_index.segment.rsc +5 -5
  105. package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  106. package/app/.next-cli-build/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  107. package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  108. package/app/.next-cli-build/server/app/api/auth/ldap/test/route.js +1 -1
  109. package/app/.next-cli-build/server/app/api/auth/ldap/test/route.js.nft.json +1 -1
  110. package/app/.next-cli-build/server/app/api/auth/ldap/users/route.js +1 -1
  111. package/app/.next-cli-build/server/app/api/auth/ldap/users/route.js.nft.json +1 -1
  112. package/app/.next-cli-build/server/app/api/auth/login/route.js +2 -2
  113. package/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
  114. package/app/.next-cli-build/server/app/api/auth/logout/route.js +1 -1
  115. package/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
  116. package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js +1 -1
  117. package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
  118. package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js +1 -1
  119. package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
  120. package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js +1 -1
  121. package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
  122. package/app/.next-cli-build/server/app/api/auth/status/route.js +1 -1
  123. package/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
  124. package/app/.next-cli-build/server/app/api/branding/[asset]/route.js +1 -1
  125. package/app/.next-cli-build/server/app/api/branding/[asset]/route.js.nft.json +1 -1
  126. package/app/.next-cli-build/server/app/api/branding/route.js +1 -1
  127. package/app/.next-cli-build/server/app/api/branding/route.js.nft.json +1 -1
  128. package/app/.next-cli-build/server/app/api/branding/upload/route.js +1 -1
  129. package/app/.next-cli-build/server/app/api/branding/upload/route.js.nft.json +1 -1
  130. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js +2 -2
  131. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
  132. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
  133. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  134. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/autostart/route.js +1 -1
  135. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/autostart/route.js.nft.json +1 -1
  136. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/prompt-log-db/route.js +1 -1
  137. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/prompt-log-db/route.js.nft.json +1 -1
  138. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/root-ca/route.js +1 -1
  139. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/root-ca/route.js.nft.json +1 -1
  140. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js +1 -1
  141. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
  142. package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js +1 -1
  143. package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
  144. package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js +2 -2
  145. package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js.nft.json +1 -1
  146. package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js +1 -1
  147. package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
  148. package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js +1 -1
  149. package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
  150. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js +2 -2
  151. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js.nft.json +1 -1
  152. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js +2 -2
  153. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js.nft.json +1 -1
  154. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js +1 -1
  155. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
  156. package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js +3 -3
  157. package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js.nft.json +1 -1
  158. package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js +2 -2
  159. package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
  160. package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js +1 -1
  161. package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js.nft.json +1 -1
  162. package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js +2 -2
  163. package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js.nft.json +1 -1
  164. package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js +1 -1
  165. package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js.nft.json +1 -1
  166. package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
  167. package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
  168. package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js +1 -1
  169. package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js.nft.json +1 -1
  170. package/app/.next-cli-build/server/app/api/cli-tools/qwen-settings/route.js +1 -1
  171. package/app/.next-cli-build/server/app/api/cli-tools/qwen-settings/route.js.nft.json +1 -1
  172. package/app/.next-cli-build/server/app/api/combos/[id]/route.js +1 -1
  173. package/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
  174. package/app/.next-cli-build/server/app/api/combos/route.js +1 -1
  175. package/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
  176. package/app/.next-cli-build/server/app/api/dashboard/analytics/route.js +2 -2
  177. package/app/.next-cli-build/server/app/api/dashboard/analytics/route.js.nft.json +1 -1
  178. package/app/.next-cli-build/server/app/api/dashboard/combos/route.js +1 -1
  179. package/app/.next-cli-build/server/app/api/dashboard/combos/route.js.nft.json +1 -1
  180. package/app/.next-cli-build/server/app/api/dashboard/endpoint/route.js +1 -1
  181. package/app/.next-cli-build/server/app/api/dashboard/endpoint/route.js.nft.json +1 -1
  182. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/[id]/route.js +1 -1
  183. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/[id]/route.js.nft.json +1 -1
  184. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/options/route.js +1 -1
  185. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/options/route.js.nft.json +1 -1
  186. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/route.js +1 -1
  187. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/route.js.nft.json +1 -1
  188. package/app/.next-cli-build/server/app/api/health/route.js +1 -1
  189. package/app/.next-cli-build/server/app/api/health/route.js.nft.json +1 -1
  190. package/app/.next-cli-build/server/app/api/init/route.js +1 -1
  191. package/app/.next-cli-build/server/app/api/init/route.js.nft.json +1 -1
  192. package/app/.next-cli-build/server/app/api/keys/[id]/rotate/route.js +1 -1
  193. package/app/.next-cli-build/server/app/api/keys/[id]/rotate/route.js.nft.json +1 -1
  194. package/app/.next-cli-build/server/app/api/keys/[id]/route.js +1 -1
  195. package/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
  196. package/app/.next-cli-build/server/app/api/keys/route.js +2 -2
  197. package/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
  198. package/app/.next-cli-build/server/app/api/locale/route.js +1 -1
  199. package/app/.next-cli-build/server/app/api/locale/route.js.nft.json +1 -1
  200. package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js +1 -1
  201. package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
  202. package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js +5 -5
  203. package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
  204. package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js +1 -1
  205. package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
  206. package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js +1 -1
  207. package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
  208. package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js +1 -1
  209. package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
  210. package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js +1 -1
  211. package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
  212. package/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js +1 -1
  213. package/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -1
  214. package/app/.next-cli-build/server/app/api/models/alias/route.js +1 -1
  215. package/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
  216. package/app/.next-cli-build/server/app/api/models/availability/route.js +1 -1
  217. package/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
  218. package/app/.next-cli-build/server/app/api/models/custom/route.js +1 -1
  219. package/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
  220. package/app/.next-cli-build/server/app/api/models/disabled/route.js +1 -1
  221. package/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
  222. package/app/.next-cli-build/server/app/api/models/route.js +1 -1
  223. package/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
  224. package/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
  225. package/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
  226. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js +1 -1
  227. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  228. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js +1 -1
  229. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
  230. package/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js +2 -2
  231. package/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
  232. package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js +1 -1
  233. package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  234. package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js +1 -1
  235. package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
  236. package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js +1 -1
  237. package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
  238. package/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route.js +1 -1
  239. package/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -1
  240. package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js +1 -1
  241. package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  242. package/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js +1 -1
  243. package/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +1 -1
  244. package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js +1 -1
  245. package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  246. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/api-key-models/route.js +1 -1
  247. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/api-key-models/route.js.nft.json +1 -1
  248. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/import-models/route.js +1 -1
  249. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/import-models/route.js.nft.json +1 -1
  250. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/models/[...routeModel]/route.js +1 -1
  251. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/models/[...routeModel]/route.js.nft.json +1 -1
  252. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/route.js +1 -1
  253. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/route.js.nft.json +1 -1
  254. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/usage/route.js +1 -0
  255. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/usage/route.js.nft.json +1 -0
  256. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/usage/route_client-reference-manifest.js +1 -0
  257. package/app/.next-cli-build/server/app/api/personal-cloud-providers/client/route.js +1 -0
  258. package/app/.next-cli-build/server/app/api/personal-cloud-providers/client/route.js.nft.json +1 -0
  259. package/app/.next-cli-build/server/app/api/personal-cloud-providers/client/route_client-reference-manifest.js +1 -0
  260. package/app/.next-cli-build/server/app/api/personal-cloud-providers/permissions/route.js +1 -1
  261. package/app/.next-cli-build/server/app/api/personal-cloud-providers/permissions/route.js.nft.json +1 -1
  262. package/app/.next-cli-build/server/app/api/personal-cloud-providers/route.js +1 -1
  263. package/app/.next-cli-build/server/app/api/personal-cloud-providers/route.js.nft.json +1 -1
  264. package/app/.next-cli-build/server/app/api/personal-cloud-providers/routing/route.js +1 -1
  265. package/app/.next-cli-build/server/app/api/personal-cloud-providers/routing/route.js.nft.json +1 -1
  266. package/app/.next-cli-build/server/app/api/pricing/recalculate/route.js +1 -1
  267. package/app/.next-cli-build/server/app/api/pricing/recalculate/route.js.nft.json +1 -1
  268. package/app/.next-cli-build/server/app/api/pricing/route.js +1 -1
  269. package/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
  270. package/app/.next-cli-build/server/app/api/provider-health/route.js +1 -1
  271. package/app/.next-cli-build/server/app/api/provider-health/route.js.nft.json +1 -1
  272. package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js +1 -1
  273. package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  274. package/app/.next-cli-build/server/app/api/provider-nodes/route.js +1 -1
  275. package/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
  276. package/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js +1 -1
  277. package/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js.nft.json +1 -1
  278. package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js +1 -1
  279. package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  280. package/app/.next-cli-build/server/app/api/providers/[id]/route.js +1 -1
  281. package/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
  282. package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js +1 -1
  283. package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  284. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
  285. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  286. package/app/.next-cli-build/server/app/api/providers/client/route.js +1 -1
  287. package/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
  288. package/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js +1 -1
  289. package/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js.nft.json +1 -1
  290. package/app/.next-cli-build/server/app/api/providers/route.js +1 -1
  291. package/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
  292. package/app/.next-cli-build/server/app/api/providers/suggested-models/route.js +1 -1
  293. package/app/.next-cli-build/server/app/api/providers/suggested-models/route.js.nft.json +1 -1
  294. package/app/.next-cli-build/server/app/api/providers/test-batch/route.js +1 -1
  295. package/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  296. package/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
  297. package/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
  298. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js +1 -1
  299. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
  300. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js +1 -1
  301. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
  302. package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js +2 -2
  303. package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
  304. package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js +2 -2
  305. package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
  306. package/app/.next-cli-build/server/app/api/proxy-pools/route.js +1 -1
  307. package/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
  308. package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js +2 -2
  309. package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
  310. package/app/.next-cli-build/server/app/api/settings/database/route.js +1 -1
  311. package/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
  312. package/app/.next-cli-build/server/app/api/settings/proxy-test/route.js +1 -1
  313. package/app/.next-cli-build/server/app/api/settings/proxy-test/route.js.nft.json +1 -1
  314. package/app/.next-cli-build/server/app/api/settings/require-login/route.js +1 -1
  315. package/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
  316. package/app/.next-cli-build/server/app/api/settings/route.js +2 -2
  317. package/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
  318. package/app/.next-cli-build/server/app/api/shutdown/route.js +1 -1
  319. package/app/.next-cli-build/server/app/api/shutdown/route.js.nft.json +1 -1
  320. package/app/.next-cli-build/server/app/api/tags/route.js +1 -1
  321. package/app/.next-cli-build/server/app/api/tags/route.js.nft.json +1 -1
  322. package/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
  323. package/app/.next-cli-build/server/app/api/translator/console-logs/route.js.nft.json +1 -1
  324. package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +2 -2
  325. package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -1
  326. package/app/.next-cli-build/server/app/api/translator/load/route.js +1 -1
  327. package/app/.next-cli-build/server/app/api/translator/load/route.js.nft.json +1 -1
  328. package/app/.next-cli-build/server/app/api/translator/save/route.js +1 -1
  329. package/app/.next-cli-build/server/app/api/translator/save/route.js.nft.json +1 -1
  330. package/app/.next-cli-build/server/app/api/translator/send/route.js +1 -1
  331. package/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
  332. package/app/.next-cli-build/server/app/api/translator/translate/route.js +1 -1
  333. package/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
  334. package/app/.next-cli-build/server/app/api/tunnel/disable/route.js +1 -1
  335. package/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  336. package/app/.next-cli-build/server/app/api/tunnel/enable/route.js +1 -1
  337. package/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  338. package/app/.next-cli-build/server/app/api/tunnel/status/route.js +1 -1
  339. package/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
  340. package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js +1 -1
  341. package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
  342. package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js +1 -1
  343. package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
  344. package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js +1 -1
  345. package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
  346. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js +1 -1
  347. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
  348. package/app/.next-cli-build/server/app/api/tunnel/tailscale-login/route.js +1 -1
  349. package/app/.next-cli-build/server/app/api/tunnel/tailscale-login/route.js.nft.json +1 -1
  350. package/app/.next-cli-build/server/app/api/tunnel/tailscale-start-daemon/route.js +2 -2
  351. package/app/.next-cli-build/server/app/api/tunnel/tailscale-start-daemon/route.js.nft.json +1 -1
  352. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js +1 -1
  353. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  354. package/app/.next-cli-build/server/app/api/usage/chart/route.js +1 -1
  355. package/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
  356. package/app/.next-cli-build/server/app/api/usage/history/route.js +1 -1
  357. package/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
  358. package/app/.next-cli-build/server/app/api/usage/providers/route.js +1 -1
  359. package/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
  360. package/app/.next-cli-build/server/app/api/usage/request-details/route.js +1 -1
  361. package/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
  362. package/app/.next-cli-build/server/app/api/usage/request-logs/route.js +1 -1
  363. package/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  364. package/app/.next-cli-build/server/app/api/usage/stats/route.js +1 -1
  365. package/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
  366. package/app/.next-cli-build/server/app/api/usage/stream/route.js +2 -2
  367. package/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
  368. package/app/.next-cli-build/server/app/api/v1/api/chat/route.js +1 -1
  369. package/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  370. package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js +1 -1
  371. package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  372. package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js +1 -1
  373. package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  374. package/app/.next-cli-build/server/app/api/v1/audio/voices/route.js +1 -1
  375. package/app/.next-cli-build/server/app/api/v1/audio/voices/route.js.nft.json +1 -1
  376. package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js +1 -1
  377. package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  378. package/app/.next-cli-build/server/app/api/v1/embeddings/route.js +1 -1
  379. package/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  380. package/app/.next-cli-build/server/app/api/v1/images/generations/route.js +1 -1
  381. package/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  382. package/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js +1 -1
  383. package/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -1
  384. package/app/.next-cli-build/server/app/api/v1/messages/route.js +1 -1
  385. package/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
  386. package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js +1 -1
  387. package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
  388. package/app/.next-cli-build/server/app/api/v1/models/info/route.js +1 -1
  389. package/app/.next-cli-build/server/app/api/v1/models/info/route.js.nft.json +1 -1
  390. package/app/.next-cli-build/server/app/api/v1/models/route.js +1 -1
  391. package/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
  392. package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js +1 -1
  393. package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
  394. package/app/.next-cli-build/server/app/api/v1/responses/route.js +1 -1
  395. package/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
  396. package/app/.next-cli-build/server/app/api/v1/route.js +1 -1
  397. package/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
  398. package/app/.next-cli-build/server/app/api/v1/search/route.js +1 -1
  399. package/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
  400. package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js +1 -1
  401. package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
  402. package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js +1 -1
  403. package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  404. package/app/.next-cli-build/server/app/api/v1beta/models/route.js +1 -1
  405. package/app/.next-cli-build/server/app/api/v1beta/models/route.js.nft.json +1 -1
  406. package/app/.next-cli-build/server/app/api/version/restart/route.js +1 -1
  407. package/app/.next-cli-build/server/app/api/version/restart/route.js.nft.json +1 -1
  408. package/app/.next-cli-build/server/app/api/version/route.js +1 -1
  409. package/app/.next-cli-build/server/app/api/version/route.js.nft.json +1 -1
  410. package/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
  411. package/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
  412. package/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
  413. package/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +1 -1
  414. package/app/.next-cli-build/server/app/callback/page.js +2 -2
  415. package/app/.next-cli-build/server/app/callback/page.js.nft.json +1 -1
  416. package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  417. package/app/.next-cli-build/server/app/callback.html +1 -1
  418. package/app/.next-cli-build/server/app/callback.rsc +5 -5
  419. package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +5 -5
  420. package/app/.next-cli-build/server/app/callback.segments/_head.segment.rsc +1 -1
  421. package/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +5 -5
  422. package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +1 -1
  423. package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  424. package/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
  425. package/app/.next-cli-build/server/app/dashboard/analytics.html +1 -1
  426. package/app/.next-cli-build/server/app/dashboard/analytics.rsc +6 -6
  427. package/app/.next-cli-build/server/app/dashboard/analytics.segments/!KGRhc2hib2FyZCk/dashboard/analytics/__PAGE__.segment.rsc +1 -1
  428. package/app/.next-cli-build/server/app/dashboard/analytics.segments/!KGRhc2hib2FyZCk/dashboard/analytics.segment.rsc +1 -1
  429. package/app/.next-cli-build/server/app/dashboard/analytics.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  430. package/app/.next-cli-build/server/app/dashboard/analytics.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  431. package/app/.next-cli-build/server/app/dashboard/analytics.segments/_full.segment.rsc +6 -6
  432. package/app/.next-cli-build/server/app/dashboard/analytics.segments/_head.segment.rsc +1 -1
  433. package/app/.next-cli-build/server/app/dashboard/analytics.segments/_index.segment.rsc +5 -5
  434. package/app/.next-cli-build/server/app/dashboard/analytics.segments/_tree.segment.rsc +1 -1
  435. package/app/.next-cli-build/server/app/dashboard/api-keys.html +1 -1
  436. package/app/.next-cli-build/server/app/dashboard/api-keys.rsc +7 -7
  437. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk/dashboard/api-keys/__PAGE__.segment.rsc +2 -2
  438. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk/dashboard/api-keys.segment.rsc +1 -1
  439. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  440. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  441. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_full.segment.rsc +7 -7
  442. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_head.segment.rsc +1 -1
  443. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_index.segment.rsc +5 -5
  444. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_tree.segment.rsc +1 -1
  445. package/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
  446. package/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +7 -7
  447. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
  448. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
  449. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  450. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  451. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +7 -7
  452. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
  453. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_index.segment.rsc +5 -5
  454. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
  455. package/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
  456. package/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +7 -7
  457. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
  458. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
  459. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  460. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  461. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +7 -7
  462. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
  463. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_index.segment.rsc +5 -5
  464. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
  465. package/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
  466. package/app/.next-cli-build/server/app/dashboard/combos.rsc +7 -7
  467. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
  468. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
  469. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  470. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  471. package/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +7 -7
  472. package/app/.next-cli-build/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
  473. package/app/.next-cli-build/server/app/dashboard/combos.segments/_index.segment.rsc +5 -5
  474. package/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
  475. package/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
  476. package/app/.next-cli-build/server/app/dashboard/endpoint.rsc +7 -7
  477. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
  478. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
  479. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  480. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  481. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +7 -7
  482. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
  483. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_index.segment.rsc +5 -5
  484. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
  485. package/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
  486. package/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +7 -7
  487. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
  488. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
  489. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
  490. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  491. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  492. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +7 -7
  493. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
  494. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +5 -5
  495. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +1 -1
  496. package/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
  497. package/app/.next-cli-build/server/app/dashboard/mitm.rsc +7 -7
  498. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
  499. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
  500. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  501. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  502. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +7 -7
  503. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
  504. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_index.segment.rsc +5 -5
  505. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
  506. package/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
  507. package/app/.next-cli-build/server/app/dashboard/profile.rsc +6 -6
  508. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +1 -1
  509. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
  510. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  511. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  512. package/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +6 -6
  513. package/app/.next-cli-build/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
  514. package/app/.next-cli-build/server/app/dashboard/profile.segments/_index.segment.rsc +5 -5
  515. package/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
  516. package/app/.next-cli-build/server/app/dashboard/prompt-logs.html +1 -1
  517. package/app/.next-cli-build/server/app/dashboard/prompt-logs.rsc +6 -6
  518. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk/dashboard/prompt-logs/__PAGE__.segment.rsc +1 -1
  519. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk/dashboard/prompt-logs.segment.rsc +1 -1
  520. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  521. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  522. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_full.segment.rsc +6 -6
  523. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_head.segment.rsc +1 -1
  524. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_index.segment.rsc +5 -5
  525. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_tree.segment.rsc +1 -1
  526. package/app/.next-cli-build/server/app/dashboard/provider-health.html +1 -1
  527. package/app/.next-cli-build/server/app/dashboard/provider-health.rsc +6 -6
  528. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk/dashboard/provider-health/__PAGE__.segment.rsc +1 -1
  529. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk/dashboard/provider-health.segment.rsc +1 -1
  530. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  531. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  532. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_full.segment.rsc +6 -6
  533. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_head.segment.rsc +1 -1
  534. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_index.segment.rsc +5 -5
  535. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_tree.segment.rsc +1 -1
  536. package/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
  537. package/app/.next-cli-build/server/app/dashboard/providers/new.rsc +7 -7
  538. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
  539. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
  540. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  541. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  542. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  543. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +7 -7
  544. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
  545. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_index.segment.rsc +5 -5
  546. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
  547. package/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
  548. package/app/.next-cli-build/server/app/dashboard/providers.rsc +7 -7
  549. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
  550. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  551. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  552. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  553. package/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +7 -7
  554. package/app/.next-cli-build/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
  555. package/app/.next-cli-build/server/app/dashboard/providers.segments/_index.segment.rsc +5 -5
  556. package/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
  557. package/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
  558. package/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +7 -7
  559. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
  560. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
  561. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  562. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  563. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +7 -7
  564. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
  565. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +5 -5
  566. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
  567. package/app/.next-cli-build/server/app/dashboard/quota.html +1 -1
  568. package/app/.next-cli-build/server/app/dashboard/quota.rsc +8 -8
  569. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
  570. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
  571. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  572. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  573. package/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +8 -8
  574. package/app/.next-cli-build/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
  575. package/app/.next-cli-build/server/app/dashboard/quota.segments/_index.segment.rsc +5 -5
  576. package/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
  577. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js +2 -2
  578. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js.nft.json +1 -1
  579. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  580. package/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  581. package/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +5 -5
  582. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +5 -5
  583. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  584. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +5 -5
  585. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
  586. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  587. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  588. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  589. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  590. package/app/.next-cli-build/server/app/dashboard/skills.html +1 -1
  591. package/app/.next-cli-build/server/app/dashboard/skills.rsc +7 -7
  592. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +2 -2
  593. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills.segment.rsc +1 -1
  594. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  595. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  596. package/app/.next-cli-build/server/app/dashboard/skills.segments/_full.segment.rsc +7 -7
  597. package/app/.next-cli-build/server/app/dashboard/skills.segments/_head.segment.rsc +1 -1
  598. package/app/.next-cli-build/server/app/dashboard/skills.segments/_index.segment.rsc +5 -5
  599. package/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.segment.rsc +1 -1
  600. package/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
  601. package/app/.next-cli-build/server/app/dashboard/translator.rsc +7 -7
  602. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
  603. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
  604. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  605. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  606. package/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +7 -7
  607. package/app/.next-cli-build/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
  608. package/app/.next-cli-build/server/app/dashboard/translator.segments/_index.segment.rsc +5 -5
  609. package/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
  610. package/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
  611. package/app/.next-cli-build/server/app/dashboard/usage.rsc +7 -7
  612. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
  613. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
  614. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  615. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  616. package/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +7 -7
  617. package/app/.next-cli-build/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
  618. package/app/.next-cli-build/server/app/dashboard/usage.segments/_index.segment.rsc +5 -5
  619. package/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
  620. package/app/.next-cli-build/server/app/dashboard.html +1 -1
  621. package/app/.next-cli-build/server/app/dashboard.rsc +7 -7
  622. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
  623. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  624. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  625. package/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +7 -7
  626. package/app/.next-cli-build/server/app/dashboard.segments/_head.segment.rsc +1 -1
  627. package/app/.next-cli-build/server/app/dashboard.segments/_index.segment.rsc +5 -5
  628. package/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +1 -1
  629. package/app/.next-cli-build/server/app/favicon.ico/route.js +1 -1
  630. package/app/.next-cli-build/server/app/favicon.ico/route.js.nft.json +1 -1
  631. package/app/.next-cli-build/server/app/index.html +1 -1
  632. package/app/.next-cli-build/server/app/index.rsc +5 -5
  633. package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  634. package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +5 -5
  635. package/app/.next-cli-build/server/app/index.segments/_head.segment.rsc +1 -1
  636. package/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +5 -5
  637. package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +1 -1
  638. package/app/.next-cli-build/server/app/landing/page.js +2 -2
  639. package/app/.next-cli-build/server/app/landing/page.js.nft.json +1 -1
  640. package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  641. package/app/.next-cli-build/server/app/landing.html +1 -1
  642. package/app/.next-cli-build/server/app/landing.rsc +5 -5
  643. package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +5 -5
  644. package/app/.next-cli-build/server/app/landing.segments/_head.segment.rsc +1 -1
  645. package/app/.next-cli-build/server/app/landing.segments/_index.segment.rsc +5 -5
  646. package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +1 -1
  647. package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
  648. package/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
  649. package/app/.next-cli-build/server/app/login/page.js +2 -2
  650. package/app/.next-cli-build/server/app/login/page.js.nft.json +1 -1
  651. package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  652. package/app/.next-cli-build/server/app/login.html +1 -1
  653. package/app/.next-cli-build/server/app/login.rsc +6 -6
  654. package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +6 -6
  655. package/app/.next-cli-build/server/app/login.segments/_head.segment.rsc +1 -1
  656. package/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +5 -5
  657. package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +1 -1
  658. package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  659. package/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
  660. package/app/.next-cli-build/server/app/manifest.webmanifest/route.js +2 -2
  661. package/app/.next-cli-build/server/app/manifest.webmanifest/route.js.nft.json +1 -1
  662. package/app/.next-cli-build/server/app/page.js +2 -2
  663. package/app/.next-cli-build/server/app/page.js.nft.json +1 -1
  664. package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  665. package/app/.next-cli-build/server/app-paths-manifest.json +5 -2
  666. package/app/.next-cli-build/server/chunks/12.js +1 -1
  667. package/app/.next-cli-build/server/chunks/2338.js +4 -4
  668. package/app/.next-cli-build/server/chunks/3110.js +1 -1
  669. package/app/.next-cli-build/server/chunks/3801.js +1 -1
  670. package/app/.next-cli-build/server/chunks/436.js +1 -1
  671. package/app/.next-cli-build/server/chunks/4746.js +1 -1
  672. package/app/.next-cli-build/server/chunks/6105.js +2 -2
  673. package/app/.next-cli-build/server/chunks/6328.js +1 -1
  674. package/app/.next-cli-build/server/chunks/700.js +2 -2
  675. package/app/.next-cli-build/server/chunks/7016.js +1 -0
  676. package/app/.next-cli-build/server/chunks/8352.js +2 -2
  677. package/app/.next-cli-build/server/chunks/9413.js +1 -0
  678. package/app/.next-cli-build/server/chunks/9434.js +1 -1
  679. package/app/.next-cli-build/server/chunks/9609.js +1 -1
  680. package/app/.next-cli-build/server/instrumentation.js +1 -1
  681. package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  682. package/app/.next-cli-build/server/pages/404.html +1 -1
  683. package/app/.next-cli-build/server/pages/500.html +1 -1
  684. package/app/.next-cli-build/static/J5gjaf7cXQ6wiBFocE-Bp/_buildManifest.js +1 -0
  685. package/app/.next-cli-build/static/chunks/5263-8177c3bd054944f0.js +1 -0
  686. package/app/.next-cli-build/static/chunks/{5497-37d7e39d9b7f41ec.js → 5497-b9a1b689f67aa08f.js} +1 -1
  687. package/app/.next-cli-build/static/chunks/5564-bd326855bc5b400e.js +1 -0
  688. package/app/.next-cli-build/static/chunks/7413-6dc7db963ef72704.js +1 -0
  689. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/api-keys/{page-f99eee112fd7e2c0.js → page-d17cba5c03249383.js} +1 -1
  690. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/basic-chat/{page-6f884d9c6d7bc10f.js → page-0fe6555804a9264b.js} +1 -1
  691. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/cli-tools/[toolId]/{page-b36699277e42647e.js → page-0986f42dc41bebfa.js} +1 -1
  692. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/cli-tools/{page-b7ce2f67f3b8fde0.js → page-8cb2fafd44d2c944.js} +1 -1
  693. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/combos/{page-802580883b4d181b.js → page-763ed716338265f6.js} +1 -1
  694. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/console-log/{page-45aa1ed6afb9acde.js → page-81216d587547efe4.js} +1 -1
  695. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/endpoint/{page-8cdb0fc4945ae000.js → page-f10f073dea6135f8.js} +1 -1
  696. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/[id]/{page-92721435795b5b8a.js → page-8b4b169b67b0d2db.js} +1 -1
  697. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/{page-5d64efc6166699ef.js → page-cf61958f42923b69.js} +1 -1
  698. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/media-providers/combo/[id]/{page-73139f925ad5609d.js → page-b536542f0a708a46.js} +1 -1
  699. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/media-providers/web/{page-74c18eb271ea5522.js → page-6fc459277027e444.js} +1 -1
  700. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/mitm/{page-a4237c3ad5208d87.js → page-0dd15fd784e80046.js} +1 -1
  701. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/{page-8cdb0fc4945ae000.js → page-f10f073dea6135f8.js} +1 -1
  702. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/personalcloudprovider/{page-78c5a8657c7cdc41.js → page-9afec1ce4c7607a8.js} +1 -1
  703. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/personalquota/page-cce2c552dc544645.js +1 -0
  704. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/[id]/{page-f9c643673591d4ad.js → page-a31cb59b5b878dc4.js} +1 -1
  705. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/new/{page-9d408ba3d27b6214.js → page-feab08fd8ea3abf9.js} +1 -1
  706. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/{page-c40ed16b3e4edb78.js → page-d57a153d2e06360f.js} +1 -1
  707. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/proxy-pools/{page-e9a7df35779392c1.js → page-3c1de0fa6ff18f08.js} +1 -1
  708. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/quota/page-3a31e39003735195.js +1 -0
  709. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/skills/{page-5faa7eac12100ace.js → page-533d2b73e2f2f7b0.js} +1 -1
  710. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/translator/{page-ec2b90ee9a06f476.js → page-c3eeeaf049d89657.js} +1 -1
  711. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/usage/{page-c1c3fca6dc63a2bb.js → page-7579b49088999a9c.js} +1 -1
  712. package/app/.next-cli-build/static/chunks/app/(dashboard)/{layout-7ed38ee9beca6e39.js → layout-ca699ce314f4007e.js} +1 -1
  713. package/app/.next-cli-build/static/chunks/app/_global-error/page-88236cabbffe3ce1.js +1 -0
  714. package/app/.next-cli-build/static/chunks/app/api/auth/ldap/test/route-88236cabbffe3ce1.js +1 -0
  715. package/app/.next-cli-build/static/chunks/app/api/auth/ldap/users/route-88236cabbffe3ce1.js +1 -0
  716. package/app/.next-cli-build/static/chunks/app/api/auth/login/route-88236cabbffe3ce1.js +1 -0
  717. package/app/.next-cli-build/static/chunks/app/api/auth/logout/route-88236cabbffe3ce1.js +1 -0
  718. package/app/.next-cli-build/static/chunks/app/api/auth/oidc/callback/route-88236cabbffe3ce1.js +1 -0
  719. package/app/.next-cli-build/static/chunks/app/api/auth/oidc/start/route-88236cabbffe3ce1.js +1 -0
  720. package/app/.next-cli-build/static/chunks/app/api/auth/oidc/test/route-88236cabbffe3ce1.js +1 -0
  721. package/app/.next-cli-build/static/chunks/app/api/auth/status/route-88236cabbffe3ce1.js +1 -0
  722. package/app/.next-cli-build/static/chunks/app/api/branding/[asset]/route-88236cabbffe3ce1.js +1 -0
  723. package/app/.next-cli-build/static/chunks/app/api/branding/route-88236cabbffe3ce1.js +1 -0
  724. package/app/.next-cli-build/static/chunks/app/api/branding/upload/route-88236cabbffe3ce1.js +1 -0
  725. package/app/.next-cli-build/static/chunks/app/api/cli-tools/all-statuses/route-88236cabbffe3ce1.js +1 -0
  726. package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-88236cabbffe3ce1.js +1 -0
  727. package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/autostart/route-88236cabbffe3ce1.js +1 -0
  728. package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/prompt-log-db/route-88236cabbffe3ce1.js +1 -0
  729. package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/root-ca/route-88236cabbffe3ce1.js +1 -0
  730. package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/route-88236cabbffe3ce1.js +1 -0
  731. package/app/.next-cli-build/static/chunks/app/api/cli-tools/claude-settings/route-88236cabbffe3ce1.js +1 -0
  732. package/app/.next-cli-build/static/chunks/app/api/cli-tools/cline-settings/route-88236cabbffe3ce1.js +1 -0
  733. package/app/.next-cli-build/static/chunks/app/api/cli-tools/codex-settings/route-88236cabbffe3ce1.js +1 -0
  734. package/app/.next-cli-build/static/chunks/app/api/cli-tools/copilot-settings/route-88236cabbffe3ce1.js +1 -0
  735. package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-88236cabbffe3ce1.js +1 -0
  736. package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-88236cabbffe3ce1.js +1 -0
  737. package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-settings/route-88236cabbffe3ce1.js +1 -0
  738. package/app/.next-cli-build/static/chunks/app/api/cli-tools/deepseek-tui-settings/route-88236cabbffe3ce1.js +1 -0
  739. package/app/.next-cli-build/static/chunks/app/api/cli-tools/droid-settings/route-88236cabbffe3ce1.js +1 -0
  740. package/app/.next-cli-build/static/chunks/app/api/cli-tools/hermes-settings/route-88236cabbffe3ce1.js +1 -0
  741. package/app/.next-cli-build/static/chunks/app/api/cli-tools/jcode-settings/route-88236cabbffe3ce1.js +1 -0
  742. package/app/.next-cli-build/static/chunks/app/api/cli-tools/kilo-settings/route-88236cabbffe3ce1.js +1 -0
  743. package/app/.next-cli-build/static/chunks/app/api/cli-tools/openclaw-settings/route-88236cabbffe3ce1.js +1 -0
  744. package/app/.next-cli-build/static/chunks/app/api/cli-tools/opencode-settings/route-88236cabbffe3ce1.js +1 -0
  745. package/app/.next-cli-build/static/chunks/app/api/cli-tools/qwen-settings/route-88236cabbffe3ce1.js +1 -0
  746. package/app/.next-cli-build/static/chunks/app/api/combos/[id]/route-88236cabbffe3ce1.js +1 -0
  747. package/app/.next-cli-build/static/chunks/app/api/combos/route-88236cabbffe3ce1.js +1 -0
  748. package/app/.next-cli-build/static/chunks/app/api/dashboard/analytics/route-88236cabbffe3ce1.js +1 -0
  749. package/app/.next-cli-build/static/chunks/app/api/dashboard/combos/route-88236cabbffe3ce1.js +1 -0
  750. package/app/.next-cli-build/static/chunks/app/api/dashboard/endpoint/route-88236cabbffe3ce1.js +1 -0
  751. package/app/.next-cli-build/static/chunks/app/api/dashboard/prompt-logs/[id]/route-88236cabbffe3ce1.js +1 -0
  752. package/app/.next-cli-build/static/chunks/app/api/dashboard/prompt-logs/options/route-88236cabbffe3ce1.js +1 -0
  753. package/app/.next-cli-build/static/chunks/app/api/dashboard/prompt-logs/route-88236cabbffe3ce1.js +1 -0
  754. package/app/.next-cli-build/static/chunks/app/api/health/route-88236cabbffe3ce1.js +1 -0
  755. package/app/.next-cli-build/static/chunks/app/api/init/route-88236cabbffe3ce1.js +1 -0
  756. package/app/.next-cli-build/static/chunks/app/api/keys/[id]/rotate/route-88236cabbffe3ce1.js +1 -0
  757. package/app/.next-cli-build/static/chunks/app/api/keys/[id]/route-88236cabbffe3ce1.js +1 -0
  758. package/app/.next-cli-build/static/chunks/app/api/keys/route-88236cabbffe3ce1.js +1 -0
  759. package/app/.next-cli-build/static/chunks/app/api/locale/route-88236cabbffe3ce1.js +1 -0
  760. package/app/.next-cli-build/static/chunks/app/api/mcp/[plugin]/message/route-88236cabbffe3ce1.js +1 -0
  761. package/app/.next-cli-build/static/chunks/app/api/mcp/[plugin]/sse/route-88236cabbffe3ce1.js +1 -0
  762. package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/deepgram/voices/route-88236cabbffe3ce1.js +1 -0
  763. package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-88236cabbffe3ce1.js +1 -0
  764. package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/inworld/voices/route-88236cabbffe3ce1.js +1 -0
  765. package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/minimax/voices/route-88236cabbffe3ce1.js +1 -0
  766. package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/voices/route-88236cabbffe3ce1.js +1 -0
  767. package/app/.next-cli-build/static/chunks/app/api/models/alias/route-88236cabbffe3ce1.js +1 -0
  768. package/app/.next-cli-build/static/chunks/app/api/models/availability/route-88236cabbffe3ce1.js +1 -0
  769. package/app/.next-cli-build/static/chunks/app/api/models/custom/route-88236cabbffe3ce1.js +1 -0
  770. package/app/.next-cli-build/static/chunks/app/api/models/disabled/route-88236cabbffe3ce1.js +1 -0
  771. package/app/.next-cli-build/static/chunks/app/api/models/route-88236cabbffe3ce1.js +1 -0
  772. package/app/.next-cli-build/static/chunks/app/api/models/test/route-88236cabbffe3ce1.js +1 -0
  773. package/app/.next-cli-build/static/chunks/app/api/oauth/[provider]/[action]/route-88236cabbffe3ce1.js +1 -0
  774. package/app/.next-cli-build/static/chunks/app/api/oauth/codex/import-token/route-88236cabbffe3ce1.js +1 -0
  775. package/app/.next-cli-build/static/chunks/app/api/oauth/cursor/auto-import/route-88236cabbffe3ce1.js +1 -0
  776. package/app/.next-cli-build/static/chunks/app/api/oauth/cursor/import/route-88236cabbffe3ce1.js +1 -0
  777. package/app/.next-cli-build/static/chunks/app/api/oauth/gitlab/pat/route-88236cabbffe3ce1.js +1 -0
  778. package/app/.next-cli-build/static/chunks/app/api/oauth/iflow/cookie/route-88236cabbffe3ce1.js +1 -0
  779. package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/auto-import/route-88236cabbffe3ce1.js +1 -0
  780. package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/import/route-88236cabbffe3ce1.js +1 -0
  781. package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/social-authorize/route-88236cabbffe3ce1.js +1 -0
  782. package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/social-exchange/route-88236cabbffe3ce1.js +1 -0
  783. package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/[id]/api-key-models/route-88236cabbffe3ce1.js +1 -0
  784. package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/[id]/import-models/route-88236cabbffe3ce1.js +1 -0
  785. package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/[id]/models/[...routeModel]/route-88236cabbffe3ce1.js +1 -0
  786. package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/[id]/route-88236cabbffe3ce1.js +1 -0
  787. package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/[id]/usage/route-88236cabbffe3ce1.js +1 -0
  788. package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/client/route-88236cabbffe3ce1.js +1 -0
  789. package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/permissions/route-88236cabbffe3ce1.js +1 -0
  790. package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/route-88236cabbffe3ce1.js +1 -0
  791. package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/routing/route-88236cabbffe3ce1.js +1 -0
  792. package/app/.next-cli-build/static/chunks/app/api/pricing/recalculate/route-88236cabbffe3ce1.js +1 -0
  793. package/app/.next-cli-build/static/chunks/app/api/pricing/route-88236cabbffe3ce1.js +1 -0
  794. package/app/.next-cli-build/static/chunks/app/api/provider-health/route-88236cabbffe3ce1.js +1 -0
  795. package/app/.next-cli-build/static/chunks/app/api/provider-nodes/[id]/route-88236cabbffe3ce1.js +1 -0
  796. package/app/.next-cli-build/static/chunks/app/api/provider-nodes/route-88236cabbffe3ce1.js +1 -0
  797. package/app/.next-cli-build/static/chunks/app/api/provider-nodes/validate/route-88236cabbffe3ce1.js +1 -0
  798. package/app/.next-cli-build/static/chunks/app/api/providers/[id]/models/route-88236cabbffe3ce1.js +1 -0
  799. package/app/.next-cli-build/static/chunks/app/api/providers/[id]/route-88236cabbffe3ce1.js +1 -0
  800. package/app/.next-cli-build/static/chunks/app/api/providers/[id]/test/route-88236cabbffe3ce1.js +1 -0
  801. package/app/.next-cli-build/static/chunks/app/api/providers/[id]/test-models/route-88236cabbffe3ce1.js +1 -0
  802. package/app/.next-cli-build/static/chunks/app/api/providers/client/route-88236cabbffe3ce1.js +1 -0
  803. package/app/.next-cli-build/static/chunks/app/api/providers/kilo/free-models/route-88236cabbffe3ce1.js +1 -0
  804. package/app/.next-cli-build/static/chunks/app/api/providers/route-88236cabbffe3ce1.js +1 -0
  805. package/app/.next-cli-build/static/chunks/app/api/providers/suggested-models/route-88236cabbffe3ce1.js +1 -0
  806. package/app/.next-cli-build/static/chunks/app/api/providers/test-batch/route-88236cabbffe3ce1.js +1 -0
  807. package/app/.next-cli-build/static/chunks/app/api/providers/validate/route-88236cabbffe3ce1.js +1 -0
  808. package/app/.next-cli-build/static/chunks/app/api/proxy-pools/[id]/route-88236cabbffe3ce1.js +1 -0
  809. package/app/.next-cli-build/static/chunks/app/api/proxy-pools/[id]/test/route-88236cabbffe3ce1.js +1 -0
  810. package/app/.next-cli-build/static/chunks/app/api/proxy-pools/cloudflare-deploy/route-88236cabbffe3ce1.js +1 -0
  811. package/app/.next-cli-build/static/chunks/app/api/proxy-pools/deno-deploy/route-88236cabbffe3ce1.js +1 -0
  812. package/app/.next-cli-build/static/chunks/app/api/proxy-pools/route-88236cabbffe3ce1.js +1 -0
  813. package/app/.next-cli-build/static/chunks/app/api/proxy-pools/vercel-deploy/route-88236cabbffe3ce1.js +1 -0
  814. package/app/.next-cli-build/static/chunks/app/api/settings/database/route-88236cabbffe3ce1.js +1 -0
  815. package/app/.next-cli-build/static/chunks/app/api/settings/proxy-test/route-88236cabbffe3ce1.js +1 -0
  816. package/app/.next-cli-build/static/chunks/app/api/settings/require-login/route-88236cabbffe3ce1.js +1 -0
  817. package/app/.next-cli-build/static/chunks/app/api/settings/route-88236cabbffe3ce1.js +1 -0
  818. package/app/.next-cli-build/static/chunks/app/api/shutdown/route-88236cabbffe3ce1.js +1 -0
  819. package/app/.next-cli-build/static/chunks/app/api/tags/route-88236cabbffe3ce1.js +1 -0
  820. package/app/.next-cli-build/static/chunks/app/api/translator/console-logs/route-88236cabbffe3ce1.js +1 -0
  821. package/app/.next-cli-build/static/chunks/app/api/translator/console-logs/stream/route-88236cabbffe3ce1.js +1 -0
  822. package/app/.next-cli-build/static/chunks/app/api/translator/load/route-88236cabbffe3ce1.js +1 -0
  823. package/app/.next-cli-build/static/chunks/app/api/translator/save/route-88236cabbffe3ce1.js +1 -0
  824. package/app/.next-cli-build/static/chunks/app/api/translator/send/route-88236cabbffe3ce1.js +1 -0
  825. package/app/.next-cli-build/static/chunks/app/api/translator/translate/route-88236cabbffe3ce1.js +1 -0
  826. package/app/.next-cli-build/static/chunks/app/api/tunnel/disable/route-88236cabbffe3ce1.js +1 -0
  827. package/app/.next-cli-build/static/chunks/app/api/tunnel/enable/route-88236cabbffe3ce1.js +1 -0
  828. package/app/.next-cli-build/static/chunks/app/api/tunnel/status/route-88236cabbffe3ce1.js +1 -0
  829. package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-check/route-88236cabbffe3ce1.js +1 -0
  830. package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-disable/route-88236cabbffe3ce1.js +1 -0
  831. package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-enable/route-88236cabbffe3ce1.js +1 -0
  832. package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-install/route-88236cabbffe3ce1.js +1 -0
  833. package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-login/route-88236cabbffe3ce1.js +1 -0
  834. package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-start-daemon/route-88236cabbffe3ce1.js +1 -0
  835. package/app/.next-cli-build/static/chunks/app/api/usage/[connectionId]/route-88236cabbffe3ce1.js +1 -0
  836. package/app/.next-cli-build/static/chunks/app/api/usage/chart/route-88236cabbffe3ce1.js +1 -0
  837. package/app/.next-cli-build/static/chunks/app/api/usage/history/route-88236cabbffe3ce1.js +1 -0
  838. package/app/.next-cli-build/static/chunks/app/api/usage/providers/route-88236cabbffe3ce1.js +1 -0
  839. package/app/.next-cli-build/static/chunks/app/api/usage/request-details/route-88236cabbffe3ce1.js +1 -0
  840. package/app/.next-cli-build/static/chunks/app/api/usage/request-logs/route-88236cabbffe3ce1.js +1 -0
  841. package/app/.next-cli-build/static/chunks/app/api/usage/stats/route-88236cabbffe3ce1.js +1 -0
  842. package/app/.next-cli-build/static/chunks/app/api/usage/stream/route-88236cabbffe3ce1.js +1 -0
  843. package/app/.next-cli-build/static/chunks/app/api/v1/api/chat/route-88236cabbffe3ce1.js +1 -0
  844. package/app/.next-cli-build/static/chunks/app/api/v1/audio/speech/route-88236cabbffe3ce1.js +1 -0
  845. package/app/.next-cli-build/static/chunks/app/api/v1/audio/transcriptions/route-88236cabbffe3ce1.js +1 -0
  846. package/app/.next-cli-build/static/chunks/app/api/v1/audio/voices/route-88236cabbffe3ce1.js +1 -0
  847. package/app/.next-cli-build/static/chunks/app/api/v1/chat/completions/route-88236cabbffe3ce1.js +1 -0
  848. package/app/.next-cli-build/static/chunks/app/api/v1/embeddings/route-88236cabbffe3ce1.js +1 -0
  849. package/app/.next-cli-build/static/chunks/app/api/v1/images/generations/route-88236cabbffe3ce1.js +1 -0
  850. package/app/.next-cli-build/static/chunks/app/api/v1/messages/count_tokens/route-88236cabbffe3ce1.js +1 -0
  851. package/app/.next-cli-build/static/chunks/app/api/v1/messages/route-88236cabbffe3ce1.js +1 -0
  852. package/app/.next-cli-build/static/chunks/app/api/v1/models/[kind]/route-88236cabbffe3ce1.js +1 -0
  853. package/app/.next-cli-build/static/chunks/app/api/v1/models/info/route-88236cabbffe3ce1.js +1 -0
  854. package/app/.next-cli-build/static/chunks/app/api/v1/models/route-88236cabbffe3ce1.js +1 -0
  855. package/app/.next-cli-build/static/chunks/app/api/v1/responses/compact/route-88236cabbffe3ce1.js +1 -0
  856. package/app/.next-cli-build/static/chunks/app/api/v1/responses/route-88236cabbffe3ce1.js +1 -0
  857. package/app/.next-cli-build/static/chunks/app/api/v1/route-88236cabbffe3ce1.js +1 -0
  858. package/app/.next-cli-build/static/chunks/app/api/v1/search/route-88236cabbffe3ce1.js +1 -0
  859. package/app/.next-cli-build/static/chunks/app/api/v1/web/fetch/route-88236cabbffe3ce1.js +1 -0
  860. package/app/.next-cli-build/static/chunks/app/api/v1beta/models/[...path]/route-88236cabbffe3ce1.js +1 -0
  861. package/app/.next-cli-build/static/chunks/app/api/v1beta/models/route-88236cabbffe3ce1.js +1 -0
  862. package/app/.next-cli-build/static/chunks/app/api/version/restart/route-88236cabbffe3ce1.js +1 -0
  863. package/app/.next-cli-build/static/chunks/app/api/version/route-88236cabbffe3ce1.js +1 -0
  864. package/app/.next-cli-build/static/chunks/app/api/version/shutdown/route-88236cabbffe3ce1.js +1 -0
  865. package/app/.next-cli-build/static/chunks/app/api/version/update/route-88236cabbffe3ce1.js +1 -0
  866. package/app/.next-cli-build/static/chunks/app/{layout-89d0768d6376f9e5.js → layout-95d6e77e1497d4e3.js} +1 -1
  867. package/app/.next-cli-build/static/chunks/app/login/{page-e47b11b0d77ecb52.js → page-f91aeeb0177c9f49.js} +1 -1
  868. package/app/.next-cli-build/static/chunks/app/manifest.webmanifest/route-88236cabbffe3ce1.js +1 -0
  869. package/app/.next-cli-build/static/chunks/app/page-88236cabbffe3ce1.js +1 -0
  870. package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/app-error-88236cabbffe3ce1.js +1 -0
  871. package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/forbidden-88236cabbffe3ce1.js +1 -0
  872. package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/not-found-88236cabbffe3ce1.js +1 -0
  873. package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/unauthorized-88236cabbffe3ce1.js +1 -0
  874. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/data.sqlite-shm +0 -0
  875. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/data.sqlite-wal +0 -0
  876. package/app/package.json +1 -1
  877. package/package.json +1 -1
  878. package/app/.next-cli-build/static/chunks/5263-03514be3cbcd8a7c.js +0 -1
  879. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/quota/page-bba59c6a347a93c6.js +0 -1
  880. package/app/.next-cli-build/static/chunks/app/_global-error/page-a8a7b2d8ae48d054.js +0 -1
  881. package/app/.next-cli-build/static/chunks/app/api/auth/ldap/test/route-a8a7b2d8ae48d054.js +0 -1
  882. package/app/.next-cli-build/static/chunks/app/api/auth/ldap/users/route-a8a7b2d8ae48d054.js +0 -1
  883. package/app/.next-cli-build/static/chunks/app/api/auth/login/route-a8a7b2d8ae48d054.js +0 -1
  884. package/app/.next-cli-build/static/chunks/app/api/auth/logout/route-a8a7b2d8ae48d054.js +0 -1
  885. package/app/.next-cli-build/static/chunks/app/api/auth/oidc/callback/route-a8a7b2d8ae48d054.js +0 -1
  886. package/app/.next-cli-build/static/chunks/app/api/auth/oidc/start/route-a8a7b2d8ae48d054.js +0 -1
  887. package/app/.next-cli-build/static/chunks/app/api/auth/oidc/test/route-a8a7b2d8ae48d054.js +0 -1
  888. package/app/.next-cli-build/static/chunks/app/api/auth/status/route-a8a7b2d8ae48d054.js +0 -1
  889. package/app/.next-cli-build/static/chunks/app/api/branding/[asset]/route-a8a7b2d8ae48d054.js +0 -1
  890. package/app/.next-cli-build/static/chunks/app/api/branding/route-a8a7b2d8ae48d054.js +0 -1
  891. package/app/.next-cli-build/static/chunks/app/api/branding/upload/route-a8a7b2d8ae48d054.js +0 -1
  892. package/app/.next-cli-build/static/chunks/app/api/cli-tools/all-statuses/route-a8a7b2d8ae48d054.js +0 -1
  893. package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-a8a7b2d8ae48d054.js +0 -1
  894. package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/autostart/route-a8a7b2d8ae48d054.js +0 -1
  895. package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/prompt-log-db/route-a8a7b2d8ae48d054.js +0 -1
  896. package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/root-ca/route-a8a7b2d8ae48d054.js +0 -1
  897. package/app/.next-cli-build/static/chunks/app/api/cli-tools/antigravity-mitm/route-a8a7b2d8ae48d054.js +0 -1
  898. package/app/.next-cli-build/static/chunks/app/api/cli-tools/claude-settings/route-a8a7b2d8ae48d054.js +0 -1
  899. package/app/.next-cli-build/static/chunks/app/api/cli-tools/cline-settings/route-a8a7b2d8ae48d054.js +0 -1
  900. package/app/.next-cli-build/static/chunks/app/api/cli-tools/codex-settings/route-a8a7b2d8ae48d054.js +0 -1
  901. package/app/.next-cli-build/static/chunks/app/api/cli-tools/copilot-settings/route-a8a7b2d8ae48d054.js +0 -1
  902. package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-a8a7b2d8ae48d054.js +0 -1
  903. package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-a8a7b2d8ae48d054.js +0 -1
  904. package/app/.next-cli-build/static/chunks/app/api/cli-tools/cowork-settings/route-a8a7b2d8ae48d054.js +0 -1
  905. package/app/.next-cli-build/static/chunks/app/api/cli-tools/deepseek-tui-settings/route-a8a7b2d8ae48d054.js +0 -1
  906. package/app/.next-cli-build/static/chunks/app/api/cli-tools/droid-settings/route-a8a7b2d8ae48d054.js +0 -1
  907. package/app/.next-cli-build/static/chunks/app/api/cli-tools/hermes-settings/route-a8a7b2d8ae48d054.js +0 -1
  908. package/app/.next-cli-build/static/chunks/app/api/cli-tools/jcode-settings/route-a8a7b2d8ae48d054.js +0 -1
  909. package/app/.next-cli-build/static/chunks/app/api/cli-tools/kilo-settings/route-a8a7b2d8ae48d054.js +0 -1
  910. package/app/.next-cli-build/static/chunks/app/api/cli-tools/openclaw-settings/route-a8a7b2d8ae48d054.js +0 -1
  911. package/app/.next-cli-build/static/chunks/app/api/cli-tools/opencode-settings/route-a8a7b2d8ae48d054.js +0 -1
  912. package/app/.next-cli-build/static/chunks/app/api/cli-tools/qwen-settings/route-a8a7b2d8ae48d054.js +0 -1
  913. package/app/.next-cli-build/static/chunks/app/api/combos/[id]/route-a8a7b2d8ae48d054.js +0 -1
  914. package/app/.next-cli-build/static/chunks/app/api/combos/route-a8a7b2d8ae48d054.js +0 -1
  915. package/app/.next-cli-build/static/chunks/app/api/dashboard/analytics/route-a8a7b2d8ae48d054.js +0 -1
  916. package/app/.next-cli-build/static/chunks/app/api/dashboard/combos/route-a8a7b2d8ae48d054.js +0 -1
  917. package/app/.next-cli-build/static/chunks/app/api/dashboard/endpoint/route-a8a7b2d8ae48d054.js +0 -1
  918. package/app/.next-cli-build/static/chunks/app/api/dashboard/prompt-logs/[id]/route-a8a7b2d8ae48d054.js +0 -1
  919. package/app/.next-cli-build/static/chunks/app/api/dashboard/prompt-logs/options/route-a8a7b2d8ae48d054.js +0 -1
  920. package/app/.next-cli-build/static/chunks/app/api/dashboard/prompt-logs/route-a8a7b2d8ae48d054.js +0 -1
  921. package/app/.next-cli-build/static/chunks/app/api/health/route-a8a7b2d8ae48d054.js +0 -1
  922. package/app/.next-cli-build/static/chunks/app/api/init/route-a8a7b2d8ae48d054.js +0 -1
  923. package/app/.next-cli-build/static/chunks/app/api/keys/[id]/rotate/route-a8a7b2d8ae48d054.js +0 -1
  924. package/app/.next-cli-build/static/chunks/app/api/keys/[id]/route-a8a7b2d8ae48d054.js +0 -1
  925. package/app/.next-cli-build/static/chunks/app/api/keys/route-a8a7b2d8ae48d054.js +0 -1
  926. package/app/.next-cli-build/static/chunks/app/api/locale/route-a8a7b2d8ae48d054.js +0 -1
  927. package/app/.next-cli-build/static/chunks/app/api/mcp/[plugin]/message/route-a8a7b2d8ae48d054.js +0 -1
  928. package/app/.next-cli-build/static/chunks/app/api/mcp/[plugin]/sse/route-a8a7b2d8ae48d054.js +0 -1
  929. package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/deepgram/voices/route-a8a7b2d8ae48d054.js +0 -1
  930. package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-a8a7b2d8ae48d054.js +0 -1
  931. package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/inworld/voices/route-a8a7b2d8ae48d054.js +0 -1
  932. package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/minimax/voices/route-a8a7b2d8ae48d054.js +0 -1
  933. package/app/.next-cli-build/static/chunks/app/api/media-providers/tts/voices/route-a8a7b2d8ae48d054.js +0 -1
  934. package/app/.next-cli-build/static/chunks/app/api/models/alias/route-a8a7b2d8ae48d054.js +0 -1
  935. package/app/.next-cli-build/static/chunks/app/api/models/availability/route-a8a7b2d8ae48d054.js +0 -1
  936. package/app/.next-cli-build/static/chunks/app/api/models/custom/route-a8a7b2d8ae48d054.js +0 -1
  937. package/app/.next-cli-build/static/chunks/app/api/models/disabled/route-a8a7b2d8ae48d054.js +0 -1
  938. package/app/.next-cli-build/static/chunks/app/api/models/route-a8a7b2d8ae48d054.js +0 -1
  939. package/app/.next-cli-build/static/chunks/app/api/models/test/route-a8a7b2d8ae48d054.js +0 -1
  940. package/app/.next-cli-build/static/chunks/app/api/oauth/[provider]/[action]/route-a8a7b2d8ae48d054.js +0 -1
  941. package/app/.next-cli-build/static/chunks/app/api/oauth/codex/import-token/route-a8a7b2d8ae48d054.js +0 -1
  942. package/app/.next-cli-build/static/chunks/app/api/oauth/cursor/auto-import/route-a8a7b2d8ae48d054.js +0 -1
  943. package/app/.next-cli-build/static/chunks/app/api/oauth/cursor/import/route-a8a7b2d8ae48d054.js +0 -1
  944. package/app/.next-cli-build/static/chunks/app/api/oauth/gitlab/pat/route-a8a7b2d8ae48d054.js +0 -1
  945. package/app/.next-cli-build/static/chunks/app/api/oauth/iflow/cookie/route-a8a7b2d8ae48d054.js +0 -1
  946. package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/auto-import/route-a8a7b2d8ae48d054.js +0 -1
  947. package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/import/route-a8a7b2d8ae48d054.js +0 -1
  948. package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/social-authorize/route-a8a7b2d8ae48d054.js +0 -1
  949. package/app/.next-cli-build/static/chunks/app/api/oauth/kiro/social-exchange/route-a8a7b2d8ae48d054.js +0 -1
  950. package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/[id]/api-key-models/route-a8a7b2d8ae48d054.js +0 -1
  951. package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/[id]/import-models/route-a8a7b2d8ae48d054.js +0 -1
  952. package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/[id]/models/[...routeModel]/route-a8a7b2d8ae48d054.js +0 -1
  953. package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/[id]/route-a8a7b2d8ae48d054.js +0 -1
  954. package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/permissions/route-a8a7b2d8ae48d054.js +0 -1
  955. package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/route-a8a7b2d8ae48d054.js +0 -1
  956. package/app/.next-cli-build/static/chunks/app/api/personal-cloud-providers/routing/route-a8a7b2d8ae48d054.js +0 -1
  957. package/app/.next-cli-build/static/chunks/app/api/pricing/recalculate/route-a8a7b2d8ae48d054.js +0 -1
  958. package/app/.next-cli-build/static/chunks/app/api/pricing/route-a8a7b2d8ae48d054.js +0 -1
  959. package/app/.next-cli-build/static/chunks/app/api/provider-health/route-a8a7b2d8ae48d054.js +0 -1
  960. package/app/.next-cli-build/static/chunks/app/api/provider-nodes/[id]/route-a8a7b2d8ae48d054.js +0 -1
  961. package/app/.next-cli-build/static/chunks/app/api/provider-nodes/route-a8a7b2d8ae48d054.js +0 -1
  962. package/app/.next-cli-build/static/chunks/app/api/provider-nodes/validate/route-a8a7b2d8ae48d054.js +0 -1
  963. package/app/.next-cli-build/static/chunks/app/api/providers/[id]/models/route-a8a7b2d8ae48d054.js +0 -1
  964. package/app/.next-cli-build/static/chunks/app/api/providers/[id]/route-a8a7b2d8ae48d054.js +0 -1
  965. package/app/.next-cli-build/static/chunks/app/api/providers/[id]/test/route-a8a7b2d8ae48d054.js +0 -1
  966. package/app/.next-cli-build/static/chunks/app/api/providers/[id]/test-models/route-a8a7b2d8ae48d054.js +0 -1
  967. package/app/.next-cli-build/static/chunks/app/api/providers/client/route-a8a7b2d8ae48d054.js +0 -1
  968. package/app/.next-cli-build/static/chunks/app/api/providers/kilo/free-models/route-a8a7b2d8ae48d054.js +0 -1
  969. package/app/.next-cli-build/static/chunks/app/api/providers/route-a8a7b2d8ae48d054.js +0 -1
  970. package/app/.next-cli-build/static/chunks/app/api/providers/suggested-models/route-a8a7b2d8ae48d054.js +0 -1
  971. package/app/.next-cli-build/static/chunks/app/api/providers/test-batch/route-a8a7b2d8ae48d054.js +0 -1
  972. package/app/.next-cli-build/static/chunks/app/api/providers/validate/route-a8a7b2d8ae48d054.js +0 -1
  973. package/app/.next-cli-build/static/chunks/app/api/proxy-pools/[id]/route-a8a7b2d8ae48d054.js +0 -1
  974. package/app/.next-cli-build/static/chunks/app/api/proxy-pools/[id]/test/route-a8a7b2d8ae48d054.js +0 -1
  975. package/app/.next-cli-build/static/chunks/app/api/proxy-pools/cloudflare-deploy/route-a8a7b2d8ae48d054.js +0 -1
  976. package/app/.next-cli-build/static/chunks/app/api/proxy-pools/deno-deploy/route-a8a7b2d8ae48d054.js +0 -1
  977. package/app/.next-cli-build/static/chunks/app/api/proxy-pools/route-a8a7b2d8ae48d054.js +0 -1
  978. package/app/.next-cli-build/static/chunks/app/api/proxy-pools/vercel-deploy/route-a8a7b2d8ae48d054.js +0 -1
  979. package/app/.next-cli-build/static/chunks/app/api/settings/database/route-a8a7b2d8ae48d054.js +0 -1
  980. package/app/.next-cli-build/static/chunks/app/api/settings/proxy-test/route-a8a7b2d8ae48d054.js +0 -1
  981. package/app/.next-cli-build/static/chunks/app/api/settings/require-login/route-a8a7b2d8ae48d054.js +0 -1
  982. package/app/.next-cli-build/static/chunks/app/api/settings/route-a8a7b2d8ae48d054.js +0 -1
  983. package/app/.next-cli-build/static/chunks/app/api/shutdown/route-a8a7b2d8ae48d054.js +0 -1
  984. package/app/.next-cli-build/static/chunks/app/api/tags/route-a8a7b2d8ae48d054.js +0 -1
  985. package/app/.next-cli-build/static/chunks/app/api/translator/console-logs/route-a8a7b2d8ae48d054.js +0 -1
  986. package/app/.next-cli-build/static/chunks/app/api/translator/console-logs/stream/route-a8a7b2d8ae48d054.js +0 -1
  987. package/app/.next-cli-build/static/chunks/app/api/translator/load/route-a8a7b2d8ae48d054.js +0 -1
  988. package/app/.next-cli-build/static/chunks/app/api/translator/save/route-a8a7b2d8ae48d054.js +0 -1
  989. package/app/.next-cli-build/static/chunks/app/api/translator/send/route-a8a7b2d8ae48d054.js +0 -1
  990. package/app/.next-cli-build/static/chunks/app/api/translator/translate/route-a8a7b2d8ae48d054.js +0 -1
  991. package/app/.next-cli-build/static/chunks/app/api/tunnel/disable/route-a8a7b2d8ae48d054.js +0 -1
  992. package/app/.next-cli-build/static/chunks/app/api/tunnel/enable/route-a8a7b2d8ae48d054.js +0 -1
  993. package/app/.next-cli-build/static/chunks/app/api/tunnel/status/route-a8a7b2d8ae48d054.js +0 -1
  994. package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-check/route-a8a7b2d8ae48d054.js +0 -1
  995. package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-disable/route-a8a7b2d8ae48d054.js +0 -1
  996. package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-enable/route-a8a7b2d8ae48d054.js +0 -1
  997. package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-install/route-a8a7b2d8ae48d054.js +0 -1
  998. package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-login/route-a8a7b2d8ae48d054.js +0 -1
  999. package/app/.next-cli-build/static/chunks/app/api/tunnel/tailscale-start-daemon/route-a8a7b2d8ae48d054.js +0 -1
  1000. package/app/.next-cli-build/static/chunks/app/api/usage/[connectionId]/route-a8a7b2d8ae48d054.js +0 -1
  1001. package/app/.next-cli-build/static/chunks/app/api/usage/chart/route-a8a7b2d8ae48d054.js +0 -1
  1002. package/app/.next-cli-build/static/chunks/app/api/usage/history/route-a8a7b2d8ae48d054.js +0 -1
  1003. package/app/.next-cli-build/static/chunks/app/api/usage/providers/route-a8a7b2d8ae48d054.js +0 -1
  1004. package/app/.next-cli-build/static/chunks/app/api/usage/request-details/route-a8a7b2d8ae48d054.js +0 -1
  1005. package/app/.next-cli-build/static/chunks/app/api/usage/request-logs/route-a8a7b2d8ae48d054.js +0 -1
  1006. package/app/.next-cli-build/static/chunks/app/api/usage/stats/route-a8a7b2d8ae48d054.js +0 -1
  1007. package/app/.next-cli-build/static/chunks/app/api/usage/stream/route-a8a7b2d8ae48d054.js +0 -1
  1008. package/app/.next-cli-build/static/chunks/app/api/v1/api/chat/route-a8a7b2d8ae48d054.js +0 -1
  1009. package/app/.next-cli-build/static/chunks/app/api/v1/audio/speech/route-a8a7b2d8ae48d054.js +0 -1
  1010. package/app/.next-cli-build/static/chunks/app/api/v1/audio/transcriptions/route-a8a7b2d8ae48d054.js +0 -1
  1011. package/app/.next-cli-build/static/chunks/app/api/v1/audio/voices/route-a8a7b2d8ae48d054.js +0 -1
  1012. package/app/.next-cli-build/static/chunks/app/api/v1/chat/completions/route-a8a7b2d8ae48d054.js +0 -1
  1013. package/app/.next-cli-build/static/chunks/app/api/v1/embeddings/route-a8a7b2d8ae48d054.js +0 -1
  1014. package/app/.next-cli-build/static/chunks/app/api/v1/images/generations/route-a8a7b2d8ae48d054.js +0 -1
  1015. package/app/.next-cli-build/static/chunks/app/api/v1/messages/count_tokens/route-a8a7b2d8ae48d054.js +0 -1
  1016. package/app/.next-cli-build/static/chunks/app/api/v1/messages/route-a8a7b2d8ae48d054.js +0 -1
  1017. package/app/.next-cli-build/static/chunks/app/api/v1/models/[kind]/route-a8a7b2d8ae48d054.js +0 -1
  1018. package/app/.next-cli-build/static/chunks/app/api/v1/models/info/route-a8a7b2d8ae48d054.js +0 -1
  1019. package/app/.next-cli-build/static/chunks/app/api/v1/models/route-a8a7b2d8ae48d054.js +0 -1
  1020. package/app/.next-cli-build/static/chunks/app/api/v1/responses/compact/route-a8a7b2d8ae48d054.js +0 -1
  1021. package/app/.next-cli-build/static/chunks/app/api/v1/responses/route-a8a7b2d8ae48d054.js +0 -1
  1022. package/app/.next-cli-build/static/chunks/app/api/v1/route-a8a7b2d8ae48d054.js +0 -1
  1023. package/app/.next-cli-build/static/chunks/app/api/v1/search/route-a8a7b2d8ae48d054.js +0 -1
  1024. package/app/.next-cli-build/static/chunks/app/api/v1/web/fetch/route-a8a7b2d8ae48d054.js +0 -1
  1025. package/app/.next-cli-build/static/chunks/app/api/v1beta/models/[...path]/route-a8a7b2d8ae48d054.js +0 -1
  1026. package/app/.next-cli-build/static/chunks/app/api/v1beta/models/route-a8a7b2d8ae48d054.js +0 -1
  1027. package/app/.next-cli-build/static/chunks/app/api/version/restart/route-a8a7b2d8ae48d054.js +0 -1
  1028. package/app/.next-cli-build/static/chunks/app/api/version/route-a8a7b2d8ae48d054.js +0 -1
  1029. package/app/.next-cli-build/static/chunks/app/api/version/shutdown/route-a8a7b2d8ae48d054.js +0 -1
  1030. package/app/.next-cli-build/static/chunks/app/api/version/update/route-a8a7b2d8ae48d054.js +0 -1
  1031. package/app/.next-cli-build/static/chunks/app/manifest.webmanifest/route-a8a7b2d8ae48d054.js +0 -1
  1032. package/app/.next-cli-build/static/chunks/app/page-a8a7b2d8ae48d054.js +0 -1
  1033. package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/app-error-a8a7b2d8ae48d054.js +0 -1
  1034. package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/forbidden-a8a7b2d8ae48d054.js +0 -1
  1035. package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/not-found-a8a7b2d8ae48d054.js +0 -1
  1036. package/app/.next-cli-build/static/chunks/next/dist/client/components/builtin/unauthorized-a8a7b2d8ae48d054.js +0 -1
  1037. package/app/.next-cli-build/static/uzrdve2d2uJ1lE3-lCDO2/_buildManifest.js +0 -1
  1038. /package/app/.next-cli-build/static/{uzrdve2d2uJ1lE3-lCDO2 → J5gjaf7cXQ6wiBFocE-Bp}/_ssgManifest.js +0 -0
  1039. /package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/{upgrade-5.0.35-to-5.0.36-5.0.36-20260629-212524 → upgrade-5.0.39-to-5.0.40-5.0.40-20260629-225941}/data.sqlite +0 -0
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5564],{717:(e,a,i)=>{i.d(a,{jY:()=>r,pp:()=>l});var n=i(91781);let t={alloy:{id:"alloy",name:"Alloy"},ash:{id:"ash",name:"Ash"},ballad:{id:"ballad",name:"Ballad"},cedar:{id:"cedar",name:"Cedar"},coral:{id:"coral",name:"Coral"},echo:{id:"echo",name:"Echo"},fable:{id:"fable",name:"Fable"},marin:{id:"marin",name:"Marin"},nova:{id:"nova",name:"Nova"},onyx:{id:"onyx",name:"Onyx"},sage:{id:"sage",name:"Sage"},shimmer:{id:"shimmer",name:"Shimmer"},verse:{id:"verse",name:"Verse"}},m=(...e)=>e.map(e=>({...t[e],type:"tts"})),o=m("alloy","ash","coral","echo","fable","nova","onyx","sage","shimmer"),s=m("alloy","ash","ballad","cedar","coral","echo","fable","marin","nova","onyx","sage","shimmer","verse"),d=["Zephyr","Puck","Charon","Kore","Fenrir","Leda","Orus","Aoede","Callirrhoe","Autonoe","Enceladus","Iapetus","Umbriel","Algieba","Despina","Erinome","Algenib","Rasalgethi","Laomedeia","Achernar","Alnilam","Schedar","Gacrux","Pulcherrima","Achird","Zubenelgenubi","Vindemiatrix","Sadachbia","Sadaltager","Sulafat"].map(e=>({id:e,name:e,type:"tts"})),p={openai:{models:[{id:"gpt-4o-mini-tts",name:"GPT-4o Mini TTS",type:"tts"},{id:"tts-1-hd",name:"TTS-1 HD",type:"tts"},{id:"tts-1",name:"TTS-1",type:"tts"}],voices:{"gpt-4o-mini-tts":s,"tts-1":o,"tts-1-hd":o},allVoices:s},openrouter:{models:[{id:"openai/gpt-4o-mini-tts",name:"GPT-4o Mini TTS",type:"tts"},{id:"openai/tts-1-hd",name:"TTS-1 HD",type:"tts"},{id:"openai/tts-1",name:"TTS-1",type:"tts"}],voices:{"openai/gpt-4o-mini-tts":s,"openai/tts-1":o,"openai/tts-1-hd":o},allVoices:s},elevenlabs:{models:[{id:"eleven_flash_v2_5",name:"Flash v2.5 (Fastest)",type:"tts"},{id:"eleven_turbo_v2_5",name:"Turbo v2.5 (Fast)",type:"tts"},{id:"eleven_multilingual_v2",name:"Multilingual v2 (Quality)",type:"tts"},{id:"eleven_monolingual_v1",name:"Monolingual v1 (English)",type:"tts"}]},"edge-tts":{defaults:[{id:"en-US-AriaNeural",name:"Aria (en-US)",type:"tts"},{id:"en-US-GuyNeural",name:"Guy (en-US)",type:"tts"},{id:"en-GB-SoniaNeural",name:"Sonia (en-GB)",type:"tts"},{id:"vi-VN-HoaiMyNeural",name:"Hoai My (vi-VN)",type:"tts"},{id:"vi-VN-NamMinhNeural",name:"Nam Minh (vi-VN)",type:"tts"},{id:"zh-CN-XiaoxiaoNeural",name:"Xiaoxiao (zh-CN)",type:"tts"},{id:"zh-CN-YunxiNeural",name:"Yunxi (zh-CN)",type:"tts"},{id:"fr-FR-DeniseNeural",name:"Denise (fr-FR)",type:"tts"},{id:"de-DE-KatjaNeural",name:"Katja (de-DE)",type:"tts"},{id:"ja-JP-NanamiNeural",name:"Nanami (ja-JP)",type:"tts"},{id:"ko-KR-SunHiNeural",name:"SunHi (ko-KR)",type:"tts"}]},"local-device":{defaults:[{id:"default",name:"System Default Voice",type:"tts"}]},"google-tts":{defaults:n.I},gemini:{models:[{id:"gemini-2.5-flash-preview-tts",name:"Gemini 2.5 Flash TTS",type:"tts"},{id:"gemini-2.5-pro-preview-tts",name:"Gemini 2.5 Pro TTS",type:"tts"}],voices:{"gemini-2.5-flash-preview-tts":d,"gemini-2.5-pro-preview-tts":d},allVoices:d}};function r(e,a){let i=p[e];return i?.voices&&(i.voices[a]||i.allVoices)||null}function l(){let e={};for(let[a,i]of Object.entries(p))i.models&&(e[`${a}-tts-models`]=i.models),i.allVoices&&(e[`${a}-tts-voices`]=i.allVoices),i.defaults&&(e[a]=i.defaults);return e["openai-tts-voices"]=p.openai.allVoices,e["openrouter-tts-voices"]=p.openrouter.allVoices,e}},45564:(e,a,i)=>{i.d(a,{Xg:()=>g,vq:()=>l,KC:()=>u});var n=i(54642),t=i(41463);let m={"Anthropic-Version":"2023-06-01","Anthropic-Beta":"claude-code-20250219,interleaved-thinking-2025-05-14"},o={"Anthropic-Version":"2023-06-01","Anthropic-Beta":"claude-code-20250219,oauth-2025-04-20,interleaved-thinking-2025-05-14,context-management-2025-06-27,prompt-caching-scope-2026-01-05,advanced-tool-use-2025-11-20,effort-2025-11-24,structured-outputs-2025-12-15,fast-mode-2026-02-01,redact-thinking-2026-02-12,token-efficient-tools-2026-03-28","Anthropic-Dangerous-Direct-Browser-Access":"true","User-Agent":"claude-cli/2.1.92 (external, sdk-cli)","X-App":"cli","X-Stainless-Helper-Method":"stream","X-Stainless-Retry-Count":"0","X-Stainless-Runtime-Version":"v24.14.0","X-Stainless-Package-Version":"0.80.0","X-Stainless-Runtime":"node","X-Stainless-Lang":"js","X-Stainless-Arch":function(){switch((0,n.arch)()){case"x64":return"x64";case"arm64":return"arm64";case"ia32":return"x86";default:return`other::${(0,n.arch)()}`}}(),"X-Stainless-Os":function(){switch((0,n.platform)()){case"darwin":return"MacOS";case"win32":return"Windows";case"linux":return"Linux";case"freebsd":return"FreeBSD";default:return`Other::${(0,n.platform)()}`}}(),"X-Stainless-Timeout":"600"},s="https://api.kimi.com/coding/v1/messages",d={claude:{baseUrl:"https://api.anthropic.com/v1/messages",format:"claude",headers:{...o},clientId:"9d1c250a-e61b-44d9-88ed-5944d1962f5e",tokenUrl:"https://api.anthropic.com/v1/oauth/token"},gemini:{baseUrl:"https://generativelanguage.googleapis.com/v1beta/models",format:"gemini",clientId:"681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com",clientSecret:"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"},"gemini-cli":{baseUrl:"https://cloudcode-pa.googleapis.com/v1internal",format:"gemini-cli",clientId:"681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com",clientSecret:"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"},codex:{baseUrl:"https://chatgpt.com/backend-api/codex/responses",format:"openai-responses",headers:{originator:"codex-cli","User-Agent":"codex-cli/1.0.18 (macOS; arm64)"},clientId:"app_EMoamEEZ73f0CkXaXp7hrann",tokenUrl:"https://auth.openai.com/oauth/token"},qwen:{baseUrl:"https://portal.qwen.ai/v1/chat/completions",format:"openai",clientId:"f0304373b74a44d2b584a3fb70ca9e56",tokenUrl:"https://chat.qwen.ai/api/v1/oauth2/token",authUrl:"https://chat.qwen.ai/api/v1/oauth2/device/code"},iflow:{baseUrl:"https://apis.iflow.cn/v1/chat/completions",format:"openai",headers:{"User-Agent":"iFlow-Cli"},clientId:"10009311001",clientSecret:"4Z3YjXycVsQvyGF1etiNlIBB4RsqSDtW",tokenUrl:"https://iflow.cn/oauth/token",authUrl:"https://iflow.cn/oauth"},qoder:{baseUrl:"https://api.qoder.com/v1/chat/completions",format:"openai",headers:{"User-Agent":"Qoder-Cli"},clientId:t.env.QODER_OAUTH_CLIENT_ID||"10009311001",clientSecret:t.env.QODER_OAUTH_CLIENT_SECRET||"4Z3YjXycVsQvyGF1etiNlIBB4RsqSDtW",tokenUrl:"https://api.qoder.com/oauth/token",authUrl:"https://qoder.com/oauth/authorize"},antigravity:{baseUrls:["https://daily-cloudcode-pa.googleapis.com","https://daily-cloudcode-pa.sandbox.googleapis.com"],format:"antigravity",headers:{"User-Agent":`antigravity/1.107.0 ${(0,n.platform)()}/${(0,n.arch)()}`},clientId:"1071006060591-tmhssin2h21lcre235vtolojh4g403ep.apps.googleusercontent.com",clientSecret:"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"},openrouter:{baseUrl:"https://openrouter.ai/api/v1/chat/completions",format:"openai",headers:{"HTTP-Referer":"https://endpoint-proxy.local","X-Title":"Endpoint Proxy"}},openai:{baseUrl:"https://api.openai.com/v1/chat/completions",format:"openai"},"vercel-ai-gateway":{baseUrl:"https://ai-gateway.vercel.sh/v1/chat/completions",format:"openai"},glm:{baseUrl:"https://api.z.ai/api/anthropic/v1/messages",format:"claude",headers:{...m}},"glm-cn":{baseUrl:"https://open.bigmodel.cn/api/coding/paas/v4/chat/completions",format:"openai",headers:{}},kimi:{baseUrl:s,format:"claude",headers:{...m}},minimax:{baseUrl:"https://api.minimax.io/anthropic/v1/messages",format:"claude",headers:{...m}},"minimax-cn":{baseUrl:"https://api.minimaxi.com/anthropic/v1/messages",format:"claude",headers:{...m}},alicode:{baseUrl:"https://coding.dashscope.aliyuncs.com/v1/chat/completions",format:"openai",headers:{}},"alicode-intl":{baseUrl:"https://coding-intl.dashscope.aliyuncs.com/v1/chat/completions",format:"openai",headers:{}},"volcengine-ark":{baseUrl:"https://ark.cn-beijing.volces.com/api/coding/v3/chat/completions",format:"openai",headers:{}},byteplus:{baseUrl:"https://ark.ap-southeast.bytepluses.com/api/coding/v3/chat/completions",format:"openai",headers:{}},github:{baseUrl:"https://api.githubcopilot.com/chat/completions",responsesUrl:"https://api.githubcopilot.com/responses",format:"openai",headers:{"copilot-integration-id":"vscode-chat","editor-version":"vscode/1.110.0","editor-plugin-version":"copilot-chat/0.38.0","user-agent":"GitHubCopilotChat/0.38.0","openai-intent":"conversation-panel","x-github-api-version":"2025-04-01","x-vscode-user-agent-library-version":"electron-fetch","X-Initiator":"user",Accept:"application/json","Content-Type":"application/json"},clientId:"Iv1.b507a08c87ecfe98"},kiro:{baseUrl:"https://codewhisperer.us-east-1.amazonaws.com/generateAssistantResponse",format:"kiro",retry:{429:2},headers:{"Content-Type":"application/json",Accept:"application/vnd.amazon.eventstream","X-Amz-Target":"AmazonCodeWhispererStreamingService.GenerateAssistantResponse","User-Agent":"AWS-SDK-JS/3.0.0 kiro-ide/1.0.0","X-Amz-User-Agent":"aws-sdk-js/3.0.0 kiro-ide/1.0.0"},tokenUrl:"https://prod.us-east-1.auth.desktop.kiro.dev/refreshToken",authUrl:"https://prod.us-east-1.auth.desktop.kiro.dev"},cursor:{baseUrl:"https://api2.cursor.sh",chatPath:"/aiserver.v1.ChatService/StreamUnifiedChatWithTools",format:"cursor",headers:{"connect-accept-encoding":"gzip","connect-protocol-version":"1","Content-Type":"application/connect+proto","User-Agent":"connect-es/1.6.1"},clientVersion:"3.1.0"},"kimi-coding":{baseUrl:s,format:"claude",headers:{...m},clientId:"17e5f671-d194-4dfb-9706-5516cb48c098",tokenUrl:"https://auth.kimi.com/api/oauth/token",refreshUrl:"https://auth.kimi.com/api/oauth/token"},kilocode:{baseUrl:"https://api.kilo.ai/api/openrouter/chat/completions",format:"openai",headers:{}},opencode:{baseUrl:"http://localhost:4096/v1/chat/completions",format:"openai",headers:{}},cline:{baseUrl:"https://api.cline.bot/api/v1/chat/completions",format:"openai",headers:{"HTTP-Referer":"https://cline.bot","X-Title":"Cline"},tokenUrl:"https://api.cline.bot/api/v1/auth/token",refreshUrl:"https://api.cline.bot/api/v1/auth/refresh"},nvidia:{baseUrl:"https://integrate.api.nvidia.com/v1/chat/completions",format:"openai"},anthropic:{baseUrl:"https://api.anthropic.com/v1/messages",format:"claude",headers:{...m}},deepseek:{baseUrl:"https://api.deepseek.com/chat/completions",format:"openai"},commandcode:{baseUrl:"https://api.commandcode.ai/alpha/generate",format:"commandcode",headers:{"x-command-code-version":"0.25.7","x-cli-environment":"cli"}},groq:{baseUrl:"https://api.groq.com/openai/v1/chat/completions",format:"openai"},xai:{baseUrl:"https://api.x.ai/v1/chat/completions",responsesUrl:"https://api.x.ai/v1/responses",format:"openai",clientId:"b1a00492-073a-47ea-816f-4c329264a828",tokenUrl:"https://auth.x.ai/oauth2/token",refreshUrl:"https://auth.x.ai/oauth2/token"},mistral:{baseUrl:"https://api.mistral.ai/v1/chat/completions",format:"openai"},perplexity:{baseUrl:"https://api.perplexity.ai/chat/completions",format:"openai"},together:{baseUrl:"https://api.together.xyz/v1/chat/completions",format:"openai"},fireworks:{baseUrl:"https://api.fireworks.ai/inference/v1/chat/completions",format:"openai"},cerebras:{baseUrl:"https://api.cerebras.ai/v1/chat/completions",format:"openai"},cohere:{baseUrl:"https://api.cohere.ai/v1/chat/completions",format:"openai"},nebius:{baseUrl:"https://api.studio.nebius.ai/v1/chat/completions",format:"openai"},siliconflow:{baseUrl:"https://api.siliconflow.cn/v1/chat/completions",format:"openai"},hyperbolic:{baseUrl:"https://api.hyperbolic.xyz/v1/chat/completions",format:"openai"},deepgram:{baseUrl:"https://api.deepgram.com/v1/listen",format:"openai"},assemblyai:{baseUrl:"https://api.assemblyai.com/v1/audio/transcriptions",format:"openai"},nanobanana:{baseUrl:"https://api.nanobananaapi.ai/v1/chat/completions",format:"openai"},chutes:{baseUrl:"https://llm.chutes.ai/v1/chat/completions",format:"openai"},ollama:{baseUrl:"https://ollama.com/api/chat",format:"ollama"},"ollama-local":{baseUrl:"http://localhost:11434/api/chat",format:"ollama"},vertex:{baseUrl:"https://aiplatform.googleapis.com",format:"vertex"},"vertex-partner":{baseUrl:"https://aiplatform.googleapis.com",format:"openai"},gitlab:{baseUrl:"https://gitlab.com/api/v4/chat/completions",format:"openai"},codebuddy:{baseUrl:"https://copilot.tencent.com/v1/chat/completions",format:"openai"},opencode:{baseUrl:"https://opencode.ai",format:"openai",headers:{"x-opencode-client":"desktop"},noAuth:!0},"opencode-go":{baseUrl:"https://opencode.ai/zen/go/v1/chat/completions",format:"openai",headers:{}},"grok-web":{baseUrl:"https://grok.com/rest/app-chat/conversations/new",format:"grok-web",authType:"cookie"},"perplexity-web":{baseUrl:"https://www.perplexity.ai/rest/sse/perplexity_ask",format:"perplexity-web",authType:"cookie"},azure:{baseUrl:"",format:"openai",headers:{}},"cloudflare-ai":{baseUrl:"https://api.cloudflare.com/client/v4/accounts/{accountId}/ai/v1/chat/completions",format:"openai"},"xiaomi-mimo":{baseUrl:"https://api.xiaomimimo.com/v1/chat/completions",format:"openai"},"xiaomi-tokenplan":{baseUrl:"https://token-plan-sgp.xiaomimimo.com/v1/chat/completions",format:"openai"},agentrouter:{baseUrl:"https://agentrouter.org/v1/messages",format:"claude",headers:{...o}},aimlapi:{baseUrl:"https://api.aimlapi.com/v1/chat/completions",format:"openai"},novita:{baseUrl:"https://api.novita.ai/v3/openai/chat/completions",format:"openai"},modal:{baseUrl:"https://api.modal.com/v1/chat/completions",format:"openai"},reka:{baseUrl:"https://api.reka.ai/v1/chat/completions",format:"openai"},nlpcloud:{baseUrl:"https://api.nlpcloud.io/v1/gpu/chatbot",format:"openai"},bazaarlink:{baseUrl:"https://bazaarlink.ai/api/v1/chat/completions",format:"openai"},completions:{baseUrl:"https://completions.me/api/v1/chat/completions",format:"openai"},enally:{baseUrl:"https://ai.enally.in/v1/chat/completions",format:"openai",authHeader:"x-api-key"},freetheai:{baseUrl:"https://api.freetheai.xyz/v1/chat/completions",format:"openai"},llm7:{baseUrl:"https://api.llm7.io/v1/chat/completions",format:"openai"},lepton:{baseUrl:"https://api.lepton.ai/api/v1/chat/completions",format:"openai"},kluster:{baseUrl:"https://api.kluster.ai/v1/chat/completions",format:"openai"},ai21:{baseUrl:"https://api.ai21.com/studio/v1/chat/completions",format:"openai"},"inference-net":{baseUrl:"https://api.inference.net/v1/chat/completions",format:"openai"},predibase:{baseUrl:"https://serving.app.predibase.com/v1/chat/completions",format:"openai"},bytez:{baseUrl:"https://api.bytez.com/models/v2",format:"openai"},morph:{baseUrl:"https://api.morphllm.com/v1/chat/completions",format:"openai"},longcat:{baseUrl:"https://api.longcat.chat/openai/v1/chat/completions",format:"openai"},puter:{baseUrl:"https://api.puter.com/puterai/openai/v1/chat/completions",format:"openai"},uncloseai:{baseUrl:"https://hermes.ai.unturf.com/v1/chat/completions",format:"openai",noAuth:!0},scaleway:{baseUrl:"https://api.scaleway.ai/v1/chat/completions",format:"openai"},deepinfra:{baseUrl:"https://api.deepinfra.com/v1/openai/chat/completions",format:"openai"},sambanova:{baseUrl:"https://api.sambanova.ai/v1/chat/completions",format:"openai"},nscale:{baseUrl:"https://inference.api.nscale.com/v1/chat/completions",format:"openai"},baseten:{baseUrl:"https://inference.baseten.co/v1/chat/completions",format:"openai"},publicai:{baseUrl:"https://api.publicai.co/v1/chat/completions",format:"openai"},"nous-research":{baseUrl:"https://inference-api.nousresearch.com/v1/chat/completions",format:"openai"},glhf:{baseUrl:"https://glhf.chat/api/openai/v1/chat/completions",format:"openai"},blackbox:{baseUrl:"https://api.blackbox.ai/chat/completions",format:"openai"}};var p=i(717);let r="-review",l={cc:[{id:"claude-opus-4-7",name:"Claude Opus 4.7"},{id:"claude-opus-4-6",name:"Claude Opus 4.6"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6"},{id:"claude-opus-4-5-20251101",name:"Claude 4.5 Opus"},{id:"claude-sonnet-4-5-20250929",name:"Claude 4.5 Sonnet"},{id:"claude-haiku-4-5-20251001",name:"Claude 4.5 Haiku"}],cx:[{id:"gpt-5.5",name:"GPT 5.5"},{id:"gpt-5.4",name:"GPT 5.4"},{id:"gpt-5.3-codex",name:"GPT 5.3 Codex"},{id:"gpt-5.3-codex-xhigh",name:"GPT 5.3 Codex (xHigh)"},{id:"gpt-5.3-codex-high",name:"GPT 5.3 Codex (High)"},{id:"gpt-5.3-codex-low",name:"GPT 5.3 Codex (Low)"},{id:"gpt-5.3-codex-none",name:"GPT 5.3 Codex (None)"},{id:"gpt-5.3-codex-spark",name:"GPT 5.3 Codex Spark"},{id:"gpt-5.1-codex-mini",name:"GPT 5.1 Codex Mini"},{id:"gpt-5.1-codex-mini-high",name:"GPT 5.1 Codex Mini (High)"},{id:"gpt-5.2-codex",name:"GPT 5.2 Codex"},{id:"gpt-5.2",name:"GPT 5.2"},{id:"gpt-5.1-codex-max",name:"GPT 5.1 Codex Max"},{id:"gpt-5.1-codex",name:"GPT 5.1 Codex"},{id:"gpt-5.1",name:"GPT 5.1"},{id:"gpt-5-codex",name:"GPT 5 Codex"},{id:"gpt-5-codex-mini",name:"GPT 5 Codex Mini"},{id:"gpt-5.5-image",name:"GPT 5.5 Image",type:"image",capabilities:["text2img","edit"],params:["size","quality","background","image_detail","output_format"]},{id:"gpt-5.4-image",name:"GPT 5.4 Image",type:"image",capabilities:["text2img","edit"],params:["size","quality","background","image_detail","output_format"]},{id:"gpt-5.3-image",name:"GPT 5.3 Image",type:"image",capabilities:["text2img","edit"],params:["size","quality","background","image_detail","output_format"]},{id:"gpt-5.2-image",name:"GPT 5.2 Image",type:"image",capabilities:["text2img","edit"],params:["size","quality","background","image_detail","output_format"]}].flatMap(e=>"llm"!==(e.type||"llm")||e.id.endsWith(r)?[e]:[e,{...e,id:`${e.id}${r}`,name:`${e.name} Review`,upstreamModelId:e.upstreamModelId||e.id,quotaFamily:"review"}]),gc:[{id:"gemini-3-flash-preview",name:"Gemini 3 Flash Preview"},{id:"gemini-3-pro-preview",name:"Gemini 3 Pro Preview"}],qw:[{id:"qwen3-coder-plus",name:"Qwen3 Coder Plus"},{id:"qwen3-coder-flash",name:"Qwen3 Coder Flash"},{id:"vision-model",name:"Qwen3 Vision Model"},{id:"coder-model",name:"Qwen3.6 Coder Model"}],if:[{id:"qwen3-coder-plus",name:"Qwen3 Coder Plus"},{id:"qwen3-max",name:"Qwen3 Max"},{id:"qwen3-vl-plus",name:"Qwen3 VL Plus"},{id:"qwen3-max-preview",name:"Qwen3 Max Preview"},{id:"qwen3-235b",name:"Qwen3 235B A22B"},{id:"qwen3-235b-a22b-instruct",name:"Qwen3 235B A22B Instruct"},{id:"qwen3-235b-a22b-thinking-2507",name:"Qwen3 235B A22B Thinking"},{id:"qwen3-32b",name:"Qwen3 32B"},{id:"kimi-k2",name:"Kimi K2"},{id:"deepseek-v3.2",name:"DeepSeek V3.2 Exp"},{id:"deepseek-v3.1",name:"DeepSeek V3.1 Terminus"},{id:"deepseek-v3",name:"DeepSeek V3 671B"},{id:"deepseek-r1",name:"DeepSeek R1"},{id:"glm-4.7",name:"GLM 4.7"},{id:"iflow-rome-30ba3b",name:"iFlow ROME"}],ag:[{id:"gemini-3-flash-agent",name:"Gemini 3.5 Flash (High)"},{id:"gemini-3.5-flash-low",name:"Gemini 3.5 Flash (Medium)"},{id:"gemini-pro-agent",name:"Gemini 3.1 Pro (High)"},{id:"gemini-3.1-pro-low",name:"Gemini 3.1 Pro (Low)"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6 (Thinking)"},{id:"claude-opus-4-6-thinking",name:"Claude Opus 4.6 (Thinking)"},{id:"gpt-oss-120b-medium",name:"GPT-OSS 120B (Medium)"},{id:"gemini-3-flash",name:"Gemini 3 Flash",thinking:!1}],gh:[{id:"gpt-3.5-turbo",name:"GPT-3.5 Turbo"},{id:"gpt-4",name:"GPT-4"},{id:"gpt-4o",name:"GPT-4o"},{id:"gpt-4o-mini",name:"GPT-4o mini"},{id:"gpt-4.1",name:"GPT-4.1"},{id:"gpt-5-mini",name:"GPT-5 Mini"},{id:"gpt-5.2",name:"GPT-5.2"},{id:"gpt-5.2-codex",name:"GPT-5.2 Codex"},{id:"gpt-5.3-codex",name:"GPT-5.3 Codex"},{id:"gpt-5.4",name:"GPT-5.4"},{id:"gpt-5.4-mini",name:"GPT-5.4 Mini"},{id:"claude-haiku-4.5",name:"Claude Haiku 4.5"},{id:"claude-opus-4.5",name:"Claude Opus 4.5"},{id:"claude-sonnet-4",name:"Claude Sonnet 4"},{id:"claude-sonnet-4.5",name:"Claude Sonnet 4.5"},{id:"claude-sonnet-4.6",name:"Claude Sonnet 4.6"},{id:"claude-opus-4.6",name:"Claude Opus 4.6"},{id:"claude-opus-4.7",name:"Claude Opus 4.7"},{id:"gemini-2.5-pro",name:"Gemini 2.5 Pro"},{id:"gemini-3-flash-preview",name:"Gemini 3 Flash"},{id:"gemini-3.1-pro-preview",name:"Gemini 3.1 Pro"},{id:"grok-code-fast-1",name:"Grok Code Fast 1"},{id:"oswe-vscode-prime",name:"Raptor Mini"},{id:"goldeneye-free-auto",name:"GoldenEye"},{id:"text-embedding-3-small",name:"Text Embedding 3 Small (GitHub)",type:"embedding"},{id:"text-embedding-3-large",name:"Text Embedding 3 Large (GitHub)",type:"embedding"}],kr:[{id:"claude-sonnet-4.5",name:"Claude Sonnet 4.5"},{id:"claude-haiku-4.5",name:"Claude Haiku 4.5"},{id:"deepseek-3.2",name:"DeepSeek 3.2",strip:["image","audio"]},{id:"qwen3-coder-next",name:"Qwen3 Coder Next",strip:["image","audio"]},{id:"glm-5",name:"GLM 5"},{id:"MiniMax-M2.5",name:"MiniMax M2.5"},{id:"claude-sonnet-4.5-thinking",name:"Claude Sonnet 4.5 (Thinking)"},{id:"claude-haiku-4.5-thinking",name:"Claude Haiku 4.5 (Thinking)"},{id:"claude-sonnet-4.5-agentic",name:"Claude Sonnet 4.5 (Agentic)"},{id:"claude-haiku-4.5-agentic",name:"Claude Haiku 4.5 (Agentic)"},{id:"claude-sonnet-4.5-thinking-agentic",name:"Claude Sonnet 4.5 (Thinking + Agentic)"},{id:"claude-haiku-4.5-thinking-agentic",name:"Claude Haiku 4.5 (Thinking + Agentic)"}],cu:[{id:"default",name:"Auto (Server Picks)"},{id:"claude-4.5-opus-high-thinking",name:"Claude 4.5 Opus High Thinking"},{id:"claude-4.5-opus-high",name:"Claude 4.5 Opus High"},{id:"claude-4.5-sonnet-thinking",name:"Claude 4.5 Sonnet Thinking"},{id:"claude-4.5-sonnet",name:"Claude 4.5 Sonnet"},{id:"claude-4.5-haiku",name:"Claude 4.5 Haiku"},{id:"claude-4.5-opus",name:"Claude 4.5 Opus"},{id:"gpt-5.2-codex",name:"GPT 5.2 Codex"},{id:"claude-4.6-opus-max",name:"Claude 4.6 Opus Max"},{id:"claude-4.6-sonnet-medium-thinking",name:"Claude 4.6 Sonnet Medium Thinking"},{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"gemini-3-flash-preview",name:"Gemini 3 Flash Preview"},{id:"gpt-5.2",name:"GPT 5.2"},{id:"gpt-5.3-codex",name:"GPT 5.3 Codex"}],kmc:[{id:"kimi-k2.6",name:"Kimi K2.6"},{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"kimi-k2.5-thinking",name:"Kimi K2.5 Thinking"},{id:"kimi-latest",name:"Kimi Latest"}],kc:[{id:"anthropic/claude-sonnet-4-20250514",name:"Claude Sonnet 4"},{id:"anthropic/claude-opus-4-20250514",name:"Claude Opus 4"},{id:"google/gemini-2.5-pro",name:"Gemini 2.5 Pro"},{id:"google/gemini-2.5-flash",name:"Gemini 2.5 Flash"},{id:"openai/gpt-4.1",name:"GPT-4.1"},{id:"openai/o3",name:"o3"},{id:"deepseek/deepseek-chat",name:"DeepSeek Chat"},{id:"deepseek/deepseek-reasoner",name:"DeepSeek Reasoner"}],"opencode-go":[{id:"kimi-k2.6",name:"Kimi K2.6"},{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"glm-5.1",name:"GLM 5.1"},{id:"glm-5",name:"GLM 5"},{id:"qwen3.5-plus",name:"Qwen 3.5 Plus"},{id:"qwen3.6-plus",name:"Qwen 3.6 Plus"},{id:"mimo-v2-pro",name:"MiMo V2 Pro"},{id:"mimo-v2-omni",name:"MiMo V2 Omni"},{id:"minimax-m2.7",name:"MiniMax M2.7",targetFormat:"claude"},{id:"minimax-m2.5",name:"MiniMax M2.5",targetFormat:"claude"}],oc:[],cl:[{id:"anthropic/claude-opus-4.7",name:"Claude Opus 4.7"},{id:"anthropic/claude-sonnet-4.6",name:"Claude Sonnet 4.6"},{id:"anthropic/claude-opus-4.6",name:"Claude Opus 4.6"},{id:"openai/gpt-5.3-codex",name:"GPT-5.3 Codex"},{id:"openai/gpt-5.4",name:"GPT-5.4"},{id:"google/gemini-3.1-pro-preview",name:"Gemini 3.1 Pro Preview"},{id:"google/gemini-3.1-flash-lite-preview",name:"Gemini 3.1 Flash Lite Preview"},{id:"kwaipilot/kat-coder-pro",name:"KAT Coder Pro"}],openai:[{id:"gpt-5.4",name:"GPT-5.4"},{id:"gpt-5.4-mini",name:"GPT-5.4 Mini"},{id:"gpt-5.4-nano",name:"GPT-5.4 Nano"},{id:"gpt-5.2",name:"GPT-5.2"},{id:"gpt-5.1",name:"GPT-5.1"},{id:"gpt-5",name:"GPT-5"},{id:"gpt-5-mini",name:"GPT-5 Mini"},{id:"gpt-5-nano",name:"GPT-5 Nano"},{id:"gpt-4o",name:"GPT-4o"},{id:"gpt-4o-mini",name:"GPT-4o Mini"},{id:"gpt-4-turbo",name:"GPT-4 Turbo"},{id:"gpt-4.1",name:"GPT-4.1"},{id:"gpt-4.1-mini",name:"GPT-4.1 Mini"},{id:"gpt-4.1-nano",name:"GPT-4.1 Nano"},{id:"o3",name:"O3"},{id:"o3-mini",name:"O3 Mini"},{id:"o3-pro",name:"O3 Pro"},{id:"o4-mini",name:"O4 Mini"},{id:"o1",name:"O1"},{id:"o1-mini",name:"O1 Mini"},{id:"text-embedding-3-large",name:"Text Embedding 3 Large",type:"embedding"},{id:"text-embedding-3-small",name:"Text Embedding 3 Small",type:"embedding"},{id:"text-embedding-ada-002",name:"Text Embedding Ada 002",type:"embedding"},{id:"tts-1",name:"TTS-1",type:"tts"},{id:"tts-1-hd",name:"TTS-1 HD",type:"tts"},{id:"gpt-4o-mini-tts",name:"GPT-4o Mini TTS",type:"tts"},{id:"whisper-1",name:"Whisper 1",type:"stt",params:["language","response_format","temperature","prompt"]},{id:"gpt-4o-transcribe",name:"GPT-4o Transcribe",type:"stt",params:["language","response_format","temperature","prompt"]},{id:"gpt-4o-mini-transcribe",name:"GPT-4o Mini Transcribe",type:"stt",params:["language","response_format","temperature","prompt"]},{id:"gpt-image-1",name:"GPT Image 1",type:"image",params:["n","size","quality","response_format"]},{id:"dall-e-3",name:"DALL-E 3",type:"image",params:["size","quality","style","response_format"]},{id:"dall-e-2",name:"DALL-E 2",type:"image",params:["n","size","response_format"]}],anthropic:[{id:"claude-sonnet-4-20250514",name:"Claude Sonnet 4"},{id:"claude-opus-4-20250514",name:"Claude Opus 4"},{id:"claude-3-5-sonnet-20241022",name:"Claude 3.5 Sonnet"}],gemini:[{id:"gemini-3.1-pro-preview",name:"Gemini 3.1 Pro Preview"},{id:"gemini-3.1-flash-lite-preview",name:"Gemini 3.1 Flash Lite Preview"},{id:"gemini-3-flash-preview",name:"Gemini 3 Flash Preview"},{id:"gemini-2.5-pro",name:"Gemini 2.5 Pro"},{id:"gemini-2.5-flash",name:"Gemini 2.5 Flash"},{id:"gemini-2.5-flash-lite",name:"Gemini 2.5 Flash Lite"},{id:"gemini-2.0-flash",name:"Gemini 2.0 Flash"},{id:"gemini-2.0-flash-lite",name:"Gemini 2.0 Flash Lite"},{id:"gemma-4-31b-it",name:"Gemma 4 31B IT"},{id:"gemini-embedding-2-preview",name:"Gemini Embedding 2 Preview",type:"embedding"},{id:"gemini-embedding-001",name:"Gemini Embedding 001",type:"embedding"},{id:"text-embedding-005",name:"Text Embedding 005",type:"embedding"},{id:"text-embedding-004",name:"Text Embedding 004 (Legacy)",type:"embedding"},{id:"gemini-3.1-flash-image-preview",name:"Gemini 3.1 Flash Image (Nano Banana 2)",type:"image",params:[]},{id:"gemini-3-pro-image-preview",name:"Gemini 3 Pro Image (Nano Banana Pro)",type:"image",params:[]},{id:"gemini-2.5-flash-image",name:"Gemini 2.5 Flash Image (Nano Banana)",type:"image",params:[]},{id:"gemini-2.5-pro",name:"Gemini 2.5 Pro (Best)",type:"stt",params:["language","prompt"]},{id:"gemini-2.5-flash",name:"Gemini 2.5 Flash",type:"stt",params:["language","prompt"]},{id:"gemini-2.5-flash-lite",name:"Gemini 2.5 Flash Lite (Cheapest)",type:"stt",params:["language","prompt"]},{id:"gemini-2.0-flash",name:"Gemini 2.0 Flash",type:"stt",params:["language","prompt"]}],openrouter:[{id:"openai/text-embedding-3-large",name:"OpenAI Text Embedding 3 Large",type:"embedding"},{id:"openai/text-embedding-3-small",name:"OpenAI Text Embedding 3 Small",type:"embedding"},{id:"openai/text-embedding-ada-002",name:"OpenAI Text Embedding Ada 002",type:"embedding"},{id:"qwen/qwen3-embedding-8b",name:"Qwen3 Embedding 8B",type:"embedding"},{id:"perplexity/pplx-embed-v1-4b",name:"Perplexity Embed V1 4B",type:"embedding"},{id:"perplexity/pplx-embed-v1-0.6b",name:"Perplexity Embed V1 0.6B",type:"embedding"},{id:"nvidia/llama-nemotron-embed-vl-1b-v2:free",name:"NVIDIA Nemotron Embed VL 1B V2 (Free)",type:"embedding"},{id:"openai/gpt-4o-mini-tts",name:"GPT-4o Mini TTS",type:"tts"},{id:"openai/tts-1-hd",name:"TTS-1 HD",type:"tts"},{id:"openai/tts-1",name:"TTS-1",type:"tts"},{id:"openai/dall-e-3",name:"DALL-E 3 (via OpenRouter)",type:"image",params:["size","quality","style","response_format"]},{id:"openai/gpt-image-1",name:"GPT Image 1 (via OpenRouter)",type:"image",params:["n","size","quality","response_format"]},{id:"google/imagen-3.0-generate-002",name:"Imagen 3 (via OpenRouter)",type:"image",params:["n","size"]},{id:"black-forest-labs/FLUX.1-schnell",name:"FLUX.1 Schnell (via OpenRouter)",type:"image",params:["n","size"]}],glm:[{id:"glm-5.1",name:"GLM 5.1"},{id:"glm-5",name:"GLM 5"},{id:"glm-4.7",name:"GLM 4.7"},{id:"glm-4.6v",name:"GLM 4.6V (Vision)"}],"glm-cn":[{id:"glm-5.1",name:"GLM 5.1"},{id:"glm-5",name:"GLM 5"},{id:"glm-4.7",name:"GLM-4.7"},{id:"glm-4.6",name:"GLM-4.6"},{id:"glm-4.5-air",name:"GLM-4.5-Air"}],kimi:[{id:"kimi-k2.6",name:"Kimi K2.6"},{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"kimi-k2.5-thinking",name:"Kimi K2.5 Thinking"},{id:"kimi-latest",name:"Kimi Latest"}],minimax:[{id:"MiniMax-M2.7",name:"MiniMax M2.7"},{id:"MiniMax-M2.5",name:"MiniMax M2.5"},{id:"MiniMax-M2.1",name:"MiniMax M2.1"},{id:"minimax-image-01",name:"MiniMax Image 01",type:"image",params:["n","size","response_format"]}],blackbox:[{id:"gpt-4o",name:"GPT-4o"},{id:"gpt-4o-mini",name:"GPT-4o mini"},{id:"claude-sonnet-4.6",name:"Claude Sonnet 4.6"},{id:"claude-sonnet-4.5",name:"Claude Sonnet 4.5"},{id:"claude-opus-4.6",name:"Claude Opus 4.6"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6 (Legacy)"},{id:"claude-opus-4-6",name:"Claude Opus 4.6 (Legacy)"},{id:"deepseek-chat",name:"DeepSeek Chat"},{id:"deepseek-v3-671b",name:"DeepSeek V3 671B"},{id:"deepseek-r1",name:"DeepSeek R1"},{id:"o1",name:"OpenAI o1"},{id:"o3-mini",name:"OpenAI o3-mini"},{id:"gemini-2.5-flash",name:"Gemini 2.5 Flash"},{id:"gemini-3-flash-preview",name:"Gemini 3 Flash Preview"},{id:"qwen3-coder-plus",name:"Qwen3 Coder Plus"},{id:"qwen3-max",name:"Qwen3 Max"},{id:"qwen3-vl-plus",name:"Qwen3 VL Plus"}],"minimax-cn":[{id:"MiniMax-M2.7",name:"MiniMax M2.7"},{id:"MiniMax-M2.5",name:"MiniMax M2.5"},{id:"MiniMax-M2.1",name:"MiniMax M2.1"}],alicode:[{id:"qwen3.5-plus",name:"Qwen3.5 Plus"},{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"glm-5",name:"GLM 5"},{id:"MiniMax-M2.5",name:"MiniMax M2.5"},{id:"qwen3-max-2026-01-23",name:"Qwen3 Max"},{id:"qwen3-coder-next",name:"Qwen3 Coder Next"},{id:"qwen3-coder-plus",name:"Qwen3 Coder Plus"},{id:"glm-4.7",name:"GLM 4.7"}],"alicode-intl":[{id:"qwen3.5-plus",name:"Qwen3.5 Plus"},{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"glm-5",name:"GLM 5"},{id:"MiniMax-M2.5",name:"MiniMax M2.5"},{id:"qwen3-coder-next",name:"Qwen3 Coder Next"},{id:"qwen3-coder-plus",name:"Qwen3 Coder Plus"},{id:"glm-4.7",name:"GLM 4.7"}],"volcengine-ark":[{id:"Doubao-Seed-2.0-Code",name:"Doubao-Seed-2.0-Code"},{id:"Doubao-Seed-2.0-pro",name:"Doubao-Seed-2.0-pro"},{id:"Doubao-Seed-2.0-lite",name:"Doubao-Seed-2.0-lite"},{id:"Doubao-Seed-Code",name:"Doubao-Seed-Code"},{id:"GLM-5.1",name:"GLM-5.1"},{id:"MiniMax-M2.7",name:"MiniMax-M2.7"},{id:"Kimi-K2.6",name:"Kimi-K2.6"},{id:"MiniMax-M2.5",name:"MiniMax-M2.5"},{id:"Kimi-K2.5",name:"Kimi-K2.5"},{id:"GLM-4.7",name:"GLM-4.7"},{id:"DeepSeek-V3.2",name:"DeepSeek-V3.2"}],"cloudflare-ai":[{id:"@cf/meta/llama-3.2-1b-instruct",name:"Llama 3.2 1B Instruct"},{id:"@cf/meta/llama-3.2-3b-instruct",name:"Llama 3.2 3B Instruct"},{id:"@cf/meta/llama-3.1-8b-instruct-fp8-fast",name:"Llama 3.1 8B Instruct FP8 Fast"},{id:"@cf/meta/llama-3.1-8b-instruct-awq",name:"Llama 3.1 8B Instruct AWQ"},{id:"@cf/mistralai/mistral-small-3.1-24b-instruct",name:"Mistral Small 3.1 24B Instruct"},{id:"@cf/meta/llama-3.1-70b-instruct-fp8-fast",name:"Llama 3.1 70B Instruct FP8 Fast"},{id:"@cf/meta/llama-3.3-70b-instruct-fp8-fast",name:"Llama 3.3 70B Instruct FP8 Fast"},{id:"@cf/deepseek-ai/deepseek-r1-distill-qwen-32b",name:"DeepSeek R1 Distill Qwen 32B"},{id:"@cf/moonshotai/kimi-k2.5",name:"Kimi K2.5"},{id:"@cf/moonshotai/kimi-k2.6",name:"Kimi K2.6"},{id:"@cf/zai-org/glm-4.7-flash",name:"GLM 4.7 Flash"},{id:"@cf/qwen/qwq-32b",name:"QwQ 32B"},{id:"@cf/qwen/qwen2.5-coder-32b-instruct",name:"Qwen 2.5 Coder 32B Instruct"},{id:"@cf/black-forest-labs/flux-2-klein-9b",name:"FLUX.2 Klein 9B",type:"image",params:["size"]},{id:"@cf/black-forest-labs/flux-2-klein-4b",name:"FLUX.2 Klein 4B",type:"image",params:["size"]},{id:"@cf/black-forest-labs/flux-2-dev",name:"FLUX.2 Dev",type:"image",params:["size"]},{id:"@cf/leonardo/lucid-origin",name:"Lucid Origin",type:"image",params:["size"]},{id:"@cf/leonardo/phoenix-1.0",name:"Phoenix 1.0",type:"image",params:["size"]},{id:"@cf/black-forest-labs/flux-1-schnell",name:"FLUX.1 Schnell",type:"image",params:["size"]},{id:"@cf/bytedance/stable-diffusion-xl-lightning",name:"SDXL Lightning",type:"image",params:["size"]},{id:"@cf/lykon/dreamshaper-8-lcm",name:"DreamShaper 8 LCM",type:"image",params:["size"]},{id:"@cf/runwayml/stable-diffusion-v1-5-img2img",name:"Stable Diffusion v1.5 Img2Img",type:"image",params:["size"],capabilities:["edit"]},{id:"@cf/runwayml/stable-diffusion-v1-5-inpainting",name:"Stable Diffusion v1.5 Inpainting",type:"image",params:["size"],capabilities:["edit","mask"]},{id:"@cf/stabilityai/stable-diffusion-xl-base-1.0",name:"SDXL Base 1.0",type:"image",params:["size"]}],byteplus:[{id:"seed-2-0-pro-260328",name:"Seed 2.0 Pro"},{id:"seed-2-0-code-preview-260328",name:"Seed 2.0 Code Preview"},{id:"seed-2-0-mini-260215",name:"Seed 2.0 Mini"},{id:"seed-2-0-lite-260228",name:"Seed 2.0 Lite"},{id:"kimi-k2-thinking-251104",name:"Kimi K2 Thinking"},{id:"glm-4-7-251222",name:"GLM 4.7"},{id:"gpt-oss-120b-250805",name:"GPT-OSS-120B"}],deepseek:[{id:"deepseek-v4-pro",name:"DeepSeek V4 Pro"},{id:"deepseek-v4-pro-max",name:"DeepSeek V4 Pro Max",upstreamModelId:"deepseek-v4-pro"},{id:"deepseek-v4-pro-none",name:"DeepSeek V4 Pro No Thinking",upstreamModelId:"deepseek-v4-pro"},{id:"deepseek-v4-flash",name:"DeepSeek V4 Flash"},{id:"deepseek-chat",name:"DeepSeek V3.2 Chat"},{id:"deepseek-reasoner",name:"DeepSeek V3.2 Reasoner"}],commandcode:[{id:"deepseek/deepseek-v4-pro",name:"DeepSeek V4 Pro"},{id:"deepseek/deepseek-v4-flash",name:"DeepSeek V4 Flash"},{id:"moonshotai/Kimi-K2.6",name:"Kimi K2.6"},{id:"moonshotai/Kimi-K2.5",name:"Kimi K2.5"},{id:"zai-org/GLM-5.1",name:"GLM 5.1"},{id:"zai-org/GLM-5",name:"GLM 5"},{id:"MiniMaxAI/MiniMax-M2.7",name:"MiniMax M2.7"},{id:"MiniMaxAI/MiniMax-M2.5",name:"MiniMax M2.5"},{id:"Qwen/Qwen3.6-Max-Preview",name:"Qwen 3.6 Max Preview"},{id:"Qwen/Qwen3.6-Plus",name:"Qwen 3.6 Plus"},{id:"stepfun/Step-3.5-Flash",name:"Step 3.5 Flash"}],groq:[{id:"llama-3.3-70b-versatile",name:"Llama 3.3 70B"},{id:"meta-llama/llama-4-maverick-17b-128e-instruct",name:"Llama 4 Maverick"},{id:"qwen/qwen3-32b",name:"Qwen3 32B"},{id:"openai/gpt-oss-120b",name:"GPT-OSS 120B"},{id:"whisper-large-v3",name:"Whisper Large v3",type:"stt",params:["language","response_format","temperature","prompt"]},{id:"whisper-large-v3-turbo",name:"Whisper Large v3 Turbo",type:"stt",params:["language","response_format","temperature","prompt"]},{id:"distil-whisper-large-v3-en",name:"Distil Whisper Large v3 EN",type:"stt",params:["language","response_format","temperature","prompt"]}],xai:[{id:"grok-4",name:"Grok 4"},{id:"grok-4-fast-reasoning",name:"Grok 4 Fast Reasoning"},{id:"grok-code-fast-1",name:"Grok Code Fast"},{id:"grok-3",name:"Grok 3"},{id:"grok-2-image-1212",name:"Grok 2 Image",type:"image",params:["n","response_format"]}],mistral:[{id:"mistral-large-latest",name:"Mistral Large 3"},{id:"codestral-latest",name:"Codestral"},{id:"mistral-medium-latest",name:"Mistral Medium 3"},{id:"mistral-embed",name:"Mistral Embed",type:"embedding"}],perplexity:[{id:"sonar-pro",name:"Sonar Pro"},{id:"sonar",name:"Sonar"}],together:[{id:"meta-llama/Llama-3.3-70B-Instruct-Turbo",name:"Llama 3.3 70B Turbo"},{id:"deepseek-ai/DeepSeek-R1",name:"DeepSeek R1"},{id:"Qwen/Qwen3-235B-A22B",name:"Qwen3 235B"},{id:"meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8",name:"Llama 4 Maverick"},{id:"BAAI/bge-large-en-v1.5",name:"BGE Large EN v1.5",type:"embedding"},{id:"togethercomputer/m2-bert-80M-8k-retrieval",name:"M2 BERT 80M 8K",type:"embedding"}],fireworks:[{id:"accounts/fireworks/models/deepseek-v3p1",name:"DeepSeek V3.1"},{id:"accounts/fireworks/models/llama-v3p3-70b-instruct",name:"Llama 3.3 70B"},{id:"accounts/fireworks/models/qwen3-235b-a22b",name:"Qwen3 235B"},{id:"nomic-ai/nomic-embed-text-v1.5",name:"Nomic Embed Text v1.5",type:"embedding"}],cerebras:[{id:"gpt-oss-120b",name:"GPT OSS 120B"},{id:"zai-glm-4.7",name:"ZAI GLM 4.7"},{id:"llama-3.3-70b",name:"Llama 3.3 70B"},{id:"llama-4-scout-17b-16e-instruct",name:"Llama 4 Scout"},{id:"qwen-3-235b-a22b-instruct-2507",name:"Qwen3 235B A22B"},{id:"qwen-3-32b",name:"Qwen3 32B"}],cohere:[{id:"command-r-plus-08-2024",name:"Command R+ (Aug 2024)"},{id:"command-r-08-2024",name:"Command R (Aug 2024)"},{id:"command-a-03-2025",name:"Command A (Mar 2025)"}],nvidia:[{id:"minimaxai/minimax-m2.7",name:"Minimax M2.7"},{id:"z-ai/glm4.7",name:"GLM 4.7"},{id:"nvidia/nv-embedqa-e5-v5",name:"NV EmbedQA E5 v5",type:"embedding"},{id:"nvidia/parakeet-ctc-1.1b-asr",name:"Parakeet CTC 1.1B",type:"stt",params:["language"]}],nebius:[{id:"meta-llama/Llama-3.3-70B-Instruct",name:"Llama 3.3 70B Instruct"},{id:"Qwen/Qwen3-Embedding-8B",name:"Qwen3 Embedding 8B",type:"embedding"}],"voyage-ai":[{id:"voyage-3-large",name:"Voyage 3 Large",type:"embedding"},{id:"voyage-3.5",name:"Voyage 3.5",type:"embedding"},{id:"voyage-3.5-lite",name:"Voyage 3.5 Lite",type:"embedding"},{id:"voyage-code-3",name:"Voyage Code 3",type:"embedding"},{id:"voyage-finance-2",name:"Voyage Finance 2",type:"embedding"},{id:"voyage-law-2",name:"Voyage Law 2",type:"embedding"},{id:"voyage-multilingual-2",name:"Voyage Multilingual 2",type:"embedding"}],siliconflow:[{id:"deepseek-ai/DeepSeek-V3.2",name:"DeepSeek V3.2"},{id:"deepseek-ai/DeepSeek-V3.1",name:"DeepSeek V3.1"},{id:"deepseek-ai/DeepSeek-R1",name:"DeepSeek R1"},{id:"Qwen/Qwen3-235B-A22B-Instruct-2507",name:"Qwen3 235B"},{id:"Qwen/Qwen3-Coder-480B-A35B-Instruct",name:"Qwen3 Coder 480B"},{id:"Qwen/Qwen3-32B",name:"Qwen3 32B"},{id:"moonshotai/Kimi-K2.5",name:"Kimi K2.5"},{id:"zai-org/GLM-4.7",name:"GLM 4.7"},{id:"openai/gpt-oss-120b",name:"GPT OSS 120B"},{id:"baidu/ERNIE-4.5-300B-A47B",name:"ERNIE 4.5 300B"}],"xiaomi-mimo":[{id:"mimo-v2.5-pro",name:"MiMo V2.5 Pro"},{id:"mimo-v2.5",name:"MiMo V2.5"},{id:"mimo-v2-omni",name:"MiMo V2 Omni"},{id:"mimo-v2-flash",name:"MiMo V2 Flash"}],"xiaomi-tokenplan":[{id:"mimo-v2.5-pro",name:"MiMo V2.5 Pro"},{id:"mimo-v2.5",name:"MiMo V2.5"},{id:"mimo-v2-pro",name:"MiMo V2 Pro"},{id:"mimo-v2-omni",name:"MiMo V2 Omni"},{id:"mimo-v2-tts",name:"MiMo V2 TTS"},{id:"mimo-v2.5-tts",name:"MiMo V2.5 TTS"},{id:"mimo-v2.5-tts-voiceclone",name:"MiMo V2.5 TTS Voice Clone"},{id:"mimo-v2.5-tts-voicedesign",name:"MiMo V2.5 TTS Voice Design"}],hyperbolic:[{id:"Qwen/QwQ-32B",name:"QwQ 32B"},{id:"deepseek-ai/DeepSeek-R1",name:"DeepSeek R1"},{id:"deepseek-ai/DeepSeek-V3",name:"DeepSeek V3"},{id:"meta-llama/Llama-3.3-70B-Instruct",name:"Llama 3.3 70B"},{id:"meta-llama/Llama-3.2-3B-Instruct",name:"Llama 3.2 3B"},{id:"Qwen/Qwen2.5-72B-Instruct",name:"Qwen 2.5 72B"},{id:"Qwen/Qwen2.5-Coder-32B-Instruct",name:"Qwen 2.5 Coder 32B"},{id:"NousResearch/Hermes-3-Llama-3.1-70B",name:"Hermes 3 70B"}],ollama:[{id:"gpt-oss:120b",name:"GPT OSS 120B"},{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"glm-5",name:"GLM 5"},{id:"minimax-m2.5",name:"MiniMax M2.5"},{id:"glm-4.7-flash",name:"GLM 4.7 Flash"},{id:"qwen3.5",name:"Qwen3.5"}],vertex:[{id:"gemini-3.1-pro-preview",name:"Gemini 3.1 Pro Preview"},{id:"gemini-3.1-flash-lite-preview",name:"Gemini 3.1 Flash Lite Preview"},{id:"gemini-3-flash-preview",name:"Gemini 3 Flash Preview"},{id:"gemini-2.5-flash",name:"Gemini 2.5 Flash"}],"vertex-partner":[{id:"deepseek-ai/deepseek-v3.2-maas",name:"DeepSeek V3.2 (Vertex)"},{id:"qwen/qwen3-next-80b-a3b-thinking-maas",name:"Qwen3 Next 80B Thinking (Vertex)"},{id:"qwen/qwen3-next-80b-a3b-instruct-maas",name:"Qwen3 Next 80B Instruct (Vertex)"},{id:"zai-org/glm-5-maas",name:"GLM-5 (Vertex)"}],"grok-web":[{id:"grok-3",name:"Grok 3"},{id:"grok-3-mini",name:"Grok 3 Mini (Thinking)"},{id:"grok-3-thinking",name:"Grok 3 Thinking"},{id:"grok-4",name:"Grok 4"},{id:"grok-4-mini",name:"Grok 4 Mini (Thinking)"},{id:"grok-4-thinking",name:"Grok 4 Thinking"},{id:"grok-4-heavy",name:"Grok 4 Heavy (SuperGrok)"},{id:"grok-4.1-mini",name:"Grok 4.1 Mini (Thinking)"},{id:"grok-4.1-fast",name:"Grok 4.1 Fast"},{id:"grok-4.1-expert",name:"Grok 4.1 Expert"},{id:"grok-4.1-thinking",name:"Grok 4.1 Thinking"},{id:"grok-4.2",name:"Grok 4.2 (4.20 Beta)"}],"perplexity-web":[{id:"pplx-auto",name:"Perplexity Auto (Free)"},{id:"pplx-sonar",name:"Perplexity Sonar"},{id:"pplx-gpt",name:"GPT-5.4 (via Perplexity)"},{id:"pplx-gemini",name:"Gemini 3.1 Pro (via Perplexity)"},{id:"pplx-sonnet",name:"Claude Sonnet 4.6 (via Perplexity)"},{id:"pplx-opus",name:"Claude Opus 4.6 (via Perplexity)"},{id:"pplx-nemotron",name:"Nemotron 3 Super (via Perplexity)"}],...(0,p.pp)(),nanobanana:[{id:"nanobanana-flash",name:"NanoBanana Flash",type:"image",params:["n","size"]},{id:"nanobanana-pro",name:"NanoBanana Pro",type:"image",params:["n","size"]}],sdwebui:[{id:"stable-diffusion-v1-5",name:"Stable Diffusion v1.5",type:"image",params:["n","size"]},{id:"sdxl-base-1.0",name:"SDXL Base 1.0",type:"image",params:["n","size"]}],comfyui:[{id:"flux-dev",name:"FLUX Dev",type:"image",params:["n","size"]},{id:"sdxl",name:"SDXL",type:"image",params:["n","size"]}],huggingface:[{id:"black-forest-labs/FLUX.1-schnell",name:"FLUX.1 Schnell",type:"image",params:[]},{id:"stabilityai/stable-diffusion-xl-base-1.0",name:"SDXL Base 1.0",type:"image",params:[]},{id:"openai/whisper-large-v3",name:"Whisper Large v3 (HF)",type:"stt",params:["language"]},{id:"openai/whisper-small",name:"Whisper Small (HF)",type:"stt",params:["language"]}],agentrouter:[{id:"claude-opus-4-6",name:"Claude 4.6 Opus"},{id:"claude-haiku-4-5-20251001",name:"Claude 4.5 Haiku"},{id:"glm-5.1",name:"GLM 5.1"},{id:"deepseek-v3.2",name:"DeepSeek V3.2"}],aimlapi:[{id:"gpt-4o",name:"GPT-4o"},{id:"gpt-4o-mini",name:"GPT-4o Mini"},{id:"claude-3-5-sonnet-20241022",name:"Claude 3.5 Sonnet"},{id:"gemini-2.0-flash-exp",name:"Gemini 2.0 Flash"},{id:"meta-llama/Meta-Llama-3.1-70B-Instruct-Turbo",name:"Llama 3.1 70B"}],novita:[{id:"deepseek/deepseek-r1",name:"DeepSeek R1"},{id:"deepseek/deepseek-v3",name:"DeepSeek V3"},{id:"meta-llama/llama-3.3-70b-instruct",name:"Llama 3.3 70B"},{id:"qwen/qwen-2.5-72b-instruct",name:"Qwen 2.5 72B"}],modal:[{id:"auto",name:"Auto (User-hosted)"}],reka:[{id:"reka-flash-3",name:"Reka Flash 3"},{id:"reka-edge-2603",name:"Reka Edge 2603"}],nlpcloud:[{id:"chatdolphin",name:"ChatDolphin"},{id:"dolphin",name:"Dolphin"},{id:"finetuned-llama-3-70b",name:"Llama 3 70B (Finetuned)"}],bazaarlink:[{id:"auto:free",name:"Auto Free (Zero Cost)"},{id:"auto",name:"Auto (Best Model)"}],completions:[{id:"claude-opus-4",name:"Claude Opus 4"},{id:"claude-sonnet-4",name:"Claude Sonnet 4"},{id:"gpt-4o",name:"GPT-4o"},{id:"gemini-2.0-flash",name:"Gemini 2.0 Flash"}],enally:[{id:"gpt-4o",name:"GPT-4o"},{id:"gpt-4o-mini",name:"GPT-4o Mini"},{id:"claude-3-5-sonnet",name:"Claude 3.5 Sonnet"}],freetheai:[{id:"gpt-4o",name:"GPT-4o"},{id:"claude-3-5-sonnet",name:"Claude 3.5 Sonnet"},{id:"gemini-1.5-pro",name:"Gemini 1.5 Pro"},{id:"deepseek-chat",name:"DeepSeek Chat"}],llm7:[{id:"gpt-4o-mini",name:"GPT-4o Mini"},{id:"gpt-4.1-mini",name:"GPT-4.1 Mini"},{id:"gemini-1.5-flash",name:"Gemini 1.5 Flash"}],lepton:[{id:"llama3-1-405b",name:"Llama 3.1 405B"},{id:"llama3-1-70b",name:"Llama 3.1 70B"},{id:"llama3-1-8b",name:"Llama 3.1 8B"},{id:"mixtral-8x7b",name:"Mixtral 8x7B"}],kluster:[{id:"deepseek-ai/DeepSeek-R1",name:"DeepSeek R1"},{id:"meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8",name:"Llama 4 Maverick"},{id:"meta-llama/Llama-4-Scout-17B-16E-Instruct",name:"Llama 4 Scout"},{id:"Qwen/Qwen3-235B-A22B-Instruct",name:"Qwen3 235B"}],ai21:[{id:"jamba-large",name:"Jamba 1.5 Large"},{id:"jamba-mini",name:"Jamba 1.5 Mini"}],"inference-net":[{id:"meta-llama/llama-3.3-70b-instruct/fp-16",name:"Llama 3.3 70B"},{id:"deepseek/deepseek-v3-0324",name:"DeepSeek V3"},{id:"mistralai/mistral-nemo-12b-instruct/fp-16",name:"Mistral Nemo 12B"}],predibase:[{id:"llama-3-2-3b-instruct",name:"Llama 3.2 3B"},{id:"llama-3-1-8b-instruct",name:"Llama 3.1 8B"},{id:"qwen2-5-7b-instruct",name:"Qwen 2.5 7B"}],bytez:[{id:"meta-llama/Llama-3.3-70B-Instruct",name:"Llama 3.3 70B"},{id:"mistralai/Mistral-7B-Instruct-v0.3",name:"Mistral 7B v0.3"},{id:"Qwen/Qwen2.5-72B-Instruct",name:"Qwen 2.5 72B"}],morph:[{id:"morph-v3-large",name:"Morph V3 Large"},{id:"morph-v3-fast",name:"Morph V3 Fast"}],longcat:[{id:"LongCat-Flash-Chat",name:"LongCat Flash Chat"},{id:"LongCat-Flash-Thinking",name:"LongCat Flash Thinking"},{id:"LongCat-Flash-Lite",name:"LongCat Flash Lite"}],puter:[{id:"gpt-5",name:"GPT-5"},{id:"claude-opus-4",name:"Claude Opus 4"},{id:"gemini-3-pro-preview",name:"Gemini 3 Pro"},{id:"grok-4",name:"Grok 4"},{id:"deepseek-chat",name:"DeepSeek V3"}],uncloseai:[{id:"auto",name:"Auto (Free)"},{id:"gpt-4o-mini",name:"GPT-4o Mini"}],scaleway:[{id:"qwen3-235b-a22b-instruct-2507",name:"Qwen3 235B"},{id:"llama-3.3-70b-instruct",name:"Llama 3.3 70B"},{id:"mistral-small-3.1-24b-instruct-2503",name:"Mistral Small 3.1"}],deepinfra:[{id:"meta-llama/Meta-Llama-3.1-70B-Instruct",name:"Llama 3.1 70B"},{id:"deepseek-ai/DeepSeek-V3",name:"DeepSeek V3"},{id:"Qwen/Qwen2.5-72B-Instruct",name:"Qwen 2.5 72B"}],sambanova:[{id:"Meta-Llama-3.1-405B-Instruct",name:"Llama 3.1 405B"},{id:"Meta-Llama-3.1-70B-Instruct",name:"Llama 3.1 70B"},{id:"Meta-Llama-3.1-8B-Instruct",name:"Llama 3.1 8B"}],nscale:[{id:"meta-llama/Llama-3.3-70B-Instruct",name:"Llama 3.3 70B"},{id:"Qwen/Qwen2.5-Coder-32B-Instruct",name:"Qwen 2.5 Coder 32B"}],baseten:[{id:"deepseek-ai/DeepSeek-R1",name:"DeepSeek R1"},{id:"meta-llama/Llama-3.3-70B-Instruct",name:"Llama 3.3 70B"}],publicai:[{id:"auto",name:"Auto (Community)"}],"nous-research":[{id:"Hermes-4-405B",name:"Hermes 4 405B"},{id:"Hermes-4-70B",name:"Hermes 4 70B"}],glhf:[{id:"hf:meta-llama/Meta-Llama-3.1-405B-Instruct",name:"Llama 3.1 405B"},{id:"hf:meta-llama/Meta-Llama-3.1-70B-Instruct",name:"Llama 3.1 70B"},{id:"hf:Qwen/Qwen2.5-72B-Instruct",name:"Qwen 2.5 72B"}],deepgram:[{id:"nova-3",name:"Nova 3",type:"stt",params:["language"]},{id:"nova-2",name:"Nova 2",type:"stt",params:["language"]},{id:"whisper-large",name:"Whisper Large",type:"stt",params:["language"]}],assemblyai:[{id:"universal-3-pro",name:"Universal 3 Pro",type:"stt",params:["language"]},{id:"universal-2",name:"Universal 2",type:"stt",params:["language"]}],"fal-ai":[{id:"fal-ai/flux/schnell",name:"FLUX Schnell",type:"image",params:["n","size"]},{id:"fal-ai/flux/dev",name:"FLUX Dev",type:"image",params:["n","size"]},{id:"fal-ai/flux-pro/v1.1",name:"FLUX Pro v1.1",type:"image",params:["n","size"]},{id:"fal-ai/flux-pro/v1.1-ultra",name:"FLUX Pro v1.1 Ultra",type:"image",params:["n","size"]},{id:"fal-ai/recraft-v3",name:"Recraft V3",type:"image",params:["n","size","style"]},{id:"fal-ai/ideogram/v2",name:"Ideogram V2",type:"image",params:["n","size","style"]},{id:"fal-ai/stable-diffusion-v35-large",name:"SD 3.5 Large",type:"image",params:["n","size"]}],"stability-ai":[{id:"stable-image-ultra",name:"Stable Image Ultra",type:"image",params:["size"]},{id:"stable-image-core",name:"Stable Image Core",type:"image",params:["size","style"]},{id:"sd3.5-large",name:"Stable Diffusion 3.5 Large",type:"image",params:["size"]},{id:"sd3.5-large-turbo",name:"Stable Diffusion 3.5 Large Turbo",type:"image",params:["size"]},{id:"sd3.5-medium",name:"Stable Diffusion 3.5 Medium",type:"image",params:["size"]}],"black-forest-labs":[{id:"flux-pro-1.1",name:"FLUX Pro 1.1",type:"image",params:["n","size"]},{id:"flux-pro-1.1-ultra",name:"FLUX Pro 1.1 Ultra",type:"image",params:["size"]},{id:"flux-pro",name:"FLUX Pro",type:"image",params:["n","size"]},{id:"flux-dev",name:"FLUX Dev",type:"image",params:["n","size"]},{id:"flux-kontext-pro",name:"FLUX Kontext Pro (Edit)",type:"image",params:["size"],capabilities:["edit"]},{id:"flux-kontext-max",name:"FLUX Kontext Max (Edit)",type:"image",params:["size"],capabilities:["edit"]}],recraft:[{id:"recraftv3",name:"Recraft V3",type:"image",params:["n","size","style"]},{id:"recraftv2",name:"Recraft V2",type:"image",params:["n","size","style"]}],runwayml:[{id:"gen4_image",name:"Gen-4 Image",type:"image",params:["size"]},{id:"gen4_image_turbo",name:"Gen-4 Image Turbo",type:"image",params:["size"]},{id:"gen4_turbo",name:"Gen-4 Turbo",type:"video",params:[]},{id:"gen3a_turbo",name:"Gen-3 Alpha Turbo",type:"video",params:[]}]},c={claude:"cc",codex:"cx","gemini-cli":"gc",qwen:"qw",iflow:"if",antigravity:"ag",github:"gh",kiro:"kr",cursor:"cu","kimi-coding":"kmc",kilocode:"kc",cline:"cl",opencode:"oc",vertex:"vertex","vertex-partner":"vertex-partner"},g=Object.fromEntries(Object.keys(d).map(e=>[e,c[e]||e]));function u(e){return l[g[e]||e]||[]}},91781:(e,a,i)=>{i.d(a,{I:()=>n});let n=[{id:"af",name:"Afrikaans",type:"tts"},{id:"ar",name:"Arabic",type:"tts"},{id:"bg",name:"Bulgarian",type:"tts"},{id:"bn",name:"Bengali",type:"tts"},{id:"bs",name:"Bosnian",type:"tts"},{id:"ca",name:"Catalan",type:"tts"},{id:"cs",name:"Czech",type:"tts"},{id:"cy",name:"Welsh",type:"tts"},{id:"da",name:"Danish",type:"tts"},{id:"de",name:"German",type:"tts"},{id:"el",name:"Greek",type:"tts"},{id:"en",name:"English",type:"tts"},{id:"eo",name:"Esperanto",type:"tts"},{id:"es",name:"Spanish",type:"tts"},{id:"et",name:"Estonian",type:"tts"},{id:"fi",name:"Finnish",type:"tts"},{id:"fr",name:"French",type:"tts"},{id:"gu",name:"Gujarati",type:"tts"},{id:"hi",name:"Hindi",type:"tts"},{id:"hr",name:"Croatian",type:"tts"},{id:"hu",name:"Hungarian",type:"tts"},{id:"hy",name:"Armenian",type:"tts"},{id:"id",name:"Indonesian",type:"tts"},{id:"is",name:"Icelandic",type:"tts"},{id:"it",name:"Italian",type:"tts"},{id:"ja",name:"Japanese",type:"tts"},{id:"jw",name:"Javanese",type:"tts"},{id:"km",name:"Khmer",type:"tts"},{id:"kn",name:"Kannada",type:"tts"},{id:"ko",name:"Korean",type:"tts"},{id:"la",name:"Latin",type:"tts"},{id:"lv",name:"Latvian",type:"tts"},{id:"mk",name:"Macedonian",type:"tts"},{id:"ml",name:"Malayalam",type:"tts"},{id:"mr",name:"Marathi",type:"tts"},{id:"my",name:"Myanmar (Burmese)",type:"tts"},{id:"ne",name:"Nepali",type:"tts"},{id:"nl",name:"Dutch",type:"tts"},{id:"no",name:"Norwegian",type:"tts"},{id:"pl",name:"Polish",type:"tts"},{id:"pt",name:"Portuguese",type:"tts"},{id:"ro",name:"Romanian",type:"tts"},{id:"ru",name:"Russian",type:"tts"},{id:"si",name:"Sinhala",type:"tts"},{id:"sk",name:"Slovak",type:"tts"},{id:"sq",name:"Albanian",type:"tts"},{id:"sr",name:"Serbian",type:"tts"},{id:"su",name:"Sundanese",type:"tts"},{id:"sv",name:"Swedish",type:"tts"},{id:"sw",name:"Swahili",type:"tts"},{id:"ta",name:"Tamil",type:"tts"},{id:"te",name:"Telugu",type:"tts"},{id:"th",name:"Thai",type:"tts"},{id:"tl",name:"Filipino",type:"tts"},{id:"tr",name:"Turkish",type:"tts"},{id:"uk",name:"Ukrainian",type:"tts"},{id:"ur",name:"Urdu",type:"tts"},{id:"vi",name:"Vietnamese",type:"tts"},{id:"zh-CN",name:"Chinese (Simplified)",type:"tts"},{id:"zh-TW",name:"Chinese (Traditional)",type:"tts"}]}}]);
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7413],{57294:(e,t,r)=>{r.d(t,{$4:()=>n,$L:()=>i,W_:()=>l,mO:()=>s});var a=r(45564);function s(e){if(!e)return"-";try{let t="string"==typeof e?new Date(e):e,r=new Date,a=t-r;if(a<=0)return"-";let s=Math.ceil(a/6e4);if(s<60)return`${s}m`;let n=Math.floor(s/60),i=s%60;if(n<24)return`${n}h ${i}m`;let l=Math.floor(n/24);return`${l}d ${n%24}h ${i}m`}catch(e){return"-"}}function n(e,t){return t&&0!==t?!e||e<0?100:e>=t?0:Math.round((t-e)/t*100):0}function i(e){return e?.remaining!==void 0?Math.max(0,Math.round(e.remaining)):e?.remainingPercentage!==void 0?Math.round(e.remainingPercentage):n(e?.used,e?.total)}function l(e,t){if(!t||"object"!=typeof t)return[];let r=[];try{switch(e.toLowerCase()){case"github":default:t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{r.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null})});break;case"antigravity":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{r.push({name:t.displayName||e,modelKey:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null,remainingPercentage:t.remainingPercentage})});break;case"codex":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{r.push({name:e,used:t.used||0,total:t.total||0,remaining:t.remaining,resetAt:t.resetAt||null})});break;case"kiro":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{r.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null})});break;case"claude":t.message?r.push({name:"error",used:0,total:0,resetAt:null,message:t.message}):t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{r.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null})})}}catch(t){return console.error(`Error parsing quota data for ${e}:`,t),[]}let s=(0,a.KC)(e);if(s.length>0){let e=new Map(s.map((e,t)=>[e.id,t]));r.sort((t,r)=>{let a=t.modelKey||t.name,s=r.modelKey||r.name;return(e.get(a)??999)-(e.get(s)??999)})}return r}},97413:(e,t,r)=>{r.d(t,{A:()=>i});var a=r(95155),s=r(12115),n=r(57294);function i({quotas:e=[],compact:t=!1,sortMode:r="default",showSortLabel:l=!1}){let[d,o]=(0,s.useState)(1),c=(0,s.useMemo)(()=>e.map((e,t)=>({...e,index:t,remaining:(0,n.$L)(e)})),[e]),m=(0,s.useMemo)(()=>"remaining-asc"===r?[...c].sort((e,t)=>e.remaining-t.remaining||e.name.localeCompare(t.name)):"remaining-desc"===r?[...c].sort((e,t)=>t.remaining-e.remaining||e.name.localeCompare(t.name)):c,[c,r]),u=Math.max(1,Math.ceil(m.length/10));if((0,s.useEffect)(()=>{o(1)},[r,e]),(0,s.useEffect)(()=>{o(e=>Math.min(e,u))},[u]),!e||0===e.length)return null;let x=m.slice((d-1)*10,10*d),h=0===m.length?0:(d-1)*10+1,g=Math.min(10*d,m.length),b=t?"py-1 px-1.5":"py-2 px-3",p=t?"text-[11px]":"text-sm",f=t?"text-[11px]":"text-sm",j=t?"text-[10px] leading-tight":"text-xs";return(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,a.jsxs)("div",{className:"text-[10px] text-text-muted",children:[m.length," quota",m.length>1?"s":""]}),l&&(0,a.jsx)("div",{className:"rounded-md border border-black/10 bg-black/[0.02] px-2 py-1 text-[10px] text-text-muted dark:border-white/10 dark:bg-white/[0.03]",children:"Sorted by account remaining"})]}),(0,a.jsx)("div",{className:"overflow-x-auto",children:(0,a.jsx)("table",{className:"w-full table-fixed text-left",children:(0,a.jsx)("tbody",{children:x.map(e=>{var r;let s=(r=e.remaining)>70?{text:"text-green-600 dark:text-green-400",bg:"bg-green-500",bgLight:"bg-green-500/10",emoji:"\uD83D\uDFE2"}:r>=30?{text:"text-yellow-600 dark:text-yellow-400",bg:"bg-yellow-500",bgLight:"bg-yellow-500/10",emoji:"\uD83D\uDFE1"}:{text:"text-red-600 dark:text-red-400",bg:"bg-red-500",bgLight:"bg-red-500/10",emoji:"\uD83D\uDD34"},i=(0,n.mO)(e.resetAt),l=function(e){if(!e)return null;try{let t=new Date(e),r=new Date,a=new Date(r.getFullYear(),r.getMonth(),r.getDate()),s=new Date(a);s.setDate(s.getDate()+1);let n="";n=t>=a&&t<s?"Today":t>=s&&t<new Date(s.getTime()+864e5)?"Tomorrow":t.toLocaleDateString("en-US",{month:"short",day:"numeric"});let i=t.toLocaleTimeString("en-US",{hour:"numeric",minute:"2-digit",hour12:!0});return`${n}, ${i}`}catch{return null}}(e.resetAt);return(0,a.jsxs)("tr",{className:"border-b border-black/5 dark:border-white/5 hover:bg-black/[0.02] dark:hover:bg-white/[0.02] transition-colors",children:[(0,a.jsx)("td",{className:`${b} w-[30%]`,children:(0,a.jsxs)("div",{className:"flex items-center gap-1.5 min-w-0",children:[(0,a.jsx)("span",{className:"text-[10px] shrink-0",children:s.emoji}),(0,a.jsx)("span",{className:`${p} font-medium text-text-primary truncate`,children:e.name})]})}),(0,a.jsx)("td",{className:`${b} w-[45%]`,children:(0,a.jsxs)("div",{className:t?"space-y-1":"space-y-1.5",children:[(0,a.jsx)("div",{className:`${t?"h-1":"h-1.5"} rounded-full overflow-hidden border ${s.bgLight} ${0===e.remaining?"border-black/10 dark:border-white/10":"border-transparent"}`,children:(0,a.jsx)("div",{className:`h-full transition-all duration-300 ${s.bg}`,style:{width:`${Math.min(e.remaining,100)}%`}})}),(0,a.jsxs)("div",{className:`flex items-center justify-between ${t?"text-[10px]":"text-xs"}`,children:[(0,a.jsxs)("span",{className:"text-text-muted",children:[e.used.toLocaleString()," / ",e.total>0?e.total.toLocaleString():"∞"]}),(0,a.jsxs)("span",{className:`font-medium ${s.text}`,children:[e.remaining,"%"]})]})]})}),(0,a.jsx)("td",{className:`${b} w-[25%]`,children:"-"!==i||l?t?(0,a.jsx)("div",{className:`${f} text-text-primary font-medium truncate`,title:l||"",children:"-"!==i?`in ${i}`:l}):(0,a.jsxs)("div",{className:"space-y-0.5",children:["-"!==i&&(0,a.jsxs)("div",{className:`${f} text-text-primary font-medium`,children:["in ",i]}),l&&(0,a.jsx)("div",{className:`${j} text-text-muted`,children:l})]}):(0,a.jsx)("div",{className:`${f} text-text-muted italic`,children:"N/A"})})]},`${e.name}-${e.index}`)})})})}),u>1&&(0,a.jsxs)("div",{className:"rounded-md border border-black/10 bg-black/[0.02] px-2 py-1.5 dark:border-white/10 dark:bg-white/[0.03]",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between gap-2 text-[10px] text-text-muted",children:[(0,a.jsxs)("span",{children:["Showing ",h,"-",g," of ",m.length]}),(0,a.jsxs)("span",{children:["Page ",d," / ",u]})]}),(0,a.jsxs)("div",{className:"mt-1.5 flex items-center justify-end gap-1",children:[(0,a.jsx)("button",{type:"button",onClick:()=>o(e=>Math.max(1,e-1)),disabled:1===d,className:"flex h-6 items-center rounded-md border border-black/10 px-2 text-[10px] text-text-primary transition-colors hover:bg-black/5 disabled:cursor-not-allowed disabled:opacity-40 dark:border-white/10 dark:hover:bg-white/5",children:"Prev"}),(0,a.jsx)("button",{type:"button",onClick:()=>o(e=>Math.min(u,e+1)),disabled:d===u,className:"flex h-6 items-center rounded-md border border-black/10 px-2 text-[10px] text-text-primary transition-colors hover:bg-black/5 disabled:cursor-not-allowed disabled:opacity-40 dark:border-white/10 dark:hover:bg-white/5",children:"Next"})]})]})]})}}}]);
@@ -13,4 +13,4 @@ wire_api = "responses"
13
13
  [profiles.fast]
14
14
  model = "${s||n||"programmer-fast"}"
15
15
  model_provider = "bluerouter"`}({baseUrl:td,codingModel:tN.codingModel,fastModel:tN.fastModel}):"",tw=eH?['npm install -g @openai/codex\ncodex --version\nmkdir $env:USERPROFILE\\.codex -Force\n$utf8NoBom = New-Object System.Text.UTF8Encoding $false\n[System.IO.File]::WriteAllText("$env:USERPROFILE\\.codex\\config.toml", @\'',tk,"'@, $utf8NoBom)",`$env:OPENAI_API_KEY = "${eH.key}"`,`setx OPENAI_API_KEY "${eH.key}"`,"cd D:\\path\\to\\your-project\ncodex"].join("\n"):"",tC=eY?x(eY,tx):{codingModel:tx||"YOUR_MODEL",fastModel:tx||"YOUR_MODEL"},tP=eY?function({baseUrl:e,apiKey:t,codingModel:s,fastModel:n}){let r=s||"programmer",l=n||r||"programmer-fast",a=e||"https://models-gateway.example.com/v1";return JSON.stringify({env:{OPENAI_API_KEY:t||"sk-xxxxx"},security:{auth:{selectedType:"openai"}},model:{name:r},modelProviders:{openai:[{id:r,name:r,envKey:"OPENAI_API_KEY",baseUrl:a,generationConfig:{timeout:12e4,maxRetries:2,contextWindowSize:131072,samplingParams:{temperature:.2}}},{id:l,name:l,envKey:"OPENAI_API_KEY",baseUrl:a,generationConfig:{timeout:6e4,maxRetries:2,reasoning:!1,contextWindowSize:65536,samplingParams:{temperature:.2,max_tokens:4096}}}]}},null,2)}({baseUrl:td,apiKey:eY.key,codingModel:tC.codingModel,fastModel:tC.fastModel}):"",tA=eY?['npm install -g @qwen-code/qwen-code\nqwen --version\nmkdir $env:USERPROFILE\\.qwen -Force\n$utf8NoBom = New-Object System.Text.UTF8Encoding $false\n[System.IO.File]::WriteAllText("$env:USERPROFILE\\.qwen\\settings.json", @\'',tP,"'@, $utf8NoBom)",`$env:OPENAI_API_KEY = "${eY.key}"`,`$env:OPENAI_BASE_URL = "${td}"`,`$env:OPENAI_MODEL = "${tC.codingModel}"`,`setx OPENAI_API_KEY "${eY.key}"`,`setx OPENAI_BASE_URL "${td}"`,`setx OPENAI_MODEL "${tC.codingModel}"`,"cd D:\\path\\to\\your-project\nqwen"].join("\n"):"",tS=(0,r.useMemo)(()=>{let e=new Map;for(let t of F){let s=d(t.username||t.email||t.userPrincipalName||t.sAMAccountName);s&&e.set(s,{id:s,label:`${t.displayName||t.username||s}${t.email?` \xb7 ${t.email}`:""}`})}for(let t of h){let s=d(t.ownerUser||t.createdByUser);s&&!e.has(s)&&e.set(s,{id:s,label:s})}return ts&&!e.has(ts)&&e.set(ts,{id:ts,label:`${ts} (t\xf4i)`}),[...e.values()].sort((e,t)=>e.label.localeCompare(t.label))},[F,h,ts]),tO=(s=c(Z),m=c(Q),!(s.length===m.length&&s.every((e,t)=>e===m[t]))),tI=Y||!M.trim()||0===Q.length||ti,tM=!!eZ||"all"!==eG,t$=async()=>{C(!0),A("");try{let e=new URLSearchParams;e.set("page",String(e1)),e.set("pageSize",String(e2)),eZ&&e.set("q",eZ),"all"!==eG&&e.set("status",eG);let t=await fetch(`/api/keys?${e.toString()}`,{cache:"no-store"}),s=await t.json().catch(()=>({}));if(!t.ok)throw Error(s.error||"Kh\xf4ng tải được danh s\xe1ch API keys");let n=s.keys||[],r=s.pagination||{page:e1,pageSize:e2,total:n.length,totalAll:n.length,totalPages:1,search:eZ,status:eG};if(0===n.length&&Number(r.total||0)>0&&e1>1)return void e3(Math.max(1,Number(r.totalPages||1)));let l=c(s.apiKeyDefaultModels||(s.apiKeyDefaultModel?[s.apiKeyDefaultModel]:[]));p(n),e8(r),e_(s.apiKeyTotal??r.totalAll??r.total??n.length);let a=b(s.apiKeyDefaultPolicy||i,i);X(l),V(l),es(a),er(a),e$(s.apiKeyLimit??2),eE(s.apiKeyCount??r.totalAll??n.length)}catch(e){A(e.message||"Kh\xf4ng tải được danh s\xe1ch API keys")}finally{C(!1)}};(0,r.useEffect)(()=>{eR(window.location.origin)},[]),(0,r.useEffect)(()=>{let e=setTimeout(()=>{e3(1),eV(eQ.trim())},350);return()=>clearTimeout(e)},[eQ]),(0,r.useEffect)(()=>{t$()},[e1,e2,eZ,eG]),(0,r.useEffect)(()=>{!T&&ts&&E(ts)},[ts,T]);let tT=async()=>{if(!ep&&!eb){ef(!0);try{let[e,t,s]=await Promise.allSettled([tn?fetch("/api/providers",{cache:"no-store"}):Promise.resolve(null),fetch("/api/personal-cloud-providers",{cache:"no-store"}),fetch("/api/models/alias",{cache:"no-store"})]),n=[],r=[];if("fulfilled"===e.status&&e.value?.ok){let t=await e.value.json().catch(()=>({}));n.push(...t.connections||[])}if("fulfilled"===t.status&&t.value.ok){let e=await t.value.json().catch(()=>({}));r.push(...e.connections||[])}if(em(tn?[...n,...r]:r),"fulfilled"===s.status&&s.value.ok){let e=await s.value.json().catch(()=>({}));eh(e.aliases||{})}eg(!0)}catch{}finally{ef(!1)}}},tE=async(e=q)=>{if(tn){W(!0);try{let t=await fetch(`/api/auth/ldap/users?q=${encodeURIComponent(e||"")}`,{cache:"no-store"}),s=await t.json().catch(()=>({}));t.ok&&B(s.users||[])}catch{}finally{W(!1)}}},tK=async()=>{if(tn&&0!==Z.length){ee(!0),A("");try{let e=await fetch("/api/keys",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKeyDefaultModels:Z})}),t=await e.json().catch(()=>({}));if(!e.ok)throw Error(t.error||"Kh\xf4ng lưu được default models");let s=c(t.apiKeyDefaultModels||(t.apiKeyDefaultModel?[t.apiKeyDefaultModel]:[])),n=b(t.apiKeyDefaultPolicy||i,i);X(s),V(s),es(n),er(n)}catch(e){A(e.message||"Kh\xf4ng lưu được default models")}finally{ee(!1)}}},t_=async e=>{if(!tn)return;let t=b(e,i);ea(!0),A("");try{let e=await fetch("/api/keys",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKeyDefaultPolicy:t})}),s=await e.json().catch(()=>({}));if(!e.ok)throw Error(s.error||"Kh\xf4ng lưu được default policy");let n=b(s.apiKeyDefaultPolicy||t,i);es(n),er(n),ei(!1)}catch(e){A(e.message||"Kh\xf4ng lưu được default policy")}finally{ea(!1)}},tL=async()=>{if(M.trim()){if(0===Q.length)return void A("Admin cần cấu h\xecnh default models trước khi tạo API key.");if(ti)return void A(`Mỗi user chỉ được tạo tối đa ${tr} API keys.
16
- C\xf3 thể d\xf9ng n\xfat Đổi key để xoay sang key mới m\xe0 kh\xf4ng cần x\xf3a/tạo lại.`);J(!0),A("");try{let e=tn?d(K||T||ts):void 0,t=await fetch("/api/keys",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:M.trim(),ownerUser:e})}),s=await t.json().catch(()=>({}));if(!t.ok)throw Error(s.error||"Kh\xf4ng tạo được API key");R(s.key),$(""),_(""),I(!1),e3(1),await t$()}catch(e){A(e.message||"Kh\xf4ng tạo được API key")}finally{J(!1)}}},tR=async(e,t)=>{let s=await fetch(`/api/keys/${e}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}),n=await s.json().catch(()=>({}));return s.ok?(await t$(),!0):(A(n.error||"Kh\xf4ng cập nhật được API key"),!1)},tD=async()=>{if(!ey)return;let e=c(ev);if(0===e.length)return void A("H\xe3y chọn \xedt nhất một model trước khi lưu quyền truy cập API key.");ew(!0),A("");try{await tR(ey.id,{allowedModels:e})&&(ej(null),eN([]))}finally{ew(!1)}},tU=async e=>{if(eC){eI(!0),A("");try{await tR(eC.id,{limits:b(e)})&&(eP(null),eS(i))}finally{eI(!1)}}},tF=async()=>{if(eC){eI(!0),A("");try{await tR(eC.id,{limits:{}})&&(eP(null),eS(i))}finally{eI(!1)}}};return(0,n.jsxs)("div",{className:"space-y-6",children:[(0,n.jsxs)("div",{className:"flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h1",{className:"text-2xl font-semibold text-text-main",children:"Quản l\xfd API Keys"}),(0,n.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:tn?"Bảng quản trị API key c\xf3 t\xecm kiếm, lọc trạng th\xe1i v\xe0 ph\xe2n trang để kh\xf4ng render qu\xe1 nhiều key c\xf9ng l\xfac.":`Bạn c\xf3 thể quản l\xfd API key của t\xe0i khoản m\xecnh. Mỗi user thường sở hữu tối đa ${tr} API keys. D\xf9ng n\xfat Đổi key để xoay sang key mới m\xe0 kh\xf4ng cần x\xf3a/tạo lại.`})]}),(0,n.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,n.jsx)(l.$n,{variant:"outline",onClick:t$,disabled:j,children:j?"Đang tải...":"Refresh"}),(0,n.jsx)(l.$n,{onClick:()=>{I(!0),!T&&ts&&E(ts)},disabled:ti,children:"Tạo API Key"})]})]}),P?(0,n.jsx)("div",{className:"rounded-xl border border-red-500/30 bg-red-500/10 p-3 text-sm text-red-600 whitespace-pre-line",children:P}):null,(0,n.jsxs)("div",{className:"grid gap-3 md:grid-cols-3",children:[(0,n.jsx)(k,{label:"Tổng API keys",value:ta,hint:tn?"To\xe0n hệ thống":`${tl}/${tr} key của bạn`}),(0,n.jsx)(k,{label:"Đang hiển thị",value:to,hint:tM?"Theo bộ lọc hiện tại":"Kh\xf4ng filter"}),(0,n.jsx)(k,{label:"Page size",value:e2,hint:"Chỉ tải số d\xf2ng của trang hiện tại"})]}),tn?null:(0,n.jsx)(l.Zp,{children:(0,n.jsxs)("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h3",{className:"font-medium",children:"Giới hạn API key theo user"}),(0,n.jsxs)("p",{className:"text-sm text-text-muted",children:["T\xe0i khoản của bạn đang c\xf3 ",tl,"/",tr," API keys. Key bị disabled vẫn được t\xednh v\xe0o giới hạn."]})]}),(0,n.jsx)("span",{className:"rounded-full border border-border bg-surface px-3 py-1 text-sm",children:ti?"Đ\xe3 đạt giới hạn":"C\xf2n c\xf3 thể tạo th\xeam"})]})}),(0,n.jsxs)("div",{className:"grid gap-4 xl:grid-cols-2",children:[(0,n.jsx)(l.Zp,{children:(0,n.jsxs)("div",{className:"space-y-3",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h3",{className:"font-medium",children:"Default models cho API key mới"}),(0,n.jsx)("p",{className:"text-sm text-text-muted",children:"API key mới sẽ mặc định được d\xf9ng c\xe1c model n\xe0y. Cần cấu h\xecnh \xedt nhất một default model trước khi tạo API key."})]}),(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[Q.length>0?(0,n.jsx)(f,{models:Q,emptyLabel:"Chưa cấu h\xecnh default models"}):(0,n.jsx)("span",{className:"text-sm text-red-600",children:"Chưa cấu h\xecnh default models"}),tn?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(l.$n,{variant:"outline",size:"sm",onClick:()=>{ec(!0),tT()},children:Z.length>0?`Đ\xe3 chọn ${Z.length} model`:"Chọn default models..."}),(0,n.jsx)(l.$n,{size:"sm",onClick:tK,disabled:!tO||G||0===Z.length,children:G?"Đang lưu...":"Lưu"})]}):null]}),tn?(0,n.jsx)("p",{className:"text-xs text-text-muted",children:eb?"Đang tải danh s\xe1ch model...":"Danh s\xe1ch model chỉ tải khi mở bộ chọn để trang load nhanh hơn."}):null]})}),(0,n.jsx)(l.Zp,{children:(0,n.jsxs)("div",{className:"space-y-3",children:[(0,n.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h3",{className:"font-medium",children:"Default policy cho API key mới"}),(0,n.jsx)("p",{className:"text-sm text-text-muted",children:"Policy n\xe0y được tự động g\xe1n cho key mới. Policy ri\xeang từng key vẫn c\xf3 thể override sau khi tạo."})]}),tn?(0,n.jsx)(l.$n,{variant:"outline",size:"sm",onClick:()=>{er(b(et||i,i)),ei(!0)},children:"Chỉnh default policy"}):null]}),(0,n.jsx)(y,{limits:et,showThinking:tn,showOutputLimit:tn})]})})]}),(0,n.jsx)(l.Zp,{children:(0,n.jsxs)("div",{className:"space-y-3",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h3",{className:"font-medium",children:"Th\xf4ng tin API endpoint"}),(0,n.jsx)("p",{className:"text-sm text-text-muted",children:"D\xf9ng API key b\xean dưới để gọi gateway theo chuẩn OpenAI-compatible. Endpoint lấy theo domain hiện tại của dashboard."})]}),(0,n.jsxs)("div",{className:"grid gap-3 md:grid-cols-2",children:[(0,n.jsxs)("div",{className:"rounded-xl border border-border bg-surface p-3",children:[(0,n.jsx)("div",{className:"text-xs text-text-muted",children:"Base URL"}),(0,n.jsx)("div",{className:"mt-1 break-all font-mono text-sm",children:td})]}),(0,n.jsxs)("div",{className:"rounded-xl border border-border bg-surface p-3",children:[(0,n.jsx)("div",{className:"text-xs text-text-muted",children:"Chat Completions"}),(0,n.jsx)("div",{className:"mt-1 break-all font-mono text-sm",children:tc})]})]}),(0,n.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,n.jsx)(l.$n,{variant:"outline",size:"sm",onClick:()=>e7(td,"api-base-url"),children:"api-base-url"===e6?"Đ\xe3 copy Base URL":"Copy Base URL"}),(0,n.jsx)(l.$n,{variant:"outline",size:"sm",onClick:()=>e7(tc,"api-chat-endpoint"),children:"api-chat-endpoint"===e6?"Đ\xe3 copy Endpoint":"Copy Endpoint"})]})]})}),L?(0,n.jsx)(l.Zp,{children:(0,n.jsxs)("div",{className:"space-y-3",children:[(0,n.jsx)("h3",{className:"font-medium",children:"Đ\xe3 tạo API key"}),(0,n.jsx)("pre",{className:"overflow-auto rounded-xl border border-border bg-surface p-3 text-sm",children:L}),(0,n.jsxs)("div",{className:"text-sm text-text-muted",children:["H\xe3y copy ngay. Key mới mặc định được d\xf9ng default models v\xe0 default policy đang cấu h\xecnh trong Dashboard, trừ khi admin chỉnh quyền model/policy.",(0,n.jsx)(f,{models:Q,emptyLabel:"default models"})]}),(0,n.jsxs)("div",{className:"flex gap-2",children:[(0,n.jsx)(l.$n,{size:"sm",onClick:()=>e7(L,"created"),children:"created"===e6?"Đ\xe3 copy":"Copy"}),(0,n.jsx)(l.$n,{size:"sm",variant:"ghost",onClick:()=>R(""),children:"Đ\xf3ng"})]})]})}):null,(0,n.jsx)(l.Zp,{children:(0,n.jsxs)("div",{className:"space-y-4",children:[(0,n.jsxs)("div",{className:"flex flex-col gap-3 xl:flex-row xl:items-end xl:justify-between",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h3",{className:"text-lg font-semibold text-text-main",children:"Danh s\xe1ch API keys"}),(0,n.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"T\xecm theo t\xean key, owner, model, id hoặc một phần API key. Backend chỉ trả về page hiện tại."})]}),(0,n.jsxs)("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-center",children:[(0,n.jsx)("input",{value:eQ,onChange:e=>eX(e.target.value),placeholder:"T\xecm API key, owner, model...",className:"w-full rounded-xl border border-border bg-background px-3 py-2 text-sm text-text-main outline-none focus:border-primary sm:w-80"}),(0,n.jsxs)("select",{value:eG,onChange:e=>{e0(e.target.value),e3(1)},className:"rounded-xl border border-border bg-background px-3 py-2 text-sm text-text-main outline-none focus:border-primary",children:[(0,n.jsx)("option",{value:"all",children:"Tất cả trạng th\xe1i"}),(0,n.jsx)("option",{value:"active",children:"Chỉ key đang bật"}),(0,n.jsx)("option",{value:"inactive",children:"Chỉ key đ\xe3 tắt"})]}),tM?(0,n.jsx)(l.$n,{variant:"outline",size:"sm",onClick:()=>{eX(""),eV(""),e0("all"),e3(1)},children:"X\xf3a lọc"}):null]})]}),j?(0,n.jsx)("div",{className:"rounded-2xl border border-dashed border-border p-8 text-center text-sm text-text-muted",children:"Đang tải API keys..."}):0===h.length?(0,n.jsx)("div",{className:"rounded-2xl border border-dashed border-border p-8 text-center text-sm text-text-muted",children:tM?"Kh\xf4ng t\xecm thấy API key ph\xf9 hợp bộ lọc.":"Chưa c\xf3 API key n\xe0o."}):(0,n.jsx)(S,{keys:h,copied:e6,copy:e7,isAdmin:tn,onToggleActive:(e,t)=>tR(e,{isActive:t}),onApiTest:eU,onClaudeSettings:eB,onOpenCodeSettings:ez,onCodexSettings:eW,onQwenSettings:eJ,onRename:(e,t)=>{let s=prompt("T\xean API key mới",t||"");s?.trim()&&tR(e,{name:s.trim()})},onRotate:e=>{e?.id&&U({title:"Đổi API key",message:"Hệ thống sẽ tạo chuỗi API key mới cho record n\xe0y v\xe0 giữ nguy\xean t\xean, owner, model, policy. Key cũ sẽ hết hiệu lực ngay sau khi đổi.",onConfirm:async()=>{U(null),A("");let t=await fetch(`/api/keys/${e.id}/rotate`,{method:"POST"}),s=await t.json().catch(()=>({}));if(!t.ok)return void A(s.error||"Kh\xf4ng đổi được API key");let n=s.rotatedKey||s.key?.key||"";n&&R(n),await t$()}})},onEditModels:e=>{ej(e),eN(c(e.allowedModels)),tT()},onEditPolicy:e=>{tn&&(eP(e),eS(g(e.limits)?b(e.limits):i))},onAssignOwner:(e,t)=>{if(!tn)return;let s=prompt("G\xe1n owner username/email",t||ts||"");null!==s&&tR(e,{ownerUser:d(s)})},onDelete:e=>{U({title:"X\xf3a API Key",message:"Bạn chắc chắn muốn x\xf3a API key n\xe0y? Thao t\xe1c n\xe0y kh\xf4ng thể ho\xe0n t\xe1c.",onConfirm:async()=>{U(null),(await fetch(`/api/keys/${e}`,{method:"DELETE"})).ok&&await t$()}})}}),(0,n.jsx)(w,{pagination:e5,pageSize:e2,onPageChange:e3,onPageSizeChange:e=>{e4(e),e3(1)},loading:j})]})}),(0,n.jsx)(l.aF,{isOpen:O,onClose:()=>I(!1),title:"Tạo API Key",size:"lg",children:(0,n.jsxs)("div",{className:"space-y-4",children:[0===Q.length?(0,n.jsx)("div",{className:"rounded-xl border border-red-500/30 bg-red-500/10 p-3 text-sm text-red-600",children:"Admin cần cấu h\xecnh default models trước khi tạo API key."}):ti?(0,n.jsxs)("div",{className:"rounded-xl border border-red-500/30 bg-red-500/10 p-3 text-sm text-red-600",children:["Bạn đ\xe3 đạt giới hạn ",tr," API keys. H\xe3y x\xf3a bớt key cũ trước khi tạo key mới."]}):(0,n.jsxs)("div",{className:"text-sm text-text-muted",children:["Key n\xe0y sẽ được tạo với quyền d\xf9ng default models v\xe0 default policy đang cấu h\xecnh trong Dashboard.",(0,n.jsx)(f,{models:Q})]}),(0,n.jsxs)("label",{className:"block",children:[(0,n.jsx)("span",{className:"mb-1 block text-xs font-medium text-text-muted",children:"T\xean API key"}),(0,n.jsx)("input",{value:M,onChange:e=>$(e.target.value),placeholder:"VD: VSCode, LibreChat, team-user",className:"w-full rounded-xl border border-border bg-background px-3 py-2 text-sm outline-none focus:border-primary"})]}),tn?(0,n.jsxs)("div",{className:"space-y-3 rounded-xl border border-border p-3",children:[(0,n.jsx)("div",{className:"text-sm font-medium",children:"Owner user"}),(0,n.jsxs)("div",{className:"flex gap-2",children:[(0,n.jsx)("input",{value:q,onChange:e=>z(e.target.value),placeholder:"Nhập từ kh\xf3a rồi bấm Tải",className:"min-w-0 flex-1 rounded-xl border border-border bg-background px-3 py-2 text-sm outline-none focus:border-primary"}),(0,n.jsx)(l.$n,{variant:"outline",onClick:()=>tE(q),disabled:H,children:H?"Đang tải":"Tải LDAP"})]}),(0,n.jsxs)("select",{value:T,onChange:e=>E(e.target.value),className:"w-full rounded-xl border border-border bg-background px-3 py-2 text-sm text-text-main outline-none focus:border-primary",children:[(0,n.jsxs)("option",{value:ts||"",children:["G\xe1n cho t\xf4i (",ts||"local",")"]}),tS.map(e=>(0,n.jsx)("option",{value:e.id,children:e.label},e.id))]}),(0,n.jsx)("input",{value:K,onChange:e=>_(e.target.value),placeholder:"username hoặc email, kh\xf4ng bắt buộc",className:"w-full rounded-xl border border-border bg-background px-3 py-2 text-sm outline-none focus:border-primary"}),(0,n.jsx)("p",{className:"text-xs text-text-muted",children:"LDAP kh\xf4ng tự tải khi mở trang để giảm thời gian load. C\xf3 thể nhập owner thủ c\xf4ng hoặc nhập từ kh\xf3a rồi bấm Tải LDAP."})]}):(0,n.jsxs)("p",{className:"rounded-xl border border-border bg-surface p-3 text-sm text-text-muted",children:["Owner: ",ts||"user hiện tại"]}),(0,n.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,n.jsx)(l.$n,{variant:"ghost",onClick:()=>I(!1),children:"Hủy"}),(0,n.jsx)(l.$n,{onClick:tL,disabled:tI,children:Y?"Đang tạo...":"Tạo"})]})]})}),(0,n.jsx)(l.aF,{isOpen:!!eD,onClose:()=>eU(null),title:"API Test bằng curl Windows",size:"xl",children:(0,n.jsxs)("div",{className:"space-y-4",children:[(0,n.jsx)("p",{className:"text-sm text-text-muted",children:"Lệnh dưới đ\xe2y gọi thử endpoint Chat Completions bằng API key đang chọn v\xe0 đ\xe3 nh\xfang sẵn Bearer token."}),(0,n.jsxs)("div",{className:"grid gap-3 md:grid-cols-3",children:[(0,n.jsxs)("div",{className:"rounded-xl border border-border bg-surface p-3",children:[(0,n.jsx)("div",{className:"text-xs text-text-muted",children:"API Key"}),(0,n.jsx)("div",{className:"mt-1 text-sm",children:eD?.name||"API Key"})]}),(0,n.jsxs)("div",{className:"rounded-xl border border-border bg-surface p-3",children:[(0,n.jsx)("div",{className:"text-xs text-text-muted",children:"Endpoint"}),(0,n.jsx)("div",{className:"mt-1 break-all font-mono text-sm",children:tc})]}),(0,n.jsxs)("div",{className:"rounded-xl border border-border bg-surface p-3",children:[(0,n.jsx)("div",{className:"text-xs text-text-muted",children:"Model test"}),(0,n.jsx)("div",{className:"mt-1 break-all font-mono text-sm",children:tm})]})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("div",{className:"mb-1 text-xs font-medium text-text-muted",children:"Lệnh curl cho Windows CMD"}),(0,n.jsx)("pre",{className:"overflow-auto rounded-xl border border-border bg-surface p-3 text-xs",children:tp})]}),(0,n.jsx)("p",{className:"text-xs text-text-muted",children:"D\xe1n lệnh v\xe0o CMD hoặc Windows Terminal để test nhanh. Nếu domain dashboard chạy sau reverse proxy, endpoint sẽ d\xf9ng đ\xfang domain đang mở tr\xean tr\xecnh duyệt."}),(0,n.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,n.jsx)(l.$n,{variant:"ghost",onClick:()=>eU(null),children:"Đ\xf3ng"}),(0,n.jsx)(l.$n,{onClick:()=>e7(tp,`api-test-curl-${eD?.id||"current"}`),children:e6===`api-test-curl-${eD?.id||"current"}`?"Đ\xe3 copy":"Copy lệnh curl"})]})]})}),(0,n.jsx)(l.aF,{isOpen:!!eF,onClose:()=>eB(null),title:"Claude Code Settings",size:"xl",children:(0,n.jsxs)("div",{className:"space-y-4",children:[(0,n.jsxs)("p",{className:"text-sm text-text-muted",children:["Copy nội dung JSON dưới đ\xe2y v\xe0o file ",(0,n.jsx)("span",{className:"font-mono",children:"%USERPROFILE%\\.claude\\settings.json"})," để Claude Code gọi qua gateway n\xe0y. Model coding d\xf9ng ",(0,n.jsx)("span",{className:"font-mono",children:tg.codingModel}),"; model fast d\xf9ng ",(0,n.jsx)("span",{className:"font-mono",children:tg.fastModel}),"."]}),(0,n.jsxs)("div",{className:"grid gap-3 md:grid-cols-3",children:[(0,n.jsxs)("div",{className:"rounded-xl border border-border bg-surface p-3",children:[(0,n.jsx)("div",{className:"text-xs text-text-muted",children:"API Key"}),(0,n.jsx)("div",{className:"mt-1 text-sm",children:eF?.name||"API Key"})]}),(0,n.jsxs)("div",{className:"rounded-xl border border-border bg-surface p-3",children:[(0,n.jsx)("div",{className:"text-xs text-text-muted",children:"Base URL"}),(0,n.jsx)("div",{className:"mt-1 break-all font-mono text-sm",children:td})]}),(0,n.jsxs)("div",{className:"rounded-xl border border-border bg-surface p-3",children:[(0,n.jsx)("div",{className:"text-xs text-text-muted",children:"Model"}),(0,n.jsx)("div",{className:"mt-1 break-all font-mono text-sm",children:tg.codingModel})]})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("div",{className:"mb-1 text-xs font-medium text-text-muted",children:"settings.json"}),(0,n.jsx)("pre",{className:"max-h-[420px] overflow-auto rounded-xl border border-border bg-surface p-3 text-xs",children:tb})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("div",{className:"mb-1 text-xs font-medium text-text-muted",children:"C\xe0i v\xe0 chạy Claude Code tr\xean Windows PowerShell"}),(0,n.jsx)("pre",{className:"overflow-auto rounded-xl border border-border bg-surface p-3 text-xs",children:tf})]}),(0,n.jsx)("div",{className:"rounded-xl border border-amber-500/30 bg-amber-500/10 p-3 text-xs text-amber-700 dark:text-amber-300",children:"Lưu \xfd: chạy Claude Code trong thư mục project, kh\xf4ng chạy trong C:\\WINDOWS\\system32. Nếu d\xf9ng model fast ri\xeang như programmer-fast th\xec API key n\xe0y cũng phải được ph\xe9p d\xf9ng model đ\xf3 trong cột Model."}),(0,n.jsxs)("div",{className:"flex flex-wrap justify-end gap-2",children:[(0,n.jsx)(l.$n,{variant:"ghost",onClick:()=>eB(null),children:"Đ\xf3ng"}),(0,n.jsx)(l.$n,{variant:"outline",onClick:()=>e7(tf,`claude-code-help-${eF?.id||"current"}`),children:e6===`claude-code-help-${eF?.id||"current"}`?"Đ\xe3 copy hướng dẫn":"Copy hướng dẫn"}),(0,n.jsx)(l.$n,{onClick:()=>e7(tb,`claude-code-settings-${eF?.id||"current"}`),children:e6===`claude-code-settings-${eF?.id||"current"}`?"Đ\xe3 copy settings":"Copy settings.json"})]})]})}),(0,n.jsx)(l.aF,{isOpen:!!eq,onClose:()=>ez(null),title:"OpenCode Settings",size:"xl",children:(0,n.jsxs)("div",{className:"space-y-4",children:[(0,n.jsxs)("p",{className:"text-sm text-text-muted",children:["Copy JSON dưới đ\xe2y v\xe0o file ",(0,n.jsx)("span",{className:"font-mono",children:"%APPDATA%\\opencode\\opencode.json"})," hoặc ",(0,n.jsx)("span",{className:"font-mono",children:"opencode.json"})," trong project. Model ch\xednh d\xf9ng ",(0,n.jsx)("span",{className:"font-mono",children:ty.codingModel}),"; explorer/fast d\xf9ng ",(0,n.jsx)("span",{className:"font-mono",children:ty.fastModel}),"."]}),(0,n.jsxs)("div",{className:"grid gap-3 md:grid-cols-4",children:[(0,n.jsxs)("div",{className:"rounded-xl border border-border bg-surface p-3",children:[(0,n.jsx)("div",{className:"text-xs text-text-muted",children:"API Key"}),(0,n.jsx)("div",{className:"mt-1 text-sm",children:eq?.name||"API Key"})]}),(0,n.jsxs)("div",{className:"rounded-xl border border-border bg-surface p-3",children:[(0,n.jsx)("div",{className:"text-xs text-text-muted",children:"Base URL"}),(0,n.jsx)("div",{className:"mt-1 break-all font-mono text-sm",children:td})]}),(0,n.jsxs)("div",{className:"rounded-xl border border-border bg-surface p-3",children:[(0,n.jsx)("div",{className:"text-xs text-text-muted",children:"Model ch\xednh"}),(0,n.jsx)("div",{className:"mt-1 break-all font-mono text-sm",children:ty.codingModel})]}),(0,n.jsxs)("div",{className:"rounded-xl border border-border bg-surface p-3",children:[(0,n.jsx)("div",{className:"text-xs text-text-muted",children:"Model fast"}),(0,n.jsx)("div",{className:"mt-1 break-all font-mono text-sm",children:ty.fastModel})]})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("div",{className:"mb-1 text-xs font-medium text-text-muted",children:"opencode.json"}),(0,n.jsx)("pre",{className:"max-h-[420px] overflow-auto rounded-xl border border-border bg-surface p-3 text-xs",children:tj})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("div",{className:"mb-1 text-xs font-medium text-text-muted",children:"C\xe0i v\xe0 chạy OpenCode tr\xean Windows PowerShell"}),(0,n.jsx)("pre",{className:"overflow-auto rounded-xl border border-border bg-surface p-3 text-xs",children:tv})]}),(0,n.jsxs)("div",{className:"rounded-xl border border-amber-500/30 bg-amber-500/10 p-3 text-xs text-amber-700 dark:text-amber-300",children:["Lưu \xfd: API key n\xe0y cần được ph\xe9p gọi cả ",ty.codingModel," v\xe0 ",ty.fastModel,". Nếu OpenCode đang d\xf9ng đường dẫn config kh\xe1c, c\xf3 thể đặt file opencode.json ngay trong thư mục project."]}),(0,n.jsxs)("div",{className:"flex flex-wrap justify-end gap-2",children:[(0,n.jsx)(l.$n,{variant:"ghost",onClick:()=>ez(null),children:"Đ\xf3ng"}),(0,n.jsx)(l.$n,{variant:"outline",onClick:()=>e7(tv,`opencode-help-${eq?.id||"current"}`),children:e6===`opencode-help-${eq?.id||"current"}`?"Đ\xe3 copy hướng dẫn":"Copy hướng dẫn"}),(0,n.jsx)(l.$n,{onClick:()=>e7(tj,`opencode-settings-${eq?.id||"current"}`),children:e6===`opencode-settings-${eq?.id||"current"}`?"Đ\xe3 copy settings":"Copy opencode.json"})]})]})}),(0,n.jsx)(l.aF,{isOpen:!!eH,onClose:()=>eW(null),title:"Codex Settings",size:"xl",children:(0,n.jsxs)("div",{className:"space-y-4",children:[(0,n.jsxs)("p",{className:"text-sm text-text-muted",children:["Copy TOML dưới đ\xe2y v\xe0o file ",(0,n.jsx)("span",{className:"font-mono",children:"%USERPROFILE%\\.codex\\config.toml"}),". API key được set bằng biến m\xf4i trường ",(0,n.jsx)("span",{className:"font-mono",children:"OPENAI_API_KEY"}),". Model ch\xednh d\xf9ng ",(0,n.jsx)("span",{className:"font-mono",children:tN.codingModel}),"; profile fast d\xf9ng ",(0,n.jsx)("span",{className:"font-mono",children:tN.fastModel}),"."]}),(0,n.jsxs)("div",{className:"grid gap-3 md:grid-cols-3",children:[(0,n.jsxs)("div",{className:"rounded-xl border border-border bg-surface p-3",children:[(0,n.jsx)("div",{className:"text-xs text-text-muted",children:"API Key"}),(0,n.jsx)("div",{className:"mt-1 text-sm",children:eH?.name||"API Key"})]}),(0,n.jsxs)("div",{className:"rounded-xl border border-border bg-surface p-3",children:[(0,n.jsx)("div",{className:"text-xs text-text-muted",children:"Base URL"}),(0,n.jsx)("div",{className:"mt-1 break-all font-mono text-sm",children:td})]}),(0,n.jsxs)("div",{className:"rounded-xl border border-border bg-surface p-3",children:[(0,n.jsx)("div",{className:"text-xs text-text-muted",children:"Model"}),(0,n.jsx)("div",{className:"mt-1 break-all font-mono text-sm",children:tN.codingModel})]})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("div",{className:"mb-1 text-xs font-medium text-text-muted",children:"config.toml"}),(0,n.jsx)("pre",{className:"max-h-[420px] overflow-auto rounded-xl border border-border bg-surface p-3 text-xs",children:tk})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("div",{className:"mb-1 text-xs font-medium text-text-muted",children:"C\xe0i v\xe0 chạy Codex tr\xean Windows PowerShell"}),(0,n.jsx)("pre",{className:"overflow-auto rounded-xl border border-border bg-surface p-3 text-xs",children:tw})]}),(0,n.jsx)("div",{className:"rounded-xl border border-amber-500/30 bg-amber-500/10 p-3 text-xs text-amber-700 dark:text-amber-300",children:"Lưu \xfd: hướng dẫn đ\xe3 tự tạo config.toml v\xe0 set biến m\xf4i trường cho phi\xean PowerShell hiện tại. setx chỉ lưu lại cho terminal mở sau. Codex d\xf9ng OpenAI-compatible endpoint của BlueRouter."}),(0,n.jsxs)("div",{className:"flex flex-wrap justify-end gap-2",children:[(0,n.jsx)(l.$n,{variant:"ghost",onClick:()=>eW(null),children:"Đ\xf3ng"}),(0,n.jsx)(l.$n,{variant:"outline",onClick:()=>e7(tw,`codex-help-${eH?.id||"current"}`),children:e6===`codex-help-${eH?.id||"current"}`?"Đ\xe3 copy hướng dẫn":"Copy hướng dẫn"}),(0,n.jsx)(l.$n,{onClick:()=>e7(tk,`codex-settings-${eH?.id||"current"}`),children:e6===`codex-settings-${eH?.id||"current"}`?"Đ\xe3 copy settings":"Copy config.toml"})]})]})}),(0,n.jsx)(l.aF,{isOpen:!!eY,onClose:()=>eJ(null),title:"Qwen Code Settings",size:"xl",children:(0,n.jsxs)("div",{className:"space-y-4",children:[(0,n.jsxs)("p",{className:"text-sm text-text-muted",children:["Copy JSON dưới đ\xe2y v\xe0o file ",(0,n.jsx)("span",{className:"font-mono",children:"%USERPROFILE%\\.qwen\\settings.json"})," để Qwen Code gọi qua OpenAI-compatible endpoint của BlueRouter. Model ch\xednh d\xf9ng ",(0,n.jsx)("span",{className:"font-mono",children:tC.codingModel}),"; model fast d\xf9ng ",(0,n.jsx)("span",{className:"font-mono",children:tC.fastModel}),"."]}),(0,n.jsxs)("div",{className:"grid gap-3 md:grid-cols-3",children:[(0,n.jsxs)("div",{className:"rounded-xl border border-border bg-surface p-3",children:[(0,n.jsx)("div",{className:"text-xs text-text-muted",children:"API Key"}),(0,n.jsx)("div",{className:"mt-1 text-sm",children:eY?.name||"API Key"})]}),(0,n.jsxs)("div",{className:"rounded-xl border border-border bg-surface p-3",children:[(0,n.jsx)("div",{className:"text-xs text-text-muted",children:"Base URL"}),(0,n.jsx)("div",{className:"mt-1 break-all font-mono text-sm",children:td})]}),(0,n.jsxs)("div",{className:"rounded-xl border border-border bg-surface p-3",children:[(0,n.jsx)("div",{className:"text-xs text-text-muted",children:"Model"}),(0,n.jsx)("div",{className:"mt-1 break-all font-mono text-sm",children:tC.codingModel})]})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("div",{className:"mb-1 text-xs font-medium text-text-muted",children:"settings.json"}),(0,n.jsx)("pre",{className:"max-h-[420px] overflow-auto rounded-xl border border-border bg-surface p-3 text-xs",children:tP})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("div",{className:"mb-1 text-xs font-medium text-text-muted",children:"C\xe0i v\xe0 chạy Qwen Code tr\xean Windows PowerShell"}),(0,n.jsx)("pre",{className:"overflow-auto rounded-xl border border-border bg-surface p-3 text-xs",children:tA})]}),(0,n.jsx)("div",{className:"rounded-xl border border-amber-500/30 bg-amber-500/10 p-3 text-xs text-amber-700 dark:text-amber-300",children:"Lưu \xfd: hướng dẫn đ\xe3 tự tạo settings.json hợp lệ v\xe0 set biến m\xf4i trường cho phi\xean PowerShell hiện tại. setx chỉ lưu lại cho terminal mở sau. Qwen Code hỗ trợ OpenAI-compatible provider n\xean d\xf9ng tốt với BlueRouter."}),(0,n.jsxs)("div",{className:"flex flex-wrap justify-end gap-2",children:[(0,n.jsx)(l.$n,{variant:"ghost",onClick:()=>eJ(null),children:"Đ\xf3ng"}),(0,n.jsx)(l.$n,{variant:"outline",onClick:()=>e7(tA,`qwen-code-help-${eY?.id||"current"}`),children:e6===`qwen-code-help-${eY?.id||"current"}`?"Đ\xe3 copy hướng dẫn":"Copy hướng dẫn"}),(0,n.jsx)(l.$n,{onClick:()=>e7(tP,`qwen-code-settings-${eY?.id||"current"}`),children:e6===`qwen-code-settings-${eY?.id||"current"}`?"Đ\xe3 copy settings":"Copy settings.json"})]})]})}),(0,n.jsx)(N,{open:!!ey,keyName:ey?.name,models:ev,setModels:eN,activeProviders:ex,modelAliases:eu,onClose:()=>{ej(null),eN([])},onSave:tD,saving:ek,personalOnly:!tn,extraModels:Q}),(0,n.jsx)(v,{isOpen:eo,keyName:"Default cho API key mới",policy:en,setPolicy:er,onClose:()=>{ei(!1),er(et||i)},onSave:t_,saving:el}),(0,n.jsx)(v,{isOpen:!!eC,keyName:eC?.name,policy:eA,setPolicy:eS,onClose:()=>{eP(null),eS(i)},onSave:tU,onClear:tF,saving:eO}),(0,n.jsx)(l.rq,{isOpen:ed,onClose:()=>ec(!1),onSelect:e=>{let t=String(e?.value||e?.name||e||"").trim();t&&V(e=>c([...e,t]))},onDeselect:e=>{let t=String(e?.value||e?.name||e||"").trim();t&&V(e=>c(e).filter(e=>e!==t))},activeProviders:ex,modelAliases:eu,title:"Chọn default models cho API key",addedModelValues:Z,closeOnSelect:!1}),D?(0,n.jsx)(l.uo,{isOpen:!!D,onClose:()=>U(null),onConfirm:D.onConfirm,title:D.title,message:D.message,confirmText:"X\xf3a",cancelText:"Hủy",variant:"danger"}):null]})}},84223:(e,t,s)=>{Promise.resolve().then(s.bind(s,56484))}},e=>{e.O(0,[2574,3862,246,5792,5263,5497,8441,3794,7358],()=>e(e.s=84223)),_N_E=e.O()}]);
16
+ C\xf3 thể d\xf9ng n\xfat Đổi key để xoay sang key mới m\xe0 kh\xf4ng cần x\xf3a/tạo lại.`);J(!0),A("");try{let e=tn?d(K||T||ts):void 0,t=await fetch("/api/keys",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:M.trim(),ownerUser:e})}),s=await t.json().catch(()=>({}));if(!t.ok)throw Error(s.error||"Kh\xf4ng tạo được API key");R(s.key),$(""),_(""),I(!1),e3(1),await t$()}catch(e){A(e.message||"Kh\xf4ng tạo được API key")}finally{J(!1)}}},tR=async(e,t)=>{let s=await fetch(`/api/keys/${e}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}),n=await s.json().catch(()=>({}));return s.ok?(await t$(),!0):(A(n.error||"Kh\xf4ng cập nhật được API key"),!1)},tD=async()=>{if(!ey)return;let e=c(ev);if(0===e.length)return void A("H\xe3y chọn \xedt nhất một model trước khi lưu quyền truy cập API key.");ew(!0),A("");try{await tR(ey.id,{allowedModels:e})&&(ej(null),eN([]))}finally{ew(!1)}},tU=async e=>{if(eC){eI(!0),A("");try{await tR(eC.id,{limits:b(e)})&&(eP(null),eS(i))}finally{eI(!1)}}},tF=async()=>{if(eC){eI(!0),A("");try{await tR(eC.id,{limits:{}})&&(eP(null),eS(i))}finally{eI(!1)}}};return(0,n.jsxs)("div",{className:"space-y-6",children:[(0,n.jsxs)("div",{className:"flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h1",{className:"text-2xl font-semibold text-text-main",children:"Quản l\xfd API Keys"}),(0,n.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:tn?"Bảng quản trị API key c\xf3 t\xecm kiếm, lọc trạng th\xe1i v\xe0 ph\xe2n trang để kh\xf4ng render qu\xe1 nhiều key c\xf9ng l\xfac.":`Bạn c\xf3 thể quản l\xfd API key của t\xe0i khoản m\xecnh. Mỗi user thường sở hữu tối đa ${tr} API keys. D\xf9ng n\xfat Đổi key để xoay sang key mới m\xe0 kh\xf4ng cần x\xf3a/tạo lại.`})]}),(0,n.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,n.jsx)(l.$n,{variant:"outline",onClick:t$,disabled:j,children:j?"Đang tải...":"Refresh"}),(0,n.jsx)(l.$n,{onClick:()=>{I(!0),!T&&ts&&E(ts)},disabled:ti,children:"Tạo API Key"})]})]}),P?(0,n.jsx)("div",{className:"rounded-xl border border-red-500/30 bg-red-500/10 p-3 text-sm text-red-600 whitespace-pre-line",children:P}):null,(0,n.jsxs)("div",{className:"grid gap-3 md:grid-cols-3",children:[(0,n.jsx)(k,{label:"Tổng API keys",value:ta,hint:tn?"To\xe0n hệ thống":`${tl}/${tr} key của bạn`}),(0,n.jsx)(k,{label:"Đang hiển thị",value:to,hint:tM?"Theo bộ lọc hiện tại":"Kh\xf4ng filter"}),(0,n.jsx)(k,{label:"Page size",value:e2,hint:"Chỉ tải số d\xf2ng của trang hiện tại"})]}),tn?null:(0,n.jsx)(l.Zp,{children:(0,n.jsxs)("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h3",{className:"font-medium",children:"Giới hạn API key theo user"}),(0,n.jsxs)("p",{className:"text-sm text-text-muted",children:["T\xe0i khoản của bạn đang c\xf3 ",tl,"/",tr," API keys. Key bị disabled vẫn được t\xednh v\xe0o giới hạn."]})]}),(0,n.jsx)("span",{className:"rounded-full border border-border bg-surface px-3 py-1 text-sm",children:ti?"Đ\xe3 đạt giới hạn":"C\xf2n c\xf3 thể tạo th\xeam"})]})}),(0,n.jsxs)("div",{className:"grid gap-4 xl:grid-cols-2",children:[(0,n.jsx)(l.Zp,{children:(0,n.jsxs)("div",{className:"space-y-3",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h3",{className:"font-medium",children:"Default models cho API key mới"}),(0,n.jsx)("p",{className:"text-sm text-text-muted",children:"API key mới sẽ mặc định được d\xf9ng c\xe1c model n\xe0y. Cần cấu h\xecnh \xedt nhất một default model trước khi tạo API key."})]}),(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[Q.length>0?(0,n.jsx)(f,{models:Q,emptyLabel:"Chưa cấu h\xecnh default models"}):(0,n.jsx)("span",{className:"text-sm text-red-600",children:"Chưa cấu h\xecnh default models"}),tn?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(l.$n,{variant:"outline",size:"sm",onClick:()=>{ec(!0),tT()},children:Z.length>0?`Đ\xe3 chọn ${Z.length} model`:"Chọn default models..."}),(0,n.jsx)(l.$n,{size:"sm",onClick:tK,disabled:!tO||G||0===Z.length,children:G?"Đang lưu...":"Lưu"})]}):null]}),tn?(0,n.jsx)("p",{className:"text-xs text-text-muted",children:eb?"Đang tải danh s\xe1ch model...":"Danh s\xe1ch model chỉ tải khi mở bộ chọn để trang load nhanh hơn."}):null]})}),(0,n.jsx)(l.Zp,{children:(0,n.jsxs)("div",{className:"space-y-3",children:[(0,n.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h3",{className:"font-medium",children:"Default policy cho API key mới"}),(0,n.jsx)("p",{className:"text-sm text-text-muted",children:"Policy n\xe0y được tự động g\xe1n cho key mới. Policy ri\xeang từng key vẫn c\xf3 thể override sau khi tạo."})]}),tn?(0,n.jsx)(l.$n,{variant:"outline",size:"sm",onClick:()=>{er(b(et||i,i)),ei(!0)},children:"Chỉnh default policy"}):null]}),(0,n.jsx)(y,{limits:et,showThinking:tn,showOutputLimit:tn})]})})]}),(0,n.jsx)(l.Zp,{children:(0,n.jsxs)("div",{className:"space-y-3",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h3",{className:"font-medium",children:"Th\xf4ng tin API endpoint"}),(0,n.jsx)("p",{className:"text-sm text-text-muted",children:"D\xf9ng API key b\xean dưới để gọi gateway theo chuẩn OpenAI-compatible. Endpoint lấy theo domain hiện tại của dashboard."})]}),(0,n.jsxs)("div",{className:"grid gap-3 md:grid-cols-2",children:[(0,n.jsxs)("div",{className:"rounded-xl border border-border bg-surface p-3",children:[(0,n.jsx)("div",{className:"text-xs text-text-muted",children:"Base URL"}),(0,n.jsx)("div",{className:"mt-1 break-all font-mono text-sm",children:td})]}),(0,n.jsxs)("div",{className:"rounded-xl border border-border bg-surface p-3",children:[(0,n.jsx)("div",{className:"text-xs text-text-muted",children:"Chat Completions"}),(0,n.jsx)("div",{className:"mt-1 break-all font-mono text-sm",children:tc})]})]}),(0,n.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,n.jsx)(l.$n,{variant:"outline",size:"sm",onClick:()=>e7(td,"api-base-url"),children:"api-base-url"===e6?"Đ\xe3 copy Base URL":"Copy Base URL"}),(0,n.jsx)(l.$n,{variant:"outline",size:"sm",onClick:()=>e7(tc,"api-chat-endpoint"),children:"api-chat-endpoint"===e6?"Đ\xe3 copy Endpoint":"Copy Endpoint"})]})]})}),L?(0,n.jsx)(l.Zp,{children:(0,n.jsxs)("div",{className:"space-y-3",children:[(0,n.jsx)("h3",{className:"font-medium",children:"Đ\xe3 tạo API key"}),(0,n.jsx)("pre",{className:"overflow-auto rounded-xl border border-border bg-surface p-3 text-sm",children:L}),(0,n.jsxs)("div",{className:"text-sm text-text-muted",children:["H\xe3y copy ngay. Key mới mặc định được d\xf9ng default models v\xe0 default policy đang cấu h\xecnh trong Dashboard, trừ khi admin chỉnh quyền model/policy.",(0,n.jsx)(f,{models:Q,emptyLabel:"default models"})]}),(0,n.jsxs)("div",{className:"flex gap-2",children:[(0,n.jsx)(l.$n,{size:"sm",onClick:()=>e7(L,"created"),children:"created"===e6?"Đ\xe3 copy":"Copy"}),(0,n.jsx)(l.$n,{size:"sm",variant:"ghost",onClick:()=>R(""),children:"Đ\xf3ng"})]})]})}):null,(0,n.jsx)(l.Zp,{children:(0,n.jsxs)("div",{className:"space-y-4",children:[(0,n.jsxs)("div",{className:"flex flex-col gap-3 xl:flex-row xl:items-end xl:justify-between",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h3",{className:"text-lg font-semibold text-text-main",children:"Danh s\xe1ch API keys"}),(0,n.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"T\xecm theo t\xean key, owner, model, id hoặc một phần API key. Backend chỉ trả về page hiện tại."})]}),(0,n.jsxs)("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-center",children:[(0,n.jsx)("input",{value:eQ,onChange:e=>eX(e.target.value),placeholder:"T\xecm API key, owner, model...",className:"w-full rounded-xl border border-border bg-background px-3 py-2 text-sm text-text-main outline-none focus:border-primary sm:w-80"}),(0,n.jsxs)("select",{value:eG,onChange:e=>{e0(e.target.value),e3(1)},className:"rounded-xl border border-border bg-background px-3 py-2 text-sm text-text-main outline-none focus:border-primary",children:[(0,n.jsx)("option",{value:"all",children:"Tất cả trạng th\xe1i"}),(0,n.jsx)("option",{value:"active",children:"Chỉ key đang bật"}),(0,n.jsx)("option",{value:"inactive",children:"Chỉ key đ\xe3 tắt"})]}),tM?(0,n.jsx)(l.$n,{variant:"outline",size:"sm",onClick:()=>{eX(""),eV(""),e0("all"),e3(1)},children:"X\xf3a lọc"}):null]})]}),j?(0,n.jsx)("div",{className:"rounded-2xl border border-dashed border-border p-8 text-center text-sm text-text-muted",children:"Đang tải API keys..."}):0===h.length?(0,n.jsx)("div",{className:"rounded-2xl border border-dashed border-border p-8 text-center text-sm text-text-muted",children:tM?"Kh\xf4ng t\xecm thấy API key ph\xf9 hợp bộ lọc.":"Chưa c\xf3 API key n\xe0o."}):(0,n.jsx)(S,{keys:h,copied:e6,copy:e7,isAdmin:tn,onToggleActive:(e,t)=>tR(e,{isActive:t}),onApiTest:eU,onClaudeSettings:eB,onOpenCodeSettings:ez,onCodexSettings:eW,onQwenSettings:eJ,onRename:(e,t)=>{let s=prompt("T\xean API key mới",t||"");s?.trim()&&tR(e,{name:s.trim()})},onRotate:e=>{e?.id&&U({title:"Đổi API key",message:"Hệ thống sẽ tạo chuỗi API key mới cho record n\xe0y v\xe0 giữ nguy\xean t\xean, owner, model, policy. Key cũ sẽ hết hiệu lực ngay sau khi đổi.",onConfirm:async()=>{U(null),A("");let t=await fetch(`/api/keys/${e.id}/rotate`,{method:"POST"}),s=await t.json().catch(()=>({}));if(!t.ok)return void A(s.error||"Kh\xf4ng đổi được API key");let n=s.rotatedKey||s.key?.key||"";n&&R(n),await t$()}})},onEditModels:e=>{ej(e),eN(c(e.allowedModels)),tT()},onEditPolicy:e=>{tn&&(eP(e),eS(g(e.limits)?b(e.limits):i))},onAssignOwner:(e,t)=>{if(!tn)return;let s=prompt("G\xe1n owner username/email",t||ts||"");null!==s&&tR(e,{ownerUser:d(s)})},onDelete:e=>{U({title:"X\xf3a API Key",message:"Bạn chắc chắn muốn x\xf3a API key n\xe0y? Thao t\xe1c n\xe0y kh\xf4ng thể ho\xe0n t\xe1c.",onConfirm:async()=>{U(null),(await fetch(`/api/keys/${e}`,{method:"DELETE"})).ok&&await t$()}})}}),(0,n.jsx)(w,{pagination:e5,pageSize:e2,onPageChange:e3,onPageSizeChange:e=>{e4(e),e3(1)},loading:j})]})}),(0,n.jsx)(l.aF,{isOpen:O,onClose:()=>I(!1),title:"Tạo API Key",size:"lg",children:(0,n.jsxs)("div",{className:"space-y-4",children:[0===Q.length?(0,n.jsx)("div",{className:"rounded-xl border border-red-500/30 bg-red-500/10 p-3 text-sm text-red-600",children:"Admin cần cấu h\xecnh default models trước khi tạo API key."}):ti?(0,n.jsxs)("div",{className:"rounded-xl border border-red-500/30 bg-red-500/10 p-3 text-sm text-red-600",children:["Bạn đ\xe3 đạt giới hạn ",tr," API keys. H\xe3y x\xf3a bớt key cũ trước khi tạo key mới."]}):(0,n.jsxs)("div",{className:"text-sm text-text-muted",children:["Key n\xe0y sẽ được tạo với quyền d\xf9ng default models v\xe0 default policy đang cấu h\xecnh trong Dashboard.",(0,n.jsx)(f,{models:Q})]}),(0,n.jsxs)("label",{className:"block",children:[(0,n.jsx)("span",{className:"mb-1 block text-xs font-medium text-text-muted",children:"T\xean API key"}),(0,n.jsx)("input",{value:M,onChange:e=>$(e.target.value),placeholder:"VD: VSCode, LibreChat, team-user",className:"w-full rounded-xl border border-border bg-background px-3 py-2 text-sm outline-none focus:border-primary"})]}),tn?(0,n.jsxs)("div",{className:"space-y-3 rounded-xl border border-border p-3",children:[(0,n.jsx)("div",{className:"text-sm font-medium",children:"Owner user"}),(0,n.jsxs)("div",{className:"flex gap-2",children:[(0,n.jsx)("input",{value:q,onChange:e=>z(e.target.value),placeholder:"Nhập từ kh\xf3a rồi bấm Tải",className:"min-w-0 flex-1 rounded-xl border border-border bg-background px-3 py-2 text-sm outline-none focus:border-primary"}),(0,n.jsx)(l.$n,{variant:"outline",onClick:()=>tE(q),disabled:H,children:H?"Đang tải":"Tải LDAP"})]}),(0,n.jsxs)("select",{value:T,onChange:e=>E(e.target.value),className:"w-full rounded-xl border border-border bg-background px-3 py-2 text-sm text-text-main outline-none focus:border-primary",children:[(0,n.jsxs)("option",{value:ts||"",children:["G\xe1n cho t\xf4i (",ts||"local",")"]}),tS.map(e=>(0,n.jsx)("option",{value:e.id,children:e.label},e.id))]}),(0,n.jsx)("input",{value:K,onChange:e=>_(e.target.value),placeholder:"username hoặc email, kh\xf4ng bắt buộc",className:"w-full rounded-xl border border-border bg-background px-3 py-2 text-sm outline-none focus:border-primary"}),(0,n.jsx)("p",{className:"text-xs text-text-muted",children:"LDAP kh\xf4ng tự tải khi mở trang để giảm thời gian load. C\xf3 thể nhập owner thủ c\xf4ng hoặc nhập từ kh\xf3a rồi bấm Tải LDAP."})]}):(0,n.jsxs)("p",{className:"rounded-xl border border-border bg-surface p-3 text-sm text-text-muted",children:["Owner: ",ts||"user hiện tại"]}),(0,n.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,n.jsx)(l.$n,{variant:"ghost",onClick:()=>I(!1),children:"Hủy"}),(0,n.jsx)(l.$n,{onClick:tL,disabled:tI,children:Y?"Đang tạo...":"Tạo"})]})]})}),(0,n.jsx)(l.aF,{isOpen:!!eD,onClose:()=>eU(null),title:"API Test bằng curl Windows",size:"xl",children:(0,n.jsxs)("div",{className:"space-y-4",children:[(0,n.jsx)("p",{className:"text-sm text-text-muted",children:"Lệnh dưới đ\xe2y gọi thử endpoint Chat Completions bằng API key đang chọn v\xe0 đ\xe3 nh\xfang sẵn Bearer token."}),(0,n.jsxs)("div",{className:"grid gap-3 md:grid-cols-3",children:[(0,n.jsxs)("div",{className:"rounded-xl border border-border bg-surface p-3",children:[(0,n.jsx)("div",{className:"text-xs text-text-muted",children:"API Key"}),(0,n.jsx)("div",{className:"mt-1 text-sm",children:eD?.name||"API Key"})]}),(0,n.jsxs)("div",{className:"rounded-xl border border-border bg-surface p-3",children:[(0,n.jsx)("div",{className:"text-xs text-text-muted",children:"Endpoint"}),(0,n.jsx)("div",{className:"mt-1 break-all font-mono text-sm",children:tc})]}),(0,n.jsxs)("div",{className:"rounded-xl border border-border bg-surface p-3",children:[(0,n.jsx)("div",{className:"text-xs text-text-muted",children:"Model test"}),(0,n.jsx)("div",{className:"mt-1 break-all font-mono text-sm",children:tm})]})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("div",{className:"mb-1 text-xs font-medium text-text-muted",children:"Lệnh curl cho Windows CMD"}),(0,n.jsx)("pre",{className:"overflow-auto rounded-xl border border-border bg-surface p-3 text-xs",children:tp})]}),(0,n.jsx)("p",{className:"text-xs text-text-muted",children:"D\xe1n lệnh v\xe0o CMD hoặc Windows Terminal để test nhanh. Nếu domain dashboard chạy sau reverse proxy, endpoint sẽ d\xf9ng đ\xfang domain đang mở tr\xean tr\xecnh duyệt."}),(0,n.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,n.jsx)(l.$n,{variant:"ghost",onClick:()=>eU(null),children:"Đ\xf3ng"}),(0,n.jsx)(l.$n,{onClick:()=>e7(tp,`api-test-curl-${eD?.id||"current"}`),children:e6===`api-test-curl-${eD?.id||"current"}`?"Đ\xe3 copy":"Copy lệnh curl"})]})]})}),(0,n.jsx)(l.aF,{isOpen:!!eF,onClose:()=>eB(null),title:"Claude Code Settings",size:"xl",children:(0,n.jsxs)("div",{className:"space-y-4",children:[(0,n.jsxs)("p",{className:"text-sm text-text-muted",children:["Copy nội dung JSON dưới đ\xe2y v\xe0o file ",(0,n.jsx)("span",{className:"font-mono",children:"%USERPROFILE%\\.claude\\settings.json"})," để Claude Code gọi qua gateway n\xe0y. Model coding d\xf9ng ",(0,n.jsx)("span",{className:"font-mono",children:tg.codingModel}),"; model fast d\xf9ng ",(0,n.jsx)("span",{className:"font-mono",children:tg.fastModel}),"."]}),(0,n.jsxs)("div",{className:"grid gap-3 md:grid-cols-3",children:[(0,n.jsxs)("div",{className:"rounded-xl border border-border bg-surface p-3",children:[(0,n.jsx)("div",{className:"text-xs text-text-muted",children:"API Key"}),(0,n.jsx)("div",{className:"mt-1 text-sm",children:eF?.name||"API Key"})]}),(0,n.jsxs)("div",{className:"rounded-xl border border-border bg-surface p-3",children:[(0,n.jsx)("div",{className:"text-xs text-text-muted",children:"Base URL"}),(0,n.jsx)("div",{className:"mt-1 break-all font-mono text-sm",children:td})]}),(0,n.jsxs)("div",{className:"rounded-xl border border-border bg-surface p-3",children:[(0,n.jsx)("div",{className:"text-xs text-text-muted",children:"Model"}),(0,n.jsx)("div",{className:"mt-1 break-all font-mono text-sm",children:tg.codingModel})]})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("div",{className:"mb-1 text-xs font-medium text-text-muted",children:"settings.json"}),(0,n.jsx)("pre",{className:"max-h-[420px] overflow-auto rounded-xl border border-border bg-surface p-3 text-xs",children:tb})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("div",{className:"mb-1 text-xs font-medium text-text-muted",children:"C\xe0i v\xe0 chạy Claude Code tr\xean Windows PowerShell"}),(0,n.jsx)("pre",{className:"overflow-auto rounded-xl border border-border bg-surface p-3 text-xs",children:tf})]}),(0,n.jsx)("div",{className:"rounded-xl border border-amber-500/30 bg-amber-500/10 p-3 text-xs text-amber-700 dark:text-amber-300",children:"Lưu \xfd: chạy Claude Code trong thư mục project, kh\xf4ng chạy trong C:\\WINDOWS\\system32. Nếu d\xf9ng model fast ri\xeang như programmer-fast th\xec API key n\xe0y cũng phải được ph\xe9p d\xf9ng model đ\xf3 trong cột Model."}),(0,n.jsxs)("div",{className:"flex flex-wrap justify-end gap-2",children:[(0,n.jsx)(l.$n,{variant:"ghost",onClick:()=>eB(null),children:"Đ\xf3ng"}),(0,n.jsx)(l.$n,{variant:"outline",onClick:()=>e7(tf,`claude-code-help-${eF?.id||"current"}`),children:e6===`claude-code-help-${eF?.id||"current"}`?"Đ\xe3 copy hướng dẫn":"Copy hướng dẫn"}),(0,n.jsx)(l.$n,{onClick:()=>e7(tb,`claude-code-settings-${eF?.id||"current"}`),children:e6===`claude-code-settings-${eF?.id||"current"}`?"Đ\xe3 copy settings":"Copy settings.json"})]})]})}),(0,n.jsx)(l.aF,{isOpen:!!eq,onClose:()=>ez(null),title:"OpenCode Settings",size:"xl",children:(0,n.jsxs)("div",{className:"space-y-4",children:[(0,n.jsxs)("p",{className:"text-sm text-text-muted",children:["Copy JSON dưới đ\xe2y v\xe0o file ",(0,n.jsx)("span",{className:"font-mono",children:"%APPDATA%\\opencode\\opencode.json"})," hoặc ",(0,n.jsx)("span",{className:"font-mono",children:"opencode.json"})," trong project. Model ch\xednh d\xf9ng ",(0,n.jsx)("span",{className:"font-mono",children:ty.codingModel}),"; explorer/fast d\xf9ng ",(0,n.jsx)("span",{className:"font-mono",children:ty.fastModel}),"."]}),(0,n.jsxs)("div",{className:"grid gap-3 md:grid-cols-4",children:[(0,n.jsxs)("div",{className:"rounded-xl border border-border bg-surface p-3",children:[(0,n.jsx)("div",{className:"text-xs text-text-muted",children:"API Key"}),(0,n.jsx)("div",{className:"mt-1 text-sm",children:eq?.name||"API Key"})]}),(0,n.jsxs)("div",{className:"rounded-xl border border-border bg-surface p-3",children:[(0,n.jsx)("div",{className:"text-xs text-text-muted",children:"Base URL"}),(0,n.jsx)("div",{className:"mt-1 break-all font-mono text-sm",children:td})]}),(0,n.jsxs)("div",{className:"rounded-xl border border-border bg-surface p-3",children:[(0,n.jsx)("div",{className:"text-xs text-text-muted",children:"Model ch\xednh"}),(0,n.jsx)("div",{className:"mt-1 break-all font-mono text-sm",children:ty.codingModel})]}),(0,n.jsxs)("div",{className:"rounded-xl border border-border bg-surface p-3",children:[(0,n.jsx)("div",{className:"text-xs text-text-muted",children:"Model fast"}),(0,n.jsx)("div",{className:"mt-1 break-all font-mono text-sm",children:ty.fastModel})]})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("div",{className:"mb-1 text-xs font-medium text-text-muted",children:"opencode.json"}),(0,n.jsx)("pre",{className:"max-h-[420px] overflow-auto rounded-xl border border-border bg-surface p-3 text-xs",children:tj})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("div",{className:"mb-1 text-xs font-medium text-text-muted",children:"C\xe0i v\xe0 chạy OpenCode tr\xean Windows PowerShell"}),(0,n.jsx)("pre",{className:"overflow-auto rounded-xl border border-border bg-surface p-3 text-xs",children:tv})]}),(0,n.jsxs)("div",{className:"rounded-xl border border-amber-500/30 bg-amber-500/10 p-3 text-xs text-amber-700 dark:text-amber-300",children:["Lưu \xfd: API key n\xe0y cần được ph\xe9p gọi cả ",ty.codingModel," v\xe0 ",ty.fastModel,". Nếu OpenCode đang d\xf9ng đường dẫn config kh\xe1c, c\xf3 thể đặt file opencode.json ngay trong thư mục project."]}),(0,n.jsxs)("div",{className:"flex flex-wrap justify-end gap-2",children:[(0,n.jsx)(l.$n,{variant:"ghost",onClick:()=>ez(null),children:"Đ\xf3ng"}),(0,n.jsx)(l.$n,{variant:"outline",onClick:()=>e7(tv,`opencode-help-${eq?.id||"current"}`),children:e6===`opencode-help-${eq?.id||"current"}`?"Đ\xe3 copy hướng dẫn":"Copy hướng dẫn"}),(0,n.jsx)(l.$n,{onClick:()=>e7(tj,`opencode-settings-${eq?.id||"current"}`),children:e6===`opencode-settings-${eq?.id||"current"}`?"Đ\xe3 copy settings":"Copy opencode.json"})]})]})}),(0,n.jsx)(l.aF,{isOpen:!!eH,onClose:()=>eW(null),title:"Codex Settings",size:"xl",children:(0,n.jsxs)("div",{className:"space-y-4",children:[(0,n.jsxs)("p",{className:"text-sm text-text-muted",children:["Copy TOML dưới đ\xe2y v\xe0o file ",(0,n.jsx)("span",{className:"font-mono",children:"%USERPROFILE%\\.codex\\config.toml"}),". API key được set bằng biến m\xf4i trường ",(0,n.jsx)("span",{className:"font-mono",children:"OPENAI_API_KEY"}),". Model ch\xednh d\xf9ng ",(0,n.jsx)("span",{className:"font-mono",children:tN.codingModel}),"; profile fast d\xf9ng ",(0,n.jsx)("span",{className:"font-mono",children:tN.fastModel}),"."]}),(0,n.jsxs)("div",{className:"grid gap-3 md:grid-cols-3",children:[(0,n.jsxs)("div",{className:"rounded-xl border border-border bg-surface p-3",children:[(0,n.jsx)("div",{className:"text-xs text-text-muted",children:"API Key"}),(0,n.jsx)("div",{className:"mt-1 text-sm",children:eH?.name||"API Key"})]}),(0,n.jsxs)("div",{className:"rounded-xl border border-border bg-surface p-3",children:[(0,n.jsx)("div",{className:"text-xs text-text-muted",children:"Base URL"}),(0,n.jsx)("div",{className:"mt-1 break-all font-mono text-sm",children:td})]}),(0,n.jsxs)("div",{className:"rounded-xl border border-border bg-surface p-3",children:[(0,n.jsx)("div",{className:"text-xs text-text-muted",children:"Model"}),(0,n.jsx)("div",{className:"mt-1 break-all font-mono text-sm",children:tN.codingModel})]})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("div",{className:"mb-1 text-xs font-medium text-text-muted",children:"config.toml"}),(0,n.jsx)("pre",{className:"max-h-[420px] overflow-auto rounded-xl border border-border bg-surface p-3 text-xs",children:tk})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("div",{className:"mb-1 text-xs font-medium text-text-muted",children:"C\xe0i v\xe0 chạy Codex tr\xean Windows PowerShell"}),(0,n.jsx)("pre",{className:"overflow-auto rounded-xl border border-border bg-surface p-3 text-xs",children:tw})]}),(0,n.jsx)("div",{className:"rounded-xl border border-amber-500/30 bg-amber-500/10 p-3 text-xs text-amber-700 dark:text-amber-300",children:"Lưu \xfd: hướng dẫn đ\xe3 tự tạo config.toml v\xe0 set biến m\xf4i trường cho phi\xean PowerShell hiện tại. setx chỉ lưu lại cho terminal mở sau. Codex d\xf9ng OpenAI-compatible endpoint của BlueRouter."}),(0,n.jsxs)("div",{className:"flex flex-wrap justify-end gap-2",children:[(0,n.jsx)(l.$n,{variant:"ghost",onClick:()=>eW(null),children:"Đ\xf3ng"}),(0,n.jsx)(l.$n,{variant:"outline",onClick:()=>e7(tw,`codex-help-${eH?.id||"current"}`),children:e6===`codex-help-${eH?.id||"current"}`?"Đ\xe3 copy hướng dẫn":"Copy hướng dẫn"}),(0,n.jsx)(l.$n,{onClick:()=>e7(tk,`codex-settings-${eH?.id||"current"}`),children:e6===`codex-settings-${eH?.id||"current"}`?"Đ\xe3 copy settings":"Copy config.toml"})]})]})}),(0,n.jsx)(l.aF,{isOpen:!!eY,onClose:()=>eJ(null),title:"Qwen Code Settings",size:"xl",children:(0,n.jsxs)("div",{className:"space-y-4",children:[(0,n.jsxs)("p",{className:"text-sm text-text-muted",children:["Copy JSON dưới đ\xe2y v\xe0o file ",(0,n.jsx)("span",{className:"font-mono",children:"%USERPROFILE%\\.qwen\\settings.json"})," để Qwen Code gọi qua OpenAI-compatible endpoint của BlueRouter. Model ch\xednh d\xf9ng ",(0,n.jsx)("span",{className:"font-mono",children:tC.codingModel}),"; model fast d\xf9ng ",(0,n.jsx)("span",{className:"font-mono",children:tC.fastModel}),"."]}),(0,n.jsxs)("div",{className:"grid gap-3 md:grid-cols-3",children:[(0,n.jsxs)("div",{className:"rounded-xl border border-border bg-surface p-3",children:[(0,n.jsx)("div",{className:"text-xs text-text-muted",children:"API Key"}),(0,n.jsx)("div",{className:"mt-1 text-sm",children:eY?.name||"API Key"})]}),(0,n.jsxs)("div",{className:"rounded-xl border border-border bg-surface p-3",children:[(0,n.jsx)("div",{className:"text-xs text-text-muted",children:"Base URL"}),(0,n.jsx)("div",{className:"mt-1 break-all font-mono text-sm",children:td})]}),(0,n.jsxs)("div",{className:"rounded-xl border border-border bg-surface p-3",children:[(0,n.jsx)("div",{className:"text-xs text-text-muted",children:"Model"}),(0,n.jsx)("div",{className:"mt-1 break-all font-mono text-sm",children:tC.codingModel})]})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("div",{className:"mb-1 text-xs font-medium text-text-muted",children:"settings.json"}),(0,n.jsx)("pre",{className:"max-h-[420px] overflow-auto rounded-xl border border-border bg-surface p-3 text-xs",children:tP})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("div",{className:"mb-1 text-xs font-medium text-text-muted",children:"C\xe0i v\xe0 chạy Qwen Code tr\xean Windows PowerShell"}),(0,n.jsx)("pre",{className:"overflow-auto rounded-xl border border-border bg-surface p-3 text-xs",children:tA})]}),(0,n.jsx)("div",{className:"rounded-xl border border-amber-500/30 bg-amber-500/10 p-3 text-xs text-amber-700 dark:text-amber-300",children:"Lưu \xfd: hướng dẫn đ\xe3 tự tạo settings.json hợp lệ v\xe0 set biến m\xf4i trường cho phi\xean PowerShell hiện tại. setx chỉ lưu lại cho terminal mở sau. Qwen Code hỗ trợ OpenAI-compatible provider n\xean d\xf9ng tốt với BlueRouter."}),(0,n.jsxs)("div",{className:"flex flex-wrap justify-end gap-2",children:[(0,n.jsx)(l.$n,{variant:"ghost",onClick:()=>eJ(null),children:"Đ\xf3ng"}),(0,n.jsx)(l.$n,{variant:"outline",onClick:()=>e7(tA,`qwen-code-help-${eY?.id||"current"}`),children:e6===`qwen-code-help-${eY?.id||"current"}`?"Đ\xe3 copy hướng dẫn":"Copy hướng dẫn"}),(0,n.jsx)(l.$n,{onClick:()=>e7(tP,`qwen-code-settings-${eY?.id||"current"}`),children:e6===`qwen-code-settings-${eY?.id||"current"}`?"Đ\xe3 copy settings":"Copy settings.json"})]})]})}),(0,n.jsx)(N,{open:!!ey,keyName:ey?.name,models:ev,setModels:eN,activeProviders:ex,modelAliases:eu,onClose:()=>{ej(null),eN([])},onSave:tD,saving:ek,personalOnly:!tn,extraModels:Q}),(0,n.jsx)(v,{isOpen:eo,keyName:"Default cho API key mới",policy:en,setPolicy:er,onClose:()=>{ei(!1),er(et||i)},onSave:t_,saving:el}),(0,n.jsx)(v,{isOpen:!!eC,keyName:eC?.name,policy:eA,setPolicy:eS,onClose:()=>{eP(null),eS(i)},onSave:tU,onClear:tF,saving:eO}),(0,n.jsx)(l.rq,{isOpen:ed,onClose:()=>ec(!1),onSelect:e=>{let t=String(e?.value||e?.name||e||"").trim();t&&V(e=>c([...e,t]))},onDeselect:e=>{let t=String(e?.value||e?.name||e||"").trim();t&&V(e=>c(e).filter(e=>e!==t))},activeProviders:ex,modelAliases:eu,title:"Chọn default models cho API key",addedModelValues:Z,closeOnSelect:!1}),D?(0,n.jsx)(l.uo,{isOpen:!!D,onClose:()=>U(null),onConfirm:D.onConfirm,title:D.title,message:D.message,confirmText:"X\xf3a",cancelText:"Hủy",variant:"danger"}):null]})}},84223:(e,t,s)=>{Promise.resolve().then(s.bind(s,56484))}},e=>{e.O(0,[2574,3862,246,5792,5564,5263,5497,8441,3794,7358],()=>e(e.s=84223)),_N_E=e.O()}]);
@@ -1 +1 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4465],{35911:(e,t,r)=>{Promise.resolve().then(r.bind(r,88512))},88512:(e,t,r)=>{"use strict";r.d(t,{default:()=>g});var s=r(95155),a=r(12115),i=r(35497),l=r(28777),n=r(52679);let o="basic-chat.sessions",d="basic-chat.activeSessionId",c="basic-chat.activeProviderId",m="basic-chat.draft";function u(){return globalThis.crypto?.randomUUID?globalThis.crypto.randomUUID():`chat_${Date.now()}_${Math.random().toString(16).slice(2)}`}function p(e){if("string"==typeof e)return e;if(null==e)return"";if(Array.isArray(e))return e.map(p).filter(Boolean).join(" ");if("object"==typeof e){if("string"==typeof e.message)return e.message;if("string"==typeof e.error)return e.error;try{return JSON.stringify(e)}catch{}}return String(e)}function h(e=""){let t=p(e).replace(/\s+/g," ").trim();return t?t.length>52?`${t.slice(0,52).trimEnd()}…`:t:"New chat"}async function x(e){return await new Promise((t,r)=>{let s=new FileReader;s.onload=()=>t(String(s.result||"")),s.onerror=()=>r(s.error||Error("Failed to read file")),s.readAsDataURL(e)})}function f(e){return e?.name||function(e=""){return String(e).replace(/[-_]/g," ").replace(/\b\w/g,e=>e.toUpperCase()).trim()||"Unknown"}(e?.provider||e?.id||"provider")}function g(){let[e,t]=(0,a.useState)([]),[r,g]=(0,a.useState)(!0),[w,v]=(0,a.useState)(""),[b,N]=(0,a.useState)(()=>{try{let e=function(e,t){try{return JSON.parse(e)}catch{return t}}(globalThis.localStorage.getItem(o),[]);return Array.isArray(e)?e.map(e=>({...e,messages:Array.isArray(e.messages)?e.messages:[]})):[]}catch{return[]}}),[y,j]=(0,a.useState)(()=>globalThis.localStorage.getItem(d)||""),[S,I]=(0,a.useState)(()=>globalThis.localStorage.getItem(c)||""),[A,k]=(0,a.useState)(""),[D,O]=(0,a.useState)(()=>globalThis.localStorage.getItem(m)||""),[$,C]=(0,a.useState)([]),[_,M]=(0,a.useState)(!1),[E,T]=(0,a.useState)(""),[U,R]=(0,a.useState)(""),[z,q]=(0,a.useState)(!1),[P,J]=(0,a.useState)(!1),[B,F]=(0,a.useState)(!1),K=(0,a.useRef)(null),L=(0,a.useRef)(null),W=(0,a.useRef)(!1),H=(0,a.useRef)(null),Y=(0,a.useRef)(null);(0,a.useEffect)(()=>{q(!0)},[]),(0,a.useEffect)(()=>{let e=!1;return async function(){g(!0),v("");try{let r=await fetch("/api/providers",{cache:"no-store"}),s=await r.json().catch(()=>({})),a=Array.isArray(s.connections)?s.connections.filter(e=>e?.isActive!==!1):[];if(0===a.length){e||(t([]),v("No providers connected yet."));return}let i=new Map;for(let e of a){let t=e.provider||e.id,r=f(e),s=(0,n.mq)(t)?"openai-compatible":(0,n.gb)(t)?"anthropic-compatible":t;i.has(t)||i.set(t,{providerId:t,providerName:r,providerType:s,connections:[],models:[]});let a=i.get(t);a.providerName=a.providerName||r,a.providerType=a.providerType||s,a.connections.push(e);let o=(0,l.KC)(t).map(t=>t?.id?{id:`${e.provider}/${t.id}`,requestModel:`${e.provider}/${t.id}`,name:t.name||t.id,providerId:e.provider,providerName:f(e),source:"static"}:null).filter(Boolean);a.models.push(...o)}for(let e of(await Promise.all(a.map(async e=>{try{let t=await fetch(`/api/providers/${e.id}/models`,{cache:"no-store"}),r=await t.json().catch(()=>({}));if(!t.ok)return{connection:e,models:[]};let s=(Array.isArray(r?.models)?r.models:Array.isArray(r?.data)?r.data:Array.isArray(r?.results)?r.results:Array.isArray(r)?r:[]).map(t=>(function(e,t){let r="string"==typeof e?e:e?.id||e?.name||e?.model||"";if(!r)return null;let s="string"==typeof e?e:e?.name||e?.displayName||r,a=r;return((0,n.mq)(t.provider)||(0,n.gb)(t.provider))&&!r.includes("/")&&(a=`${t.provider}/${r}`),{id:a,requestModel:a,name:s,providerId:t.provider,providerName:f(t),source:"live"}})(t,e)).filter(Boolean);return{connection:e,models:s}}catch{return{connection:e,models:[]}}})))){let t=e.connection.provider||e.connection.id,r=i.get(t);r&&r.models.push(...e.models)}let o=Array.from(i.values()).map(e=>({...e,models:(function(e){let t=new Map;for(let r of e)r?.id&&(t.has(r.id)||t.set(r.id,r));return Array.from(t.values())})(e.models).sort((e,t)=>e.name.localeCompare(t.name))})).filter(e=>e.models.length>0).sort((e,t)=>e.providerName.localeCompare(t.providerName));e||(t(o),0===o.length&&v("Providers connected but no models available."))}catch(r){e||(v(p(r?.message)||"Failed to load providers/models."),t([]))}finally{e||g(!1)}}(),()=>{e=!0}},[]),(0,a.useEffect)(()=>{let e=e=>{H.current&&!H.current.contains(e.target)&&J(!1),Y.current&&!Y.current.contains(e.target)&&F(!1)};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[]);let G=(0,a.useMemo)(()=>{let t=new Map;for(let r of e)for(let e of r.models)t.set(e.id,{...e,providerId:r.providerId,providerName:r.providerName});return t},[e]),Q=(0,a.useMemo)(()=>e.find(e=>e.providerId===S)||e[0]||null,[e,S]),V=(0,a.useMemo)(()=>{if(A&&G.has(A))return G.get(A);if(y){let e=b.find(e=>e.id===y);if(e?.modelId&&G.has(e.modelId))return G.get(e.modelId)}return Q?.models?.[0]||null},[A,G,Q,b,y]),X=(0,a.useMemo)(()=>b.find(e=>e.id===y)||null,[b,y]),Z=X?.messages||[],ee=(0,a.useMemo)(()=>[...b].sort((e,t)=>new Date(t.updatedAt).getTime()-new Date(e.updatedAt).getTime()),[b]),et=!_&&!!V&&(D.trim().length>0||$.length>0);(0,a.useEffect)(()=>{if(z)try{globalThis.localStorage.setItem(o,JSON.stringify(b)),globalThis.localStorage.setItem(d,y),globalThis.localStorage.setItem(c,S),globalThis.localStorage.setItem(m,D)}catch{}},[z,b,y,S,D]),(0,a.useEffect)(()=>{if(!z||r||W.current||0===e.length)return;let t=e.find(e=>e.providerId===S)||e[0],s=A&&G.has(A)?G.get(A):t.models[0];if(b.length>0){let e=b.find(e=>e.id===y)||b[0],r=e?.modelId&&G.has(e.modelId)?G.get(e.modelId):s;W.current=!0,j(e.id),I(r?.providerId||t.providerId),k(r?.id||s.id);return}let a={id:u(),title:"New chat",providerId:t.providerId,providerName:t.providerName,modelId:s.id,modelName:s.name,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString(),messages:[]};W.current=!0,N([a]),j(a.id),I(t.providerId),k(s.id)},[z,r,e,G,b,y,S,A]);let er=(e,t)=>{N(r=>r.map(r=>r.id===e?t({...r,messages:Array.isArray(r.messages)?r.messages.map(e=>({...e})):[]}):r))},es=e=>e?{id:u(),title:"New chat",providerId:e.providerId,providerName:e.providerName,modelId:e.id,modelName:e.name,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString(),messages:[]}:null,ea=async e=>{let t=Array.from(e.target.files||[]);if(0===t.length)return;let r=t.filter(e=>e.type.startsWith("image/"));if(0===r.length){e.target.value="";return}let s=await Promise.all(r.map(async e=>({id:u(),name:e.name,type:e.type,size:e.size,dataUrl:await x(e)})));C(e=>[...e,...s]),e.target.value=""},ei=async()=>{let e=V||Q?.models?.[0]||null;if(!e)return;let t=D.trim();if(!t&&0===$.length)return;let r=y,s=b.find(e=>e.id===r);if(!s){if(!(s=es(e)))return;r=s.id,N(e=>[s,...e]),j(r)}let a={id:u(),role:"user",content:t,attachments:$.map(e=>({id:e.id,name:e.name,type:e.type,dataUrl:e.dataUrl})),createdAt:new Date().toISOString()},i=u(),l={id:i,role:"assistant",content:"",createdAt:new Date().toISOString(),status:"streaming"},n=[...s.messages||[],a,l];N(s=>s.map(s=>s.id===r?{...s,providerId:e.providerId,providerName:e.providerName,modelId:e.id,modelName:e.name,messages:n,updatedAt:new Date().toISOString(),title:"New chat"===s.title?h(t):s.title}:s)),O(""),C([]),M(!0),T(i),R(""),L.current?.abort(),L.current=new AbortController;let o=n.filter(e=>"assistant"!==e.role||e.id!==i).map(e=>({role:e.role,content:"user"===e.role?function(e){let t=p(e.content).trim(),r=Array.isArray(e.attachments)?e.attachments:[];if(0===r.length)return t;let s=[];for(let e of(t&&s.push({type:"text",text:t}),r))e?.dataUrl&&s.push({type:"image_url",image_url:{url:e.dataUrl}});return s.length>0?s:t}(e):e.content}));try{var d;let s,a=await fetch("/api/dashboard/chat/completions",{method:"POST",headers:{"Content-Type":"application/json",Accept:"text/event-stream"},body:JSON.stringify({model:e.requestModel||e.id,messages:o,stream:!0}),signal:L.current.signal});if(!a.ok){let e=await a.json().catch(()=>({}));throw Error(p(e.error||e.message||`Request failed (${a.status})`))}let l=a.body?.getReader();if(!l){let e=await a.json().catch(()=>({})),t=p(e?.choices?.[0]?.message?.content||e?.output_text||e?.error||e?.message||"");er(r,e=>({...e,messages:e.messages.map(e=>e.id===i?{...e,content:t,status:"done"}:e),updatedAt:new Date().toISOString()}));return}let n=new TextDecoder,c="",m="";for(;;){let{value:e,done:t}=await l.read();if(t)break;let s=(c+=n.decode(e,{stream:!0})).split(/\r?\n/);for(let e of(c=s.pop()||"",s)){let t=e.trim();if(!t.startsWith("data:"))continue;let s=t.slice(5).trim();if(s&&"[DONE]"!==s)try{let e=JSON.parse(s),t=function(e){if(!e||"object"!=typeof e)return"";let t=e.choices?.[0];return[(t?.delta||{}).content,t?.message?.content,e.output_text,e.text].map(p).filter(Boolean)[0]||""}(e);if(!t)continue;m+=t,R(m),er(r,e=>({...e,messages:e.messages.map(e=>e.id===i?{...e,content:m,status:"streaming"}:e),updatedAt:new Date().toISOString()}))}catch{}}}er(r,e=>({...e,messages:e.messages.map(e=>e.id===i?{...e,content:m||e.content,status:"done"}:e),updatedAt:new Date().toISOString()})),d=r,s=h(t),er(d,e=>({...e,title:"New chat"===e.title?s:e.title,updatedAt:new Date().toISOString()}))}catch(e){if("AbortError"!==e.name){let t=p(e?.message||e);er(r,e=>({...e,messages:e.messages.map(e=>e.id===i?{...e,content:e.content||`Error: ${t}`,status:"error"}:e),updatedAt:new Date().toISOString()})),v(t||"Failed to send message.")}}finally{M(!1),T(""),R(""),L.current=null}},el=V?`${V.name}`:"Select model",en=V?V.requestModel:"Choose from connected providers";return(0,s.jsx)("div",{className:"relative flex-1 flex flex-col h-full min-h-0 min-w-0 bg-[#212121] text-white overflow-hidden",children:(0,s.jsxs)("div",{className:"relative mx-auto flex flex-1 h-full min-h-0 w-full max-w-4xl flex-col",children:[(0,s.jsxs)("div",{className:"flex shrink-0 items-center justify-between gap-3 px-4 py-3 lg:px-6",children:[(0,s.jsxs)("div",{ref:H,className:"relative",children:[(0,s.jsx)("button",{type:"button",onClick:()=>J(e=>!e),className:"flex items-center gap-3 rounded-2xl border border-white/10 bg-white/5 px-4 py-3 text-left transition hover:bg-white/8",children:(0,s.jsxs)("div",{className:"min-w-0",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)("span",{className:"text-sm font-semibold text-white",children:el}),(0,s.jsx)("span",{className:"material-symbols-outlined text-[18px] text-white/70",children:"expand_more"})]}),(0,s.jsx)("p",{className:"truncate text-xs text-white/55",children:en})]})}),P?(0,s.jsxs)("div",{className:"absolute left-0 top-[calc(100%+10px)] z-30 w-[min(520px,calc(100vw-2rem))] overflow-hidden rounded-[20px] border border-white/10 bg-[#262626] shadow-2xl shadow-black/50",children:[(0,s.jsxs)("div",{className:"border-b border-white/10 px-4 py-3",children:[(0,s.jsx)("p",{className:"text-xs uppercase tracking-[0.22em] text-white/45",children:"Models"}),(0,s.jsx)("p",{className:"text-sm text-white/75",children:"Only from connected providers"})]}),(0,s.jsx)("div",{className:"max-h-[60vh] overflow-y-auto p-2 custom-scrollbar",children:e.map(e=>(0,s.jsxs)("div",{className:"mb-2 rounded-[16px] border border-white/10 bg-black/20 p-2",children:[(0,s.jsxs)("div",{className:"flex items-center justify-between px-2 py-2",children:[(0,s.jsx)("p",{className:"text-sm font-semibold text-white",children:e.providerName}),(0,s.jsx)(i.Ex,{size:"sm",variant:"default",children:e.models.length})]}),(0,s.jsx)("div",{className:"grid gap-2 sm:grid-cols-2",children:e.models.map(e=>{let t=e.id===A;return(0,s.jsx)("button",{type:"button",onClick:()=>(e=>{let t=G.get(e);if(!t)return;let r=b.find(e=>e.id===y);if(r&&r.messages.length>0){let e=es(t);if(!e)return;N(t=>[e,...t]),j(e.id)}else if(r)N(e=>e.map(e=>e.id===r.id?{...e,providerId:t.providerId,providerName:t.providerName,modelId:t.id,modelName:t.name}:e)),j(r.id);else{let e=es(t);if(!e)return;N(t=>[e,...t]),j(e.id)}I(t.providerId),k(t.id),J(!1)})(e.id),className:`rounded-[14px] border px-3 py-3 text-left transition ${t?"border-blue-400/40 bg-blue-500/15":"border-white/10 bg-white/5 hover:bg-white/8"}`,children:(0,s.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,s.jsxs)("div",{className:"min-w-0",children:[(0,s.jsx)("p",{className:"truncate text-sm font-medium text-white",children:e.name}),(0,s.jsx)("p",{className:"truncate text-[11px] text-white/45",children:e.requestModel})]}),t?(0,s.jsx)("span",{className:"material-symbols-outlined text-[18px] text-blue-300",children:"check_circle"}):null]})},e.id)})})]},e.providerId))})]}):null]}),(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)("button",{type:"button",onClick:()=>F(e=>!e),className:"rounded-2xl border border-white/10 bg-white/5 px-4 py-3 text-sm text-white/80 transition hover:bg-white/8",children:"History"}),(0,s.jsx)(i.$n,{variant:"ghost",size:"sm",icon:"delete",onClick:()=>{if(!y)return;let e=b.filter(e=>e.id!==y),t=e[0]||null;N(e),t?(j(t.id),I(t.providerId),k(t.modelId)):(j(""),I(""),k(""))},disabled:!y||0===b.length,children:"Clear"})]})]}),B?(0,s.jsxs)("div",{ref:Y,className:"absolute right-4 top-[72px] z-20 w-[min(360px,calc(100vw-2rem))] rounded-[20px] border border-white/10 bg-[#262626] p-2 shadow-2xl shadow-black/50 lg:right-6",children:[(0,s.jsx)("div",{className:"px-3 py-2",children:(0,s.jsx)("p",{className:"text-xs uppercase tracking-[0.22em] text-white/45",children:"Recent chats"})}),(0,s.jsx)("div",{className:"max-h-[48vh] space-y-2 overflow-y-auto p-1 custom-scrollbar",children:0===ee.length?(0,s.jsx)("div",{className:"rounded-[16px] border border-dashed border-white/10 bg-white/5 p-4 text-sm text-white/55",children:"No conversations yet."}):ee.map(e=>{let t=e.id===y,r=[...e.messages||[]].reverse().find(e=>"user"===e.role)||e.messages?.[0];return(0,s.jsx)("button",{type:"button",onClick:()=>{var t;let r;return t=e.id,void((r=b.find(e=>e.id===t))&&(j(t),I(r.providerId||S),k(r.modelId||A),F(!1)))},className:`w-full rounded-[16px] border px-3 py-3 text-left transition ${t?"border-blue-400/40 bg-blue-500/15":"border-white/10 bg-white/5 hover:bg-white/8"}`,children:(0,s.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,s.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,s.jsx)("p",{className:"truncate text-sm font-medium text-white",children:e.title}),(0,s.jsx)("p",{className:"mt-1 truncate text-xs text-white/50",children:p(r?.content)||"Empty chat"})]}),(0,s.jsx)("span",{className:"text-[10px] text-white/40 shrink-0",children:function(e){if(!e)return"Now";let t=new Date(e).getTime();if(Number.isNaN(t))return"Now";let r=Math.max(1,Math.round((Date.now()-t)/6e4));if(r<60)return`${r}m`;let s=Math.round(r/60);return s<24?`${s}h`:`${Math.round(s/24)}d`}(e.updatedAt)})]})},e.id)})})]}):null,w?(0,s.jsx)("div",{className:"mt-4 rounded-[18px] border border-rose-500/20 bg-rose-500/10 px-4 py-3 text-rose-100",children:(0,s.jsxs)("div",{className:"flex items-start gap-3",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"error"}),(0,s.jsx)("p",{className:"text-sm leading-6",children:w})]})}):null,(0,s.jsxs)("div",{className:"flex flex-1 flex-col min-h-0",children:[(0,s.jsxs)("div",{className:"flex-1 overflow-y-auto py-4 custom-scrollbar",children:[0===Z.length?(0,s.jsx)("div",{className:"flex min-h-[50vh] items-center justify-center px-4 text-center",children:(0,s.jsxs)("div",{className:"max-w-xl space-y-4",children:[(0,s.jsx)("div",{className:"mx-auto flex size-16 items-center justify-center rounded-[20px] border border-white/10 bg-white/5 text-white/80",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[30px]",children:"chat"})}),(0,s.jsxs)("div",{className:"space-y-2",children:[(0,s.jsx)("h2",{className:"text-2xl font-semibold text-white",children:"Start a conversation"}),(0,s.jsx)("p",{className:"text-sm leading-6 text-white/60",children:"Simple chat interface to interact with any AI model from connected providers. Select a model and start chatting!"})]})]})}):null,(0,s.jsx)("div",{className:"mx-auto flex w-full max-w-3xl flex-col gap-4 px-4",children:Z.map(e=>{let t="user"===e.role,r="assistant"===e.role,a=r&&e.id===E&&"streaming"===e.status,i=p(e.content)||(r?U:"");return(0,s.jsx)("div",{className:`flex w-full ${t?"justify-end":"justify-start"} mb-6`,children:(0,s.jsxs)("div",{className:`max-w-[min(88%,42rem)] ${t?"rounded-3xl bg-[#2f2f2f] px-5 py-3.5 text-white":"text-white/90"}`,children:[(0,s.jsx)("div",{className:"mb-1 flex items-center justify-between gap-3",children:(0,s.jsx)("span",{className:"text-xs font-semibold",children:t?"You":V?.name||"Assistant"})}),e.attachments?.length?(0,s.jsx)("div",{className:"mb-3 grid grid-cols-2 gap-2 sm:grid-cols-3 mt-2",children:e.attachments.map(e=>(0,s.jsx)("a",{href:e.dataUrl,target:"_blank",rel:"noreferrer",className:"overflow-hidden rounded-[18px] border border-white/10 bg-black/20",children:(0,s.jsx)("img",{src:e.dataUrl,alt:e.name,className:"h-28 w-full object-cover"})},e.id))}):null,(0,s.jsxs)("div",{className:"whitespace-pre-wrap break-words text-[15px] leading-7",children:[i,r&&a&&!U?(0,s.jsx)("span",{className:"inline-block animate-pulse",children:"▋"}):null]})]})},e.id)})})]}),(0,s.jsxs)("div",{className:"shrink-0 pt-2",children:[$.length>0?(0,s.jsx)("div",{className:"mx-auto mb-3 flex w-full max-w-3xl flex-wrap gap-2 px-4",children:$.map(e=>(0,s.jsxs)("div",{className:"flex items-center gap-2 rounded-full border border-white/10 bg-white/5 px-3 py-2",children:[(0,s.jsx)("span",{className:"text-xs text-white/80 max-w-[12rem] truncate",children:e.name}),(0,s.jsx)("button",{type:"button",onClick:()=>{var t;return t=e.id,void C(e=>e.filter(e=>e.id!==t))},className:"text-white/55 hover:text-white","aria-label":"Remove attachment",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"close"})})]},e.id))}):null,(0,s.jsx)("div",{className:"mx-auto w-full max-w-3xl px-4 pb-2",children:(0,s.jsxs)("div",{className:"rounded-[26px] bg-[#2f2f2f] px-3 pt-3 pb-2 shadow-[0_0_15px_rgba(0,0,0,0.10)] ring-1 ring-white/5",children:[(0,s.jsx)("textarea",{value:D,onChange:e=>O(e.target.value),onKeyDown:e=>{"Enter"===e.key&&!e.shiftKey&&(e.preventDefault(),et&&ei())},placeholder:"Message AI",rows:1,className:"w-full resize-none bg-transparent px-2 text-[15px] leading-6 text-white outline-none placeholder:text-white/40 custom-scrollbar max-h-[25vh] overflow-y-auto"}),(0,s.jsxs)("div",{className:"mt-2 flex items-center justify-between gap-3",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)("button",{type:"button",onClick:()=>K.current?.click(),disabled:!V||r,className:"p-2 text-white/50 hover:text-white transition rounded-full hover:bg-white/5",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"attach_file"})}),(0,s.jsx)("input",{ref:K,type:"file",accept:"image/*",multiple:!0,className:"hidden",onChange:ea}),(0,s.jsx)("span",{className:"text-xs font-medium text-white/30 truncate max-w-[120px]",children:V?V.name:"No model"})]}),(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[_?(0,s.jsx)("button",{type:"button",onClick:()=>{L.current?.abort()},className:"p-2 text-white bg-white/10 hover:bg-white/20 transition rounded-full h-8 w-8 flex items-center justify-center",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"stop"})}):null,(0,s.jsx)("button",{onClick:ei,disabled:!et,className:`h-8 w-8 rounded-full flex items-center justify-center transition ${et?"bg-white text-black hover:opacity-90":"bg-white/10 text-white/30 cursor-not-allowed"}`,children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"arrow_upward"})})]})]})]})})]}),(0,s.jsx)("p",{className:"mx-auto mt-2 max-w-3xl px-4 pb-4 text-center text-[11px] text-white/30",children:"Model list is filtered from connected providers."})]})]})})}}},e=>{e.O(0,[2574,3862,246,5792,5263,5497,8441,3794,7358],()=>e(e.s=35911)),_N_E=e.O()}]);
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4465],{35911:(e,t,r)=>{Promise.resolve().then(r.bind(r,88512))},88512:(e,t,r)=>{"use strict";r.d(t,{default:()=>g});var s=r(95155),a=r(12115),i=r(35497),l=r(28777),n=r(52679);let o="basic-chat.sessions",d="basic-chat.activeSessionId",c="basic-chat.activeProviderId",m="basic-chat.draft";function u(){return globalThis.crypto?.randomUUID?globalThis.crypto.randomUUID():`chat_${Date.now()}_${Math.random().toString(16).slice(2)}`}function p(e){if("string"==typeof e)return e;if(null==e)return"";if(Array.isArray(e))return e.map(p).filter(Boolean).join(" ");if("object"==typeof e){if("string"==typeof e.message)return e.message;if("string"==typeof e.error)return e.error;try{return JSON.stringify(e)}catch{}}return String(e)}function h(e=""){let t=p(e).replace(/\s+/g," ").trim();return t?t.length>52?`${t.slice(0,52).trimEnd()}…`:t:"New chat"}async function x(e){return await new Promise((t,r)=>{let s=new FileReader;s.onload=()=>t(String(s.result||"")),s.onerror=()=>r(s.error||Error("Failed to read file")),s.readAsDataURL(e)})}function f(e){return e?.name||function(e=""){return String(e).replace(/[-_]/g," ").replace(/\b\w/g,e=>e.toUpperCase()).trim()||"Unknown"}(e?.provider||e?.id||"provider")}function g(){let[e,t]=(0,a.useState)([]),[r,g]=(0,a.useState)(!0),[w,v]=(0,a.useState)(""),[b,N]=(0,a.useState)(()=>{try{let e=function(e,t){try{return JSON.parse(e)}catch{return t}}(globalThis.localStorage.getItem(o),[]);return Array.isArray(e)?e.map(e=>({...e,messages:Array.isArray(e.messages)?e.messages:[]})):[]}catch{return[]}}),[y,j]=(0,a.useState)(()=>globalThis.localStorage.getItem(d)||""),[S,I]=(0,a.useState)(()=>globalThis.localStorage.getItem(c)||""),[A,k]=(0,a.useState)(""),[D,O]=(0,a.useState)(()=>globalThis.localStorage.getItem(m)||""),[$,C]=(0,a.useState)([]),[_,M]=(0,a.useState)(!1),[E,T]=(0,a.useState)(""),[U,R]=(0,a.useState)(""),[z,q]=(0,a.useState)(!1),[P,J]=(0,a.useState)(!1),[B,F]=(0,a.useState)(!1),K=(0,a.useRef)(null),L=(0,a.useRef)(null),W=(0,a.useRef)(!1),H=(0,a.useRef)(null),Y=(0,a.useRef)(null);(0,a.useEffect)(()=>{q(!0)},[]),(0,a.useEffect)(()=>{let e=!1;return async function(){g(!0),v("");try{let r=await fetch("/api/providers",{cache:"no-store"}),s=await r.json().catch(()=>({})),a=Array.isArray(s.connections)?s.connections.filter(e=>e?.isActive!==!1):[];if(0===a.length){e||(t([]),v("No providers connected yet."));return}let i=new Map;for(let e of a){let t=e.provider||e.id,r=f(e),s=(0,n.mq)(t)?"openai-compatible":(0,n.gb)(t)?"anthropic-compatible":t;i.has(t)||i.set(t,{providerId:t,providerName:r,providerType:s,connections:[],models:[]});let a=i.get(t);a.providerName=a.providerName||r,a.providerType=a.providerType||s,a.connections.push(e);let o=(0,l.KC)(t).map(t=>t?.id?{id:`${e.provider}/${t.id}`,requestModel:`${e.provider}/${t.id}`,name:t.name||t.id,providerId:e.provider,providerName:f(e),source:"static"}:null).filter(Boolean);a.models.push(...o)}for(let e of(await Promise.all(a.map(async e=>{try{let t=await fetch(`/api/providers/${e.id}/models`,{cache:"no-store"}),r=await t.json().catch(()=>({}));if(!t.ok)return{connection:e,models:[]};let s=(Array.isArray(r?.models)?r.models:Array.isArray(r?.data)?r.data:Array.isArray(r?.results)?r.results:Array.isArray(r)?r:[]).map(t=>(function(e,t){let r="string"==typeof e?e:e?.id||e?.name||e?.model||"";if(!r)return null;let s="string"==typeof e?e:e?.name||e?.displayName||r,a=r;return((0,n.mq)(t.provider)||(0,n.gb)(t.provider))&&!r.includes("/")&&(a=`${t.provider}/${r}`),{id:a,requestModel:a,name:s,providerId:t.provider,providerName:f(t),source:"live"}})(t,e)).filter(Boolean);return{connection:e,models:s}}catch{return{connection:e,models:[]}}})))){let t=e.connection.provider||e.connection.id,r=i.get(t);r&&r.models.push(...e.models)}let o=Array.from(i.values()).map(e=>({...e,models:(function(e){let t=new Map;for(let r of e)r?.id&&(t.has(r.id)||t.set(r.id,r));return Array.from(t.values())})(e.models).sort((e,t)=>e.name.localeCompare(t.name))})).filter(e=>e.models.length>0).sort((e,t)=>e.providerName.localeCompare(t.providerName));e||(t(o),0===o.length&&v("Providers connected but no models available."))}catch(r){e||(v(p(r?.message)||"Failed to load providers/models."),t([]))}finally{e||g(!1)}}(),()=>{e=!0}},[]),(0,a.useEffect)(()=>{let e=e=>{H.current&&!H.current.contains(e.target)&&J(!1),Y.current&&!Y.current.contains(e.target)&&F(!1)};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[]);let G=(0,a.useMemo)(()=>{let t=new Map;for(let r of e)for(let e of r.models)t.set(e.id,{...e,providerId:r.providerId,providerName:r.providerName});return t},[e]),Q=(0,a.useMemo)(()=>e.find(e=>e.providerId===S)||e[0]||null,[e,S]),V=(0,a.useMemo)(()=>{if(A&&G.has(A))return G.get(A);if(y){let e=b.find(e=>e.id===y);if(e?.modelId&&G.has(e.modelId))return G.get(e.modelId)}return Q?.models?.[0]||null},[A,G,Q,b,y]),X=(0,a.useMemo)(()=>b.find(e=>e.id===y)||null,[b,y]),Z=X?.messages||[],ee=(0,a.useMemo)(()=>[...b].sort((e,t)=>new Date(t.updatedAt).getTime()-new Date(e.updatedAt).getTime()),[b]),et=!_&&!!V&&(D.trim().length>0||$.length>0);(0,a.useEffect)(()=>{if(z)try{globalThis.localStorage.setItem(o,JSON.stringify(b)),globalThis.localStorage.setItem(d,y),globalThis.localStorage.setItem(c,S),globalThis.localStorage.setItem(m,D)}catch{}},[z,b,y,S,D]),(0,a.useEffect)(()=>{if(!z||r||W.current||0===e.length)return;let t=e.find(e=>e.providerId===S)||e[0],s=A&&G.has(A)?G.get(A):t.models[0];if(b.length>0){let e=b.find(e=>e.id===y)||b[0],r=e?.modelId&&G.has(e.modelId)?G.get(e.modelId):s;W.current=!0,j(e.id),I(r?.providerId||t.providerId),k(r?.id||s.id);return}let a={id:u(),title:"New chat",providerId:t.providerId,providerName:t.providerName,modelId:s.id,modelName:s.name,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString(),messages:[]};W.current=!0,N([a]),j(a.id),I(t.providerId),k(s.id)},[z,r,e,G,b,y,S,A]);let er=(e,t)=>{N(r=>r.map(r=>r.id===e?t({...r,messages:Array.isArray(r.messages)?r.messages.map(e=>({...e})):[]}):r))},es=e=>e?{id:u(),title:"New chat",providerId:e.providerId,providerName:e.providerName,modelId:e.id,modelName:e.name,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString(),messages:[]}:null,ea=async e=>{let t=Array.from(e.target.files||[]);if(0===t.length)return;let r=t.filter(e=>e.type.startsWith("image/"));if(0===r.length){e.target.value="";return}let s=await Promise.all(r.map(async e=>({id:u(),name:e.name,type:e.type,size:e.size,dataUrl:await x(e)})));C(e=>[...e,...s]),e.target.value=""},ei=async()=>{let e=V||Q?.models?.[0]||null;if(!e)return;let t=D.trim();if(!t&&0===$.length)return;let r=y,s=b.find(e=>e.id===r);if(!s){if(!(s=es(e)))return;r=s.id,N(e=>[s,...e]),j(r)}let a={id:u(),role:"user",content:t,attachments:$.map(e=>({id:e.id,name:e.name,type:e.type,dataUrl:e.dataUrl})),createdAt:new Date().toISOString()},i=u(),l={id:i,role:"assistant",content:"",createdAt:new Date().toISOString(),status:"streaming"},n=[...s.messages||[],a,l];N(s=>s.map(s=>s.id===r?{...s,providerId:e.providerId,providerName:e.providerName,modelId:e.id,modelName:e.name,messages:n,updatedAt:new Date().toISOString(),title:"New chat"===s.title?h(t):s.title}:s)),O(""),C([]),M(!0),T(i),R(""),L.current?.abort(),L.current=new AbortController;let o=n.filter(e=>"assistant"!==e.role||e.id!==i).map(e=>({role:e.role,content:"user"===e.role?function(e){let t=p(e.content).trim(),r=Array.isArray(e.attachments)?e.attachments:[];if(0===r.length)return t;let s=[];for(let e of(t&&s.push({type:"text",text:t}),r))e?.dataUrl&&s.push({type:"image_url",image_url:{url:e.dataUrl}});return s.length>0?s:t}(e):e.content}));try{var d;let s,a=await fetch("/api/dashboard/chat/completions",{method:"POST",headers:{"Content-Type":"application/json",Accept:"text/event-stream"},body:JSON.stringify({model:e.requestModel||e.id,messages:o,stream:!0}),signal:L.current.signal});if(!a.ok){let e=await a.json().catch(()=>({}));throw Error(p(e.error||e.message||`Request failed (${a.status})`))}let l=a.body?.getReader();if(!l){let e=await a.json().catch(()=>({})),t=p(e?.choices?.[0]?.message?.content||e?.output_text||e?.error||e?.message||"");er(r,e=>({...e,messages:e.messages.map(e=>e.id===i?{...e,content:t,status:"done"}:e),updatedAt:new Date().toISOString()}));return}let n=new TextDecoder,c="",m="";for(;;){let{value:e,done:t}=await l.read();if(t)break;let s=(c+=n.decode(e,{stream:!0})).split(/\r?\n/);for(let e of(c=s.pop()||"",s)){let t=e.trim();if(!t.startsWith("data:"))continue;let s=t.slice(5).trim();if(s&&"[DONE]"!==s)try{let e=JSON.parse(s),t=function(e){if(!e||"object"!=typeof e)return"";let t=e.choices?.[0];return[(t?.delta||{}).content,t?.message?.content,e.output_text,e.text].map(p).filter(Boolean)[0]||""}(e);if(!t)continue;m+=t,R(m),er(r,e=>({...e,messages:e.messages.map(e=>e.id===i?{...e,content:m,status:"streaming"}:e),updatedAt:new Date().toISOString()}))}catch{}}}er(r,e=>({...e,messages:e.messages.map(e=>e.id===i?{...e,content:m||e.content,status:"done"}:e),updatedAt:new Date().toISOString()})),d=r,s=h(t),er(d,e=>({...e,title:"New chat"===e.title?s:e.title,updatedAt:new Date().toISOString()}))}catch(e){if("AbortError"!==e.name){let t=p(e?.message||e);er(r,e=>({...e,messages:e.messages.map(e=>e.id===i?{...e,content:e.content||`Error: ${t}`,status:"error"}:e),updatedAt:new Date().toISOString()})),v(t||"Failed to send message.")}}finally{M(!1),T(""),R(""),L.current=null}},el=V?`${V.name}`:"Select model",en=V?V.requestModel:"Choose from connected providers";return(0,s.jsx)("div",{className:"relative flex-1 flex flex-col h-full min-h-0 min-w-0 bg-[#212121] text-white overflow-hidden",children:(0,s.jsxs)("div",{className:"relative mx-auto flex flex-1 h-full min-h-0 w-full max-w-4xl flex-col",children:[(0,s.jsxs)("div",{className:"flex shrink-0 items-center justify-between gap-3 px-4 py-3 lg:px-6",children:[(0,s.jsxs)("div",{ref:H,className:"relative",children:[(0,s.jsx)("button",{type:"button",onClick:()=>J(e=>!e),className:"flex items-center gap-3 rounded-2xl border border-white/10 bg-white/5 px-4 py-3 text-left transition hover:bg-white/8",children:(0,s.jsxs)("div",{className:"min-w-0",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)("span",{className:"text-sm font-semibold text-white",children:el}),(0,s.jsx)("span",{className:"material-symbols-outlined text-[18px] text-white/70",children:"expand_more"})]}),(0,s.jsx)("p",{className:"truncate text-xs text-white/55",children:en})]})}),P?(0,s.jsxs)("div",{className:"absolute left-0 top-[calc(100%+10px)] z-30 w-[min(520px,calc(100vw-2rem))] overflow-hidden rounded-[20px] border border-white/10 bg-[#262626] shadow-2xl shadow-black/50",children:[(0,s.jsxs)("div",{className:"border-b border-white/10 px-4 py-3",children:[(0,s.jsx)("p",{className:"text-xs uppercase tracking-[0.22em] text-white/45",children:"Models"}),(0,s.jsx)("p",{className:"text-sm text-white/75",children:"Only from connected providers"})]}),(0,s.jsx)("div",{className:"max-h-[60vh] overflow-y-auto p-2 custom-scrollbar",children:e.map(e=>(0,s.jsxs)("div",{className:"mb-2 rounded-[16px] border border-white/10 bg-black/20 p-2",children:[(0,s.jsxs)("div",{className:"flex items-center justify-between px-2 py-2",children:[(0,s.jsx)("p",{className:"text-sm font-semibold text-white",children:e.providerName}),(0,s.jsx)(i.Ex,{size:"sm",variant:"default",children:e.models.length})]}),(0,s.jsx)("div",{className:"grid gap-2 sm:grid-cols-2",children:e.models.map(e=>{let t=e.id===A;return(0,s.jsx)("button",{type:"button",onClick:()=>(e=>{let t=G.get(e);if(!t)return;let r=b.find(e=>e.id===y);if(r&&r.messages.length>0){let e=es(t);if(!e)return;N(t=>[e,...t]),j(e.id)}else if(r)N(e=>e.map(e=>e.id===r.id?{...e,providerId:t.providerId,providerName:t.providerName,modelId:t.id,modelName:t.name}:e)),j(r.id);else{let e=es(t);if(!e)return;N(t=>[e,...t]),j(e.id)}I(t.providerId),k(t.id),J(!1)})(e.id),className:`rounded-[14px] border px-3 py-3 text-left transition ${t?"border-blue-400/40 bg-blue-500/15":"border-white/10 bg-white/5 hover:bg-white/8"}`,children:(0,s.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,s.jsxs)("div",{className:"min-w-0",children:[(0,s.jsx)("p",{className:"truncate text-sm font-medium text-white",children:e.name}),(0,s.jsx)("p",{className:"truncate text-[11px] text-white/45",children:e.requestModel})]}),t?(0,s.jsx)("span",{className:"material-symbols-outlined text-[18px] text-blue-300",children:"check_circle"}):null]})},e.id)})})]},e.providerId))})]}):null]}),(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)("button",{type:"button",onClick:()=>F(e=>!e),className:"rounded-2xl border border-white/10 bg-white/5 px-4 py-3 text-sm text-white/80 transition hover:bg-white/8",children:"History"}),(0,s.jsx)(i.$n,{variant:"ghost",size:"sm",icon:"delete",onClick:()=>{if(!y)return;let e=b.filter(e=>e.id!==y),t=e[0]||null;N(e),t?(j(t.id),I(t.providerId),k(t.modelId)):(j(""),I(""),k(""))},disabled:!y||0===b.length,children:"Clear"})]})]}),B?(0,s.jsxs)("div",{ref:Y,className:"absolute right-4 top-[72px] z-20 w-[min(360px,calc(100vw-2rem))] rounded-[20px] border border-white/10 bg-[#262626] p-2 shadow-2xl shadow-black/50 lg:right-6",children:[(0,s.jsx)("div",{className:"px-3 py-2",children:(0,s.jsx)("p",{className:"text-xs uppercase tracking-[0.22em] text-white/45",children:"Recent chats"})}),(0,s.jsx)("div",{className:"max-h-[48vh] space-y-2 overflow-y-auto p-1 custom-scrollbar",children:0===ee.length?(0,s.jsx)("div",{className:"rounded-[16px] border border-dashed border-white/10 bg-white/5 p-4 text-sm text-white/55",children:"No conversations yet."}):ee.map(e=>{let t=e.id===y,r=[...e.messages||[]].reverse().find(e=>"user"===e.role)||e.messages?.[0];return(0,s.jsx)("button",{type:"button",onClick:()=>{var t;let r;return t=e.id,void((r=b.find(e=>e.id===t))&&(j(t),I(r.providerId||S),k(r.modelId||A),F(!1)))},className:`w-full rounded-[16px] border px-3 py-3 text-left transition ${t?"border-blue-400/40 bg-blue-500/15":"border-white/10 bg-white/5 hover:bg-white/8"}`,children:(0,s.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,s.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,s.jsx)("p",{className:"truncate text-sm font-medium text-white",children:e.title}),(0,s.jsx)("p",{className:"mt-1 truncate text-xs text-white/50",children:p(r?.content)||"Empty chat"})]}),(0,s.jsx)("span",{className:"text-[10px] text-white/40 shrink-0",children:function(e){if(!e)return"Now";let t=new Date(e).getTime();if(Number.isNaN(t))return"Now";let r=Math.max(1,Math.round((Date.now()-t)/6e4));if(r<60)return`${r}m`;let s=Math.round(r/60);return s<24?`${s}h`:`${Math.round(s/24)}d`}(e.updatedAt)})]})},e.id)})})]}):null,w?(0,s.jsx)("div",{className:"mt-4 rounded-[18px] border border-rose-500/20 bg-rose-500/10 px-4 py-3 text-rose-100",children:(0,s.jsxs)("div",{className:"flex items-start gap-3",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"error"}),(0,s.jsx)("p",{className:"text-sm leading-6",children:w})]})}):null,(0,s.jsxs)("div",{className:"flex flex-1 flex-col min-h-0",children:[(0,s.jsxs)("div",{className:"flex-1 overflow-y-auto py-4 custom-scrollbar",children:[0===Z.length?(0,s.jsx)("div",{className:"flex min-h-[50vh] items-center justify-center px-4 text-center",children:(0,s.jsxs)("div",{className:"max-w-xl space-y-4",children:[(0,s.jsx)("div",{className:"mx-auto flex size-16 items-center justify-center rounded-[20px] border border-white/10 bg-white/5 text-white/80",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[30px]",children:"chat"})}),(0,s.jsxs)("div",{className:"space-y-2",children:[(0,s.jsx)("h2",{className:"text-2xl font-semibold text-white",children:"Start a conversation"}),(0,s.jsx)("p",{className:"text-sm leading-6 text-white/60",children:"Simple chat interface to interact with any AI model from connected providers. Select a model and start chatting!"})]})]})}):null,(0,s.jsx)("div",{className:"mx-auto flex w-full max-w-3xl flex-col gap-4 px-4",children:Z.map(e=>{let t="user"===e.role,r="assistant"===e.role,a=r&&e.id===E&&"streaming"===e.status,i=p(e.content)||(r?U:"");return(0,s.jsx)("div",{className:`flex w-full ${t?"justify-end":"justify-start"} mb-6`,children:(0,s.jsxs)("div",{className:`max-w-[min(88%,42rem)] ${t?"rounded-3xl bg-[#2f2f2f] px-5 py-3.5 text-white":"text-white/90"}`,children:[(0,s.jsx)("div",{className:"mb-1 flex items-center justify-between gap-3",children:(0,s.jsx)("span",{className:"text-xs font-semibold",children:t?"You":V?.name||"Assistant"})}),e.attachments?.length?(0,s.jsx)("div",{className:"mb-3 grid grid-cols-2 gap-2 sm:grid-cols-3 mt-2",children:e.attachments.map(e=>(0,s.jsx)("a",{href:e.dataUrl,target:"_blank",rel:"noreferrer",className:"overflow-hidden rounded-[18px] border border-white/10 bg-black/20",children:(0,s.jsx)("img",{src:e.dataUrl,alt:e.name,className:"h-28 w-full object-cover"})},e.id))}):null,(0,s.jsxs)("div",{className:"whitespace-pre-wrap break-words text-[15px] leading-7",children:[i,r&&a&&!U?(0,s.jsx)("span",{className:"inline-block animate-pulse",children:"▋"}):null]})]})},e.id)})})]}),(0,s.jsxs)("div",{className:"shrink-0 pt-2",children:[$.length>0?(0,s.jsx)("div",{className:"mx-auto mb-3 flex w-full max-w-3xl flex-wrap gap-2 px-4",children:$.map(e=>(0,s.jsxs)("div",{className:"flex items-center gap-2 rounded-full border border-white/10 bg-white/5 px-3 py-2",children:[(0,s.jsx)("span",{className:"text-xs text-white/80 max-w-[12rem] truncate",children:e.name}),(0,s.jsx)("button",{type:"button",onClick:()=>{var t;return t=e.id,void C(e=>e.filter(e=>e.id!==t))},className:"text-white/55 hover:text-white","aria-label":"Remove attachment",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"close"})})]},e.id))}):null,(0,s.jsx)("div",{className:"mx-auto w-full max-w-3xl px-4 pb-2",children:(0,s.jsxs)("div",{className:"rounded-[26px] bg-[#2f2f2f] px-3 pt-3 pb-2 shadow-[0_0_15px_rgba(0,0,0,0.10)] ring-1 ring-white/5",children:[(0,s.jsx)("textarea",{value:D,onChange:e=>O(e.target.value),onKeyDown:e=>{"Enter"===e.key&&!e.shiftKey&&(e.preventDefault(),et&&ei())},placeholder:"Message AI",rows:1,className:"w-full resize-none bg-transparent px-2 text-[15px] leading-6 text-white outline-none placeholder:text-white/40 custom-scrollbar max-h-[25vh] overflow-y-auto"}),(0,s.jsxs)("div",{className:"mt-2 flex items-center justify-between gap-3",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)("button",{type:"button",onClick:()=>K.current?.click(),disabled:!V||r,className:"p-2 text-white/50 hover:text-white transition rounded-full hover:bg-white/5",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"attach_file"})}),(0,s.jsx)("input",{ref:K,type:"file",accept:"image/*",multiple:!0,className:"hidden",onChange:ea}),(0,s.jsx)("span",{className:"text-xs font-medium text-white/30 truncate max-w-[120px]",children:V?V.name:"No model"})]}),(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[_?(0,s.jsx)("button",{type:"button",onClick:()=>{L.current?.abort()},className:"p-2 text-white bg-white/10 hover:bg-white/20 transition rounded-full h-8 w-8 flex items-center justify-center",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"stop"})}):null,(0,s.jsx)("button",{onClick:ei,disabled:!et,className:`h-8 w-8 rounded-full flex items-center justify-center transition ${et?"bg-white text-black hover:opacity-90":"bg-white/10 text-white/30 cursor-not-allowed"}`,children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"arrow_upward"})})]})]})]})})]}),(0,s.jsx)("p",{className:"mx-auto mt-2 max-w-3xl px-4 pb-4 text-center text-[11px] text-white/30",children:"Model list is filtered from connected providers."})]})]})})}}},e=>{e.O(0,[2574,3862,246,5792,5564,5263,5497,8441,3794,7358],()=>e(e.s=35911)),_N_E=e.O()}]);
@@ -1 +1 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3554],{22843:(e,t,a)=>{Promise.resolve().then(a.bind(a,85309))},85309:(e,t,a)=>{"use strict";a.d(t,{default:()=>v});var s=a(95155),l=a(12115),r=a(98500),i=a.n(r),n=a(35497),c=a(3534),o=a(28777),d=a(61082);let u=a(41463).env.NEXT_PUBLIC_CLOUD_URL;function v({toolId:e,machineId:t}){let a=c.dM[e],[r,x]=(0,l.useState)([]),[h,b]=(0,l.useState)(!0),[p,f]=(0,l.useState)({}),[m,E]=(0,l.useState)(!1),[j,P]=(0,l.useState)(!1),[w,k]=(0,l.useState)(""),[g,N]=(0,l.useState)(!1),[S,_]=(0,l.useState)(""),[A,U]=(0,l.useState)([]);(0,l.useEffect)(()=>{let e=!0;return(async()=>{try{let[t,a,s,l]=await Promise.all([fetch("/api/providers"),fetch("/api/settings"),fetch("/api/tunnel/status"),fetch("/api/keys")]);if(!e)return;if(t.ok){let e=await t.json();x(e.connections||[])}if(a.ok){let e=await a.json();E(e.cloudEnabled||!1)}if(s.ok){let e=await s.json();P(!!(e.tunnel?.enabled||e.tunnel?.settingsEnabled)),k(e.tunnel?.publicUrl||""),N(!!(e.tailscale?.enabled||e.tailscale?.settingsEnabled)),_(e.tailscale?.tunnelUrl||"")}if(l.ok){let e=await l.json();U(e.keys||[])}}catch(e){console.log("Error loading tool data:",e)}finally{e&&b(!1)}})(),()=>{e=!1}},[]);let y=()=>r.filter(e=>!1!==e.isActive),C=(0,l.useCallback)((e,t,a)=>{f(s=>s[e]?.[t]===a?s:{...s,[e]:{...s[e],[t]:a}})},[]);return(0,s.jsxs)("div",{className:"mx-auto flex w-full max-w-5xl flex-col gap-4 px-1 sm:px-0",children:[(0,s.jsxs)(i(),{href:"/dashboard/cli-tools",className:"inline-flex items-center gap-1 text-sm text-text-muted hover:text-primary w-fit",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"arrow_back"}),"Back to CLI Tools"]}),(0,s.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,s.jsx)("h1",{className:"text-xl font-semibold text-text-main sm:text-2xl",children:a.name}),(0,s.jsx)("p",{className:"text-sm text-text-muted",children:a.description})]}),h?(0,s.jsx)(n.Qv,{}):(()=>{let t,l,r,i=(t=y(),l=[],r=new Set,t.forEach(e=>{let t=o.Xg[e.provider]||e.provider;(0,o.KC)(e.provider).forEach(a=>{let s=`${t}/${a.id}`;r.has(s)||(r.add(s),l.push({value:s,label:`${t}/${a.id}`,provider:e.provider,alias:t,connectionName:e.name,modelId:a.id}))})}),l).length>0,n={tool:a,isExpanded:!0,onToggle:()=>{},baseUrl:j&&w?w:m&&u?u:window.location.origin,apiKeys:A,tunnelEnabled:j,tunnelPublicUrl:w,tailscaleEnabled:g,tailscaleUrl:S};switch(e){case"claude":return(0,s.jsx)(d.Tk,{...n,activeProviders:y(),modelMappings:p[e]||{},onModelMappingChange:(t,a)=>C(e,t,a),hasActiveProviders:i,cloudEnabled:m});case"codex":return(0,s.jsx)(d.Ah,{...n,activeProviders:y(),cloudEnabled:m});case"opencode":return(0,s.jsx)(d.qO,{...n,activeProviders:y(),cloudEnabled:m});case"cowork":return(0,s.jsx)(d.Q6,{...n,activeProviders:y(),hasActiveProviders:i,cloudEnabled:m,cloudUrl:u,tunnelEnabled:j,tunnelPublicUrl:w,tailscaleEnabled:g,tailscaleUrl:S});case"droid":return(0,s.jsx)(d.ZM,{...n,activeProviders:y(),hasActiveProviders:i,cloudEnabled:m});case"openclaw":return(0,s.jsx)(d.yZ,{...n,activeProviders:y(),hasActiveProviders:i,cloudEnabled:m});case"hermes":return(0,s.jsx)(d.RF,{...n,activeProviders:y(),hasActiveProviders:i,cloudEnabled:m});case"copilot":return(0,s.jsx)(d.h1,{...n,activeProviders:y(),cloudEnabled:m});case"cline":return(0,s.jsx)(d.aG,{...n,activeProviders:y(),cloudEnabled:m});case"kilo":return(0,s.jsx)(d.c9,{...n,activeProviders:y(),cloudEnabled:m});case"qwen":return(0,s.jsx)(d.aV,{...n,activeProviders:y(),cloudEnabled:m});case"deepseek-tui":return(0,s.jsx)(d.lF,{...n,activeProviders:y(),hasActiveProviders:i,cloudEnabled:m});case"jcode":return(0,s.jsx)(d.mW,{...n,activeProviders:y(),hasActiveProviders:i,cloudEnabled:m});default:return(0,s.jsx)(d.a7,{toolId:e,...n,activeProviders:y(),cloudEnabled:m,tunnelEnabled:j})}})()]})}}},e=>{e.O(0,[2574,3862,246,5792,5772,5263,5497,4525,8441,3794,7358],()=>e(e.s=22843)),_N_E=e.O()}]);
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3554],{22843:(e,t,a)=>{Promise.resolve().then(a.bind(a,85309))},85309:(e,t,a)=>{"use strict";a.d(t,{default:()=>v});var s=a(95155),l=a(12115),r=a(98500),i=a.n(r),n=a(35497),c=a(3534),o=a(28777),d=a(61082);let u=a(41463).env.NEXT_PUBLIC_CLOUD_URL;function v({toolId:e,machineId:t}){let a=c.dM[e],[r,x]=(0,l.useState)([]),[h,b]=(0,l.useState)(!0),[p,f]=(0,l.useState)({}),[m,E]=(0,l.useState)(!1),[j,P]=(0,l.useState)(!1),[w,k]=(0,l.useState)(""),[g,N]=(0,l.useState)(!1),[S,_]=(0,l.useState)(""),[A,U]=(0,l.useState)([]);(0,l.useEffect)(()=>{let e=!0;return(async()=>{try{let[t,a,s,l]=await Promise.all([fetch("/api/providers"),fetch("/api/settings"),fetch("/api/tunnel/status"),fetch("/api/keys")]);if(!e)return;if(t.ok){let e=await t.json();x(e.connections||[])}if(a.ok){let e=await a.json();E(e.cloudEnabled||!1)}if(s.ok){let e=await s.json();P(!!(e.tunnel?.enabled||e.tunnel?.settingsEnabled)),k(e.tunnel?.publicUrl||""),N(!!(e.tailscale?.enabled||e.tailscale?.settingsEnabled)),_(e.tailscale?.tunnelUrl||"")}if(l.ok){let e=await l.json();U(e.keys||[])}}catch(e){console.log("Error loading tool data:",e)}finally{e&&b(!1)}})(),()=>{e=!1}},[]);let y=()=>r.filter(e=>!1!==e.isActive),C=(0,l.useCallback)((e,t,a)=>{f(s=>s[e]?.[t]===a?s:{...s,[e]:{...s[e],[t]:a}})},[]);return(0,s.jsxs)("div",{className:"mx-auto flex w-full max-w-5xl flex-col gap-4 px-1 sm:px-0",children:[(0,s.jsxs)(i(),{href:"/dashboard/cli-tools",className:"inline-flex items-center gap-1 text-sm text-text-muted hover:text-primary w-fit",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"arrow_back"}),"Back to CLI Tools"]}),(0,s.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,s.jsx)("h1",{className:"text-xl font-semibold text-text-main sm:text-2xl",children:a.name}),(0,s.jsx)("p",{className:"text-sm text-text-muted",children:a.description})]}),h?(0,s.jsx)(n.Qv,{}):(()=>{let t,l,r,i=(t=y(),l=[],r=new Set,t.forEach(e=>{let t=o.Xg[e.provider]||e.provider;(0,o.KC)(e.provider).forEach(a=>{let s=`${t}/${a.id}`;r.has(s)||(r.add(s),l.push({value:s,label:`${t}/${a.id}`,provider:e.provider,alias:t,connectionName:e.name,modelId:a.id}))})}),l).length>0,n={tool:a,isExpanded:!0,onToggle:()=>{},baseUrl:j&&w?w:m&&u?u:window.location.origin,apiKeys:A,tunnelEnabled:j,tunnelPublicUrl:w,tailscaleEnabled:g,tailscaleUrl:S};switch(e){case"claude":return(0,s.jsx)(d.Tk,{...n,activeProviders:y(),modelMappings:p[e]||{},onModelMappingChange:(t,a)=>C(e,t,a),hasActiveProviders:i,cloudEnabled:m});case"codex":return(0,s.jsx)(d.Ah,{...n,activeProviders:y(),cloudEnabled:m});case"opencode":return(0,s.jsx)(d.qO,{...n,activeProviders:y(),cloudEnabled:m});case"cowork":return(0,s.jsx)(d.Q6,{...n,activeProviders:y(),hasActiveProviders:i,cloudEnabled:m,cloudUrl:u,tunnelEnabled:j,tunnelPublicUrl:w,tailscaleEnabled:g,tailscaleUrl:S});case"droid":return(0,s.jsx)(d.ZM,{...n,activeProviders:y(),hasActiveProviders:i,cloudEnabled:m});case"openclaw":return(0,s.jsx)(d.yZ,{...n,activeProviders:y(),hasActiveProviders:i,cloudEnabled:m});case"hermes":return(0,s.jsx)(d.RF,{...n,activeProviders:y(),hasActiveProviders:i,cloudEnabled:m});case"copilot":return(0,s.jsx)(d.h1,{...n,activeProviders:y(),cloudEnabled:m});case"cline":return(0,s.jsx)(d.aG,{...n,activeProviders:y(),cloudEnabled:m});case"kilo":return(0,s.jsx)(d.c9,{...n,activeProviders:y(),cloudEnabled:m});case"qwen":return(0,s.jsx)(d.aV,{...n,activeProviders:y(),cloudEnabled:m});case"deepseek-tui":return(0,s.jsx)(d.lF,{...n,activeProviders:y(),hasActiveProviders:i,cloudEnabled:m});case"jcode":return(0,s.jsx)(d.mW,{...n,activeProviders:y(),hasActiveProviders:i,cloudEnabled:m});default:return(0,s.jsx)(d.a7,{toolId:e,...n,activeProviders:y(),cloudEnabled:m,tunnelEnabled:j})}})()]})}}},e=>{e.O(0,[2574,3862,246,5792,5772,5564,5263,5497,4525,8441,3794,7358],()=>e(e.s=22843)),_N_E=e.O()}]);
@@ -1 +1 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2326],{4987:(e,s,l)=>{Promise.resolve().then(l.bind(l,53501))},53501:(e,s,l)=>{"use strict";l.d(s,{default:()=>m});var t=l(95155),a=l(12115),r=l(35497),i=l(3534),c=l(61082),n=l(98500),o=l.n(n),d=l(5772);function x({toolId:e,tool:s,status:l}){let a=l?l.installed?l.hasBluerouter?{label:"Connected",cls:"bg-green-500/10 text-green-600 dark:text-green-400"}:{label:"Not configured",cls:"bg-yellow-500/10 text-yellow-600 dark:text-yellow-400"}:{label:"Not installed",cls:"bg-red-500/10 text-red-600 dark:text-red-400"}:{label:"Unknown",cls:"bg-gray-500/10 text-gray-500"};return(0,t.jsx)(o(),{href:`/dashboard/cli-tools/${e}`,className:"block",children:(0,t.jsx)(r.Zp,{padding:"sm",className:"h-full overflow-hidden hover:border-primary/50 transition-colors cursor-pointer",children:(0,t.jsxs)("div",{className:"flex h-full flex-col gap-2",children:[(0,t.jsxs)("div",{className:"flex items-start gap-3",children:[(0,t.jsx)("div",{className:"size-8 flex items-center justify-center shrink-0",children:s.image?(0,t.jsx)(d.default,{src:s.image,alt:s.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:e=>{e.target.style.display="none"}}):s.icon?(0,t.jsx)("span",{className:"material-symbols-outlined text-[28px]",style:{color:s.color},children:s.icon}):null}),(0,t.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,t.jsx)("h3",{className:"font-medium text-sm truncate",children:s.name}),(0,t.jsx)("span",{className:`inline-block mt-0.5 px-1.5 py-0.5 text-[10px] font-medium rounded-full ${a.cls}`,children:a.label})]}),(0,t.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[18px] shrink-0",children:"chevron_right"})]}),(0,t.jsx)("p",{className:"text-xs text-text-muted line-clamp-2",children:s.description})]})})})}function m({machineId:e}){let[s,l]=(0,a.useState)(!0),[n,o]=(0,a.useState)({});if((0,a.useEffect)(()=>{let e=!0;return(async()=>{try{let s=await fetch("/api/cli-tools/all-statuses");s.ok&&e&&o(await s.json())}catch(e){console.log("Error fetching tool statuses:",e)}finally{e&&l(!1)}})(),()=>{e=!1}},[]),s)return(0,t.jsxs)("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3 sm:gap-4",children:[(0,t.jsx)(r.Qv,{}),(0,t.jsx)(r.Qv,{}),(0,t.jsx)(r.Qv,{}),(0,t.jsx)(r.Qv,{}),(0,t.jsx)(r.Qv,{}),(0,t.jsx)(r.Qv,{})]});let d=Object.entries(i.dM),g=Object.entries(i.wn);return(0,t.jsxs)("div",{className:"mx-auto flex w-full max-w-5xl flex-col gap-6 px-1 sm:px-0",children:[(0,t.jsx)("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3 sm:gap-4",children:d.map(([e,s])=>(0,t.jsx)(x,{toolId:e,tool:s,status:n[e]},e))}),(0,t.jsxs)("div",{className:"flex flex-col gap-3 sm:gap-4",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,t.jsx)("span",{className:"material-symbols-outlined text-[18px] text-primary",children:"security"}),(0,t.jsx)("h2",{className:"text-sm font-semibold text-text-main",children:"MITM Tools"})]}),(0,t.jsx)("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3 sm:gap-4",children:g.map(([e,s])=>(0,t.jsx)(c.gY,{tool:s},e))})]})]})}}},e=>{e.O(0,[2574,3862,246,5792,5772,5263,5497,4525,8441,3794,7358],()=>e(e.s=4987)),_N_E=e.O()}]);
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2326],{4987:(e,s,l)=>{Promise.resolve().then(l.bind(l,53501))},53501:(e,s,l)=>{"use strict";l.d(s,{default:()=>m});var t=l(95155),a=l(12115),r=l(35497),i=l(3534),c=l(61082),n=l(98500),o=l.n(n),d=l(5772);function x({toolId:e,tool:s,status:l}){let a=l?l.installed?l.hasBluerouter?{label:"Connected",cls:"bg-green-500/10 text-green-600 dark:text-green-400"}:{label:"Not configured",cls:"bg-yellow-500/10 text-yellow-600 dark:text-yellow-400"}:{label:"Not installed",cls:"bg-red-500/10 text-red-600 dark:text-red-400"}:{label:"Unknown",cls:"bg-gray-500/10 text-gray-500"};return(0,t.jsx)(o(),{href:`/dashboard/cli-tools/${e}`,className:"block",children:(0,t.jsx)(r.Zp,{padding:"sm",className:"h-full overflow-hidden hover:border-primary/50 transition-colors cursor-pointer",children:(0,t.jsxs)("div",{className:"flex h-full flex-col gap-2",children:[(0,t.jsxs)("div",{className:"flex items-start gap-3",children:[(0,t.jsx)("div",{className:"size-8 flex items-center justify-center shrink-0",children:s.image?(0,t.jsx)(d.default,{src:s.image,alt:s.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:e=>{e.target.style.display="none"}}):s.icon?(0,t.jsx)("span",{className:"material-symbols-outlined text-[28px]",style:{color:s.color},children:s.icon}):null}),(0,t.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,t.jsx)("h3",{className:"font-medium text-sm truncate",children:s.name}),(0,t.jsx)("span",{className:`inline-block mt-0.5 px-1.5 py-0.5 text-[10px] font-medium rounded-full ${a.cls}`,children:a.label})]}),(0,t.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[18px] shrink-0",children:"chevron_right"})]}),(0,t.jsx)("p",{className:"text-xs text-text-muted line-clamp-2",children:s.description})]})})})}function m({machineId:e}){let[s,l]=(0,a.useState)(!0),[n,o]=(0,a.useState)({});if((0,a.useEffect)(()=>{let e=!0;return(async()=>{try{let s=await fetch("/api/cli-tools/all-statuses");s.ok&&e&&o(await s.json())}catch(e){console.log("Error fetching tool statuses:",e)}finally{e&&l(!1)}})(),()=>{e=!1}},[]),s)return(0,t.jsxs)("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3 sm:gap-4",children:[(0,t.jsx)(r.Qv,{}),(0,t.jsx)(r.Qv,{}),(0,t.jsx)(r.Qv,{}),(0,t.jsx)(r.Qv,{}),(0,t.jsx)(r.Qv,{}),(0,t.jsx)(r.Qv,{})]});let d=Object.entries(i.dM),g=Object.entries(i.wn);return(0,t.jsxs)("div",{className:"mx-auto flex w-full max-w-5xl flex-col gap-6 px-1 sm:px-0",children:[(0,t.jsx)("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3 sm:gap-4",children:d.map(([e,s])=>(0,t.jsx)(x,{toolId:e,tool:s,status:n[e]},e))}),(0,t.jsxs)("div",{className:"flex flex-col gap-3 sm:gap-4",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,t.jsx)("span",{className:"material-symbols-outlined text-[18px] text-primary",children:"security"}),(0,t.jsx)("h2",{className:"text-sm font-semibold text-text-main",children:"MITM Tools"})]}),(0,t.jsx)("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3 sm:gap-4",children:g.map(([e,s])=>(0,t.jsx)(c.gY,{tool:s},e))})]})]})}}},e=>{e.O(0,[2574,3862,246,5792,5772,5564,5263,5497,4525,8441,3794,7358],()=>e(e.s=4987)),_N_E=e.O()}]);